BROOKLYN-162 - apply org.apache package prefix to core config packages
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/68240194 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/68240194 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/68240194 Branch: refs/heads/master Commit: 682401941862421dad1b9fdbf3ca2eb35261ac5f Parents: 30c9eaa Author: Alex Heneveld <[email protected]> Authored: Tue Aug 18 14:37:16 2015 +0100 Committer: Alex Heneveld <[email protected]> Committed: Tue Aug 18 15:05:22 2015 +0100 ---------------------------------------------------------------------- .../java/brooklyn/config/BrooklynLogging.java | 74 --- .../brooklyn/config/BrooklynProperties.java | 483 ------------------- .../brooklyn/config/BrooklynServerConfig.java | 191 -------- .../brooklyn/config/BrooklynServerPaths.java | 280 ----------- .../config/BrooklynServiceAttributes.java | 66 --- .../java/brooklyn/config/ConfigPredicates.java | 69 --- .../main/java/brooklyn/config/ConfigUtils.java | 129 ----- .../java/brooklyn/config/WrappedConfigKey.java | 44 -- .../config/internal/AbstractConfigMapImpl.java | 111 ----- .../brooklyn/config/render/RendererHints.java | 283 ----------- .../basic/AbstractMultipleSensorAggregator.java | 3 +- .../brooklyn/enricher/basic/Aggregator.java | 2 +- .../brooklyn/entity/basic/AbstractEntity.java | 4 +- .../java/brooklyn/entity/basic/Attributes.java | 2 +- .../entity/basic/BrooklynConfigKeys.java | 2 +- .../brooklyn/entity/basic/DelegateEntity.java | 2 +- .../brooklyn/entity/basic/DynamicGroupImpl.java | 5 +- .../java/brooklyn/entity/basic/Entities.java | 2 +- .../brooklyn/entity/basic/EntityConfigMap.java | 2 +- .../java/brooklyn/entity/basic/Lifecycle.java | 3 +- .../entity/basic/ServiceStateLogic.java | 4 +- .../group/AbstractMembershipTrackingPolicy.java | 2 +- .../entity/group/DynamicClusterImpl.java | 2 +- .../rebind/InitialFullRebindIteration.java | 2 +- .../brooklyn/entity/rebind/RebindIteration.java | 4 +- .../entity/rebind/RebindManagerImpl.java | 2 +- .../persister/BrooklynPersistenceUtils.java | 4 +- .../rebind/persister/FileBasedObjectStore.java | 3 +- .../java/brooklyn/event/basic/AttributeMap.java | 2 +- .../main/java/brooklyn/event/basic/Sensors.java | 3 +- .../catalog/internal/BasicBrooklynCatalog.java | 4 +- .../catalog/internal/CatalogInitialization.java | 3 +- .../core/catalog/internal/CatalogUtils.java | 2 +- .../brooklyn/core/config/BrooklynLogging.java | 74 +++ .../core/config/BrooklynProperties.java | 483 +++++++++++++++++++ .../core/config/BrooklynServerConfig.java | 192 ++++++++ .../core/config/BrooklynServerPaths.java | 281 +++++++++++ .../core/config/BrooklynServiceAttributes.java | 66 +++ .../brooklyn/core/config/ConfigPredicates.java | 69 +++ .../brooklyn/core/config/ConfigUtils.java | 132 +++++ .../brooklyn/core/config/WrappedConfigKey.java | 44 ++ .../config/internal/AbstractConfigMapImpl.java | 111 +++++ .../core/config/render/RendererHints.java | 284 +++++++++++ .../internal/BrooklynFeatureEnablement.java | 3 +- .../management/entitlement/Entitlements.java | 2 +- .../entitlement/PerUserEntitlementManager.java | 4 +- .../ha/HighAvailabilityManagerImpl.java | 2 +- .../core/management/ha/OsgiManager.java | 5 +- .../internal/AbstractManagementContext.java | 2 +- .../internal/BrooklynGarbageCollector.java | 2 +- .../internal/EntityManagementUtils.java | 2 +- .../management/internal/LocalEntityManager.java | 2 +- .../internal/LocalLocationManager.java | 4 +- .../internal/LocalManagementContext.java | 4 +- .../internal/ManagementContextInternal.java | 2 +- .../NonDeploymentManagementContext.java | 2 +- .../core/policy/basic/ConfigMapImpl.java | 2 +- .../core/util/BrooklynNetworkUtils.java | 3 +- .../brooklyn/core/util/task/ssh/SshTasks.java | 2 +- .../location/basic/BasicLocationRegistry.java | 5 +- ...ocationPropertiesFromBrooklynProperties.java | 7 +- .../location/basic/SshMachineLocation.java | 4 +- .../lite/CampPlatformWithJustBrooklynMgmt.java | 4 +- .../config/BrooklynPropertiesBuilderTest.java | 82 ---- .../BrooklynPropertiesFromGroovyTest.groovy | 56 --- .../brooklyn/config/BrooklynPropertiesTest.java | 202 -------- .../java/brooklyn/config/ConfigUtilsTest.java | 41 -- .../entity/BrooklynAppLiveTestSupport.java | 2 +- .../brooklyn/entity/basic/ConfigMapTest.java | 2 +- .../downloads/BasicDownloadsRegistryTest.java | 2 +- .../DownloadProducerFromLocalRepoTest.java | 2 +- .../DownloadProducerFromPropertiesTest.java | 2 +- .../entity/rebind/RebindCatalogItemTest.java | 6 +- ...talogWhenCatalogPersistenceDisabledTest.java | 5 +- .../brooklyn/entity/rebind/RebindTestUtils.java | 4 +- .../core/catalog/internal/CatalogScanTest.java | 4 +- .../config/BrooklynPropertiesBuilderTest.java | 83 ++++ .../BrooklynPropertiesFromGroovyTest.groovy | 56 +++ .../core/config/BrooklynPropertiesTest.java | 204 ++++++++ .../brooklyn/core/config/ConfigUtilsTest.java | 42 ++ .../internal/BrooklynFeatureEnablementTest.java | 3 +- .../AcmeEntitlementManagerTestFixture.java | 2 +- .../entitlement/EntitlementsTest.java | 2 +- .../entitlement/EntityEntitlementTest.java | 2 +- .../internal/EntityExecutionManagerTest.java | 2 +- .../internal/LocalManagementContextTest.java | 5 +- .../core/management/osgi/OsgiPathTest.java | 6 +- .../location/access/PortForwardManagerTest.java | 2 +- .../basic/ByonLocationResolverTest.java | 2 +- .../basic/HostLocationResolverTest.java | 2 +- .../basic/LocalhostLocationResolverTest.java | 2 +- .../LocalhostProvisioningAndAccessTest.java | 2 +- .../location/basic/LocationRegistryTest.java | 2 +- .../basic/MultiLocationResolverTest.java | 2 +- .../SingleMachineLocationResolverTest.java | 2 +- .../entity/LocalManagementContextForTests.java | 5 +- .../apache/brooklyn/demo/WebClusterExample.java | 2 +- .../JcloudsBlobStoreBasedObjectStore.java | 2 +- .../location/jclouds/JcloudsLocation.java | 2 +- ...JcloudsPropertiesFromBrooklynProperties.java | 4 +- .../persister/jclouds/BlobStoreCleaner.java | 3 +- .../persister/jclouds/BlobStoreExpiryTest.java | 2 +- .../rebind/persister/jclouds/BlobStoreTest.java | 2 +- ...nMementoPersisterJcloudsObjectStoreTest.java | 2 +- ...ailabilityManagerJcloudsObjectStoreTest.java | 2 +- .../jclouds/JcloudsExpect100ContinueTest.java | 2 +- .../JcloudsObjectStoreAccessorWriterTest.java | 2 +- .../jclouds/AbstractJcloudsLiveTest.java | 2 +- .../jclouds/BailOutJcloudsLocation.java | 2 +- .../jclouds/JcloudsLocationMetadataTest.java | 2 +- .../jclouds/JcloudsLocationResolverTest.java | 2 +- .../location/jclouds/JcloudsLocationTest.java | 2 +- .../jclouds/StandaloneJcloudsLiveTest.java | 3 +- .../provider/AbstractJcloudsLocationTest.java | 2 +- .../provider/CarrenzaLocationLiveTest.groovy | 2 +- .../basic/AbstractSoftwareProcessSshDriver.java | 2 +- .../entity/brooklynnode/BrooklynNodeImpl.java | 2 +- .../brooklynnode/LocalBrooklynNodeImpl.java | 3 +- .../java/brooklyn/entity/java/JavaAppUtils.java | 2 +- .../entity/machine/MachineAttributes.java | 2 +- .../entity/software/SshEffectorTasks.java | 2 +- .../brooklyn/entity/AbstractEc2LiveTest.java | 4 +- .../entity/AbstractGoogleComputeLiveTest.java | 2 +- .../entity/AbstractSoftlayerLiveTest.java | 2 +- .../BrooklynNodeIntegrationTest.java | 2 +- .../entity/pool/ServerPoolLiveTest.java | 2 +- .../pool/ServerPoolLocationResolverTest.java | 2 +- .../entity/software/AbstractDockerLiveTest.java | 2 +- .../management/usage/UsageListenerTest.java | 2 +- .../basic/WinRmMachineLocationLiveTest.java | 2 +- .../entity/database/crate/CrateNodeImpl.java | 2 +- .../mariadb/MariaDbIntegrationTest.java | 2 +- .../database/mysql/MySqlLiveRackspaceTest.java | 4 +- .../postgresql/PostgreSqlIntegrationTest.java | 3 +- .../rubyrep/RubyRepIntegrationTest.java | 4 +- .../brooklyn/entity/messaging/storm/Storm.java | 2 +- .../nosql/couchbase/CouchbaseClusterImpl.java | 2 +- .../entity/nosql/couchbase/CouchbaseNode.java | 2 +- .../couchbase/CouchbaseSyncGatewayImpl.java | 3 +- .../entity/nosql/mongodb/MongoDBServerImpl.java | 3 +- .../entity/webapp/DynamicWebAppCluster.java | 2 +- .../entity/webapp/WebAppServiceConstants.java | 2 +- .../entity/webapp/WebAppServiceMetrics.java | 2 +- .../entity/webapp/jboss/JBoss7ServerImpl.java | 2 +- .../AbstractWebAppFixtureIntegrationTest.java | 2 +- .../webapp/WebAppLiveIntegrationTest.groovy | 2 +- .../impl/hazelcast/HazelcastStorageTest.java | 4 +- .../camp/brooklyn/BrooklynCampConstants.java | 2 +- .../camp/brooklyn/BrooklynCampPlatform.java | 2 +- .../BrooklynAssemblyTemplateInstantiator.java | 2 +- .../catalog/AbstractCatalogXmlTest.java | 5 +- .../BrooklynJavascriptGuiLauncherTest.java | 2 +- .../brooklyn/launcher/BrooklynLauncher.java | 8 +- .../brooklyn/launcher/BrooklynWebServer.java | 4 +- .../launcher/config/BrooklynGlobalConfig.java | 2 +- .../BrooklynLauncherHighAvailabilityTest.java | 2 +- .../BrooklynLauncherRebindTestFixture.java | 4 +- .../BrooklynLauncherRebindTestToFiles.java | 4 +- ...lynLauncherRebindToCloudObjectStoreTest.java | 4 +- .../brooklyn/launcher/BrooklynLauncherTest.java | 4 +- .../launcher/BrooklynWebServerTest.java | 2 +- .../brooklyn/launcher/WebAppRunnerTest.java | 2 +- .../apache/brooklyn/rest/BrooklynWebConfig.java | 2 +- .../BrooklynPropertiesSecurityFilter.java | 4 +- .../rest/filter/HaMasterCheckFilter.java | 4 +- .../brooklyn/rest/filter/LoggingFilter.java | 3 +- .../resources/AbstractBrooklynRestResource.java | 8 +- .../provider/ExplicitUsersSecurityProvider.java | 4 +- .../rest/transform/EntityTransformer.java | 4 +- .../rest/transform/SensorTransformer.java | 4 +- .../util/json/BrooklynJacksonJsonProvider.java | 4 +- .../brooklyn/rest/BrooklynRestApiLauncher.java | 7 +- .../BrooklynRestApiLauncherTestFixture.java | 6 +- .../brooklyn/rest/domain/SensorSummaryTest.java | 2 +- .../rest/resources/SensorResourceTest.java | 2 +- .../ServerResourceIntegrationTest.java | 3 +- .../rest/resources/ServerResourceTest.java | 2 +- .../test/config/render/TestRendererHints.java | 2 +- 178 files changed, 2313 insertions(+), 2346 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/config/BrooklynLogging.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/config/BrooklynLogging.java b/core/src/main/java/brooklyn/config/BrooklynLogging.java deleted file mode 100644 index 379a04d..0000000 --- a/core/src/main/java/brooklyn/config/BrooklynLogging.java +++ /dev/null @@ -1,74 +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 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/brooklyn/config/BrooklynProperties.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/config/BrooklynProperties.java b/core/src/main/java/brooklyn/config/BrooklynProperties.java deleted file mode 100644 index 6ea8a41..0000000 --- a/core/src/main/java/brooklyn/config/BrooklynProperties.java +++ /dev/null @@ -1,483 +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 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.StringConfigMap; -import org.apache.brooklyn.config.ConfigKey.HasConfigKey; -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 brooklyn.event.basic.BasicConfigKey; - -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; - -/** 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/brooklyn/config/BrooklynServerConfig.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/config/BrooklynServerConfig.java b/core/src/main/java/brooklyn/config/BrooklynServerConfig.java deleted file mode 100644 index 380380e..0000000 --- a/core/src/main/java/brooklyn/config/BrooklynServerConfig.java +++ /dev/null @@ -1,191 +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 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.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(); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/68240194/core/src/main/java/brooklyn/config/BrooklynServerPaths.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/config/BrooklynServerPaths.java b/core/src/main/java/brooklyn/config/BrooklynServerPaths.java deleted file mode 100644 index e8fb365..0000000 --- a/core/src/main/java/brooklyn/config/BrooklynServerPaths.java +++ /dev/null @@ -1,280 +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 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.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/brooklyn/config/BrooklynServiceAttributes.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/config/BrooklynServiceAttributes.java b/core/src/main/java/brooklyn/config/BrooklynServiceAttributes.java deleted file mode 100644 index 355079d..0000000 --- a/core/src/main/java/brooklyn/config/BrooklynServiceAttributes.java +++ /dev/null @@ -1,66 +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 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/brooklyn/config/ConfigPredicates.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/config/ConfigPredicates.java b/core/src/main/java/brooklyn/config/ConfigPredicates.java deleted file mode 100644 index 03c0e97..0000000 --- a/core/src/main/java/brooklyn/config/ConfigPredicates.java +++ /dev/null @@ -1,69 +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 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/brooklyn/config/ConfigUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/config/ConfigUtils.java b/core/src/main/java/brooklyn/config/ConfigUtils.java deleted file mode 100644 index fc58f7f..0000000 --- a/core/src/main/java/brooklyn/config/ConfigUtils.java +++ /dev/null @@ -1,129 +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 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.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/brooklyn/config/WrappedConfigKey.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/config/WrappedConfigKey.java b/core/src/main/java/brooklyn/config/WrappedConfigKey.java deleted file mode 100644 index 452d912..0000000 --- a/core/src/main/java/brooklyn/config/WrappedConfigKey.java +++ /dev/null @@ -1,44 +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 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/brooklyn/config/internal/AbstractConfigMapImpl.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/config/internal/AbstractConfigMapImpl.java b/core/src/main/java/brooklyn/config/internal/AbstractConfigMapImpl.java deleted file mode 100644 index bb6d910..0000000 --- a/core/src/main/java/brooklyn/config/internal/AbstractConfigMapImpl.java +++ /dev/null @@ -1,111 +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.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(); - } -}
