Repository: incubator-brooklyn
Updated Branches:
refs/heads/master 1d5480687 -> e761f428f
Entitlements improvements
- Adds toString in various places.
- Entitlements.allOf/anyOf takes Utterable<EntitlementManager>, as well
as the overloaded varargs version.
- Clean up reflectively instantiating global EntitlementManager.
- Use catalog-class-loader
- Allow various constructors, for optionally having ManagementContext
and/or BrooklynProperties
- On âreload brooklyn propertiesâ, recreate EntitlementManager in case
entitlements have changed.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit:
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/bcd6baae
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/bcd6baae
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/bcd6baae
Branch: refs/heads/master
Commit: bcd6baaec698e536022e5c79b8a1c29e2ab71b5a
Parents: 05b95f3
Author: Aled Sage <[email protected]>
Authored: Wed Jul 29 15:40:35 2015 +0100
Committer: Aled Sage <[email protected]>
Committed: Wed Jul 29 15:40:35 2015 +0100
----------------------------------------------------------------------
.../BasicEntitlementClassDefinition.java | 5 ++
.../management/entitlement/Entitlements.java | 76 ++++++++++++++++----
.../internal/LocalManagementContext.java | 4 +-
.../entitlement/AcmeEntitlementManager.java | 2 +-
.../AcmeEntitlementManagerTestFixture.java | 6 +-
5 files changed, 75 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bcd6baae/core/src/main/java/brooklyn/management/entitlement/BasicEntitlementClassDefinition.java
----------------------------------------------------------------------
diff --git
a/core/src/main/java/brooklyn/management/entitlement/BasicEntitlementClassDefinition.java
b/core/src/main/java/brooklyn/management/entitlement/BasicEntitlementClassDefinition.java
index cbe8892..8f95ee0 100644
---
a/core/src/main/java/brooklyn/management/entitlement/BasicEntitlementClassDefinition.java
+++
b/core/src/main/java/brooklyn/management/entitlement/BasicEntitlementClassDefinition.java
@@ -18,6 +18,7 @@
*/
package brooklyn.management.entitlement;
+import com.google.common.base.Objects;
import com.google.common.reflect.TypeToken;
@@ -46,4 +47,8 @@ public class BasicEntitlementClassDefinition<T> implements
EntitlementClass<T> {
return argumentType;
}
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this).add("identitifier",
identifier).add("argumentType", argumentType).toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bcd6baae/core/src/main/java/brooklyn/management/entitlement/Entitlements.java
----------------------------------------------------------------------
diff --git
a/core/src/main/java/brooklyn/management/entitlement/Entitlements.java
b/core/src/main/java/brooklyn/management/entitlement/Entitlements.java
index 76cf060..16b3924 100644
--- a/core/src/main/java/brooklyn/management/entitlement/Entitlements.java
+++ b/core/src/main/java/brooklyn/management/entitlement/Entitlements.java
@@ -18,11 +18,23 @@
*/
package brooklyn.management.entitlement;
+import java.util.Arrays;
+import java.util.List;
+
import javax.annotation.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.annotations.Beta;
+import com.google.common.base.Joiner;
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.ImmutableList;
+import com.google.common.reflect.TypeToken;
+
import brooklyn.config.BrooklynProperties;
import brooklyn.config.ConfigKey;
import brooklyn.entity.Entity;
@@ -37,13 +49,6 @@ import brooklyn.util.javalang.Reflections;
import brooklyn.util.task.Tasks;
import brooklyn.util.text.Strings;
-import com.google.common.annotations.Beta;
-import com.google.common.base.Objects;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.reflect.TypeToken;
-
/** @since 0.7.0 */
@Beta
public class Entitlements {
@@ -173,6 +178,10 @@ public class Entitlements {
public <T> boolean isEntitled(EntitlementContext context,
EntitlementClass<T> permission, T typeArgument) {
return true;
}
+ @Override
+ public String toString() {
+ return "Entitlements.root";
+ }
};
}
@@ -183,12 +192,22 @@ public class Entitlements {
public <T> boolean isEntitled(EntitlementContext context,
EntitlementClass<T> permission, T typeArgument) {
return false;
}
+ @Override
+ public String toString() {
+ return "Entitlements.minimal";
+ }
};
}
public static class FineGrainedEntitlements {
+ private static final Joiner COMMA_JOINER = Joiner.on(',');
+
public static EntitlementManager anyOf(final EntitlementManager...
checkers) {
+ return anyOf(Arrays.asList(checkers));
+ }
+
+ public static EntitlementManager anyOf(final Iterable<? extends
EntitlementManager> checkers) {
return new EntitlementManager() {
@Override
public <T> boolean isEntitled(EntitlementContext context,
EntitlementClass<T> permission, T typeArgument) {
@@ -197,10 +216,18 @@ public class Entitlements {
return true;
return false;
}
+ @Override
+ public String toString() {
+ return "Entitlements.anyOf(" + COMMA_JOINER.join(checkers)
+ ")";
+ }
};
}
public static EntitlementManager allOf(final EntitlementManager...
checkers) {
+ return allOf(Arrays.asList(checkers));
+ }
+
+ public static EntitlementManager allOf(final Iterable<? extends
EntitlementManager> checkers) {
return new EntitlementManager() {
@Override
public <T> boolean isEntitled(EntitlementContext context,
EntitlementClass<T> permission, T typeArgument) {
@@ -209,6 +236,10 @@ public class Entitlements {
return true;
return false;
}
+ @Override
+ public String toString() {
+ return "Entitlements.allOf(" + COMMA_JOINER.join(checkers)
+ ")";
+ }
};
}
@@ -235,7 +266,10 @@ public class Entitlements {
if (!Objects.equal(this.permission, permission)) return false;
return test.apply((U)typeArgument);
}
-
+ @Override
+ public String toString() {
+ return "Entitlements.allowing(" + permission + " -> " + test +
")";
+ }
}
public static EntitlementManager seeNonSecretSensors() {
return allowing(SEE_SENSOR, new Predicate<EntityAndItem<String>>()
{
@@ -244,6 +278,10 @@ public class Entitlements {
if (input == null) return false;
return !Entities.isSecret(input.getItem());
}
+ @Override
+ public String toString() {
+ return "Predicates.nonSecret";
+ }
});
}
@@ -348,12 +386,14 @@ public class Entitlements {
if ("minimal".equalsIgnoreCase(type)) return minimal();
if (Strings.isNonBlank(type)) {
try {
- ClassLoader cl = mgmt==null ? null :
((ManagementContextInternal)mgmt).getBaseClassLoader();
+ ClassLoader cl = mgmt==null ? null :
((ManagementContextInternal)mgmt).getCatalogClassLoader();
if (cl==null) cl = Entitlements.class.getClassLoader();
Class<?> clazz = cl.loadClass(type);
- Optional<?> result =
Reflections.invokeConstructorWithArgs(clazz, brooklynProperties);
- if (result.isPresent()) return (EntitlementManager)
result.get();
- return (EntitlementManager) clazz.newInstance();
+ return (EntitlementManager) instantiate(clazz,
ImmutableList.of(
+ new Object[] {mgmt, brooklynProperties},
+ new Object[] {mgmt},
+ new Object[] {brooklynProperties},
+ new Object[0]));
} catch (Exception e) {
throw Exceptions.propagate(e);
}
@@ -361,5 +401,15 @@ public class Entitlements {
throw new IllegalStateException("Invalid entitlement manager
specified: '"+type+"'");
}
-
+ private static Object instantiate(Class<?> clazz, List<Object[]>
constructorArgOptions) {
+ try {
+ for (Object[] constructorArgOption : constructorArgOptions) {
+ Optional<?> result =
Reflections.invokeConstructorWithArgs(clazz, constructorArgOption);
+ if (result.isPresent()) return result.get();
+ }
+ } catch (Exception e) {
+ throw Exceptions.propagate(e);
+ }
+ throw new IllegalStateException("No matching constructor to
instantiate "+clazz);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bcd6baae/core/src/main/java/brooklyn/management/internal/LocalManagementContext.java
----------------------------------------------------------------------
diff --git
a/core/src/main/java/brooklyn/management/internal/LocalManagementContext.java
b/core/src/main/java/brooklyn/management/internal/LocalManagementContext.java
index 39e4dc5..d0750f4 100644
---
a/core/src/main/java/brooklyn/management/internal/LocalManagementContext.java
+++
b/core/src/main/java/brooklyn/management/internal/LocalManagementContext.java
@@ -54,6 +54,7 @@ import brooklyn.management.ManagementContext;
import brooklyn.management.SubscriptionManager;
import brooklyn.management.Task;
import brooklyn.management.TaskAdaptable;
+import brooklyn.management.entitlement.Entitlements;
import brooklyn.management.ha.OsgiManager;
import brooklyn.util.exceptions.Exceptions;
import brooklyn.util.guava.Maybe;
@@ -386,7 +387,8 @@ public class LocalManagementContext extends
AbstractManagementContext {
configMap.addFromMap(brooklynAdditionalProperties);
}
this.downloadsManager = BasicDownloadsManager.newDefault(configMap);
-
+ this.entitlementManager = Entitlements.newManager(this, configMap);
+
clearLocationRegistry();
BrooklynFeatureEnablement.init(configMap);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bcd6baae/core/src/test/java/brooklyn/management/entitlement/AcmeEntitlementManager.java
----------------------------------------------------------------------
diff --git
a/core/src/test/java/brooklyn/management/entitlement/AcmeEntitlementManager.java
b/core/src/test/java/brooklyn/management/entitlement/AcmeEntitlementManager.java
index 9cc02dd..c7e5405 100644
---
a/core/src/test/java/brooklyn/management/entitlement/AcmeEntitlementManager.java
+++
b/core/src/test/java/brooklyn/management/entitlement/AcmeEntitlementManager.java
@@ -18,7 +18,7 @@
*/
package brooklyn.management.entitlement;
-class AcmeEntitlementManager extends PerUserEntitlementManager {
+public class AcmeEntitlementManager extends PerUserEntitlementManager {
public AcmeEntitlementManager() {
// default mode (if no user specified) is root
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/bcd6baae/core/src/test/java/brooklyn/management/entitlement/AcmeEntitlementManagerTestFixture.java
----------------------------------------------------------------------
diff --git
a/core/src/test/java/brooklyn/management/entitlement/AcmeEntitlementManagerTestFixture.java
b/core/src/test/java/brooklyn/management/entitlement/AcmeEntitlementManagerTestFixture.java
index a0fd135..a8f0261 100644
---
a/core/src/test/java/brooklyn/management/entitlement/AcmeEntitlementManagerTestFixture.java
+++
b/core/src/test/java/brooklyn/management/entitlement/AcmeEntitlementManagerTestFixture.java
@@ -47,9 +47,9 @@ import brooklyn.util.exceptions.Exceptions;
public abstract class AcmeEntitlementManagerTestFixture {
- ManagementContext mgmt;
- Application app;
- ConfigBag configBag;
+ protected ManagementContext mgmt;
+ protected Application app;
+ protected ConfigBag configBag;
public void setup(ConfigBag cfg) {
mgmt = new
LocalManagementContextForTests(BrooklynProperties.Factory.newEmpty().addFrom(cfg));