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:08 UTC
[59/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/org/apache/brooklyn/core/config/BrooklynServerPaths.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/BrooklynServerPaths.java b/core/src/main/java/org/apache/brooklyn/core/config/BrooklynServerPaths.java
new file mode 100644
index 0000000..87f7a86
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/BrooklynServerPaths.java
@@ -0,0 +1,281 @@
+/*
+ * 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 java.io.File;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+import org.apache.brooklyn.api.management.ManagementContext;
+import org.apache.brooklyn.config.StringConfigMap;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
+import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
+import org.apache.brooklyn.core.util.text.TemplateProcessor;
+import org.apache.brooklyn.util.collections.MutableMap;
+import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.apache.brooklyn.util.guava.Maybe;
+import org.apache.brooklyn.util.net.Urls;
+import org.apache.brooklyn.util.os.Os;
+import org.apache.brooklyn.util.text.Identifiers;
+import org.apache.brooklyn.util.text.Strings;
+import org.apache.brooklyn.util.time.Time;
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Objects;
+
+public class BrooklynServerPaths {
+
+ private static final Logger log = LoggerFactory.getLogger(BrooklynServerPaths.class);
+
+ /** Computes the base dir where brooklyn should read and write configuration.
+ * Defaults to <code>~/.brooklyn/</code>.
+ * <p>
+ * Also see other variants of this method if a {@link ManagementContext} is not yet available. */
+ public static String getMgmtBaseDir(ManagementContext mgmt) {
+ return getMgmtBaseDir(mgmt.getConfig());
+ }
+
+ /** @see BrooklynServerPaths#getMgmtBaseDir(ManagementContext) */
+ @SuppressWarnings("deprecation")
+ public static String getMgmtBaseDir(StringConfigMap brooklynProperties) {
+ String base = (String) brooklynProperties.getConfigRaw(BrooklynServerConfig.MGMT_BASE_DIR, true).orNull();
+ if (base==null) {
+ base = brooklynProperties.getConfig(BrooklynServerConfig.BROOKLYN_DATA_DIR);
+ if (base!=null)
+ log.warn("Using deprecated "+BrooklynServerConfig.BROOKLYN_DATA_DIR.getName()+": use "+BrooklynServerConfig.MGMT_BASE_DIR.getName()+" instead; value: "+base);
+ }
+ if (base==null) base = brooklynProperties.getConfig(BrooklynServerConfig.MGMT_BASE_DIR);
+ return Os.tidyPath(base)+File.separator;
+ }
+ /** @see BrooklynServerPaths#getMgmtBaseDir(ManagementContext) */
+ @SuppressWarnings("deprecation")
+ public static String getMgmtBaseDir(Map<String,?> brooklynProperties) {
+ String base = (String) brooklynProperties.get(BrooklynServerConfig.MGMT_BASE_DIR.getName());
+ if (base==null) base = (String) brooklynProperties.get(BrooklynServerConfig.BROOKLYN_DATA_DIR.getName());
+ if (base==null) base = BrooklynServerConfig.MGMT_BASE_DIR.getDefaultValue();
+ return Os.tidyPath(base)+File.separator;
+ }
+
+ protected static String resolveAgainstBaseDir(StringConfigMap brooklynProperties, String path) {
+ if (!Os.isAbsolutish(path)) path = Os.mergePaths(getMgmtBaseDir(brooklynProperties), path);
+ return Os.tidyPath(path);
+ }
+
+ // ---------- persistence
+
+ public static final String DEFAULT_PERSISTENCE_CONTAINER_NAME = "brooklyn-persisted-state";
+ /** on file system, the 'data' subdir is used so that there is an obvious place to put backup dirs */
+ public static final String DEFAULT_PERSISTENCE_DIR_FOR_FILESYSTEM = Os.mergePaths(DEFAULT_PERSISTENCE_CONTAINER_NAME, "data");
+
+ /** @see PersistencePathResolver */
+ public static PersistencePathResolver newMainPersistencePathResolver(StringConfigMap brooklynProperties) {
+ return new PersistencePathResolver(brooklynProperties);
+ }
+ /** @see PersistencePathResolver */
+ public static PersistencePathResolver newMainPersistencePathResolver(ManagementContext mgmt) {
+ return new PersistencePathResolver(mgmt.getConfig());
+ }
+
+ /** @see PersistenceBackupPathResolver */
+ public static PersistenceBackupPathResolver newBackupPersistencePathResolver(ManagementContext mgmt) {
+ return new PersistenceBackupPathResolver(mgmt.getConfig());
+ }
+
+ /**
+ * Utility for computing the path (dir or container name) to use for persistence.
+ * <p>
+ * Usage is to invoke {@link BrooklynServerPaths#newMainPersistencePathResolver(ManagementContext)}
+ * then to set {@link #location(String)} and {@link #dir(String)} as needed, and then to {@link #resolve()}.
+ */
+ public static class PersistencePathResolver {
+ protected final StringConfigMap brooklynProperties;
+ protected String locationSpec;
+ protected String dirOrContainer;
+ private PersistencePathResolver(StringConfigMap brooklynProperties) {
+ this.brooklynProperties = brooklynProperties;
+ }
+ /**
+ * Optional location spec. If supplied, the {@link #resolve()} will return a container name suitable for use
+ * with the store, based on the {@link #dir(String)};
+ * if not supplied, or blank, or localhost this will cause resolution to give a full file system path,
+ * if relative taken with respect to the {@link BrooklynServerPaths#getMgmtBaseDir(ManagementContext)}.
+ * Config is <b>not</b> looked up for resolving a location spec. */
+ public PersistencePathResolver location(@Nullable String locationSpec) {
+ this.locationSpec = locationSpec;
+ return this;
+ }
+ /**
+ * Optional directory (for localhost/filesystem) or container name.
+ * If null or not supplied, config <b>is</b> looked up (because a value is always needed),
+ * followed by defaults for {@link BrooklynServerPaths#DEFAULT_PERSISTENCE_DIR_FOR_FILESYSTEM} and
+ * {@link BrooklynServerPaths#DEFAULT_PERSISTENCE_CONTAINER_NAME} are used. */
+ public PersistencePathResolver dir(@Nullable String dirOrContainer) {
+ this.dirOrContainer = dirOrContainer;
+ return this;
+ }
+
+ public String resolve() {
+ String path = dirOrContainer;
+ if (path==null) path = getDefaultPathFromConfig();
+ if (Strings.isBlank(locationSpec) || "localhost".equals(locationSpec)) {
+ // file system
+ if (Strings.isBlank(path)) path=getDefaultDirForAnyFilesystem();
+ return resolveAgainstBaseDir(brooklynProperties, path);
+ } else {
+ // obj store
+ if (path==null) path=getDefaultContainerForAnyNonFilesystem();
+ return path;
+ }
+ }
+
+ protected String getDefaultPathFromConfig() {
+ return brooklynProperties.getConfig(BrooklynServerConfig.PERSISTENCE_DIR);
+ }
+ protected String getDefaultDirForAnyFilesystem() {
+ return DEFAULT_PERSISTENCE_DIR_FOR_FILESYSTEM;
+ }
+ protected String getDefaultContainerForAnyNonFilesystem() {
+ return DEFAULT_PERSISTENCE_CONTAINER_NAME;
+ }
+ }
+
+ /**
+ * Similar to {@link PersistencePathResolver}, but designed for use for backup subpaths.
+ * If the container is not explicitly specified, "backups" is appended to the defaults from {@link PersistencePathResolver}.
+ * <p>
+ * It also includes conveniences for resolving further subpaths, cf {@link PersistenceBackupPathResolver#resolveWithSubpathFor(ManagementContextInternal, String)}.
+ */
+ public static class PersistenceBackupPathResolver extends PersistencePathResolver {
+ private String nonBackupLocationSpec;
+ private PersistenceBackupPathResolver(StringConfigMap brooklynProperties) {
+ super(brooklynProperties);
+ }
+ public PersistenceBackupPathResolver nonBackupLocation(@Nullable String locationSpec) {
+ this.nonBackupLocationSpec = locationSpec;
+ return this;
+ }
+ @Override
+ public PersistenceBackupPathResolver dir(String dirOrContainer) {
+ super.dir(dirOrContainer);
+ return this;
+ }
+ @Override
+ public PersistenceBackupPathResolver location(String backupLocationSpec) {
+ super.location(backupLocationSpec);
+ return this;
+ }
+ protected boolean isBackupSameLocation() {
+ return Objects.equal(locationSpec, nonBackupLocationSpec);
+ }
+ /** Appends a sub-path to the path returned by {@link #resolve()} */
+ public String resolveWithSubpath(String subpath) {
+ return Urls.mergePaths(super.resolve(), subpath);
+ }
+ /** Appends a standard format subpath sub-path to the path returned by {@link #resolve()}.
+ * <p>
+ * For example, this might write to:
+ * <code>~/.brooklyn/brooklyn-persisted-state/backups/2014-11-13-1201-n0deId-promotion-sA1t */
+ public String resolveWithSubpathFor(ManagementContext managementContext, String label) {
+ return resolveWithSubpath(Time.makeDateSimpleStampString()+"-"+managementContext.getManagementNodeId()+"-"+label+"-"+Identifiers.makeRandomId(4));
+ }
+ @Override
+ protected String getDefaultPathFromConfig() {
+ Maybe<Object> result = brooklynProperties.getConfigRaw(BrooklynServerConfig.PERSISTENCE_BACKUPS_DIR, true);
+ if (result.isPresent()) return Strings.toString(result.get());
+ if (isBackupSameLocation()) {
+ return backupContainerFor(brooklynProperties.getConfig(BrooklynServerConfig.PERSISTENCE_DIR));
+ }
+ return null;
+ }
+ protected String backupContainerFor(String nonBackupContainer) {
+ if (nonBackupContainer==null) return null;
+ return Urls.mergePaths(nonBackupContainer, "backups");
+ }
+ @Override
+ protected String getDefaultDirForAnyFilesystem() {
+ return backupContainerFor(DEFAULT_PERSISTENCE_CONTAINER_NAME);
+ }
+ @Override
+ protected String getDefaultContainerForAnyNonFilesystem() {
+ return backupContainerFor(super.getDefaultContainerForAnyNonFilesystem());
+ }
+ }
+
+ // ------ web
+
+ public static File getBrooklynWebTmpDir(ManagementContext mgmt) {
+ String brooklynMgmtBaseDir = getMgmtBaseDir(mgmt);
+ File webappTempDir = new File(Os.mergePaths(brooklynMgmtBaseDir, "planes", mgmt.getManagementPlaneId(), mgmt.getManagementNodeId(), "jetty"));
+ try {
+ FileUtils.forceMkdir(webappTempDir);
+ Os.deleteOnExitRecursivelyAndEmptyParentsUpTo(webappTempDir, new File(brooklynMgmtBaseDir));
+ return webappTempDir;
+ } catch (Exception e) {
+ Exceptions.propagateIfFatal(e);
+ IllegalStateException e2 = new IllegalStateException("Cannot create working directory "+webappTempDir+" for embedded jetty server: "+e, e);
+ log.warn(e2.getMessage()+" (rethrowing)");
+ throw e2;
+ }
+ }
+
+ public static File getOsgiCacheDir(ManagementContext mgmt) {
+ StringConfigMap brooklynProperties = mgmt.getConfig();
+ String cacheDir = brooklynProperties.getConfig(BrooklynServerConfig.OSGI_CACHE_DIR);
+
+ // note dir should be different for each instance if starting multiple instances
+ // hence default including management node ID
+
+ cacheDir = TemplateProcessor.processTemplateContents(cacheDir, (ManagementContextInternal)mgmt,
+ MutableMap.of(BrooklynServerConfig.MGMT_BASE_DIR.getName(), getMgmtBaseDir(mgmt),
+ BrooklynServerConfig.MANAGEMENT_NODE_ID_PROPERTY, mgmt.getManagementNodeId(),
+ Os.TmpDirFinder.BROOKLYN_OS_TMPDIR_PROPERTY, Os.tmp()));
+ cacheDir = resolveAgainstBaseDir(mgmt.getConfig(), cacheDir);
+
+ return new File(cacheDir);
+ }
+
+ public static boolean isOsgiCacheForCleaning(ManagementContext mgmt, File cacheDir) {
+ StringConfigMap brooklynProperties = mgmt.getConfig();
+ Boolean clean = brooklynProperties.getConfig(BrooklynServerConfig.OSGI_CACHE_CLEAN);
+ if (clean==null) {
+ // as per javadoc on key, clean defaults to iff it is a node-id-specific directory
+ clean = cacheDir.getName().contains(mgmt.getManagementNodeId());
+ }
+ return clean;
+ }
+
+ public static File getOsgiCacheDirCleanedIfNeeded(ManagementContext mgmt) {
+ File cacheDirF = getOsgiCacheDir(mgmt);
+ boolean clean = isOsgiCacheForCleaning(mgmt, cacheDirF);
+ log.debug("OSGi cache dir computed as "+cacheDirF.getName()+" ("+
+ (cacheDirF.exists() ? "already exists" : "does not exist")+", "+
+ (clean ? "cleaning now (and on exit)" : "cleaning not requested"));
+
+ if (clean) {
+ Os.deleteRecursively(cacheDirF);
+ Os.deleteOnExitRecursively(cacheDirF);
+ }
+
+ return cacheDirF;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/config/BrooklynServiceAttributes.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/BrooklynServiceAttributes.java b/core/src/main/java/org/apache/brooklyn/core/config/BrooklynServiceAttributes.java
new file mode 100644
index 0000000..9920efc
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/BrooklynServiceAttributes.java
@@ -0,0 +1,66 @@
+/*
+ * 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.management.ManagementContext;
+import org.apache.brooklyn.util.internal.StringSystemProperty;
+
+/** attributes which callers can set and a service application
+ * (such as servlet or osgi) will pay attention to,
+ * contained in one place for convenience
+ *
+ * @author alex
+ */
+public class BrooklynServiceAttributes {
+
+ /*
+ * These fields are contained here so that they are visible both to web console
+ * and to launcher, without needing a separate web-console-support project,
+ * or battling maven etc to build web-console as jar available to launcher
+ * (which would contain a lot of crap as well).
+ */
+
+ /** used to hold the instance of ManagementContext which should be used */
+ public static final String BROOKLYN_MANAGEMENT_CONTEXT = ManagementContext.class.getName();
+
+ /** poor-man's security, to specify a user to be automatically logged in
+ * (e.g. to bypass security, during dev/test); 'admin' is usually a sensible choice.
+ * if not specified (the default) username+password is required.
+ * @deprecated since 0.6.0; not used; you can now configure security properly instead!
+ * (though this may be useful again when we have users and permissions,
+ * to indicate the user who should be logged in by default...) */ @Deprecated
+ public static final String BROOKLYN_AUTOLOGIN_USERNAME = "brooklyn.autologin.username";
+
+ /** poor-man's security, to specify a default password for access
+ * @deprecated since 0.6.0; not used; you can now configure security properly instead! */ @Deprecated
+ public static final String BROOKLYN_DEFAULT_PASSWORD = "brooklyn.default.password";
+
+ // TODO use ConfigKey (or possibly BrooklynSystemProperties ?)
+
+ /** in some cases localhost does not resolve correctly
+ * (e.g. to an interface which is defined locally but not in operation,
+ * or where multiple NICs are available and java's InetAddress.getLocalHost() strategy is not doing what is desired);
+ * use this to supply a specific address (e.g. "127.0.0.1" or a specific IP on a specific NIC or FW)
+ */
+ public static StringSystemProperty LOCALHOST_IP_ADDRESS = new StringSystemProperty("brooklyn.location.localhost.address");
+
+ /** Jackson ObjectMapper shared among REST resources */
+ public static final String BROOKLYN_REST_OBJECT_MAPPER = "brooklyn.rest.objectMapper";
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/config/ConfigPredicates.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/ConfigPredicates.java b/core/src/main/java/org/apache/brooklyn/core/config/ConfigPredicates.java
new file mode 100644
index 0000000..de6f3c8
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/ConfigPredicates.java
@@ -0,0 +1,69 @@
+/*
+ * 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 java.util.regex.Pattern;
+
+import javax.annotation.Nullable;
+
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.util.text.WildcardGlobs;
+
+import com.google.common.base.Predicate;
+
+public class ConfigPredicates {
+
+ public static Predicate<ConfigKey<?>> startingWith(final String prefix) {
+ return new Predicate<ConfigKey<?>>() {
+ @Override
+ public boolean apply(@Nullable ConfigKey<?> input) {
+ return (input != null) && input.getName().startsWith(prefix);
+ }
+ };
+ }
+
+ public static Predicate<ConfigKey<?>> matchingGlob(final String glob) {
+ return new Predicate<ConfigKey<?>>() {
+ @Override
+ public boolean apply(@Nullable ConfigKey<?> input) {
+ return (input != null) && WildcardGlobs.isGlobMatched(glob, input.getName());
+ }
+ };
+ }
+
+ public static Predicate<ConfigKey<?>> matchingRegex(final String regex) {
+ final Pattern p = Pattern.compile(regex);
+ return new Predicate<ConfigKey<?>>() {
+ @Override
+ public boolean apply(@Nullable ConfigKey<?> input) {
+ return (input != null) && p.matcher(input.getName()).matches();
+ }
+ };
+ }
+
+ public static Predicate<ConfigKey<?>> nameMatching(final Predicate<String> filter) {
+ return new Predicate<ConfigKey<?>>() {
+ @Override
+ public boolean apply(@Nullable ConfigKey<?> input) {
+ return (input != null) && filter.apply(input.getName());
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/config/ConfigUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/ConfigUtils.java b/core/src/main/java/org/apache/brooklyn/core/config/ConfigUtils.java
new file mode 100644
index 0000000..8b68155
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/ConfigUtils.java
@@ -0,0 +1,132 @@
+/*
+ * 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 java.io.File;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.brooklyn.api.entity.Entity;
+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.config.ConfigUtils;
+import org.apache.brooklyn.core.config.WrappedConfigKey;
+import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.basic.ConfigKeys;
+import brooklyn.event.basic.BasicConfigKey;
+
+import com.google.common.base.Predicate;
+
+@SuppressWarnings({"unchecked"})
+public class ConfigUtils {
+
+ private static final Logger log = LoggerFactory.getLogger(ConfigUtils.class);
+
+ public static <T> T getRequiredConfig(Entity entity, ConfigKey<T> key) {
+ T result = entity.getConfig(key);
+ if (result==null) throw new IllegalStateException("Configuration "+key+" is required");
+ return result;
+ }
+
+ /** prepends the given prefix to the key. prefix will typically end with a ".".
+ * this is useful for configuration purposes when a subsystem uses a short-name config (e.g. "user")
+ * but in entity config or at the root (brooklyn.properties) there are longer names (e.g. "brooklyn.ssh.config.user"),
+ * and we wish to convert from the shorter names to the longer names. */
+ public static <T> ConfigKey<T> prefixedKey(String prefix, ConfigKey<T> key) {
+ return ConfigKeys.newConfigKeyWithPrefix(prefix, key);
+ }
+
+ /** removes the given prefix from the key for configuration purposes; logs warning and does nothing if there is no such prefix.
+ * prefix will typically end with a ".".
+ * this is useful for configuration purposes when a subsystem uses a short-name config (e.g. "user")
+ * but in entity config or at the root (brooklyn.properties) there are longer names (e.g. "brooklyn.ssh.config.user"),
+ * and we wish to convert from the longer names to the short-name. */
+ public static <T> ConfigKey<T> unprefixedKey(String prefix, ConfigKey<T> key) {
+ String newName = key.getName();
+ if (newName.startsWith(prefix)) newName = newName.substring(prefix.length());
+ else log.warn("Cannot remove prefix "+prefix+" from key "+key+" (ignoring)");
+ return new BasicConfigKey<T>(key.getTypeToken(), newName, key.getDescription(), key.getDefaultValue());
+ }
+
+
+ public static BrooklynProperties loadFromFile(String file) {
+ BrooklynProperties result = BrooklynProperties.Factory.newEmpty();
+ if (file!=null) result.addFrom(new File(file));
+ return result;
+ }
+
+ public static BrooklynProperties filterFor(BrooklynProperties properties, Predicate<? super String> filter) {
+ BrooklynProperties result = BrooklynProperties.Factory.newEmpty();
+ for (String k: (Collection<String>)properties.keySet()) {
+ if (filter.apply(k)) {
+ result.put(k, properties.get(k));
+ }
+ }
+ return result;
+ }
+
+ public static BrooklynProperties filterForPrefix(BrooklynProperties properties, String prefix) {
+ BrooklynProperties result = BrooklynProperties.Factory.newEmpty();
+ for (String k: (Collection<String>)properties.keySet()) {
+ if (k.startsWith(prefix)) {
+ result.put(k, properties.get(k));
+ }
+ }
+ return result;
+ }
+
+ /** prefix generally ends with a full stop */
+ public static BrooklynProperties filterForPrefixAndStrip(Map<String,?> properties, String prefix) {
+ BrooklynProperties result = BrooklynProperties.Factory.newEmpty();
+ for (String k: properties.keySet()) {
+ if (k.startsWith(prefix)) {
+ result.put(k.substring(prefix.length()), properties.get(k));
+ }
+ }
+ return result;
+ }
+
+ @SuppressWarnings("rawtypes")
+ public static Set<HasConfigKey<?>> getStaticKeysOnClass(Class<?> type) {
+ Set<HasConfigKey<?>> result = new LinkedHashSet<ConfigKey.HasConfigKey<?>>();
+ for (Field f: type.getFields()) {
+ try {
+ if ((f.getModifiers() & Modifier.STATIC)==0)
+ continue;
+ if (ConfigKey.class.isAssignableFrom(f.getType()))
+ result.add(new WrappedConfigKey((ConfigKey<?>) f.get(null)));
+ else if (HasConfigKey.class.isAssignableFrom(f.getType()))
+ result.add((HasConfigKey<?>) f.get(null));
+ } catch (Exception e) {
+ log.error("Error retrieving config key for field "+f+" on class "+type+"; rethrowing", e);
+ throw Exceptions.propagate(e);
+ }
+ }
+ return Collections.unmodifiableSet(result);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/config/WrappedConfigKey.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/WrappedConfigKey.java b/core/src/main/java/org/apache/brooklyn/core/config/WrappedConfigKey.java
new file mode 100644
index 0000000..0f09ccd
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/WrappedConfigKey.java
@@ -0,0 +1,44 @@
+/*
+ * 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.config.ConfigKey;
+import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
+
+import com.google.common.base.Preconditions;
+
+public class WrappedConfigKey<T> implements HasConfigKey<T> {
+
+ private final ConfigKey<T> key;
+
+ public WrappedConfigKey(ConfigKey<T> key) {
+ this.key = Preconditions.checkNotNull(key);
+ }
+
+ @Override
+ public ConfigKey<T> getConfigKey() {
+ return key;
+ }
+
+ @Override
+ public String toString() {
+ return key.toString()+"(wrapped)";
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/config/internal/AbstractConfigMapImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/internal/AbstractConfigMapImpl.java b/core/src/main/java/org/apache/brooklyn/core/config/internal/AbstractConfigMapImpl.java
new file mode 100644
index 0000000..45da5df
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/internal/AbstractConfigMapImpl.java
@@ -0,0 +1,111 @@
+/*
+ * 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.internal;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.Future;
+
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.config.ConfigMap;
+import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
+import org.apache.brooklyn.core.util.flags.TypeCoercions;
+import org.apache.brooklyn.core.util.task.DeferredSupplier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.entity.basic.ConfigMapViewWithStringKeys;
+import brooklyn.event.basic.StructuredConfigKey;
+
+public abstract class AbstractConfigMapImpl implements ConfigMap {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AbstractConfigMapImpl.class);
+
+ protected final ConfigMapViewWithStringKeys mapViewWithStringKeys = new ConfigMapViewWithStringKeys(this);
+
+ /**
+ * Map of configuration information that is defined at start-up time for the entity. These
+ * configuration parameters are shared and made accessible to the "children" of this
+ * entity.
+ */
+ protected Map<ConfigKey<?>,Object> ownConfig = Collections.synchronizedMap(new LinkedHashMap<ConfigKey<?>, Object>());
+
+ public <T> T getConfig(ConfigKey<T> key) {
+ return getConfig(key, null);
+ }
+
+ public <T> T getConfig(HasConfigKey<T> key) {
+ return getConfig(key.getConfigKey(), null);
+ }
+
+ public <T> T getConfig(HasConfigKey<T> key, T defaultValue) {
+ return getConfig(key.getConfigKey(), defaultValue);
+ }
+
+ @Override @Deprecated
+ public Object getRawConfig(ConfigKey<?> key) {
+ return getConfigRaw(key, true).orNull();
+ }
+
+ protected Object coerceConfigVal(ConfigKey<?> key, Object v) {
+ Object val;
+ if ((v instanceof Future) || (v instanceof DeferredSupplier)) {
+ // no coercion for these (coerce on exit)
+ val = v;
+ } else if (key instanceof StructuredConfigKey) {
+ // no coercion for these structures (they decide what to do)
+ val = v;
+ } else if ((v instanceof Map || v instanceof Iterable) && key.getType().isInstance(v)) {
+ // don't do coercion on put for these, if the key type is compatible,
+ // because that will force resolution deeply
+ val = v;
+ } else {
+ try {
+ // try to coerce on input, to detect errors sooner
+ val = TypeCoercions.coerce(v, key.getTypeToken());
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Cannot coerce or set "+v+" to "+key, e);
+ // if can't coerce, we could just log as below and *throw* the error when we retrieve the config
+ // but for now, fail fast (above), because we haven't encountered strong use cases
+ // where we want to do coercion on retrieval, except for the exceptions above
+// Exceptions.propagateIfFatal(e);
+// LOG.warn("Cannot coerce or set "+v+" to "+key+" (ignoring): "+e, e);
+// val = v;
+ }
+ }
+ return val;
+ }
+
+
+ @Override
+ public Map<String,Object> asMapWithStringKeys() {
+ return mapViewWithStringKeys;
+ }
+
+ @Override
+ public int size() {
+ return ownConfig.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return ownConfig.isEmpty();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/config/render/RendererHints.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/config/render/RendererHints.java b/core/src/main/java/org/apache/brooklyn/core/config/render/RendererHints.java
new file mode 100644
index 0000000..fd5ba83
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/config/render/RendererHints.java
@@ -0,0 +1,284 @@
+/*
+ * 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.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.core.config.render.RendererHints;
+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/org/apache/brooklyn/core/internal/BrooklynFeatureEnablement.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablement.java b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablement.java
index 047e3a8..a4813dd 100644
--- a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablement.java
+++ b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablement.java
@@ -21,13 +21,12 @@ package org.apache.brooklyn.core.internal;
import java.util.Map;
import org.apache.brooklyn.api.management.ha.HighAvailabilityMode;
+import org.apache.brooklyn.core.config.BrooklynProperties;
import org.apache.brooklyn.core.internal.storage.BrooklynStorage;
import org.apache.brooklyn.core.util.internal.ssh.ShellTool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynProperties;
-
import com.google.common.annotations.Beta;
import com.google.common.collect.Maps;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/management/entitlement/Entitlements.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/entitlement/Entitlements.java b/core/src/main/java/org/apache/brooklyn/core/management/entitlement/Entitlements.java
index 24a9f5e..9fe0d4e 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/entitlement/Entitlements.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/entitlement/Entitlements.java
@@ -30,6 +30,7 @@ import org.apache.brooklyn.api.management.entitlement.EntitlementClass;
import org.apache.brooklyn.api.management.entitlement.EntitlementContext;
import org.apache.brooklyn.api.management.entitlement.EntitlementManager;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.BrooklynProperties;
import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
import org.apache.brooklyn.core.util.task.Tasks;
import org.apache.brooklyn.util.exceptions.Exceptions;
@@ -47,7 +48,6 @@ import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
import com.google.common.reflect.TypeToken;
-import brooklyn.config.BrooklynProperties;
import brooklyn.entity.basic.BrooklynTaskTags;
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/org/apache/brooklyn/core/management/entitlement/PerUserEntitlementManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/entitlement/PerUserEntitlementManager.java b/core/src/main/java/org/apache/brooklyn/core/management/entitlement/PerUserEntitlementManager.java
index 923479b..be8b734 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/entitlement/PerUserEntitlementManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/entitlement/PerUserEntitlementManager.java
@@ -24,13 +24,13 @@ import org.apache.brooklyn.api.management.entitlement.EntitlementClass;
import org.apache.brooklyn.api.management.entitlement.EntitlementContext;
import org.apache.brooklyn.api.management.entitlement.EntitlementManager;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.BrooklynProperties;
+import org.apache.brooklyn.core.config.ConfigPredicates;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynProperties;
-import brooklyn.config.ConfigPredicates;
import brooklyn.entity.basic.ConfigKeys;
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/management/ha/HighAvailabilityManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerImpl.java b/core/src/main/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerImpl.java
index 1a3a21c..f29225f 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerImpl.java
@@ -45,6 +45,7 @@ import org.apache.brooklyn.api.management.ha.ManagementPlaneSyncRecordPersister.
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.catalog.internal.CatalogDto;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
import org.apache.brooklyn.core.management.ha.BasicMasterChooser.AlphabeticMasterChooser;
import org.apache.brooklyn.core.management.internal.BrooklynObjectManagementMode;
@@ -65,7 +66,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import brooklyn.BrooklynVersion;
-import brooklyn.config.BrooklynServerConfig;
import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.basic.EntityInternal;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/management/ha/OsgiManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/ha/OsgiManager.java b/core/src/main/java/org/apache/brooklyn/core/management/ha/OsgiManager.java
index 4d52960..080246e 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/ha/OsgiManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/ha/OsgiManager.java
@@ -40,6 +40,8 @@ import brooklyn.BrooklynVersion;
import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
import org.apache.brooklyn.api.management.ManagementContext;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
+import org.apache.brooklyn.core.config.BrooklynServerPaths;
import org.apache.brooklyn.core.util.osgi.Osgis;
import org.apache.brooklyn.core.util.osgi.Osgis.BundleFinder;
import org.apache.brooklyn.util.collections.MutableMap;
@@ -52,9 +54,6 @@ import org.apache.brooklyn.util.repeat.Repeater;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Duration;
-import brooklyn.config.BrooklynServerConfig;
-import brooklyn.config.BrooklynServerPaths;
-
import com.google.common.base.Throwables;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/management/internal/AbstractManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/AbstractManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/AbstractManagementContext.java
index 7765b9a..ae158fa 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/internal/AbstractManagementContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/AbstractManagementContext.java
@@ -54,6 +54,7 @@ import org.apache.brooklyn.config.StringConfigMap;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+import org.apache.brooklyn.core.config.BrooklynProperties;
import org.apache.brooklyn.core.internal.storage.BrooklynStorage;
import org.apache.brooklyn.core.internal.storage.DataGrid;
import org.apache.brooklyn.core.internal.storage.DataGridFactory;
@@ -67,7 +68,6 @@ import org.apache.brooklyn.core.util.config.ConfigBag;
import org.apache.brooklyn.core.util.task.BasicExecutionContext;
import org.apache.brooklyn.core.util.task.Tasks;
-import brooklyn.config.BrooklynProperties;
import brooklyn.entity.basic.AbstractEntity;
import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.basic.EntityInternal;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/management/internal/BrooklynGarbageCollector.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/BrooklynGarbageCollector.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/BrooklynGarbageCollector.java
index a336845..4525278 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/internal/BrooklynGarbageCollector.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/BrooklynGarbageCollector.java
@@ -40,6 +40,7 @@ import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.management.HasTaskChildren;
import org.apache.brooklyn.api.management.Task;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.BrooklynProperties;
import org.apache.brooklyn.core.internal.storage.BrooklynStorage;
import org.apache.brooklyn.core.util.task.BasicExecutionManager;
import org.apache.brooklyn.core.util.task.ExecutionListener;
@@ -54,7 +55,6 @@ import org.apache.brooklyn.util.time.Duration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynProperties;
import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.basic.BrooklynTaskTags.WrappedEntity;
import brooklyn.entity.basic.BrooklynTaskTags.WrappedStream;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/management/internal/EntityManagementUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/EntityManagementUtils.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/EntityManagementUtils.java
index d75fa19..b07bbac 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/internal/EntityManagementUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/EntityManagementUtils.java
@@ -37,6 +37,7 @@ import org.apache.brooklyn.camp.spi.Assembly;
import org.apache.brooklyn.camp.spi.AssemblyTemplate;
import org.apache.brooklyn.camp.spi.instantiate.AssemblyTemplateInstantiator;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
import org.apache.brooklyn.core.management.classloading.JavaBrooklynClassLoadingContext;
import org.apache.brooklyn.core.util.task.TaskBuilder;
import org.apache.brooklyn.core.util.task.Tasks;
@@ -50,7 +51,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import brooklyn.camp.brooklyn.api.AssemblyTemplateSpecInstantiator;
-import brooklyn.config.BrooklynServerConfig;
import brooklyn.entity.basic.BrooklynTaskTags;
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/org/apache/brooklyn/core/management/internal/LocalEntityManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalEntityManager.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalEntityManager.java
index 772d513..4da8c66 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalEntityManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalEntityManager.java
@@ -43,6 +43,7 @@ import org.apache.brooklyn.api.policy.Enricher;
import org.apache.brooklyn.api.policy.EnricherSpec;
import org.apache.brooklyn.api.policy.Policy;
import org.apache.brooklyn.api.policy.PolicySpec;
+import org.apache.brooklyn.core.config.BrooklynLogging;
import org.apache.brooklyn.core.internal.storage.BrooklynStorage;
import org.apache.brooklyn.core.util.task.Tasks;
import org.apache.brooklyn.util.collections.MutableSet;
@@ -53,7 +54,6 @@ import org.apache.brooklyn.util.time.Duration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynLogging;
import brooklyn.entity.basic.AbstractEntity;
import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.basic.Entities;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalLocationManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalLocationManager.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalLocationManager.java
index 5f13331..fff12ac 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalLocationManager.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalLocationManager.java
@@ -30,6 +30,8 @@ import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.location.ProvisioningLocation;
import org.apache.brooklyn.api.management.AccessController;
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.internal.storage.BrooklynStorage;
import org.apache.brooklyn.core.management.entitlement.Entitlements;
import org.apache.brooklyn.core.util.config.ConfigBag;
@@ -37,8 +39,6 @@ import org.apache.brooklyn.core.util.task.Tasks;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynLogging;
-import brooklyn.config.BrooklynLogging.LoggingLevel;
import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.basic.Lifecycle;
import brooklyn.entity.proxying.InternalLocationFactory;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalManagementContext.java
index 02f33a7..28f55bd 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalManagementContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalManagementContext.java
@@ -42,6 +42,8 @@ import org.apache.brooklyn.api.management.ManagementContext;
import org.apache.brooklyn.api.management.SubscriptionManager;
import org.apache.brooklyn.api.management.Task;
import org.apache.brooklyn.api.management.TaskAdaptable;
+import org.apache.brooklyn.core.config.BrooklynProperties;
+import org.apache.brooklyn.core.config.BrooklynProperties.Factory.Builder;
import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
import org.apache.brooklyn.core.internal.storage.DataGridFactory;
import org.apache.brooklyn.core.management.entitlement.Entitlements;
@@ -57,8 +59,6 @@ import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynProperties;
-import brooklyn.config.BrooklynProperties.Factory.Builder;
import brooklyn.entity.drivers.downloads.BasicDownloadsManager;
import brooklyn.entity.effector.Effectors;
import brooklyn.entity.proxying.InternalEntityFactory;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/management/internal/ManagementContextInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/ManagementContextInternal.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/ManagementContextInternal.java
index 4aad93a..9ca737c 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/internal/ManagementContextInternal.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/ManagementContextInternal.java
@@ -30,12 +30,12 @@ import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.management.ManagementContext;
import org.apache.brooklyn.api.management.Task;
import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
+import org.apache.brooklyn.core.config.BrooklynProperties;
import org.apache.brooklyn.core.internal.storage.BrooklynStorage;
import org.apache.brooklyn.core.management.ha.OsgiManager;
import org.apache.brooklyn.core.util.task.TaskTags;
import org.apache.brooklyn.util.guava.Maybe;
-import brooklyn.config.BrooklynProperties;
import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.proxying.InternalEntityFactory;
import brooklyn.entity.proxying.InternalLocationFactory;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/management/internal/NonDeploymentManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/NonDeploymentManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/NonDeploymentManagementContext.java
index 2a66a35..eacd5c6 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/internal/NonDeploymentManagementContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/NonDeploymentManagementContext.java
@@ -61,13 +61,13 @@ import org.apache.brooklyn.api.mementos.BrooklynMementoPersister;
import org.apache.brooklyn.api.mementos.BrooklynMementoRawData;
import org.apache.brooklyn.config.StringConfigMap;
import org.apache.brooklyn.core.catalog.internal.CatalogInitialization;
+import org.apache.brooklyn.core.config.BrooklynProperties;
import org.apache.brooklyn.core.internal.storage.BrooklynStorage;
import org.apache.brooklyn.core.management.entitlement.Entitlements;
import org.apache.brooklyn.core.management.ha.OsgiManager;
import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.time.Duration;
-import brooklyn.config.BrooklynProperties;
import brooklyn.entity.basic.AbstractEntity;
import brooklyn.entity.proxying.InternalEntityFactory;
import brooklyn.entity.proxying.InternalLocationFactory;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/policy/basic/ConfigMapImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/policy/basic/ConfigMapImpl.java b/core/src/main/java/org/apache/brooklyn/core/policy/basic/ConfigMapImpl.java
index 9422638..591c204 100644
--- a/core/src/main/java/org/apache/brooklyn/core/policy/basic/ConfigMapImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/policy/basic/ConfigMapImpl.java
@@ -26,6 +26,7 @@ import java.util.Map;
import org.apache.brooklyn.api.entity.basic.EntityLocal;
import org.apache.brooklyn.api.management.ExecutionContext;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.internal.AbstractConfigMapImpl;
import org.apache.brooklyn.core.util.flags.TypeCoercions;
import org.apache.brooklyn.core.util.internal.ConfigKeySelfExtracting;
import org.apache.brooklyn.util.guava.Maybe;
@@ -36,7 +37,6 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.collect.Maps;
-import brooklyn.config.internal.AbstractConfigMapImpl;
import brooklyn.entity.basic.ConfigKeys;
import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.basic.Sanitizer;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/util/BrooklynNetworkUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/util/BrooklynNetworkUtils.java b/core/src/main/java/org/apache/brooklyn/core/util/BrooklynNetworkUtils.java
index 654aeb2..5b1bd68 100644
--- a/core/src/main/java/org/apache/brooklyn/core/util/BrooklynNetworkUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/util/BrooklynNetworkUtils.java
@@ -20,8 +20,7 @@ package org.apache.brooklyn.core.util;
import java.net.InetAddress;
-import brooklyn.config.BrooklynServiceAttributes;
-
+import org.apache.brooklyn.core.config.BrooklynServiceAttributes;
import org.apache.brooklyn.core.util.flags.TypeCoercions;
import org.apache.brooklyn.location.geo.LocalhostExternalIpLoader;
import org.apache.brooklyn.util.JavaGroovyEquivalents;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/core/util/task/ssh/SshTasks.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/util/task/ssh/SshTasks.java b/core/src/main/java/org/apache/brooklyn/core/util/task/ssh/SshTasks.java
index 04d6cf3..0a8827b 100644
--- a/core/src/main/java/org/apache/brooklyn/core/util/task/ssh/SshTasks.java
+++ b/core/src/main/java/org/apache/brooklyn/core/util/task/ssh/SshTasks.java
@@ -30,6 +30,7 @@ import org.apache.brooklyn.api.management.TaskAdaptable;
import org.apache.brooklyn.api.management.TaskFactory;
import org.apache.brooklyn.api.management.TaskQueueingContext;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigUtils;
import org.apache.brooklyn.core.util.ResourceUtils;
import org.apache.brooklyn.core.util.config.ConfigBag;
import org.apache.brooklyn.core.util.internal.ssh.SshTool;
@@ -41,7 +42,6 @@ import org.apache.brooklyn.core.util.task.system.ProcessTaskWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.ConfigUtils;
import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.basic.ConfigKeys;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/location/basic/BasicLocationRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/BasicLocationRegistry.java b/core/src/main/java/org/apache/brooklyn/location/basic/BasicLocationRegistry.java
index 29142e1..59db891 100644
--- a/core/src/main/java/org/apache/brooklyn/location/basic/BasicLocationRegistry.java
+++ b/core/src/main/java/org/apache/brooklyn/location/basic/BasicLocationRegistry.java
@@ -42,6 +42,8 @@ import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.management.ManagementContext;
import org.apache.brooklyn.config.ConfigMap;
import org.apache.brooklyn.core.catalog.CatalogPredicates;
+import org.apache.brooklyn.core.config.ConfigPredicates;
+import org.apache.brooklyn.core.config.ConfigUtils;
import org.apache.brooklyn.core.management.internal.LocalLocationManager;
import org.apache.brooklyn.core.util.config.ConfigBag;
import org.apache.brooklyn.util.collections.MutableMap;
@@ -54,9 +56,6 @@ import org.apache.brooklyn.util.text.WildcardGlobs;
import org.apache.brooklyn.util.text.StringEscapes.JavaStringEscapes;
import org.apache.brooklyn.util.text.WildcardGlobs.PhraseTreatment;
-import brooklyn.config.ConfigPredicates;
-import brooklyn.config.ConfigUtils;
-
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableMap;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/location/basic/LocationPropertiesFromBrooklynProperties.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/LocationPropertiesFromBrooklynProperties.java b/core/src/main/java/org/apache/brooklyn/location/basic/LocationPropertiesFromBrooklynProperties.java
index b52ba34..7791ab7 100644
--- a/core/src/main/java/org/apache/brooklyn/location/basic/LocationPropertiesFromBrooklynProperties.java
+++ b/core/src/main/java/org/apache/brooklyn/location/basic/LocationPropertiesFromBrooklynProperties.java
@@ -23,6 +23,9 @@ import static com.google.common.base.Preconditions.checkArgument;
import java.io.File;
import java.util.Map;
+import org.apache.brooklyn.core.config.BrooklynProperties;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
+import org.apache.brooklyn.core.config.ConfigUtils;
import org.apache.brooklyn.core.util.config.ConfigBag;
import org.apache.brooklyn.core.util.internal.ssh.SshTool;
import org.apache.brooklyn.util.collections.MutableMap;
@@ -30,10 +33,6 @@ import org.apache.brooklyn.util.os.Os;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.config.BrooklynProperties;
-import brooklyn.config.BrooklynServerConfig;
-import brooklyn.config.ConfigUtils;
-
import com.google.common.base.Predicates;
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/org/apache/brooklyn/location/basic/SshMachineLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/SshMachineLocation.java b/core/src/main/java/org/apache/brooklyn/location/basic/SshMachineLocation.java
index ef8c6d8..1195849 100644
--- a/core/src/main/java/org/apache/brooklyn/location/basic/SshMachineLocation.java
+++ b/core/src/main/java/org/apache/brooklyn/location/basic/SshMachineLocation.java
@@ -53,6 +53,8 @@ import org.apache.brooklyn.api.location.PortSupplier;
import org.apache.brooklyn.api.management.Task;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
+import org.apache.brooklyn.core.config.BrooklynLogging;
+import org.apache.brooklyn.core.config.ConfigUtils;
import org.apache.brooklyn.core.util.ResourceUtils;
import org.apache.brooklyn.core.util.config.ConfigBag;
import org.apache.brooklyn.core.util.crypto.SecureKeys;
@@ -93,8 +95,6 @@ import com.google.common.collect.Sets;
import com.google.common.net.HostAndPort;
import com.google.common.reflect.TypeToken;
-import brooklyn.config.BrooklynLogging;
-import brooklyn.config.ConfigUtils;
import brooklyn.entity.basic.BrooklynConfigKeys;
import brooklyn.entity.basic.BrooklynTaskTags;
import brooklyn.entity.basic.ConfigKeys;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/test/java/brooklyn/camp/lite/CampPlatformWithJustBrooklynMgmt.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/camp/lite/CampPlatformWithJustBrooklynMgmt.java b/core/src/test/java/brooklyn/camp/lite/CampPlatformWithJustBrooklynMgmt.java
index 9fe5910..9bea0e1 100644
--- a/core/src/test/java/brooklyn/camp/lite/CampPlatformWithJustBrooklynMgmt.java
+++ b/core/src/test/java/brooklyn/camp/lite/CampPlatformWithJustBrooklynMgmt.java
@@ -20,10 +20,10 @@ package brooklyn.camp.lite;
import org.apache.brooklyn.api.management.ManagementContext;
import org.apache.brooklyn.camp.BasicCampPlatform;
+import org.apache.brooklyn.core.config.BrooklynProperties;
+import org.apache.brooklyn.core.config.BrooklynServerConfig;
import brooklyn.camp.brooklyn.api.HasBrooklynManagementContext;
-import brooklyn.config.BrooklynProperties;
-import brooklyn.config.BrooklynServerConfig;
public class CampPlatformWithJustBrooklynMgmt extends BasicCampPlatform implements HasBrooklynManagementContext {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/test/java/brooklyn/config/BrooklynPropertiesBuilderTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/config/BrooklynPropertiesBuilderTest.java b/core/src/test/java/brooklyn/config/BrooklynPropertiesBuilderTest.java
deleted file mode 100644
index 3941942..0000000
--- a/core/src/test/java/brooklyn/config/BrooklynPropertiesBuilderTest.java
+++ /dev/null
@@ -1,82 +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;
-
-import static org.testng.Assert.assertEquals;
-
-import java.io.File;
-
-import org.apache.brooklyn.util.os.Os;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Charsets;
-import com.google.common.io.Files;
-
-@Test
-public class BrooklynPropertiesBuilderTest {
-
- private File globalPropertiesFile;
- private File localPropertiesFile;
-
- @BeforeMethod(alwaysRun=true)
- public void setUp() throws Exception {
- globalPropertiesFile = Os.newTempFile(getClass(), ".global.properties");
- localPropertiesFile = Os.newTempFile(getClass(), "local.properties");
- }
-
- @AfterMethod(alwaysRun=true)
- public void tearDown() throws Exception {
- if (globalPropertiesFile != null) globalPropertiesFile.delete();
- if (localPropertiesFile != null) localPropertiesFile.delete();
- }
-
- @Test
- public void testSetGlobalBrooklynPropertiesFile() throws Exception {
- String globalPropertiesContents = "brooklyn.mykey=myval";
- Files.write(globalPropertiesContents, globalPropertiesFile, Charsets.UTF_8);
-
- BrooklynProperties props = new BrooklynProperties.Factory.Builder()
- .globalPropertiesFile(globalPropertiesFile.getAbsolutePath())
- .build();
-
- assertEquals(props.get("brooklyn.mykey"), "myval");
- }
-
- @Test
- public void testSetLocalBrooklynPropertiesFile() throws Exception {
- String globalPropertiesContents = "brooklyn.mykey=myvalglobal"+"\n"+
- "brooklyn.mykey2=myvalglobal2"+"\n";
- Files.write(globalPropertiesContents, globalPropertiesFile, Charsets.UTF_8);
-
- String localPropertiesContents = "brooklyn.mykey=myvaloverriding"+"\n"+
- "brooklyn.mykeyLocal=myvallocal2"+"\n";
- Files.write(localPropertiesContents, localPropertiesFile, Charsets.UTF_8);
-
- BrooklynProperties props = new BrooklynProperties.Factory.Builder()
- .globalPropertiesFile(globalPropertiesFile.getAbsolutePath())
- .localPropertiesFile(localPropertiesFile.getAbsolutePath())
- .build();
-
- assertEquals(props.get("brooklyn.mykey"), "myvaloverriding");
- assertEquals(props.get("brooklyn.mykey2"), "myvalglobal2");
- assertEquals(props.get("brooklyn.mykeyLocal"), "myvallocal2");
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/test/java/brooklyn/config/BrooklynPropertiesFromGroovyTest.groovy
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/config/BrooklynPropertiesFromGroovyTest.groovy b/core/src/test/java/brooklyn/config/BrooklynPropertiesFromGroovyTest.groovy
deleted file mode 100644
index e68935c..0000000
--- a/core/src/test/java/brooklyn/config/BrooklynPropertiesFromGroovyTest.groovy
+++ /dev/null
@@ -1,56 +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;
-
-import static org.testng.Assert.assertEquals
-import static org.testng.Assert.fail
-
-import org.testng.annotations.Test
-
-import org.apache.brooklyn.util.collections.MutableMap;
-
-import com.google.common.collect.ImmutableList
-import com.google.common.collect.ImmutableMap
-
-public class BrooklynPropertiesFromGroovyTest {
-
- @Test
- public void testGetFirstUsingFailIfNoneWithClosure() {
- BrooklynProperties props = BrooklynProperties.Factory.newEmpty().addFromMap(ImmutableMap.of("akey", "aval", "bkey", "bval"));
- Object keys;
- try {
- props.getFirst(MutableMap.of("failIfNone", { keys = it }), "notThere");
- } catch (NoSuchElementException e) {
- // expected
- }
- assertEquals(keys, "notThere");
- }
-
- @Test
- public void testGetFirstMultiArgUsingFailIfNoneWithClosure() {
- BrooklynProperties props = BrooklynProperties.Factory.newEmpty().addFromMap(ImmutableMap.of("akey", "aval", "bkey", "bval"));
- Object keys;
- try {
- props.getFirst(MutableMap.of("failIfNone", { it1, it2 -> keys = [it1, it2] }), "notThere", "notThere2");
- } catch (NoSuchElementException e) {
- // expected
- }
- assertEquals(keys, ImmutableList.of("notThere", "notThere2"));
- }
-}