http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogLibrariesDto.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogLibrariesDto.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogLibrariesDto.java deleted file mode 100644 index 6f2aba8..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogLibrariesDto.java +++ /dev/null @@ -1,53 +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 org.apache.brooklyn.core.catalog.internal; - -import java.util.Collection; -import java.util.Collections; - -import org.apache.brooklyn.api.catalog.CatalogItem; - -import com.google.common.collect.ImmutableList; - -@Deprecated -public class CatalogLibrariesDto implements CatalogItem.CatalogItemLibraries { - - private final Collection<String> bundles; - - public CatalogLibrariesDto() { - this.bundles = Collections.emptyList(); - } - - public CatalogLibrariesDto(Collection<String> bundles) { - this.bundles = bundles; - } - - /** - * @return An immutable copy of the bundle URLs referenced by this object - */ - @Override - public Collection<String> getBundles() { - if (bundles == null) { - // can be null on deserialization - return Collections.emptyList(); - } - return ImmutableList.copyOf(bundles); - } - -}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogLocationItemDto.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogLocationItemDto.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogLocationItemDto.java deleted file mode 100644 index c8206ce..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogLocationItemDto.java +++ /dev/null @@ -1,43 +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 org.apache.brooklyn.core.catalog.internal; - -import org.apache.brooklyn.api.location.Location; -import org.apache.brooklyn.api.location.LocationSpec; - - -public class CatalogLocationItemDto extends CatalogItemDtoAbstract<Location,LocationSpec<?>> { - - @Override - public CatalogItemType getCatalogItemType() { - return CatalogItemType.LOCATION; - } - - @Override - public Class<Location> getCatalogItemJavaType() { - return Location.class; - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - @Override - public Class<LocationSpec<?>> getSpecType() { - return (Class)LocationSpec.class; - } - -} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogPolicyItemDto.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogPolicyItemDto.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogPolicyItemDto.java deleted file mode 100644 index 1c7e6fe..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogPolicyItemDto.java +++ /dev/null @@ -1,43 +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 org.apache.brooklyn.core.catalog.internal; - -import org.apache.brooklyn.api.policy.Policy; -import org.apache.brooklyn.api.policy.PolicySpec; - - -public class CatalogPolicyItemDto extends CatalogItemDtoAbstract<Policy,PolicySpec<?>> { - - @Override - public CatalogItemType getCatalogItemType() { - return CatalogItemType.POLICY; - } - - @Override - public Class<Policy> getCatalogItemJavaType() { - return Policy.class; - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - @Override - public Class<PolicySpec<?>> getSpecType() { - return (Class)PolicySpec.class; - } - -} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogTemplateItemDto.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogTemplateItemDto.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogTemplateItemDto.java deleted file mode 100644 index 688b814..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogTemplateItemDto.java +++ /dev/null @@ -1,42 +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 org.apache.brooklyn.core.catalog.internal; - -import org.apache.brooklyn.api.entity.Application; -import org.apache.brooklyn.api.entity.EntitySpec; - -public class CatalogTemplateItemDto extends CatalogItemDtoAbstract<Application,EntitySpec<? extends Application>> { - - @Override - public CatalogItemType getCatalogItemType() { - return CatalogItemType.TEMPLATE; - } - - @Override - public Class<Application> getCatalogItemJavaType() { - return Application.class; - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - @Override - public Class<EntitySpec<? extends Application>> getSpecType() { - return (Class)EntitySpec.class; - } - -} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java deleted file mode 100644 index dce5493..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogUtils.java +++ /dev/null @@ -1,321 +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 org.apache.brooklyn.core.catalog.internal; - -import java.util.Collection; - -import javax.annotation.Nullable; - -import org.apache.brooklyn.api.catalog.BrooklynCatalog; -import org.apache.brooklyn.api.catalog.CatalogItem; -import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle; -import org.apache.brooklyn.api.entity.Entity; -import org.apache.brooklyn.api.mgmt.ManagementContext; -import org.apache.brooklyn.api.mgmt.classloading.BrooklynClassLoadingContext; -import org.apache.brooklyn.api.objs.BrooklynObject; -import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry; -import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl; -import org.apache.brooklyn.api.typereg.RegisteredType; -import org.apache.brooklyn.core.BrooklynLogging; -import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker; -import org.apache.brooklyn.core.entity.EntityInternal; -import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContextSequential; -import org.apache.brooklyn.core.mgmt.classloading.JavaBrooklynClassLoadingContext; -import org.apache.brooklyn.core.mgmt.classloading.OsgiBrooklynClassLoadingContext; -import org.apache.brooklyn.core.mgmt.ha.OsgiManager; -import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal; -import org.apache.brooklyn.core.mgmt.rebind.RebindManagerImpl.RebindTracker; -import org.apache.brooklyn.core.objs.BrooklynObjectInternal; -import org.apache.brooklyn.core.typereg.RegisteredTypeLoadingContexts; -import org.apache.brooklyn.core.typereg.RegisteredTypePredicates; -import org.apache.brooklyn.core.typereg.RegisteredTypes; -import org.apache.brooklyn.util.guava.Maybe; -import org.apache.brooklyn.util.text.Strings; -import org.apache.brooklyn.util.time.Time; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.annotations.Beta; -import com.google.common.base.Joiner; -import com.google.common.base.Preconditions; -import com.google.common.base.Stopwatch; - -public class CatalogUtils { - private static final Logger log = LoggerFactory.getLogger(CatalogUtils.class); - - public static final char VERSION_DELIMITER = ':'; - - public static BrooklynClassLoadingContext newClassLoadingContext(ManagementContext mgmt, CatalogItem<?, ?> item) { - // TODO getLibraries() should never be null but sometimes it is still - // e.g. run CatalogResourceTest without the above check - if (item.getLibraries() == null) { - log.debug("CatalogItemDtoAbstract.getLibraries() is null.", new Exception("Trace for null CatalogItemDtoAbstract.getLibraries()")); - } - return newClassLoadingContext(mgmt, item.getId(), item.getLibraries()); - } - - public static BrooklynClassLoadingContext newClassLoadingContext(ManagementContext mgmt, RegisteredType item) { - return newClassLoadingContext(mgmt, item.getId(), item.getLibraries(), null); - } - - /** made @Beta in 0.9.0 because we're not sure to what extent to support stacking loaders; - * only a couple places currently rely on such stacking, in general the item and the bundles *are* the context, - * and life gets hard if we support complex stacking! */ - @Beta - public static BrooklynClassLoadingContext newClassLoadingContext(ManagementContext mgmt, RegisteredType item, BrooklynClassLoadingContext loader) { - return newClassLoadingContext(mgmt, item.getId(), item.getLibraries(), loader); - } - - public static BrooklynClassLoadingContext getClassLoadingContext(Entity entity) { - ManagementContext mgmt = ((EntityInternal)entity).getManagementContext(); - String catId = entity.getCatalogItemId(); - if (Strings.isBlank(catId)) return JavaBrooklynClassLoadingContext.create(mgmt); - Maybe<RegisteredType> cat = RegisteredTypes.tryValidate(mgmt.getTypeRegistry().get(catId), RegisteredTypeLoadingContexts.spec(Entity.class)); - if (cat.isNull()) { - log.warn("Cannot load "+catId+" to get classloader for "+entity+"; will try with standard loader, but might fail subsequently"); - return JavaBrooklynClassLoadingContext.create(mgmt); - } - return newClassLoadingContext(mgmt, cat.get()); - } - - public static BrooklynClassLoadingContext newClassLoadingContext(@Nullable ManagementContext mgmt, String catalogItemId, Collection<? extends OsgiBundleWithUrl> libraries) { - return newClassLoadingContext(mgmt, catalogItemId, libraries, null); - } - - @Deprecated /** @deprecated since 0.9.0; becoming private because we should now always have a registered type callers can pass instead of the catalog item id */ - public static BrooklynClassLoadingContext newClassLoadingContext(@Nullable ManagementContext mgmt, String catalogItemId, Collection<? extends OsgiBundleWithUrl> libraries, BrooklynClassLoadingContext loader) { - BrooklynClassLoadingContextSequential result = new BrooklynClassLoadingContextSequential(mgmt); - - if (libraries!=null && !libraries.isEmpty()) { - result.add(new OsgiBrooklynClassLoadingContext(mgmt, catalogItemId, libraries)); - } - - if (loader !=null) { - // TODO determine whether to support stacking - result.add(loader); - } - BrooklynClassLoadingContext threadLocalLoader = BrooklynLoaderTracker.getLoader(); - if (threadLocalLoader != null) { - // TODO and determine if this is needed/wanted - result.add(threadLocalLoader); - } - - result.addSecondary(JavaBrooklynClassLoadingContext.create(mgmt)); - return result; - } - - /** - * @deprecated since 0.7.0 only for legacy catalog items which provide a non-osgi loader; see {@link #newDefault(ManagementContext)} - */ @Deprecated - public static BrooklynClassLoadingContext newClassLoadingContext(@Nullable ManagementContext mgmt, String catalogItemId, Collection<CatalogBundle> libraries, ClassLoader customClassLoader) { - BrooklynClassLoadingContextSequential result = new BrooklynClassLoadingContextSequential(mgmt); - - if (libraries!=null && !libraries.isEmpty()) { - result.add(new OsgiBrooklynClassLoadingContext(mgmt, catalogItemId, libraries)); - } - - BrooklynClassLoadingContext loader = BrooklynLoaderTracker.getLoader(); - if (loader != null) { - result.add(loader); - } - - result.addSecondary(JavaBrooklynClassLoadingContext.create(mgmt, customClassLoader)); - return result; - } - - /** - * Registers all bundles with the management context's OSGi framework. - */ - public static void installLibraries(ManagementContext managementContext, @Nullable Collection<CatalogBundle> libraries) { - if (libraries == null) return; - - ManagementContextInternal mgmt = (ManagementContextInternal) managementContext; - if (!libraries.isEmpty()) { - Maybe<OsgiManager> osgi = mgmt.getOsgiManager(); - if (osgi.isAbsent()) { - throw new IllegalStateException("Unable to load bundles "+libraries+" because OSGi is not running."); - } - if (log.isDebugEnabled()) - logDebugOrTraceIfRebinding(log, - "Loading bundles in {}: {}", - new Object[] {managementContext, Joiner.on(", ").join(libraries)}); - Stopwatch timer = Stopwatch.createStarted(); - for (CatalogBundle bundleUrl : libraries) { - osgi.get().registerBundle(bundleUrl); - } - if (log.isDebugEnabled()) - logDebugOrTraceIfRebinding(log, - "Registered {} bundles in {}", - new Object[]{libraries.size(), Time.makeTimeStringRounded(timer)}); - } - } - - /** Scans the given {@link BrooklynClassLoadingContext} to detect what catalog item id is in effect. */ - public static String getCatalogItemIdFromLoader(BrooklynClassLoadingContext loader) { - if (loader instanceof OsgiBrooklynClassLoadingContext) { - return ((OsgiBrooklynClassLoadingContext)loader).getCatalogItemId(); - } else { - return null; - } - } - - public static void setCatalogItemIdOnAddition(Entity entity, BrooklynObject itemBeingAdded) { - if (entity.getCatalogItemId()!=null) { - if (itemBeingAdded.getCatalogItemId()==null) { - if (log.isDebugEnabled()) - BrooklynLogging.log(log, BrooklynLogging.levelDebugOrTraceIfReadOnly(entity), - "Catalog item addition: "+entity+" from "+entity.getCatalogItemId()+" applying its catalog item ID to "+itemBeingAdded); - ((BrooklynObjectInternal)itemBeingAdded).setCatalogItemId(entity.getCatalogItemId()); - } else { - if (!itemBeingAdded.getCatalogItemId().equals(entity.getCatalogItemId())) { - // not a problem, but something to watch out for - log.debug("Cross-catalog item detected: "+entity+" from "+entity.getCatalogItemId()+" has "+itemBeingAdded+" from "+itemBeingAdded.getCatalogItemId()); - } - } - } else if (itemBeingAdded.getCatalogItemId()!=null) { - if (log.isDebugEnabled()) - BrooklynLogging.log(log, BrooklynLogging.levelDebugOrTraceIfReadOnly(entity), - "Catalog item addition: "+entity+" without catalog item ID has "+itemBeingAdded+" from "+itemBeingAdded.getCatalogItemId()); - } - } - - @Beta - public static void logDebugOrTraceIfRebinding(Logger log, String message, Object ...args) { - if (RebindTracker.isRebinding()) - log.trace(message, args); - else - log.debug(message, args); - } - - public static boolean looksLikeVersionedId(String versionedId) { - if (versionedId==null) return false; - int fi = versionedId.indexOf(VERSION_DELIMITER); - if (fi<0) return false; - int li = versionedId.lastIndexOf(VERSION_DELIMITER); - if (li!=fi) { - // if multiple colons, we say it isn't a versioned reference; the prefix in that case must understand any embedded versioning scheme - // this fixes the case of: http://localhost:8080 - return false; - } - String candidateVersion = versionedId.substring(li+1); - if (!candidateVersion.matches("[0-9]+(|(\\.|_).*)")) { - // version must start with a number, followed if by anything with full stop or underscore before any other characters - // e.g. foo:1 or foo:1.1 or foo:1_SNAPSHOT all supported, but not e.g. foo:bar (or chef:cookbook or docker:my/image) - return false; - } - return true; - } - - /** @deprecated since 0.9.0 use {@link #getSymbolicNameFromVersionedId(String)} */ - // all uses removed - @Deprecated - public static String getIdFromVersionedId(String versionedId) { - return getSymbolicNameFromVersionedId(versionedId); - } - - public static String getSymbolicNameFromVersionedId(String versionedId) { - if (versionedId == null) return null; - int versionDelimiterPos = versionedId.lastIndexOf(VERSION_DELIMITER); - if (versionDelimiterPos != -1) { - return versionedId.substring(0, versionDelimiterPos); - } else { - return null; - } - } - - public static String getVersionFromVersionedId(String versionedId) { - if (versionedId == null) return null; - int versionDelimiterPos = versionedId.lastIndexOf(VERSION_DELIMITER); - if (versionDelimiterPos != -1) { - return versionedId.substring(versionDelimiterPos+1); - } else { - return null; - } - } - - public static String getVersionedId(String id, String version) { - // TODO null checks - return id + VERSION_DELIMITER + version; - } - - /** @deprecated since 0.9.0 use {@link BrooklynTypeRegistry#get(String, org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind, Class)} */ - // only a handful of items remaining, and those require a CatalogItem - public static CatalogItem<?, ?> getCatalogItemOptionalVersion(ManagementContext mgmt, String versionedId) { - if (versionedId == null) return null; - if (looksLikeVersionedId(versionedId)) { - String id = getSymbolicNameFromVersionedId(versionedId); - String version = getVersionFromVersionedId(versionedId); - return mgmt.getCatalog().getCatalogItem(id, version); - } else { - return mgmt.getCatalog().getCatalogItem(versionedId, BrooklynCatalog.DEFAULT_VERSION); - } - } - - public static boolean isBestVersion(ManagementContext mgmt, CatalogItem<?,?> item) { - RegisteredType best = RegisteredTypes.getBestVersion(mgmt.getTypeRegistry().getMatching( - RegisteredTypePredicates.symbolicName(item.getSymbolicName()))); - if (best==null) return false; - return (best.getVersion().equals(item.getVersion())); - } - - /** @deprecated since 0.9.0 use {@link BrooklynTypeRegistry#get(String, org.apache.brooklyn.api.typereg.BrooklynTypeRegistry.RegisteredTypeKind, Class)} */ - // only a handful of items remaining, and those require a CatalogItem - public static <T,SpecT> CatalogItem<T, SpecT> getCatalogItemOptionalVersion(ManagementContext mgmt, Class<T> type, String versionedId) { - if (looksLikeVersionedId(versionedId)) { - String id = getSymbolicNameFromVersionedId(versionedId); - String version = getVersionFromVersionedId(versionedId); - return mgmt.getCatalog().getCatalogItem(type, id, version); - } else { - return mgmt.getCatalog().getCatalogItem(type, versionedId, BrooklynCatalog.DEFAULT_VERSION); - } - } - - /** @deprecated since it was introduced in 0.9.0; TBD where this should live */ - public static void setDeprecated(ManagementContext mgmt, String symbolicNameAndOptionalVersion, boolean newValue) { - RegisteredType item = mgmt.getTypeRegistry().get(symbolicNameAndOptionalVersion); - Preconditions.checkNotNull(item, "No such item: " + symbolicNameAndOptionalVersion); - setDeprecated(mgmt, item.getSymbolicName(), item.getVersion(), newValue); - } - - /** @deprecated since it was introduced in 0.9.0; TBD where this should live */ - public static void setDisabled(ManagementContext mgmt, String symbolicNameAndOptionalVersion, boolean newValue) { - RegisteredType item = mgmt.getTypeRegistry().get(symbolicNameAndOptionalVersion); - Preconditions.checkNotNull(item, "No such item: "+symbolicNameAndOptionalVersion); - setDisabled(mgmt, item.getSymbolicName(), item.getVersion(), newValue); - } - - /** @deprecated since it was introduced in 0.9.0; TBD where this should live */ - @Deprecated - public static void setDeprecated(ManagementContext mgmt, String symbolicName, String version, boolean newValue) { - CatalogItem<?, ?> item = mgmt.getCatalog().getCatalogItem(symbolicName, version); - Preconditions.checkNotNull(item, "No such item: "+symbolicName+" v "+version); - item.setDeprecated(newValue); - mgmt.getCatalog().persist(item); - } - - /** @deprecated since it was introduced in 0.9.0; TBD where this should live */ - @Deprecated - public static void setDisabled(ManagementContext mgmt, String symbolicName, String version, boolean newValue) { - CatalogItem<?, ?> item = mgmt.getCatalog().getCatalogItem(symbolicName, version); - Preconditions.checkNotNull(item, "No such item: "+symbolicName+" v "+version); - item.setDisabled(newValue); - mgmt.getCatalog().persist(item); - } - -} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogXmlSerializer.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogXmlSerializer.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogXmlSerializer.java deleted file mode 100644 index 3cf686e..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogXmlSerializer.java +++ /dev/null @@ -1,77 +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 org.apache.brooklyn.core.catalog.internal; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.apache.brooklyn.core.catalog.internal.CatalogClasspathDo.CatalogScanningModes; -import org.apache.brooklyn.core.mgmt.persist.DeserializingClassRenamesProvider; -import org.apache.brooklyn.core.objs.AbstractBrooklynObject; -import org.apache.brooklyn.util.core.xstream.EnumCaseForgivingSingleValueConverter; -import org.apache.brooklyn.util.core.xstream.XmlSerializer; - -public class CatalogXmlSerializer extends XmlSerializer<Object> { - - @SuppressWarnings("deprecation") - public CatalogXmlSerializer() { - super(DeserializingClassRenamesProvider.loadDeserializingClassRenames()); - - xstream.addDefaultImplementation(ArrayList.class, Collection.class); - - //Doesn't work well for non-standard lists, like Lists.transform results - xstream.aliasType("list", List.class); - xstream.aliasType("map", Map.class); - - xstream.useAttributeFor("id", String.class); - - xstream.aliasType("catalog", CatalogDto.class); - xstream.useAttributeFor(CatalogDto.class, "url"); - xstream.addImplicitCollection(CatalogDto.class, "catalogs", CatalogDto.class); - xstream.addImplicitCollection(CatalogDto.class, "entries", CatalogTemplateItemDto.class); - xstream.addImplicitCollection(CatalogDto.class, "entries", CatalogEntityItemDto.class); - xstream.addImplicitCollection(CatalogDto.class, "entries", CatalogPolicyItemDto.class); - xstream.addImplicitCollection(CatalogDto.class, "entries", CatalogLocationItemDto.class); - - xstream.aliasType("template", CatalogTemplateItemDto.class); - xstream.aliasType("entity", CatalogEntityItemDto.class); - xstream.aliasType("policy", CatalogPolicyItemDto.class); - xstream.aliasType("location", CatalogPolicyItemDto.class); - - xstream.aliasField("registeredType", CatalogItemDtoAbstract.class, "symbolicName"); - xstream.aliasAttribute(CatalogItemDtoAbstract.class, "displayName", "name"); - xstream.useAttributeFor(CatalogItemDtoAbstract.class, "type"); - xstream.useAttributeFor(CatalogItemDtoAbstract.class, "version"); - xstream.aliasType("bundle", CatalogBundleDto.class); - xstream.registerConverter(new CatalogBundleConverter(xstream.getMapper(), xstream.getReflectionProvider())); - - xstream.useAttributeFor(CatalogClasspathDto.class, "scan"); - xstream.addImplicitCollection(CatalogClasspathDto.class, "entries", "entry", String.class); - xstream.registerConverter(new EnumCaseForgivingSingleValueConverter(CatalogScanningModes.class)); - - // Note: the management context is being omitted because it is unnecessary for - // representations of catalogues generated with this serializer. - xstream.omitField(AbstractBrooklynObject.class, "managementContext"); - xstream.omitField(AbstractBrooklynObject.class, "_legacyConstruction"); - xstream.omitField(AbstractBrooklynObject.class, "hasWarnedOfNoManagementContextWhenPersistRequested"); - } - -} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.java deleted file mode 100644 index 4e15d24..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/catalog/internal/JavaCatalogToSpecTransformer.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 org.apache.brooklyn.core.catalog.internal; - -import java.util.Set; - -import org.apache.brooklyn.api.catalog.CatalogItem; -import org.apache.brooklyn.api.entity.Application; -import org.apache.brooklyn.api.entity.Entity; -import org.apache.brooklyn.api.entity.EntitySpec; -import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec; -import org.apache.brooklyn.api.mgmt.ManagementContext; -import org.apache.brooklyn.api.policy.Policy; -import org.apache.brooklyn.api.policy.PolicySpec; -import org.apache.brooklyn.api.typereg.RegisteredType; -import org.apache.brooklyn.core.objs.BasicSpecParameter; -import org.apache.brooklyn.core.plan.PlanNotRecognizedException; -import org.apache.brooklyn.core.plan.PlanToSpecTransformer; -import org.apache.brooklyn.util.exceptions.Exceptions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Instantiates classes from a registered type which simply - * defines the java class name and OSGi bundles to use. - * <p> - * This is used where a {@link RegisteredType} is defined simply with the name of a java class - * (no YAML etc); and for legacy old-style (c0.7.0) catalog items (defined in catalog.xml only) - * with structure, only a single type. - */ -public class JavaCatalogToSpecTransformer implements PlanToSpecTransformer { - private static final Logger log = LoggerFactory.getLogger(JavaCatalogToSpecTransformer.class); - - private ManagementContext mgmt; - - @Override - public void setManagementContext(ManagementContext mgmt) { - this.mgmt = mgmt; - } - - @Override - public String getShortDescription() { - return "Java type instantiator"; - } - - @Override - public boolean accepts(String planType) { - return false; - } - - @Override - public EntitySpec<? extends Application> createApplicationSpec(String plan) throws PlanNotRecognizedException { - throw new PlanNotRecognizedException(getClass().getName() + " doesn't parse application plans."); - } - - @Override - public <T, SpecT extends AbstractBrooklynObjectSpec<? extends T, SpecT>> SpecT createCatalogSpec( - CatalogItem<T, SpecT> item, Set<String> encounteredTypes) throws PlanNotRecognizedException { - @SuppressWarnings("deprecation") - String javaType = item.getJavaType(); - if (javaType != null) { - log.warn("Deprecated functionality (since 0.9.0). Using old-style xml catalog items with java type attribute for " + item); - Class<?> type; - try { - // java types were deprecated before we added osgi support so this isn't necessary, - // but it doesn't hurt (and if we re-instate a class+bundle approach for RegisteredType - // we will want to do this) - type = CatalogUtils.newClassLoadingContext(mgmt, item).loadClass(javaType); - } catch (Exception e) { - Exceptions.propagateIfFatal(e); - throw new IllegalStateException("Unable to load old-style java catalog item type " + javaType + " for item " + item, e); - } - AbstractBrooklynObjectSpec<?,?> spec; - if (Entity.class.isAssignableFrom(type)) { - @SuppressWarnings("unchecked") - Class<Entity> entityType = (Class<Entity>)type; - spec = EntitySpec.create(entityType) - .parameters(BasicSpecParameter.fromClass(mgmt, entityType)); - } else if (Policy.class.isAssignableFrom(type)) { - @SuppressWarnings("unchecked") - Class<Policy> policyType = (Class<Policy>)type; - spec = PolicySpec.create(policyType); - } else { - throw new IllegalStateException("Catalog item " + item + " java type " + javaType + " is not a Brooklyn supported object."); - } - spec.catalogItemId(item.getCatalogItemId()); - @SuppressWarnings("unchecked") - SpecT untypedSpc = (SpecT) spec; - return untypedSpc; - } else { - throw new PlanNotRecognizedException(getClass().getName() + " parses only old-style catalog items containing javaType"); - } - } - -} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/BasicConfigKey.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/BasicConfigKey.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/BasicConfigKey.java deleted file mode 100644 index f158c2c..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/BasicConfigKey.java +++ /dev/null @@ -1,327 +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 org.apache.brooklyn.core.config; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.io.Serializable; -import java.util.Collection; -import java.util.Map; -import java.util.concurrent.ExecutionException; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import org.apache.brooklyn.api.mgmt.ExecutionContext; -import org.apache.brooklyn.config.ConfigInheritance; -import org.apache.brooklyn.config.ConfigKey; -import org.apache.brooklyn.util.core.internal.ConfigKeySelfExtracting; -import org.apache.brooklyn.util.core.task.Tasks; -import org.apache.brooklyn.util.exceptions.Exceptions; -import org.apache.brooklyn.util.guava.TypeTokens; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.annotations.Beta; -import com.google.common.base.Objects; -import com.google.common.base.Preconditions; -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; -import com.google.common.base.Splitter; -import com.google.common.collect.Lists; -import com.google.common.reflect.TypeToken; - -public class BasicConfigKey<T> implements ConfigKeySelfExtracting<T>, Serializable { - - private static final Logger log = LoggerFactory.getLogger(BasicConfigKey.class); - private static final long serialVersionUID = -1762014059150215376L; - - private static final Splitter dots = Splitter.on('.'); - - public static <T> Builder<T> builder(TypeToken<T> type) { - return new Builder<T>().type(type); - } - - public static <T> Builder<T> builder(Class<T> type) { - return new Builder<T>().type(type); - } - - public static <T> Builder<T> builder(TypeToken<T> type, String name) { - return new Builder<T>().type(type).name(name); - } - - public static <T> Builder<T> builder(Class<T> type, String name) { - return new Builder<T>().type(type).name(name); - } - - public static <T> Builder<T> builder(ConfigKey<T> key) { - return new Builder<T>() - .name(checkNotNull(key.getName(), "name")) - .type(checkNotNull(key.getTypeToken(), "type")) - .description(key.getDescription()) - .defaultValue(key.getDefaultValue()) - .reconfigurable(key.isReconfigurable()) - .inheritance(key.getInheritance()) - .constraint(key.getConstraint()); - } - - public static class Builder<T> { - private String name; - private TypeToken<T> type; - private String description; - private T defaultValue; - private boolean reconfigurable; - private Predicate<? super T> constraint = Predicates.alwaysTrue(); - private ConfigInheritance inheritance; - - public Builder<T> name(String val) { - this.name = val; return this; - } - public Builder<T> type(Class<T> val) { - this.type = TypeToken.of(val); return this; - } - public Builder<T> type(TypeToken<T> val) { - this.type = val; return this; - } - public Builder<T> description(String val) { - this.description = val; return this; - } - public Builder<T> defaultValue(T val) { - this.defaultValue = val; return this; - } - public Builder<T> reconfigurable(boolean val) { - this.reconfigurable = val; return this; - } - public Builder<T> inheritance(ConfigInheritance val) { - this.inheritance = val; return this; - } - @Beta - public Builder<T> constraint(Predicate<? super T> constraint) { - this.constraint = checkNotNull(constraint, "constraint"); return this; - } - public BasicConfigKey<T> build() { - return new BasicConfigKey<T>(this); - } - - public String getName() { - return name; - } - public String getDescription() { - return description; - } - } - - private String name; - private TypeToken<T> typeToken; - private Class<? super T> type; - private String description; - private T defaultValue; - private boolean reconfigurable; - private ConfigInheritance inheritance; - private Predicate<? super T> constraint; - - // FIXME In groovy, fields were `public final` with a default constructor; do we need the gson? - public BasicConfigKey() { /* for gson */ } - - public BasicConfigKey(Class<T> type, String name) { - this(TypeToken.of(type), name); - } - - public BasicConfigKey(Class<T> type, String name, String description) { - this(TypeToken.of(type), name, description); - } - - public BasicConfigKey(Class<T> type, String name, String description, T defaultValue) { - this(TypeToken.of(type), name, description, defaultValue); - } - - public BasicConfigKey(TypeToken<T> type, String name) { - this(type, name, name, null); - } - - public BasicConfigKey(TypeToken<T> type, String name, String description) { - this(type, name, description, null); - } - - public BasicConfigKey(TypeToken<T> type, String name, String description, T defaultValue) { - this.description = description; - this.name = checkNotNull(name, "name"); - - this.type = TypeTokens.getRawTypeIfRaw(checkNotNull(type, "type")); - this.typeToken = TypeTokens.getTypeTokenIfNotRaw(type); - - this.defaultValue = defaultValue; - this.reconfigurable = false; - this.constraint = Predicates.alwaysTrue(); - } - - public BasicConfigKey(Builder<T> builder) { - this.name = checkNotNull(builder.name, "name"); - this.type = TypeTokens.getRawTypeIfRaw(checkNotNull(builder.type, "type")); - this.typeToken = TypeTokens.getTypeTokenIfNotRaw(builder.type); - this.description = builder.description; - this.defaultValue = builder.defaultValue; - this.reconfigurable = builder.reconfigurable; - this.inheritance = builder.inheritance; - // Note: it's intentionally possible to have default values that are not valid - // per the configured constraint. If validity were checked here any class that - // contained a weirdly-defined config key would fail to initialise. - this.constraint = checkNotNull(builder.constraint, "constraint"); - } - - /** @see ConfigKey#getName() */ - @Override public String getName() { return name; } - - /** @see ConfigKey#getTypeName() */ - @Override public String getTypeName() { return getType().getName(); } - - /** @see ConfigKey#getType() */ - @Override public Class<? super T> getType() { return TypeTokens.getRawType(typeToken, type); } - - /** @see ConfigKey#getTypeToken() */ - @Override public TypeToken<T> getTypeToken() { return TypeTokens.getTypeToken(typeToken, type); } - - /** @see ConfigKey#getDescription() */ - @Override public String getDescription() { return description; } - - /** @see ConfigKey#getDefaultValue() */ - @Override public T getDefaultValue() { return defaultValue; } - - /** @see ConfigKey#hasDefaultValue() */ - @Override public boolean hasDefaultValue() { - return defaultValue != null; - } - - /** @see ConfigKey#isReconfigurable() */ - @Override - public boolean isReconfigurable() { - return reconfigurable; - } - - /** @see ConfigKey#getInheritance() */ - @Override @Nullable - public ConfigInheritance getInheritance() { - return inheritance; - } - - /** @see ConfigKey#getConstraint() */ - @Override @Nonnull - public Predicate<? super T> getConstraint() { - // Could be null after rebinding - if (constraint != null) { - return constraint; - } else { - return Predicates.alwaysTrue(); - } - } - - /** @see ConfigKey#isValueValid(T) */ - @Override - public boolean isValueValid(T value) { - // The likeliest source of an exception is a constraint from Guava that expects a non-null input. - try { - return getConstraint().apply(value); - } catch (Exception e) { - log.debug("Suppressing exception when testing validity of " + this, e); - return false; - } - } - - /** @see ConfigKey#getNameParts() */ - @Override public Collection<String> getNameParts() { - return Lists.newArrayList(dots.split(name)); - } - - @Override - public boolean equals(Object obj) { - if (obj == this) return true; - if (!(obj instanceof BasicConfigKey)) return false; - BasicConfigKey<?> o = (BasicConfigKey<?>) obj; - - return Objects.equal(name, o.name); - } - - @Override - public int hashCode() { - return Objects.hashCode(name); - } - - @Override - public String toString() { - return String.format("%s[ConfigKey:%s]", name, getTypeName()); - } - - /** - * Retrieves the value corresponding to this config key from the given map. - * Could be overridden by more sophisticated config keys, such as MapConfigKey etc. - */ - @SuppressWarnings("unchecked") - @Override - public T extractValue(Map<?,?> vals, ExecutionContext exec) { - Object v = vals.get(this); - try { - return (T) resolveValue(v, exec); - } catch (Exception e) { - throw Exceptions.propagate(e); - } - } - - @Override - public boolean isSet(Map<?,?> vals) { - return vals.containsKey(this); - } - - protected Object resolveValue(Object v, ExecutionContext exec) throws ExecutionException, InterruptedException { - if (v instanceof Collection || v instanceof Map) { - return Tasks.resolveDeepValue(v, Object.class, exec, "config "+name); - } else { - return Tasks.resolveValue(v, getType(), exec, "config "+name); - } - } - - /** used to record a key which overwrites another; only needed at disambiguation time - * if a class declares a key and an equivalent one (often inherited) which overwrites it. - * See org.apache.brooklyn.core.entity.ConfigEntityInheritanceTest, and uses of this class, for more explanation. - */ - public static class BasicConfigKeyOverwriting<T> extends BasicConfigKey<T> { - private static final long serialVersionUID = -3458116971918128018L; - - private final ConfigKey<T> parentKey; - - /** builder here should be based on the same key passed in as parent */ - @Beta - public BasicConfigKeyOverwriting(Builder<T> builder, ConfigKey<T> parent) { - super(builder); - parentKey = parent; - Preconditions.checkArgument(Objects.equal(builder.name, parent.getName()), "Builder must use key of the same name."); - } - - public BasicConfigKeyOverwriting(ConfigKey<T> key, T defaultValue) { - this(builder(key).defaultValue(defaultValue), key); - } - - public BasicConfigKeyOverwriting(ConfigKey<T> key, String newDescription, T defaultValue) { - this(builder(key).description(newDescription).defaultValue(defaultValue), key); - } - - public ConfigKey<T> getParentKey() { - return parentKey; - } - } -} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java deleted file mode 100644 index c508349..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigConstraints.java +++ /dev/null @@ -1,195 +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 org.apache.brooklyn.core.config; - -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -import org.apache.brooklyn.api.entity.Entity; -import org.apache.brooklyn.api.location.Location; -import org.apache.brooklyn.api.objs.BrooklynObject; -import org.apache.brooklyn.api.objs.EntityAdjunct; -import org.apache.brooklyn.config.ConfigKey; -import org.apache.brooklyn.core.objs.AbstractEntityAdjunct; -import org.apache.brooklyn.core.objs.BrooklynObjectInternal; -import org.apache.brooklyn.core.objs.BrooklynObjectPredicate; -import org.apache.brooklyn.util.guava.Maybe; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.base.Predicate; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; - -/** - * Checks configuration constraints on entities and their adjuncts. - * - * @since 0.9.0 - */ -public abstract class ConfigConstraints<T extends BrooklynObject> { - - public static final Logger LOG = LoggerFactory.getLogger(ConfigConstraints.class); - - private final T brooklynObject; - - /** - * Checks all constraints of all config keys available to an entity. - * <p> - * If a constraint is a {@link BrooklynObjectPredicate} then - * {@link BrooklynObjectPredicate#apply(Object, BrooklynObject)} will be used. - */ - public static void assertValid(Entity entity) { - Iterable<ConfigKey<?>> violations = new EntityConfigConstraints(entity).getViolations(); - if (!Iterables.isEmpty(violations)) { - throw new ConstraintViolationException(errorMessage(entity, violations)); - } - } - - /** - * Checks all constraints of all config keys available to an entity adjunct. - * <p> - * If a constraint is a {@link BrooklynObjectPredicate} then - * {@link BrooklynObjectPredicate#apply(Object, BrooklynObject)} will be used. - */ - public static void assertValid(EntityAdjunct adjunct) { - Iterable<ConfigKey<?>> violations = new EntityAdjunctConstraints(adjunct).getViolations(); - if (!Iterables.isEmpty(violations)) { - throw new ConstraintViolationException(errorMessage(adjunct, violations)); - } - } - - public static <T> void assertValid(Entity entity, ConfigKey<T> key, T value) { - if (!new EntityConfigConstraints(entity).isValueValid(key, value)) { - throw new ConstraintViolationException("Invalid value for " + key + " on " + entity + ": " + value); - } - } - - public static <T> void assertValid(Location location, ConfigKey<T> key, T value) { - if (!new LocationConfigConstraints(location).isValueValid(key, value)) { - throw new ConstraintViolationException("Invalid value for " + key + " on " + location + ": " + value); - } - } - - private static String errorMessage(BrooklynObject object, Iterable<ConfigKey<?>> violations) { - StringBuilder message = new StringBuilder("Error configuring ") - .append(object.getDisplayName()) - .append(": ["); - Iterator<ConfigKey<?>> it = violations.iterator(); - while (it.hasNext()) { - ConfigKey<?> config = it.next(); - message.append(config.getName()) - .append(":") - .append(config.getConstraint()); - if (it.hasNext()) { - message.append(", "); - } - } - return message.append("]").toString(); - } - - public ConfigConstraints(T brooklynObject) { - this.brooklynObject = brooklynObject; - } - - abstract Iterable<ConfigKey<?>> getBrooklynObjectTypeConfigKeys(); - - public Iterable<ConfigKey<?>> getViolations() { - return validateAll(); - } - - @SuppressWarnings("unchecked") - private Iterable<ConfigKey<?>> validateAll() { - List<ConfigKey<?>> violating = Lists.newLinkedList(); - Iterable<ConfigKey<?>> configKeys = getBrooklynObjectTypeConfigKeys(); - LOG.trace("Checking config keys on {}: {}", getBrooklynObject(), configKeys); - for (ConfigKey<?> configKey : configKeys) { - BrooklynObjectInternal.ConfigurationSupportInternal configInternal = getConfigurationSupportInternal(); - // getNonBlocking method coerces the value to the config key's type. - Maybe<?> maybeValue = configInternal.getNonBlocking(configKey); - if (maybeValue.isPresent()) { - // Cast is safe because the author of the constraint on the config key had to - // keep its type to Predicte<? super T>, where T is ConfigKey<T>. - ConfigKey<Object> ck = (ConfigKey<Object>) configKey; - if (!isValueValid(ck, maybeValue.get())) { - violating.add(configKey); - } - } - } - return violating; - } - - @SuppressWarnings("unchecked") - <V> boolean isValueValid(ConfigKey<V> configKey, V value) { - try { - Predicate<? super V> po = configKey.getConstraint(); - if (po instanceof BrooklynObjectPredicate) { - return BrooklynObjectPredicate.class.cast(po).apply(value, brooklynObject); - } else { - return po.apply(value); - } - } catch (Exception e) { - LOG.debug("Error checking constraint on " + configKey.getName(), e); - } - return true; - } - - private BrooklynObjectInternal.ConfigurationSupportInternal getConfigurationSupportInternal() { - return ((BrooklynObjectInternal) brooklynObject).config(); - } - - protected T getBrooklynObject() { - return brooklynObject; - } - - private static class EntityConfigConstraints extends ConfigConstraints<Entity> { - public EntityConfigConstraints(Entity brooklynObject) { - super(brooklynObject); - } - - @Override - Iterable<ConfigKey<?>> getBrooklynObjectTypeConfigKeys() { - return getBrooklynObject().getEntityType().getConfigKeys(); - } - } - - private static class EntityAdjunctConstraints extends ConfigConstraints<EntityAdjunct> { - public EntityAdjunctConstraints(EntityAdjunct brooklynObject) { - super(brooklynObject); - } - - @Override - Iterable<ConfigKey<?>> getBrooklynObjectTypeConfigKeys() { - return ((AbstractEntityAdjunct) getBrooklynObject()).getAdjunctType().getConfigKeys(); - } - } - - private static class LocationConfigConstraints extends ConfigConstraints<Location> { - public LocationConfigConstraints(Location brooklynObject) { - super(brooklynObject); - } - - @Override - Iterable<ConfigKey<?>> getBrooklynObjectTypeConfigKeys() { - return Collections.emptyList(); - } - } - -} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigKeys.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigKeys.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigKeys.java deleted file mode 100644 index ecc1ec0..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigKeys.java +++ /dev/null @@ -1,273 +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 org.apache.brooklyn.core.config; - -import java.util.Map; - -import javax.annotation.Nonnull; - -import org.apache.brooklyn.config.ConfigKey; -import org.apache.brooklyn.core.config.BasicConfigKey.BasicConfigKeyOverwriting; -import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey; -import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey; -import org.apache.brooklyn.core.sensor.PortAttributeSensorAndConfigKey; -import org.apache.brooklyn.core.sensor.TemplatedStringAttributeSensorAndConfigKey; -import org.apache.brooklyn.util.core.config.ConfigBag; -import org.apache.brooklyn.util.text.Strings; -import org.apache.brooklyn.util.time.Duration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.base.CaseFormat; -import com.google.common.base.Preconditions; -import com.google.common.reflect.TypeToken; - - -/** - * Dictionary of {@link ConfigKey} entries. - */ -public class ConfigKeys { - - private static final Logger log = LoggerFactory.getLogger(ConfigKeys.class); - - public static <T> ConfigKey<T> newConfigKey(Class<T> type, String name) { - return new BasicConfigKey<T>(type, name); - } - - public static <T> ConfigKey<T> newConfigKey(Class<T> type, String name, String description) { - return new BasicConfigKey<T>(type, name, description); - } - - public static <T> ConfigKey<T> newConfigKey(TypeToken<T> type, String name) { - return new BasicConfigKey<T>(type, name); - } - - public static <T> ConfigKey<T> newConfigKey(TypeToken<T> type, String name, String description) { - return new BasicConfigKey<T>(type, name, description); - } - - public static <T> ConfigKey<T> newConfigKey(Class<T> type, String name, String description, T defaultValue) { - return new BasicConfigKey<T>(type, name, description, defaultValue); - } - - public static <T> ConfigKey<T> newConfigKey(TypeToken<T> type, String name, String description, T defaultValue) { - return new BasicConfigKey<T>(type, name, description, defaultValue); - } - - public static <T> AttributeSensorAndConfigKey<T,T> newSensorAndConfigKey(Class<T> type, String name, String description) { - return new BasicAttributeSensorAndConfigKey<T>(type, name, description); - } - - public static <T> AttributeSensorAndConfigKey<T,T> newSensorAndConfigKey(Class<T> type, String name, String description, T defaultValue) { - return new BasicAttributeSensorAndConfigKey<T>(type, name, description, defaultValue); - } - - public static <T> AttributeSensorAndConfigKey<T,T> newSensorAndConfigKey(TypeToken<T> type, String name, String description) { - return new BasicAttributeSensorAndConfigKey<T>(type, name, description); - } - - public static <T> AttributeSensorAndConfigKey<T,T> newSensorAndConfigKey(TypeToken<T> type, String name, String description, T defaultValue) { - return new BasicAttributeSensorAndConfigKey<T>(type, name, description, defaultValue); - } - - public static AttributeSensorAndConfigKey<String,String> newStringSensorAndConfigKey(String name, String description) { - return new BasicAttributeSensorAndConfigKey.StringAttributeSensorAndConfigKey(name, description); - } - - public static AttributeSensorAndConfigKey<String,String> newStringSensorAndConfigKey(String name, String description, String defaultValue) { - return new BasicAttributeSensorAndConfigKey.StringAttributeSensorAndConfigKey(name, description, defaultValue); - } - - public static AttributeSensorAndConfigKey<String,String> newTemplateSensorAndConfigKey(String name, String description) { - return new TemplatedStringAttributeSensorAndConfigKey(name, description); - } - - public static AttributeSensorAndConfigKey<String,String> newTemplateSensorAndConfigKey(String name, String description, String defaultValue) { - return new TemplatedStringAttributeSensorAndConfigKey(name, description, defaultValue); - } - - public static AttributeSensorAndConfigKey<Integer,Integer> newIntegerSensorAndConfigKey(String name, String description) { - return new BasicAttributeSensorAndConfigKey.IntegerAttributeSensorAndConfigKey(name, description); - } - - public static AttributeSensorAndConfigKey<Integer,Integer> newIntegerSensorAndConfigKey(String name, String description, Integer defaultValue) { - return new BasicAttributeSensorAndConfigKey.IntegerAttributeSensorAndConfigKey(name, description, defaultValue); - } - - public static PortAttributeSensorAndConfigKey newPortSensorAndConfigKey(String name, String description) { - return new PortAttributeSensorAndConfigKey(name, description); - } - - public static PortAttributeSensorAndConfigKey newPortSensorAndConfigKey(String name, String description, Object defaultValue) { - return new PortAttributeSensorAndConfigKey(name, description, defaultValue); - } - - /** Infers the type from the default value */ - @SuppressWarnings({ "unchecked", "rawtypes" }) - public static <T> ConfigKey<T> newConfigKey(String name, String description, @Nonnull T defaultValue) { - return new BasicConfigKey<T>((Class)Preconditions.checkNotNull(defaultValue, - "Type must be exlicit for ConfigKey if defaultValue is null").getClass(), - name, description, defaultValue); - } - - public static <T> BasicConfigKey.Builder<T> builder(Class<T> type) { - return BasicConfigKey.builder(type); - } - public static <T> BasicConfigKey.Builder<T> builder(TypeToken<T> type) { - return BasicConfigKey.builder(type); - } - public static <T> BasicConfigKey.Builder<T> builder(Class<T> type, String name) { - return BasicConfigKey.builder(type, name); - } - public static <T> BasicConfigKey.Builder<T> builder(TypeToken<T> type, String name) { - return BasicConfigKey.builder(type, name); - } - - // ---- extensions to keys - - public static <T> ConfigKey<T> newConfigKeyWithDefault(ConfigKey<T> parent, T defaultValue) { - return new BasicConfigKeyOverwriting<T>(parent, defaultValue); - } - - public static <T> ConfigKey<T> newConfigKeyWithDefault(ConfigKey<T> parent, String newDescription, T defaultValue) { - return new BasicConfigKeyOverwriting<T>(parent, newDescription, defaultValue); - } - - public static <T> ConfigKey<T> newConfigKeyRenamed(String newName, ConfigKey<T> key) { - return new BasicConfigKey<T>(key.getTypeToken(), newName, key.getDescription(), key.getDefaultValue()); - } - - public static <T> ConfigKey<T> newConfigKeyWithPrefix(String prefix, ConfigKey<T> key) { - return newConfigKeyRenamed(prefix+key.getName(), key); - } - - public static <T> ConfigKey<T> newConfigKeyWithPrefixRemoved(String prefix, ConfigKey<T> key) { - if (key.getName().startsWith(prefix)) { - return newConfigKeyRenamed(key.getName().substring(prefix.length()), key); - } else { - throw new IllegalArgumentException("key "+key+" does not start with prefix "+prefix); - } - } - - /** converts the name of the key from one case-strategy (e.g. lowerCamel) to andother (e.g. lower-hyphen) */ - public static <T> ConfigKey<T> convert(ConfigKey<T> key, CaseFormat inputCaseStrategy, CaseFormat outputCaseStrategy) { - return newConfigKeyRenamed(inputCaseStrategy.to(outputCaseStrategy, key.getName()), key); - } - - // ---- typed keys - - public static ConfigKey<String> newStringConfigKey(String name) { - return newConfigKey(String.class, name); - } - public static ConfigKey<String> newStringConfigKey(String name, String description) { - return newConfigKey(String.class, name, description); - } - public static ConfigKey<String> newStringConfigKey(String name, String description, String defaultValue) { - return newConfigKey(String.class, name, description, defaultValue); - } - - public static ConfigKey<Integer> newIntegerConfigKey(String name) { - return newConfigKey(Integer.class, name); - } - public static ConfigKey<Integer> newIntegerConfigKey(String name, String description) { - return newConfigKey(Integer.class, name, description); - } - public static ConfigKey<Integer> newIntegerConfigKey(String name, String description, Integer defaultValue) { - return newConfigKey(Integer.class, name, description, defaultValue); - } - - public static ConfigKey<Long> newLongConfigKey(String name) { - return newConfigKey(Long.class, name); - } - public static ConfigKey<Long> newLongConfigKey(String name, String description) { - return newConfigKey(Long.class, name, description); - } - public static ConfigKey<Long> newLongConfigKey(String name, String description, Long defaultValue) { - return newConfigKey(Long.class, name, description, defaultValue); - } - - public static ConfigKey<Double> newDoubleConfigKey(String name) { - return newConfigKey(Double.class, name); - } - public static ConfigKey<Double> newDoubleConfigKey(String name, String description) { - return newConfigKey(Double.class, name, description); - } - public static ConfigKey<Double> newDoubleConfigKey(String name, String description, Double defaultValue) { - return newConfigKey(Double.class, name, description, defaultValue); - } - - public static ConfigKey<Boolean> newBooleanConfigKey(String name) { - return newConfigKey(Boolean.class, name); - } - public static ConfigKey<Boolean> newBooleanConfigKey(String name, String description) { - return newConfigKey(Boolean.class, name, description); - } - public static ConfigKey<Boolean> newBooleanConfigKey(String name, String description, Boolean defaultValue) { - return newConfigKey(Boolean.class, name, description, defaultValue); - } - - public static ConfigKey<Duration> newDurationConfigKey(String name) { - return newConfigKey(Duration.class, name); - } - public static ConfigKey<Duration> newDurationConfigKey(String name, String description) { - return newConfigKey(Duration.class, name, description); - } - public static ConfigKey<Duration> newDurationConfigKey(String name, String description, Duration defaultValue) { - return newConfigKey(Duration.class, name, description, defaultValue); - } - - public static class DynamicKeys { - - // TODO see below -// public static final ConfigKey<String> TYPE = ConfigKeys.newStringConfigKey("type"); - public static final ConfigKey<String> NAME = ConfigKeys.newStringConfigKey("name"); - public static final ConfigKey<String> DESCRIPTION = ConfigKeys.newStringConfigKey("description"); - public static final ConfigKey<Object> DEFAULT_VALUE = ConfigKeys.newConfigKey(Object.class, "defaultValue"); - - public static ConfigKey<?> newInstance(ConfigBag keyDefs) { - String typeName = Strings.toString(keyDefs.getStringKey("type")); - if (Strings.isNonBlank(typeName)) { - // TODO dynamic typing - see TYPE key commented out above; also see AddSensor.getType for type lookup - log.warn("Setting 'type' is not currently supported for dynamic config keys; ignoring in definition of "+keyDefs); - } - - Class<Object> type = Object.class; - String name = keyDefs.get(NAME); - String description = keyDefs.get(DESCRIPTION); - Object defaultValue = keyDefs.get(DEFAULT_VALUE); - return newConfigKey(type, name, description, defaultValue); - } - - /** creates a new {@link ConfigKey} given a map describing it */ - public static ConfigKey<?> newInstance(Map<?,?> keyDefs) { - return newInstance(ConfigBag.newInstance(keyDefs)); - } - - /** creates a new {@link ConfigKey} given a name (e.g. as a key in a larger map) and a map of other definition attributes */ - public static ConfigKey<?> newNamedInstance(String name, Map<?,?> keyDefs) { - ConfigBag defs = ConfigBag.newInstance(keyDefs); - String oldName = defs.put(NAME, name); - if (oldName!=null && !oldName.equals(name)) - log.warn("Dynamic key '"+oldName+"' being overridden as key '"+name+"' in "+keyDefs); - return newInstance(defs); - } - - } - -} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigPredicates.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigPredicates.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigPredicates.java deleted file mode 100644 index a2f5bec..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigPredicates.java +++ /dev/null @@ -1,157 +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 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.guava.SerializablePredicate; -import org.apache.brooklyn.util.text.StringPredicates; -import org.apache.brooklyn.util.text.WildcardGlobs; - -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; - -@SuppressWarnings("serial") -public class ConfigPredicates { - - /** @deprecated since 0.9.0 kept only to allow conversion of anonymous inner classes */ - @SuppressWarnings("unused") @Deprecated - private static Predicate<ConfigKey<?>> startingWithOld(final String prefix) { - // TODO PERSISTENCE WORKAROUND - return new Predicate<ConfigKey<?>>() { - @Override - public boolean apply(@Nullable ConfigKey<?> input) { - return (input != null) && input.getName().startsWith(prefix); - } - }; - } - - /** @deprecated since 0.9.0 kept only to allow conversion of anonymous inner classes */ - @SuppressWarnings("unused") @Deprecated - private static Predicate<ConfigKey<?>> matchingGlobOld(final String glob) { - // TODO PERSISTENCE WORKAROUND - return new Predicate<ConfigKey<?>>() { - @Override - public boolean apply(@Nullable ConfigKey<?> input) { - return (input != null) && WildcardGlobs.isGlobMatched(glob, input.getName()); - } - }; - } - - /** @deprecated since 0.9.0 kept only to allow conversion of anonymous inner classes */ - @SuppressWarnings("unused") @Deprecated - private static Predicate<ConfigKey<?>> matchingRegexOld(final String regex) { - // TODO PERSISTENCE WORKAROUND - 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(); - } - }; - } - - /** @deprecated since 0.9.0 kept only to allow conversion of anonymous inner classes */ - @SuppressWarnings("unused") @Deprecated - private static Predicate<ConfigKey<?>> nameMatchingOld(final Predicate<String> filter) { - // TODO PERSISTENCE WORKAROUND - return new Predicate<ConfigKey<?>>() { - @Override - public boolean apply(@Nullable ConfigKey<?> input) { - return (input != null) && filter.apply(input.getName()); - } - }; - } - - /** @deprecated since 0.9.0; use {@link #nameStartsWith(String)} */ - public static Predicate<ConfigKey<?>> startingWith(final String prefix) { - return nameStartsWith(prefix); - } - - /** @deprecated since 0.9.0; use {@link #nameMatchesGlob(String)} */ - public static Predicate<ConfigKey<?>> matchingGlob(final String glob) { - return nameMatchesGlob(glob); - } - - /** @deprecated since 0.9.0; use {@link #nameMatchesRegex(String)} */ - public static Predicate<ConfigKey<?>> matchingRegex(final String regex) { - return nameMatchesRegex(regex); - } - - /** @deprecated since 0.9.0; use {@link #nameSatisfies(Predicate)} */ - public static Predicate<ConfigKey<?>> nameMatching(final Predicate<String> filter) { - return nameSatisfies(filter); - } - - /** - * @since 0.9.0 - */ - public static Predicate<ConfigKey<?>> nameStartsWith(final String prefix) { - return nameSatisfies(StringPredicates.startsWith(prefix)); - } - - /** - * @since 0.9.0 - */ - public static Predicate<ConfigKey<?>> nameMatchesGlob(final String glob) { - return nameSatisfies(StringPredicates.matchesGlob(glob)); - } - - /** - * @since 0.9.0 - */ - public static Predicate<ConfigKey<?>> nameMatchesRegex(final String regex) { - return nameSatisfies(StringPredicates.matchesRegex(regex)); - } - - /** - * @since 0.9.0 - */ - public static Predicate<ConfigKey<?>> nameEqualTo(final String val) { - return nameSatisfies(Predicates.equalTo(val)); - } - - /** - * @since 0.9.0 - */ - public static Predicate<ConfigKey<?>> nameSatisfies(final Predicate<? super String> condition) { - return new NameSatisfies(condition); - } - - /** - * @since 0.9.0 - */ - protected static class NameSatisfies implements SerializablePredicate<ConfigKey<?>> { - protected final Predicate<? super String> condition; - protected NameSatisfies(Predicate<? super String> condition) { - this.condition = condition; - } - @Override - public boolean apply(@Nullable ConfigKey<?> input) { - return (input != null) && condition.apply(input.getName()); - } - @Override - public String toString() { - return "displayNameSatisfies("+condition+")"; - } - } -} http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigUtils.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigUtils.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConfigUtils.java deleted file mode 100644 index 80d06b9..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/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 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.ConfigUtils; -import org.apache.brooklyn.core.config.WrappedConfigKey; -import org.apache.brooklyn.core.internal.BrooklynProperties; -import org.apache.brooklyn.util.exceptions.Exceptions; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -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/brooklyn-server/blob/d03f254b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConstraintViolationException.java ---------------------------------------------------------------------- diff --git a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConstraintViolationException.java b/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConstraintViolationException.java deleted file mode 100644 index 55c7f07..0000000 --- a/brooklyn-server/core/src/main/java/org/apache/brooklyn/core/config/ConstraintViolationException.java +++ /dev/null @@ -1,38 +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 org.apache.brooklyn.core.config; - -/** - * A {@link ConstraintViolationException} indicates one or more problems applying - * values for {@link org.apache.brooklyn.config.ConfigKey ConfigKeys} when creating - * a {@link org.apache.brooklyn.api.objs.BrooklynObject}. - */ -public class ConstraintViolationException extends RuntimeException { - private static final long serialVersionUID = -6719912119648996815L; - - public ConstraintViolationException(String message) { - super(message); - } - - public ConstraintViolationException(String message, Throwable cause) { - super(message, cause); - } - -}
