You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ha...@apache.org on 2015/08/18 17:04:09 UTC
[60/64] [abbrv] incubator-brooklyn git commit: BROOKLYN-162 - apply
org.apache package prefix to core config packages
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/config/render/RendererHints.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/config/render/RendererHints.java b/core/src/main/java/brooklyn/config/render/RendererHints.java
deleted file mode 100644
index 7628ac1..0000000
--- a/core/src/main/java/brooklyn/config/render/RendererHints.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.config.render;
-
-import groovy.lang.Closure;
-
-import java.util.Set;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.event.AttributeSensor;
-import org.apache.brooklyn.config.ConfigKey;
-import org.apache.brooklyn.util.GroovyJavaMethods;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.annotations.Beta;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Objects;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Predicates;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.LinkedHashMultimap;
-import com.google.common.collect.Multimaps;
-import com.google.common.collect.SetMultimap;
-import com.google.common.collect.Sets;
-
-/**
- * Registry of hints for displaying items such as sensors, e.g. in the web console.
- */
-public class RendererHints {
-
- private static final Logger log = LoggerFactory.getLogger(RendererHints.class);
-
- private static SetMultimap<Object, Hint<?>> registry = Multimaps.synchronizedSetMultimap(LinkedHashMultimap.<Object, Hint<?>>create());
-
- @VisibleForTesting
- public static SetMultimap<Object, Hint<?>> getRegistry() { return registry; }
-
- /**
- * Registers a {@link Hint} against the given element.
- * <p>
- * Returns the element, for convenience when used in a with block after defining the element.
- */
- public static <T> AttributeSensor<T> register(AttributeSensor<T> element, Hint<? super T> hintForThatElement) { return _register(element, hintForThatElement); }
- /** as {@link #register(AttributeSensor, Hint)} */
- public static <T> ConfigKey<T> register(ConfigKey<T> element, Hint<? super T> hintForThatElement) { return _register(element, hintForThatElement); }
- /** as {@link #register(AttributeSensor, Hint)} */
- public static <T> Class<T> register(Class<T> element, Hint<? super T> hintForThatElement) { return _register(element, hintForThatElement); }
-
- private static <T> T _register(T element, Hint<?> hintForThatElement) {
- if (element==null) {
- // can happen if being done in a static initializer in an inner class
- log.error("Invalid null target for renderer hint "+hintForThatElement, new Throwable("Trace for invalid null target for renderer hint"));
- }
- registry.put(element, hintForThatElement);
- return element;
- }
-
- /** Returns all registered hints against the given element */
- public static Set<Hint<?>> getHintsFor(AttributeSensor<?> element) { return _getHintsFor(element, null); }
- /** as {@link #getHintsFor(AttributeSensor)} */
- public static Set<Hint<?>> getHintsFor(ConfigKey<?> element) { return _getHintsFor(element, null); }
- /** as {@link #getHintsFor(AttributeSensor)} */
- public static Set<Hint<?>> getHintsFor(Class<?> element) { return _getHintsFor(element, null); }
-
- @Deprecated /** @deprecated since 0.7.0 only supported for certain types */
- public static Set<Hint<?>> getHintsFor(Object element) { return getHintsFor(element, null); }
-
- @Deprecated /** @deprecated since 0.7.0 only supported for certain types */
- @SuppressWarnings({ "rawtypes", "unchecked" })
- public static Set<Hint<?>> getHintsFor(Object element, Class<? extends Hint> optionalHintSuperClass) { return (Set<Hint<?>>) _getHintsFor(element, optionalHintSuperClass); }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private static <T extends Hint> Set<T> _getHintsFor(Object element, Class<T> optionalHintSuperClass) {
- Set<Hint<?>> found = ImmutableSet.copyOf(registry.get(element));
- if (found.isEmpty() && element instanceof Class && !Object.class.equals(element)) {
- // try superclasses of the element; this seems overkill for the main use case, Entity;
- // (other classes registered are typically final)
- found = (Set<Hint<?>>) _getHintsFor(((Class)element).getSuperclass(), optionalHintSuperClass);
- if (found.isEmpty()) {
- for (Class<?> parentInterface: ((Class)element).getInterfaces()) {
- found = (Set<Hint<?>>) _getHintsFor(parentInterface, optionalHintSuperClass);
- if (!found.isEmpty())
- break;
- }
- }
- }
- if (optionalHintSuperClass != null) {
- return (Set<T>)Sets.filter(found, Predicates.instanceOf(optionalHintSuperClass));
- } else {
- return (Set<T>)found;
- }
- }
-
- /** Applies the (first) display value hint registered against the given target to the given initialValue */
- public static Object applyDisplayValueHint(AttributeSensor<?> target, Object initialValue) { return applyDisplayValueHintUnchecked(target, initialValue); }
- /** as {@link #applyDisplayValueHint(AttributeSensor, Object)} */
- public static Object applyDisplayValueHint(ConfigKey<?> target, Object initialValue) { return applyDisplayValueHintUnchecked(target, initialValue); }
- /** as {@link #applyDisplayValueHint(AttributeSensor, Object)} */
- public static Object applyDisplayValueHint(Class<?> target, Object initialValue) { return applyDisplayValueHintUnchecked(target, initialValue); }
-
- /** as {@link #applyDisplayValueHint(AttributeSensor, Object)}, but without type checking; public for those few cases where we may have lost the type */
- @Beta
- public static Object applyDisplayValueHintUnchecked(Object target, Object initialValue) { return _applyDisplayValueHint(target, initialValue, true); }
- @SuppressWarnings("rawtypes")
- private static Object _applyDisplayValueHint(Object target, Object initialValue, boolean includeClass) {
- Iterable<RendererHints.DisplayValue> hints = RendererHints._getHintsFor(target, RendererHints.DisplayValue.class);
- if (Iterables.size(hints) > 1) {
- log.warn("Multiple display value hints set for {}; Only one will be applied, using first", target);
- }
-
- Optional<RendererHints.DisplayValue> hint = Optional.fromNullable(Iterables.getFirst(hints, null));
- Object value = hint.isPresent() ? hint.get().getDisplayValue(initialValue) : initialValue;
- if (includeClass && value!=null && !(value instanceof String) && !(value instanceof Number) && !(value.getClass().isPrimitive())) {
- value = _applyDisplayValueHint(value.getClass(), value, false);
- }
- return value;
- }
-
-
- /** Parent marker class for hints. */
- public static abstract class Hint<T> { }
-
- public static interface NamedAction {
- String getActionName();
- }
-
- /**
- * This hint describes a named action possible on something, e.g. a sensor;
- * currently used in web client to show actions on sensors
- */
- public static class NamedActionWithUrl<T> extends Hint<T> implements NamedAction {
- private final String actionName;
- private final Function<T, String> postProcessing;
-
- public NamedActionWithUrl(String actionName) {
- this(actionName, (Function<T, String>)null);
- }
-
- @SuppressWarnings("unchecked") @Deprecated /** @deprecated since 0.7.0 use Function */
- public NamedActionWithUrl(String actionName, Closure<String> postProcessing) {
- this.actionName = actionName;
- this.postProcessing = (Function<T, String>) ((postProcessing == null) ? null : GroovyJavaMethods.functionFromClosure(postProcessing));
- }
-
- public NamedActionWithUrl(String actionName, Function<T, String> postProcessing) {
- this.actionName = actionName;
- this.postProcessing = postProcessing;
- }
-
- /** @deprecated since 0.7.0 call {@link #getUrlFromValue(Object)}, parsing the sensor value yourself */ @Deprecated
- public String getUrl(Entity e, AttributeSensor<T> s) {
- return getUrlFromValue(e.getAttribute(s));
- }
-
- public String getActionName() {
- return actionName;
- }
-
- /** this is the method invoked by web console SensorSummary, at the moment */
- public String getUrlFromValue(T v) {
- String v2;
- if (postProcessing != null) {
- v2 = postProcessing.apply(v);
- } else {
- v2 = (v==null ? null : v.toString());
- }
- if (v2 == null) return v2;
- return v2.toString();
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(actionName, postProcessing);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof NamedActionWithUrl)) return false;
- NamedActionWithUrl<?> o = (NamedActionWithUrl<?>) obj;
- return Objects.equal(actionName, o.actionName) && Objects.equal(postProcessing, o.postProcessing);
- }
- }
-
- /**
- * This hint describes a transformation used to generate a display value for config keys and sensors.
- * <p>
- * <em><strong>Warning</strong> This is currently a {@link Beta} implementation, and
- * may be changed or removed if there is a suitable alternative mechanism to achieve
- * this functionality.</em>
- */
- @Beta
- public static class DisplayValue<T> extends Hint<T> {
- private final Function<Object, String> transform;
-
- @SuppressWarnings("unchecked")
- protected DisplayValue(Function<?, String> transform) {
- this.transform = (Function<Object, String>) Preconditions.checkNotNull(transform, "transform");
- }
-
- public String getDisplayValue(Object v) {
- String dv = transform.apply(v);
- return Strings.nullToEmpty(dv);
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(transform);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj == null || !(obj instanceof DisplayValue)) return false;
- return Objects.equal(transform, ((DisplayValue<?>)obj).transform);
- }
- }
-
- @Beta
- public static <T> DisplayValue<T> displayValue(Function<T,String> transform) {
- return new DisplayValue<T>(transform);
- }
-
- @Beta
- public static <T> NamedActionWithUrl<T> namedActionWithUrl(String actionName, Function<T,String> transform) {
- return new NamedActionWithUrl<T>(actionName, transform);
- }
-
- @Beta
- public static <T> NamedActionWithUrl<T> namedActionWithUrl(String actionName) {
- return new NamedActionWithUrl<T>(actionName);
- }
-
- @Beta
- public static <T> NamedActionWithUrl<T> namedActionWithUrl(Function<T,String> transform) {
- return openWithUrl(transform);
- }
-
- @Beta
- public static <T> NamedActionWithUrl<T> namedActionWithUrl() {
- return openWithUrl();
- }
-
- @Beta
- public static <T> NamedActionWithUrl<T> openWithUrl() {
- return openWithUrl((Function<T,String>) null);
- }
-
- @Beta
- public static <T> NamedActionWithUrl<T> openWithUrl(Function<T,String> transform) {
- return new NamedActionWithUrl<T>("Open", transform);
- }
-
- /**
- * Forces the given sensor or config key's value to be censored. It will be
- * presented as <code>********</code>.
- */
- @Beta
- public static <T> DisplayValue<T> censoredValue() {
- return new DisplayValue<T>(Functions.constant("********"));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/enricher/basic/AbstractMultipleSensorAggregator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/enricher/basic/AbstractMultipleSensorAggregator.java b/core/src/main/java/brooklyn/enricher/basic/AbstractMultipleSensorAggregator.java
index 965d7ca..ca081e1 100644
--- a/core/src/main/java/brooklyn/enricher/basic/AbstractMultipleSensorAggregator.java
+++ b/core/src/main/java/brooklyn/enricher/basic/AbstractMultipleSensorAggregator.java
@@ -30,13 +30,12 @@ import org.apache.brooklyn.api.event.AttributeSensor;
import org.apache.brooklyn.api.event.Sensor;
import org.apache.brooklyn.api.event.SensorEvent;
import org.apache.brooklyn.api.event.SensorEventListener;
+import org.apache.brooklyn.core.config.BrooklynLogging;
import org.apache.brooklyn.core.util.flags.TypeCoercions;
import org.apache.brooklyn.util.collections.MutableMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynLogging;
-
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/enricher/basic/Aggregator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/enricher/basic/Aggregator.java b/core/src/main/java/brooklyn/enricher/basic/Aggregator.java
index 4ea9b80..33c3164 100644
--- a/core/src/main/java/brooklyn/enricher/basic/Aggregator.java
+++ b/core/src/main/java/brooklyn/enricher/basic/Aggregator.java
@@ -31,6 +31,7 @@ import org.apache.brooklyn.api.event.Sensor;
import org.apache.brooklyn.api.event.SensorEvent;
import org.apache.brooklyn.api.event.SensorEventListener;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.BrooklynLogging;
import org.apache.brooklyn.core.util.flags.SetFromFlag;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableMap;
@@ -39,7 +40,6 @@ import org.apache.brooklyn.util.text.StringPredicates;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynLogging;
import brooklyn.enricher.Enrichers;
import brooklyn.entity.basic.ConfigKeys;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
index 0b52b4a..6209394 100644
--- a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
+++ b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
@@ -56,6 +56,8 @@ import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+import org.apache.brooklyn.core.config.BrooklynLogging;
+import org.apache.brooklyn.core.config.render.RendererHints;
import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
import org.apache.brooklyn.core.internal.BrooklynInitialization;
import org.apache.brooklyn.core.internal.storage.BrooklynStorage;
@@ -77,8 +79,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.brooklyn.basic.AbstractBrooklynObject;
-import brooklyn.config.BrooklynLogging;
-import brooklyn.config.render.RendererHints;
import brooklyn.enricher.basic.AbstractEnricher;
import brooklyn.entity.basic.ServiceStateLogic.ServiceNotUpLogic;
import brooklyn.entity.rebind.BasicEntityRebindSupport;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/basic/Attributes.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/Attributes.java b/core/src/main/java/brooklyn/entity/basic/Attributes.java
index e250062..c572264 100644
--- a/core/src/main/java/brooklyn/entity/basic/Attributes.java
+++ b/core/src/main/java/brooklyn/entity/basic/Attributes.java
@@ -25,9 +25,9 @@ import java.util.Map;
import org.apache.brooklyn.api.event.AttributeSensor;
import org.apache.brooklyn.api.event.Sensor;
import org.apache.brooklyn.api.management.ManagementContext;
+import org.apache.brooklyn.core.config.render.RendererHints;
import org.apache.brooklyn.util.net.UserAndHostAndPort;
-import brooklyn.config.render.RendererHints;
import brooklyn.event.basic.BasicAttributeSensor;
import brooklyn.event.basic.BasicAttributeSensorAndConfigKey;
import brooklyn.event.basic.BasicNotificationSensor;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/basic/BrooklynConfigKeys.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/BrooklynConfigKeys.java b/core/src/main/java/brooklyn/entity/basic/BrooklynConfigKeys.java
index 82a69bf..82fa7b9 100644
--- a/core/src/main/java/brooklyn/entity/basic/BrooklynConfigKeys.java
+++ b/core/src/main/java/brooklyn/entity/basic/BrooklynConfigKeys.java
@@ -20,13 +20,13 @@ package brooklyn.entity.basic;
import static brooklyn.entity.basic.ConfigKeys.*;
-import brooklyn.config.BrooklynServerConfig;
import brooklyn.entity.trait.Startable;
import brooklyn.event.basic.AttributeSensorAndConfigKey;
import brooklyn.event.basic.TemplatedStringAttributeSensorAndConfigKey;
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
import org.apache.brooklyn.core.util.internal.ssh.ShellTool;
import org.apache.brooklyn.core.util.internal.ssh.SshTool;
import org.apache.brooklyn.util.time.Duration;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/basic/DelegateEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/DelegateEntity.java b/core/src/main/java/brooklyn/entity/basic/DelegateEntity.java
index 4731620..f355d0b 100644
--- a/core/src/main/java/brooklyn/entity/basic/DelegateEntity.java
+++ b/core/src/main/java/brooklyn/entity/basic/DelegateEntity.java
@@ -24,8 +24,8 @@ import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.Group;
import org.apache.brooklyn.api.entity.proxying.ImplementedBy;
import org.apache.brooklyn.api.event.AttributeSensor;
+import org.apache.brooklyn.core.config.render.RendererHints;
-import brooklyn.config.render.RendererHints;
import brooklyn.event.basic.AttributeSensorAndConfigKey;
import brooklyn.event.basic.Sensors;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/basic/DynamicGroupImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/DynamicGroupImpl.java b/core/src/main/java/brooklyn/entity/basic/DynamicGroupImpl.java
index 9451d96..68aaddf 100644
--- a/core/src/main/java/brooklyn/entity/basic/DynamicGroupImpl.java
+++ b/core/src/main/java/brooklyn/entity/basic/DynamicGroupImpl.java
@@ -28,6 +28,8 @@ import org.apache.brooklyn.api.event.Sensor;
import org.apache.brooklyn.api.event.SensorEvent;
import org.apache.brooklyn.api.event.SensorEventListener;
import org.apache.brooklyn.api.management.Task;
+import org.apache.brooklyn.core.config.BrooklynLogging;
+import org.apache.brooklyn.core.config.BrooklynLogging.LoggingLevel;
import org.apache.brooklyn.core.management.internal.CollectionChangeListener;
import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
import org.apache.brooklyn.core.util.task.Tasks;
@@ -36,9 +38,6 @@ import org.apache.brooklyn.util.exceptions.Exceptions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynLogging;
-import brooklyn.config.BrooklynLogging.LoggingLevel;
-
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Iterables;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/basic/Entities.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/Entities.java b/core/src/main/java/brooklyn/entity/basic/Entities.java
index d5790c2..a9699ff 100644
--- a/core/src/main/java/brooklyn/entity/basic/Entities.java
+++ b/core/src/main/java/brooklyn/entity/basic/Entities.java
@@ -61,6 +61,7 @@ import org.apache.brooklyn.api.policy.Enricher;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
+import org.apache.brooklyn.core.config.BrooklynProperties;
import org.apache.brooklyn.core.management.internal.EffectorUtils;
import org.apache.brooklyn.core.management.internal.EntityManagerInternal;
import org.apache.brooklyn.core.management.internal.LocalManagementContext;
@@ -79,7 +80,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.brooklyn.basic.BrooklynObjectInternal;
-import brooklyn.config.BrooklynProperties;
import brooklyn.entity.effector.Effectors;
import brooklyn.entity.proxying.EntityProxyImpl;
import brooklyn.entity.trait.Startable;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/basic/EntityConfigMap.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/EntityConfigMap.java b/core/src/main/java/brooklyn/entity/basic/EntityConfigMap.java
index 409f72f..7b05572 100644
--- a/core/src/main/java/brooklyn/entity/basic/EntityConfigMap.java
+++ b/core/src/main/java/brooklyn/entity/basic/EntityConfigMap.java
@@ -30,6 +30,7 @@ import org.apache.brooklyn.api.management.ExecutionContext;
import org.apache.brooklyn.api.management.Task;
import org.apache.brooklyn.config.ConfigInheritance;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl;
import org.apache.brooklyn.core.util.config.ConfigBag;
import org.apache.brooklyn.core.util.flags.FlagUtils;
import org.apache.brooklyn.core.util.flags.SetFromFlag;
@@ -40,7 +41,6 @@ import org.apache.brooklyn.util.guava.Maybe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.internal.AbstractConfigMapImpl;
import brooklyn.event.basic.StructuredConfigKey;
import com.google.common.base.Predicate;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/basic/Lifecycle.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/Lifecycle.java b/core/src/main/java/brooklyn/entity/basic/Lifecycle.java
index 177ddd3..e3a80d5 100644
--- a/core/src/main/java/brooklyn/entity/basic/Lifecycle.java
+++ b/core/src/main/java/brooklyn/entity/basic/Lifecycle.java
@@ -23,14 +23,13 @@ import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import brooklyn.config.render.RendererHints;
-
import com.google.common.base.CaseFormat;
import com.google.common.base.Function;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.core.config.render.RendererHints;
import org.apache.brooklyn.core.util.flags.TypeCoercions;
import org.apache.brooklyn.util.text.StringFunctions;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/basic/ServiceStateLogic.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/ServiceStateLogic.java b/core/src/main/java/brooklyn/entity/basic/ServiceStateLogic.java
index 1baffd4..d81d5e2 100644
--- a/core/src/main/java/brooklyn/entity/basic/ServiceStateLogic.java
+++ b/core/src/main/java/brooklyn/entity/basic/ServiceStateLogic.java
@@ -39,6 +39,8 @@ import org.apache.brooklyn.api.policy.EnricherSpec;
import org.apache.brooklyn.api.policy.EnricherSpec.ExtensibleEnricherSpec;
import org.apache.brooklyn.config.ConfigInheritance;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.BrooklynLogging;
+import org.apache.brooklyn.core.config.BrooklynLogging.LoggingLevel;
import org.apache.brooklyn.core.util.task.ValueResolver;
import org.apache.brooklyn.util.collections.CollectionFunctionals;
import org.apache.brooklyn.util.collections.MutableList;
@@ -53,8 +55,6 @@ import org.apache.brooklyn.util.time.Duration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynLogging;
-import brooklyn.config.BrooklynLogging.LoggingLevel;
import brooklyn.enricher.Enrichers;
import brooklyn.enricher.basic.AbstractEnricher;
import brooklyn.enricher.basic.AbstractMultipleSensorAggregator;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java b/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
index 2c00e99..276011b 100644
--- a/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
+++ b/core/src/main/java/brooklyn/entity/group/AbstractMembershipTrackingPolicy.java
@@ -30,13 +30,13 @@ import org.apache.brooklyn.api.event.Sensor;
import org.apache.brooklyn.api.event.SensorEvent;
import org.apache.brooklyn.api.event.SensorEventListener;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.BrooklynLogging;
import org.apache.brooklyn.core.policy.basic.AbstractPolicy;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.javalang.JavaClassNames;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynLogging;
import brooklyn.entity.basic.Attributes;
import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.basic.DynamicGroup;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/group/DynamicClusterImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/group/DynamicClusterImpl.java b/core/src/main/java/brooklyn/entity/group/DynamicClusterImpl.java
index b999fdf..9a40cda 100644
--- a/core/src/main/java/brooklyn/entity/group/DynamicClusterImpl.java
+++ b/core/src/main/java/brooklyn/entity/group/DynamicClusterImpl.java
@@ -38,6 +38,7 @@ import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.MachineProvisioningLocation;
import org.apache.brooklyn.api.management.Task;
import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.core.config.render.RendererHints;
import org.apache.brooklyn.core.util.flags.TypeCoercions;
import org.apache.brooklyn.core.util.task.DynamicTasks;
import org.apache.brooklyn.core.util.task.TaskTags;
@@ -45,7 +46,6 @@ import org.apache.brooklyn.core.util.task.Tasks;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.render.RendererHints;
import brooklyn.entity.basic.AbstractGroupImpl;
import brooklyn.entity.basic.DelegateEntity;
import brooklyn.entity.basic.Entities;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java b/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java
index d6e61a6..cb57ca3 100644
--- a/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java
+++ b/core/src/main/java/brooklyn/entity/rebind/InitialFullRebindIteration.java
@@ -26,6 +26,7 @@ import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.rebind.RebindExceptionHandler;
import org.apache.brooklyn.api.management.ha.ManagementNodeState;
import org.apache.brooklyn.api.mementos.BrooklynMementoPersister;
+import org.apache.brooklyn.core.config.BrooklynLogging;
import org.apache.brooklyn.core.management.internal.BrooklynObjectManagementMode;
import org.apache.brooklyn.core.management.internal.EntityManagerInternal;
import org.apache.brooklyn.core.management.internal.LocationManagerInternal;
@@ -34,7 +35,6 @@ import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynLogging;
import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.rebind.persister.PersistenceActivityMetrics;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
index 77a90c5..9369bd2 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
@@ -64,6 +64,8 @@ import org.apache.brooklyn.api.policy.Enricher;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+import org.apache.brooklyn.core.config.BrooklynLogging;
+import org.apache.brooklyn.core.config.BrooklynLogging.LoggingLevel;
import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
import org.apache.brooklyn.core.management.internal.BrooklynObjectManagementMode;
import org.apache.brooklyn.core.management.internal.BrooklynObjectManagerInternal;
@@ -74,8 +76,6 @@ import org.apache.brooklyn.core.management.internal.ManagementTransitionMode;
import org.apache.brooklyn.core.policy.basic.AbstractPolicy;
import org.apache.brooklyn.core.util.flags.FlagUtils;
-import brooklyn.config.BrooklynLogging;
-import brooklyn.config.BrooklynLogging.LoggingLevel;
import brooklyn.enricher.basic.AbstractEnricher;
import brooklyn.entity.basic.AbstractApplication;
import brooklyn.entity.basic.AbstractEntity;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
index a758c99..dfef70b 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
@@ -44,6 +44,7 @@ import org.apache.brooklyn.api.mementos.BrooklynMementoPersister;
import org.apache.brooklyn.api.mementos.BrooklynMementoRawData;
import org.apache.brooklyn.api.mementos.TreeNode;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
import org.apache.brooklyn.core.management.ha.HighAvailabilityManagerImpl;
import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
@@ -60,7 +61,6 @@ import org.apache.brooklyn.util.time.Duration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynServerConfig;
import brooklyn.enricher.basic.AbstractEnricher;
import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.basic.Entities;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynPersistenceUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynPersistenceUtils.java b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynPersistenceUtils.java
index be116a3..3a5d093 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynPersistenceUtils.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynPersistenceUtils.java
@@ -40,13 +40,13 @@ import org.apache.brooklyn.api.mementos.BrooklynMementoRawData;
import org.apache.brooklyn.api.mementos.Memento;
import org.apache.brooklyn.api.policy.Enricher;
import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
+import org.apache.brooklyn.core.config.BrooklynServerPaths;
import org.apache.brooklyn.core.management.ha.ManagementPlaneSyncRecordPersisterToObjectStore;
import org.apache.brooklyn.core.management.internal.LocalLocationManager;
import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
import org.apache.brooklyn.core.util.ResourceUtils;
-import brooklyn.config.BrooklynServerConfig;
-import brooklyn.config.BrooklynServerPaths;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.rebind.PersistenceExceptionHandlerImpl;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/entity/rebind/persister/FileBasedObjectStore.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/FileBasedObjectStore.java b/core/src/main/java/brooklyn/entity/rebind/persister/FileBasedObjectStore.java
index aa4de92..1f46d82 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/FileBasedObjectStore.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/FileBasedObjectStore.java
@@ -36,6 +36,7 @@ import javax.annotation.Nullable;
import org.apache.brooklyn.api.management.ManagementContext;
import org.apache.brooklyn.api.management.ha.HighAvailabilityMode;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
import org.apache.brooklyn.core.util.internal.ssh.process.ProcessTool;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableMap;
@@ -47,8 +48,6 @@ import org.apache.brooklyn.util.os.Os.DeletionResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynServerConfig;
-
import com.google.common.base.Function;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/event/basic/AttributeMap.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/event/basic/AttributeMap.java b/core/src/main/java/brooklyn/event/basic/AttributeMap.java
index 1877a6c..43f173d 100644
--- a/core/src/main/java/brooklyn/event/basic/AttributeMap.java
+++ b/core/src/main/java/brooklyn/event/basic/AttributeMap.java
@@ -26,12 +26,12 @@ import java.util.Map;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.event.AttributeSensor;
+import org.apache.brooklyn.core.config.BrooklynLogging;
import org.apache.brooklyn.core.util.flags.TypeCoercions;
import org.apache.brooklyn.util.guava.Maybe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynLogging;
import brooklyn.entity.basic.AbstractEntity;
import com.google.common.base.Function;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/event/basic/Sensors.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/event/basic/Sensors.java b/core/src/main/java/brooklyn/event/basic/Sensors.java
index d3d995f..207bb6f 100644
--- a/core/src/main/java/brooklyn/event/basic/Sensors.java
+++ b/core/src/main/java/brooklyn/event/basic/Sensors.java
@@ -28,13 +28,12 @@ import javax.annotation.Nullable;
import org.apache.brooklyn.api.event.AttributeSensor;
import org.apache.brooklyn.api.event.AttributeSensor.SensorPersistenceMode;
+import org.apache.brooklyn.core.config.render.RendererHints;
import org.apache.brooklyn.util.net.UserAndHostAndPort;
import org.apache.brooklyn.util.text.StringFunctions;
import org.apache.brooklyn.util.time.Duration;
import org.apache.brooklyn.util.time.Time;
-import brooklyn.config.render.RendererHints;
-
import com.google.common.annotations.Beta;
import com.google.common.base.Function;
import com.google.common.net.HostAndPort;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index fc0ab56..7db7c9a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -54,11 +54,9 @@ import org.apache.brooklyn.camp.spi.instantiate.AssemblyTemplateInstantiator;
import org.apache.brooklyn.camp.spi.pdp.DeploymentPlan;
import org.apache.brooklyn.core.catalog.CatalogPredicates;
import org.apache.brooklyn.core.catalog.internal.CatalogClasspathDo.CatalogScanningModes;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
import org.apache.brooklyn.core.util.flags.TypeCoercions;
-
-import brooklyn.config.BrooklynServerConfig;
-
import org.apache.brooklyn.location.basic.BasicLocationRegistry;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableMap;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogInitialization.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogInitialization.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogInitialization.java
index ee36265..5eb99ef 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogInitialization.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogInitialization.java
@@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory;
import org.apache.brooklyn.api.catalog.CatalogItem;
import org.apache.brooklyn.api.management.ManagementContext;
import org.apache.brooklyn.api.management.ha.ManagementNodeState;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
import org.apache.brooklyn.core.management.ManagementContextInjectable;
import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
import org.apache.brooklyn.core.util.ResourceUtils;
@@ -40,8 +41,6 @@ import org.apache.brooklyn.util.javalang.JavaClassNames;
import org.apache.brooklyn.util.os.Os;
import org.apache.brooklyn.util.text.Strings;
-import brooklyn.config.BrooklynServerConfig;
-
import com.google.common.annotations.Beta;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
index 426562e..e86d5df 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java
@@ -33,6 +33,7 @@ import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.management.ManagementContext;
import org.apache.brooklyn.api.management.classloading.BrooklynClassLoadingContext;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
+import org.apache.brooklyn.core.config.BrooklynLogging;
import org.apache.brooklyn.core.management.classloading.BrooklynClassLoadingContextSequential;
import org.apache.brooklyn.core.management.classloading.JavaBrooklynClassLoadingContext;
import org.apache.brooklyn.core.management.classloading.OsgiBrooklynClassLoadingContext;
@@ -42,7 +43,6 @@ import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Time;
-import brooklyn.config.BrooklynLogging;
import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.rebind.RebindManagerImpl.RebindTracker;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/config/BrooklynLogging.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/BrooklynLogging.java b/core/src/main/java/org/apache/brooklyn/core/config/BrooklynLogging.java
new file mode 100644
index 0000000..7cd9ca9
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/BrooklynLogging.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.config;
+
+import org.apache.brooklyn.api.entity.Entity;
+import org.slf4j.Logger;
+
+import brooklyn.entity.basic.EntityInternal;
+
+/** contains common logging categories */
+public class BrooklynLogging {
+
+ public static final String SSH_IO = "brooklyn.SSH";
+
+ public static final String REST = "brooklyn.REST";
+
+ /** For convenience here, since SLF4J does not define such an enum */
+ public static enum LoggingLevel { ERROR, WARN, INFO, DEBUG, TRACE }
+
+ /** As methods on {@link Logger} but taking the level as an argument */
+ public static final void log(Logger logger, LoggingLevel level, String message, Object... args) {
+ switch (level) {
+ case ERROR: logger.error(message, args); break;
+ case WARN: logger.warn(message, args); break;
+ case INFO: logger.info(message, args); break;
+ case DEBUG: logger.debug(message, args); break;
+ case TRACE: logger.trace(message, args); break;
+ }
+ }
+
+ /** As methods on {@link Logger} but taking the level as an argument */
+ public static final void log(Logger logger, LoggingLevel level, String message, Throwable t) {
+ switch (level) {
+ case ERROR: logger.error(message, t); break;
+ case WARN: logger.warn(message, t); break;
+ case INFO: logger.info(message, t); break;
+ case DEBUG: logger.debug(message, t); break;
+ case TRACE: logger.trace(message, t); break;
+ }
+ }
+
+ /** returns one of three log levels depending on the read-only status of the entity;
+ * unknown should only be the case very early in the management cycle */
+ public static LoggingLevel levelDependingIfReadOnly(Entity entity, LoggingLevel levelIfWriting, LoggingLevel levelIfReadOnly, LoggingLevel levelIfUnknown) {
+ if (entity==null) return levelIfUnknown;
+ Boolean ro = ((EntityInternal)entity).getManagementSupport().isReadOnlyRaw();
+ if (ro==null) return levelIfUnknown;
+ if (ro) return levelIfReadOnly;
+ return levelIfWriting;
+ }
+
+ /** as {@link #levelDependendingIfReadOnly(Entity)} with {@link LoggingLevel#DEBUG} as the default,
+ * but {@link LoggingLevel#TRACE} for read-only */
+ public static LoggingLevel levelDebugOrTraceIfReadOnly(Entity entity) {
+ return levelDependingIfReadOnly(entity, LoggingLevel.DEBUG, LoggingLevel.TRACE, LoggingLevel.DEBUG);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/config/BrooklynProperties.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/BrooklynProperties.java b/core/src/main/java/org/apache/brooklyn/core/config/BrooklynProperties.java
new file mode 100644
index 0000000..590b208
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/BrooklynProperties.java
@@ -0,0 +1,483 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.config;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import groovy.lang.Closure;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Properties;
+
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
+import org.apache.brooklyn.config.StringConfigMap;
+import org.apache.brooklyn.core.util.ResourceUtils;
+import org.apache.brooklyn.core.util.config.ConfigBag;
+import org.apache.brooklyn.core.util.flags.TypeCoercions;
+import org.apache.brooklyn.util.collections.MutableMap;
+import org.apache.brooklyn.util.guava.Maybe;
+import org.apache.brooklyn.util.os.Os;
+import org.apache.brooklyn.util.text.StringFunctions;
+import org.apache.brooklyn.util.text.Strings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.CharMatcher;
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.base.Throwables;
+import com.google.common.collect.Maps;
+
+import brooklyn.event.basic.BasicConfigKey;
+
+/** utils for accessing command-line and system-env properties;
+ * doesn't resolve anything (unless an execution context is supplied)
+ * and treats ConfigKeys as of type object when in doubt,
+ * or string when that is likely wanted (e.g. {@link #getFirst(Map, String...)}
+ * <p>
+ * TODO methods in this class are not thread safe.
+ * intention is that they are set during startup and not modified thereafter. */
+@SuppressWarnings("rawtypes")
+public class BrooklynProperties extends LinkedHashMap implements StringConfigMap {
+
+ private static final long serialVersionUID = -945875483083108978L;
+ private static final Logger LOG = LoggerFactory.getLogger(BrooklynProperties.class);
+
+ public static class Factory {
+ /** creates a new empty {@link BrooklynProperties} */
+ public static BrooklynProperties newEmpty() {
+ return new BrooklynProperties();
+ }
+
+ /** creates a new {@link BrooklynProperties} with contents loaded
+ * from the usual places, including *.properties files and environment variables */
+ public static BrooklynProperties newDefault() {
+ return new Builder(true).build();
+ }
+
+ public static Builder builderDefault() {
+ return new Builder(true);
+ }
+
+ public static Builder builderEmpty() {
+ return new Builder(true);
+ }
+
+ public static class Builder {
+ private String defaultLocationMetadataUrl;
+ private String globalLocationMetadataFile = null;
+ private String globalPropertiesFile = null;
+ private String localPropertiesFile = null;
+ private BrooklynProperties originalProperties = null;
+
+ /** @deprecated since 0.7.0 use static methods in {@link Factory} to create */
+ public Builder() {
+ this(true);
+ }
+
+ // TODO it's always called with true here, perhaps we don't need the argument?
+ private Builder(boolean setGlobalFileDefaults) {
+ resetDefaultLocationMetadataUrl();
+ if (setGlobalFileDefaults) {
+ resetGlobalFiles();
+ }
+ }
+
+ public Builder resetDefaultLocationMetadataUrl() {
+ defaultLocationMetadataUrl = "classpath://brooklyn/location-metadata.properties";
+ return this;
+ }
+ public Builder resetGlobalFiles() {
+ defaultLocationMetadataUrl = "classpath://brooklyn/location-metadata.properties";
+ globalLocationMetadataFile = Os.mergePaths(Os.home(), ".brooklyn", "location-metadata.properties");
+ globalPropertiesFile = Os.mergePaths(Os.home(), ".brooklyn", "brooklyn.properties");
+ return this;
+ }
+
+ /**
+ * Creates a Builder that when built, will return the BrooklynProperties passed to this constructor
+ */
+ private Builder(BrooklynProperties originalProperties) {
+ this.originalProperties = new BrooklynProperties().addFromMap(originalProperties);
+ }
+
+ /**
+ * The URL of a default location-metadata.properties (for meta-data about different locations, such as iso3166 and global lat/lon).
+ * Defaults to classpath://brooklyn/location-metadata.properties
+ */
+ public Builder defaultLocationMetadataUrl(String val) {
+ defaultLocationMetadataUrl = checkNotNull(val, "file");
+ return this;
+ }
+
+ /**
+ * The URL of a location-metadata.properties file that appends to and overwrites values in the locationMetadataUrl.
+ * Defaults to ~/.brooklyn/location-metadata.properties
+ */
+ public Builder globalLocationMetadataFile(String val) {
+ globalLocationMetadataFile = checkNotNull(val, "file");
+ return this;
+ }
+
+ /**
+ * The URL of a shared brooklyn.properties file. Defaults to ~/.brooklyn/brooklyn.properties.
+ * Can be null to disable.
+ */
+ public Builder globalPropertiesFile(String val) {
+ globalPropertiesFile = val;
+ return this;
+ }
+
+ @Beta
+ public boolean hasDelegateOriginalProperties() {
+ return this.originalProperties==null;
+ }
+
+ /**
+ * The URL of a brooklyn.properties file specific to this launch. Appends to and overwrites values in globalPropertiesFile.
+ */
+ public Builder localPropertiesFile(String val) {
+ localPropertiesFile = val;
+ return this;
+ }
+
+ public BrooklynProperties build() {
+ if (originalProperties != null)
+ return new BrooklynProperties().addFromMap(originalProperties);
+
+ BrooklynProperties properties = new BrooklynProperties();
+
+ // TODO Could also read from http://brooklyn.io, for up-to-date values?
+ // But might that make unit tests run very badly when developer is offline?
+ addPropertiesFromUrl(properties, defaultLocationMetadataUrl, false);
+
+ addPropertiesFromFile(properties, globalLocationMetadataFile);
+ addPropertiesFromFile(properties, globalPropertiesFile);
+ addPropertiesFromFile(properties, localPropertiesFile);
+
+ properties.addEnvironmentVars();
+ properties.addSystemProperties();
+
+ return properties;
+ }
+
+ public static Builder fromProperties(BrooklynProperties brooklynProperties) {
+ return new Builder(brooklynProperties);
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .omitNullValues()
+ .add("originalProperties", originalProperties)
+ .add("defaultLocationMetadataUrl", defaultLocationMetadataUrl)
+ .add("globalLocationMetadataUrl", globalLocationMetadataFile)
+ .add("globalPropertiesFile", globalPropertiesFile)
+ .add("localPropertiesFile", localPropertiesFile)
+ .toString();
+ }
+ }
+
+ private static void addPropertiesFromUrl(BrooklynProperties p, String url, boolean warnIfNotFound) {
+ if (url==null) return;
+
+ try {
+ p.addFrom(ResourceUtils.create(BrooklynProperties.class).getResourceFromUrl(url));
+ } catch (Exception e) {
+ if (warnIfNotFound)
+ LOG.warn("Could not load {}; continuing", url);
+ if (LOG.isTraceEnabled()) LOG.trace("Could not load "+url+"; continuing", e);
+ }
+ }
+
+ private static void addPropertiesFromFile(BrooklynProperties p, String file) {
+ if (file==null) return;
+
+ String fileTidied = Os.tidyPath(file);
+ File f = new File(fileTidied);
+
+ if (f.exists()) {
+ p.addFrom(f);
+ }
+ }
+ }
+
+ protected BrooklynProperties() {
+ }
+
+ public BrooklynProperties addEnvironmentVars() {
+ addFrom(System.getenv());
+ return this;
+ }
+
+ public BrooklynProperties addSystemProperties() {
+ addFrom(System.getProperties());
+ return this;
+ }
+
+ public BrooklynProperties addFrom(ConfigBag cfg) {
+ addFrom(cfg.getAllConfig());
+ return this;
+ }
+
+ @SuppressWarnings("unchecked")
+ public BrooklynProperties addFrom(Map map) {
+ putAll(Maps.transformValues(map, StringFunctions.trim()));
+ return this;
+ }
+
+ public BrooklynProperties addFrom(InputStream i) {
+ // Ugly way to load them in order, but Properties is a Hashtable so loses order otherwise.
+ @SuppressWarnings({ "serial" })
+ Properties p = new Properties() {
+ @Override
+ public synchronized Object put(Object key, Object value) {
+ // Trim the string values to remove leading and trailing spaces
+ String s = (String) value;
+ if (Strings.isBlank(s)) {
+ s = Strings.EMPTY;
+ } else {
+ s = CharMatcher.BREAKING_WHITESPACE.trimFrom(s);
+ }
+ return BrooklynProperties.this.put(key, s);
+ }
+ };
+ try {
+ p.load(i);
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
+ }
+ return this;
+ }
+
+ public BrooklynProperties addFrom(File f) {
+ if (!f.exists()) {
+ LOG.warn("Unable to find file '"+f.getAbsolutePath()+"' when loading properties; ignoring");
+ return this;
+ } else {
+ try {
+ return addFrom(new FileInputStream(f));
+ } catch (FileNotFoundException e) {
+ throw Throwables.propagate(e);
+ }
+ }
+ }
+ public BrooklynProperties addFrom(URL u) {
+ try {
+ return addFrom(u.openStream());
+ } catch (IOException e) {
+ throw new RuntimeException("Error reading properties from "+u+": "+e, e);
+ }
+ }
+ /**
+ * @see ResourceUtils#getResourceFromUrl(String)
+ *
+ * of the form form file:///home/... or http:// or classpath://xx ;
+ * for convenience if not starting with xxx: it is treated as a classpath reference or a file;
+ * throws if not found (but does nothing if argument is null)
+ */
+ public BrooklynProperties addFromUrl(String url) {
+ try {
+ if (url==null) return this;
+ return addFrom(ResourceUtils.create(this).getResourceFromUrl(url));
+ } catch (Exception e) {
+ throw new RuntimeException("Error reading properties from "+url+": "+e, e);
+ }
+ }
+
+ /** expects a property already set in scope, whose value is acceptable to {@link #addFromUrl(String)};
+ * if property not set, does nothing */
+ public BrooklynProperties addFromUrlProperty(String urlProperty) {
+ String url = (String) get(urlProperty);
+ if (url==null) addFromUrl(url);
+ return this;
+ }
+
+ /**
+ * adds the indicated properties
+ */
+ public BrooklynProperties addFromMap(Map properties) {
+ putAll(properties);
+ return this;
+ }
+
+ /** inserts the value under the given key, if it was not present */
+ public boolean putIfAbsent(String key, Object value) {
+ if (containsKey(key)) return false;
+ put(key, value);
+ return true;
+ }
+
+ /** @deprecated attempts to call get with this syntax are probably mistakes; get(key, defaultValue) is fine but
+ * Map is unlikely the key, much more likely they meant getFirst(flags, key).
+ */
+ @Deprecated
+ public String get(Map flags, String key) {
+ LOG.warn("Discouraged use of 'BrooklynProperties.get(Map,String)' (ambiguous); use getFirst(Map,String) or get(String) -- assuming the former");
+ LOG.debug("Trace for discouraged use of 'BrooklynProperties.get(Map,String)'",
+ new Throwable("Arguments: "+flags+" "+key));
+ return getFirst(flags, key);
+ }
+
+ /** returns the value of the first key which is defined
+ * <p>
+ * takes the following flags:
+ * 'warnIfNone', 'failIfNone' (both taking a boolean (to use default message) or a string (which is the message));
+ * and 'defaultIfNone' (a default value to return if there is no such property); defaults to no warning and null response */
+ @Override
+ public String getFirst(String ...keys) {
+ return getFirst(MutableMap.of(), keys);
+ }
+ @Override
+ public String getFirst(Map flags, String ...keys) {
+ for (String k: keys) {
+ if (k!=null && containsKey(k)) return (String) get(k);
+ }
+ if (flags.get("warnIfNone")!=null && !Boolean.FALSE.equals(flags.get("warnIfNone"))) {
+ if (Boolean.TRUE.equals(flags.get("warnIfNone")))
+ LOG.warn("Unable to find Brooklyn property "+keys);
+ else
+ LOG.warn(""+flags.get("warnIfNone"));
+ }
+ if (flags.get("failIfNone")!=null && !Boolean.FALSE.equals(flags.get("failIfNone"))) {
+ Object f = flags.get("failIfNone");
+ if (f instanceof Closure)
+ ((Closure)f).call((Object[])keys);
+ if (Boolean.TRUE.equals(f))
+ throw new NoSuchElementException("Brooklyn unable to find mandatory property "+keys[0]+
+ (keys.length>1 ? " (or "+(keys.length-1)+" other possible names, full list is "+Arrays.asList(keys)+")" : "") );
+ else
+ throw new NoSuchElementException(""+f);
+ }
+ if (flags.get("defaultIfNone")!=null) {
+ return (String) flags.get("defaultIfNone");
+ }
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ return "BrooklynProperties["+size()+"]";
+ }
+
+ /** like normal map.put, except config keys are dereferenced on the way in */
+ @SuppressWarnings("unchecked")
+ public Object put(Object key, Object value) {
+ if (key instanceof HasConfigKey) key = ((HasConfigKey)key).getConfigKey().getName();
+ if (key instanceof ConfigKey) key = ((ConfigKey)key).getName();
+ return super.put(key, value);
+ }
+
+ /** like normal map.putAll, except config keys are dereferenced on the way in */
+ @Override
+ public void putAll(Map vals) {
+ for (Map.Entry<?,?> entry : ((Map<?,?>)vals).entrySet()) {
+ put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> Object put(HasConfigKey<T> key, T value) {
+ return super.put(key.getConfigKey().getName(), value);
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> Object put(ConfigKey<T> key, T value) {
+ return super.put(key.getName(), value);
+ }
+
+ public <T> boolean putIfAbsent(ConfigKey<T> key, T value) {
+ return putIfAbsent(key.getName(), value);
+ }
+
+ @Override
+ public <T> T getConfig(ConfigKey<T> key) {
+ return getConfig(key, null);
+ }
+
+ @Override
+ public <T> T getConfig(HasConfigKey<T> key) {
+ return getConfig(key.getConfigKey(), null);
+ }
+
+ @Override
+ public <T> T getConfig(HasConfigKey<T> key, T defaultValue) {
+ return getConfig(key.getConfigKey(), defaultValue);
+ }
+
+ @Override
+ public <T> T getConfig(ConfigKey<T> key, T defaultValue) {
+ // TODO does not support MapConfigKey etc where entries use subkey notation; for now, access using submap
+ if (!containsKey(key.getName())) {
+ if (defaultValue!=null) return defaultValue;
+ return key.getDefaultValue();
+ }
+ Object value = get(key.getName());
+ if (value==null) return null;
+ // no evaluation / key extraction here
+ return TypeCoercions.coerce(value, key.getTypeToken());
+ }
+
+ @Override
+ public Object getRawConfig(ConfigKey<?> key) {
+ return get(key.getName());
+ }
+
+ @Override
+ public Maybe<Object> getConfigRaw(ConfigKey<?> key, boolean includeInherited) {
+ if (containsKey(key.getName())) return Maybe.of(get(key.getName()));
+ return Maybe.absent();
+ }
+
+ @Override
+ public Map<ConfigKey<?>, Object> getAllConfig() {
+ Map<ConfigKey<?>, Object> result = new LinkedHashMap<ConfigKey<?>, Object>();
+ for (Object entry: entrySet())
+ result.put(new BasicConfigKey<Object>(Object.class, ""+((Map.Entry)entry).getKey()), ((Map.Entry)entry).getValue());
+ return result;
+ }
+
+ @Override
+ public BrooklynProperties submap(Predicate<ConfigKey<?>> filter) {
+ BrooklynProperties result = Factory.newEmpty();
+ for (Object entry: entrySet()) {
+ ConfigKey<?> k = new BasicConfigKey<Object>(Object.class, ""+((Map.Entry)entry).getKey());
+ if (filter.apply(k))
+ result.put(((Map.Entry)entry).getKey(), ((Map.Entry)entry).getValue());
+ }
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Map<String, Object> asMapWithStringKeys() {
+ return this;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/config/BrooklynServerConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/BrooklynServerConfig.java b/core/src/main/java/org/apache/brooklyn/core/config/BrooklynServerConfig.java
new file mode 100644
index 0000000..24577d3
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/BrooklynServerConfig.java
@@ -0,0 +1,192 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.config;
+
+import static brooklyn.entity.basic.ConfigKeys.newStringConfigKey;
+
+import java.io.File;
+import java.net.URI;
+import java.util.Map;
+
+import org.apache.brooklyn.api.management.ManagementContext;
+import org.apache.brooklyn.camp.CampPlatform;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.config.StringConfigMap;
+import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
+import org.apache.brooklyn.util.guava.Maybe;
+import org.apache.brooklyn.util.os.Os;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.basic.ConfigKeys;
+
+/** Config keys for the brooklyn server */
+public class BrooklynServerConfig {
+
+ @SuppressWarnings("unused")
+ private static final Logger log = LoggerFactory.getLogger(BrooklynServerConfig.class);
+
+ /**
+ * Provided for setting; consumers should use {@link #getMgmtBaseDir(ManagementContext)}
+ */
+ public static final ConfigKey<String> MGMT_BASE_DIR = newStringConfigKey(
+ "brooklyn.base.dir", "Directory for reading and writing all brooklyn server data",
+ Os.fromHome(".brooklyn"));
+
+ @Deprecated /** @deprecated since 0.7.0 use BrooklynServerConfig routines */
+ // copied here so we don't have back-ref to BrooklynConfigKeys
+ public static final ConfigKey<String> BROOKLYN_DATA_DIR = newStringConfigKey(
+ "brooklyn.datadir", "Directory for writing all brooklyn data");
+
+ /**
+ * Provided for setting; consumers should query the management context persistence subsystem
+ * for the actual target, or use {@link BrooklynServerPaths#newMainPersistencePathResolver(ManagementContext)}
+ * if trying to resolve the value
+ */
+ public static final ConfigKey<String> PERSISTENCE_DIR = newStringConfigKey(
+ "brooklyn.persistence.dir",
+ "Directory or container name for writing persisted state");
+
+ public static final ConfigKey<String> PERSISTENCE_LOCATION_SPEC = newStringConfigKey(
+ "brooklyn.persistence.location.spec",
+ "Optional location spec string for an object store (e.g. jclouds:swift:URL) where persisted state should be kept; "
+ + "if blank or not supplied, the file system is used");
+
+ public static final ConfigKey<String> PERSISTENCE_BACKUPS_DIR = newStringConfigKey(
+ "brooklyn.persistence.backups.dir",
+ "Directory or container name for writing backups of persisted state; "
+ + "defaults to 'backups' inside the default persistence directory");
+
+ public static final ConfigKey<String> PERSISTENCE_BACKUPS_LOCATION_SPEC = newStringConfigKey(
+ "brooklyn.persistence.backups.location.spec",
+ "Location spec string for an object store (e.g. jclouds:swift:URL) where backups of persisted state should be kept; "
+ + "defaults to the local file system");
+
+ public static final ConfigKey<Boolean> PERSISTENCE_BACKUPS_REQUIRED_ON_PROMOTION =
+ ConfigKeys.newBooleanConfigKey("brooklyn.persistence.backups.required.promotion",
+ "Whether a backup should be made of the persisted state from the persistence location to the backup location on node promotion, "
+ + "before any writes from this node", true);
+
+ public static final ConfigKey<Boolean> PERSISTENCE_BACKUPS_REQUIRED_ON_DEMOTION =
+ ConfigKeys.newBooleanConfigKey("brooklyn.persistence.backups.required.promotion",
+ "Whether a backup of in-memory state should be made to the backup persistence location on node demotion, "
+ + "in case other nodes might write conflicting state", true);
+
+ /** @deprecated since 0.7.0, use {@link #PERSISTENCE_BACKUPS_ON_PROMOTION} and {@link #PERSISTENCE_BACKUPS_ON_DEMOTION},
+ * which allow using a different target location and are supported on more environments (and now default to true) */
+ @Deprecated
+ public static final ConfigKey<Boolean> PERSISTENCE_BACKUPS_REQUIRED =
+ ConfigKeys.newBooleanConfigKey("brooklyn.persistence.backups.required",
+ "Whether a backup should always be made of the persistence directory; "
+ + "if true, it will fail if this operation is not permitted (e.g. jclouds-based cloud object stores); "
+ + "if false, the persistence store will be overwritten with changes (but files not removed if they are unreadable); "
+ + "if null or not set, the legacy beahviour of creating backups where possible (e.g. file system) is currently used; "
+ + "this key is DEPRECATED in favor of promotion and demotion specific flags now defaulting to true");
+
+ public static final ConfigKey<String> BROOKLYN_CATALOG_URL = ConfigKeys.newStringConfigKey("brooklyn.catalog.url",
+ "The URL of a custom catalog.bom or catalog.xml descriptor to load");
+
+ /** @deprecated since 0.7.0 replaced by {@link CatalogInitialization}; also note, default removed
+ * (it was overridden anyway, and in almost all cases the new behaviour is still the default behaviour) */
+ @Deprecated
+ public static final ConfigKey<org.apache.brooklyn.core.catalog.CatalogLoadMode> CATALOG_LOAD_MODE = ConfigKeys.newConfigKey(org.apache.brooklyn.core.catalog.CatalogLoadMode.class,
+ "brooklyn.catalog.mode",
+ "The mode the management context should use to load the catalog when first starting");
+
+ /** string used in places where the management node ID is needed to resolve a path */
+ public static final String MANAGEMENT_NODE_ID_PROPERTY = "brooklyn.mgmt.node.id";
+
+ public static final ConfigKey<Boolean> USE_OSGI = ConfigKeys.newBooleanConfigKey("brooklyn.osgi.enabled",
+ "Whether OSGi is enabled, defaulting to true", true);
+ public static final ConfigKey<String> OSGI_CACHE_DIR = ConfigKeys.newStringConfigKey("brooklyn.osgi.cache.dir",
+ "Directory to use for OSGi cache, potentially including Freemarker template variables "
+ + "${"+MGMT_BASE_DIR.getName()+"} (which is the default for relative paths), "
+ + "${"+Os.TmpDirFinder.BROOKLYN_OS_TMPDIR_PROPERTY+"} if it should be in the tmp dir space, "
+ + "and ${"+MANAGEMENT_NODE_ID_PROPERTY+"} to include the management node ID (recommended if running multiple OSGi paths)",
+ "osgi/cache/${"+MANAGEMENT_NODE_ID_PROPERTY+"}/");
+ public static final ConfigKey<Boolean> OSGI_CACHE_CLEAN = ConfigKeys.newBooleanConfigKey("brooklyn.osgi.cache.clean",
+ "Whether to delete the OSGi directory before and after use; if unset, it will delete if the node ID forms part of the cache dir path (which by default it does) to avoid file leaks");
+
+ public static final ConfigKey<CampPlatform> CAMP_PLATFORM = ConfigKeys.newConfigKey(CampPlatform.class, "brooklyn.camp.platform",
+ "Config set at brooklyn management platform to find the CampPlatform instance (bi-directional)");
+
+ /** @see BrooklynServerPaths#getMgmtBaseDir(ManagementContext) */
+ public static String getMgmtBaseDir(ManagementContext mgmt) {
+ return BrooklynServerPaths.getMgmtBaseDir(mgmt);
+ }
+ /** @see BrooklynServerPaths#getMgmtBaseDir(ManagementContext) */
+ public static String getMgmtBaseDir(StringConfigMap brooklynProperties) {
+ return BrooklynServerPaths.getMgmtBaseDir(brooklynProperties);
+ }
+ /** @see BrooklynServerPaths#getMgmtBaseDir(ManagementContext) */
+ public static String getMgmtBaseDir(Map<String,?> brooklynProperties) {
+ return BrooklynServerPaths.getMgmtBaseDir(brooklynProperties);
+ }
+
+ /** @deprecated since 0.7.0 use {@link BrooklynServerPaths#newMainPersistencePathResolver(ManagementContext)} */
+ public static String getPersistenceDir(ManagementContext mgmt) {
+ return getPersistenceDir(mgmt.getConfig());
+ }
+ /** @deprecated since 0.7.0 use {@link BrooklynServerPaths#newMainPersistencePathResolver(ManagementContext)} */
+ public static String getPersistenceDir(StringConfigMap brooklynProperties) {
+ return resolvePersistencePath(null, brooklynProperties, null);
+ }
+
+ /**
+ * @param optionalSuppliedValue
+ * An optional value which has been supplied explicitly
+ * @param brooklynProperties
+ * The properties map where the persistence path should be looked up if not supplied,
+ * along with finding the brooklyn.base.dir if needed (using file system persistence
+ * with a relative path)
+ * @param optionalObjectStoreLocationSpec
+ * If a location spec is supplied, this will return a container name suitable for use
+ * with the given object store based on brooklyn.persistence.dir; if null this method
+ * will return a full file system path, relative to the brooklyn.base.dir if the
+ * configured brooklyn.persistence.dir is not absolute
+ * @return The container name or full path for where persist state should be kept
+ * @deprecated since 0.7.0 use {@link BrooklynServerPaths#newMainPersistencePathResolver(ManagementContext)} */
+ public static String resolvePersistencePath(String optionalSuppliedValue, StringConfigMap brooklynProperties, String optionalObjectStoreLocationSpec) {
+ return BrooklynServerPaths.newMainPersistencePathResolver(brooklynProperties).location(optionalObjectStoreLocationSpec).dir(optionalSuppliedValue).resolve();
+ }
+
+
+ /** @deprecated since 0.7.0 use {@link BrooklynServerPaths#getBrooklynWebTmpDir(ManagementContext)} */
+ public static File getBrooklynWebTmpDir(ManagementContext mgmt) {
+ return BrooklynServerPaths.getBrooklynWebTmpDir(mgmt);
+ }
+
+ /**
+ * @return the CAMP platform associated with a management context, if there is one.
+ */
+ public static Maybe<CampPlatform> getCampPlatform(ManagementContext mgmt) {
+ CampPlatform result = mgmt.getConfig().getConfig(BrooklynServerConfig.CAMP_PLATFORM);
+ if (result!=null) return Maybe.of(result);
+ return Maybe.absent("No CAMP Platform is registered with this Brooklyn management context.");
+ }
+
+ /**
+ * @return {@link ManagementContext#getManagementNodeUri()}, located in this utility class for convenience.
+ */
+ public static Maybe<URI> getBrooklynWebUri(ManagementContext mgmt) {
+ return mgmt.getManagementNodeUri();
+ }
+
+}