http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java deleted file mode 100644 index 6e9f963..0000000 --- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java +++ /dev/null @@ -1,193 +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.catalog.internal; - -import java.util.Collection; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import brooklyn.basic.BrooklynObjectInternal; - -import org.apache.brooklyn.api.catalog.CatalogItem; -import org.apache.brooklyn.api.entity.rebind.RebindSupport; -import org.apache.brooklyn.api.management.ManagementContext; -import org.apache.brooklyn.api.mementos.CatalogItemMemento; - -import brooklyn.config.ConfigKey; - -import com.google.common.base.Preconditions; - -public class CatalogItemDo<T,SpecT> implements CatalogItem<T,SpecT>, BrooklynObjectInternal { - - protected final CatalogDo catalog; - protected final CatalogItemDtoAbstract<T,SpecT> itemDto; - - protected volatile Class<T> javaClass; - - public CatalogItemDo(CatalogDo catalog, CatalogItem<T,SpecT> itemDto) { - this.catalog = Preconditions.checkNotNull(catalog, "catalog"); - this.itemDto = (CatalogItemDtoAbstract<T, SpecT>) Preconditions.checkNotNull(itemDto, "itemDto"); - } - - public CatalogItem<T,SpecT> getDto() { - return itemDto; - } - - /** - * Config not supported for catalog item. See {@link #getPlanYaml()}. - */ - @Override - public ConfigurationSupportInternal config() { - throw new UnsupportedOperationException(); - } - - @Override - public <U> U setConfig(ConfigKey<U> key, U val) { - return config().set(key, val); - } - - @Override - public CatalogItemType getCatalogItemType() { - return itemDto.getCatalogItemType(); - } - - @Override - public Class<T> getCatalogItemJavaType() { - return itemDto.getCatalogItemJavaType(); - } - - @Override - public String getId() { - return itemDto.getId(); - } - - @Override - public String getCatalogItemId() { - return itemDto.getCatalogItemId(); - } - - @Override - public void setDeprecated(boolean deprecated) { - itemDto.setDeprecated(deprecated); - } - - @Override - public boolean isDeprecated() { - return itemDto.isDeprecated(); - } - - @Override - public void setCatalogItemId(String id) { - itemDto.setCatalogItemId(id); - } - - @Override - public String getJavaType() { - return itemDto.getJavaType(); - } - - @Deprecated - @Override - public String getName() { - return getDisplayName(); - } - - @Deprecated - @Override - public String getRegisteredTypeName() { - return getSymbolicName(); - } - - @Override - public String getDisplayName() { - return itemDto.getDisplayName(); - } - - @Override - public TagSupport tags() { - return itemDto.tags(); - } - - @Override - public String getDescription() { - return itemDto.getDescription(); - } - - @Override - public String getIconUrl() { - return itemDto.getIconUrl(); - } - - @Override - public String getSymbolicName() { - return itemDto.getSymbolicName(); - } - - @Override - public String getVersion() { - return itemDto.getVersion(); - } - - @Nonnull // but it is still null sometimes, see in CatalogDo.loadJavaClass - @Override - public Collection<CatalogBundle> getLibraries() { - return itemDto.getLibraries(); - } - - /** @deprecated since 0.7.0 this is the legacy mechanism; still needed for policies and apps, but being phased out. - * new items should use {@link #getPlanYaml} and {@link #newClassLoadingContext} */ - @Deprecated - public Class<T> getJavaClass() { - if (javaClass==null) loadJavaClass(null); - return javaClass; - } - - @SuppressWarnings("unchecked") - Class<? extends T> loadJavaClass(final ManagementContext mgmt) { - if (javaClass!=null) return javaClass; - javaClass = (Class<T>)CatalogUtils.newClassLoadingContext(mgmt, getId(), getLibraries(), catalog.getRootClassLoader()).loadClass(getJavaType()); - return javaClass; - } - - @Override - public String toString() { - return getClass().getCanonicalName()+"["+itemDto+"]"; - } - - @Override - public String toXmlString() { - return itemDto.toXmlString(); - } - - @Override - public Class<SpecT> getSpecType() { - return itemDto.getSpecType(); - } - - @Nullable @Override - public String getPlanYaml() { - return itemDto.getPlanYaml(); - } - - @Override - public RebindSupport<CatalogItemMemento> getRebindSupport() { - return itemDto.getRebindSupport(); - } -}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java deleted file mode 100644 index b72f55f..0000000 --- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java +++ /dev/null @@ -1,404 +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.catalog.internal; - -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import brooklyn.basic.AbstractBrooklynObject; - -import org.apache.brooklyn.api.catalog.CatalogItem; -import org.apache.brooklyn.api.entity.rebind.RebindSupport; -import org.apache.brooklyn.api.mementos.CatalogItemMemento; - -import brooklyn.config.ConfigKey; -import brooklyn.entity.rebind.BasicCatalogItemRebindSupport; -import brooklyn.util.collections.MutableList; -import brooklyn.util.flags.FlagUtils; -import brooklyn.util.flags.SetFromFlag; - -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.Sets; - -public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynObject implements CatalogItem<T, SpecT> { - - private static Logger LOG = LoggerFactory.getLogger(CatalogItemDtoAbstract.class); - - private @SetFromFlag String symbolicName; - private @SetFromFlag String version = BasicBrooklynCatalog.NO_VERSION; - - private @SetFromFlag String displayName; - private @SetFromFlag String description; - private @SetFromFlag String iconUrl; - - private @SetFromFlag String javaType; - /**@deprecated since 0.7.0, left for deserialization backwards compatibility */ - private @Deprecated @SetFromFlag String type; - private @SetFromFlag String planYaml; - - private @SetFromFlag Collection<CatalogBundle> libraries; - private @SetFromFlag Set<Object> tags = Sets.newLinkedHashSet(); - private @SetFromFlag boolean deprecated; - - /** - * Config not supported for catalog item. See {@link #getPlanYaml()}. - */ - @Override - public ConfigurationSupportInternal config() { - throw new UnsupportedOperationException(); - } - - @Override - public <U> U setConfig(ConfigKey<U> key, U val) { - return config().set(key, val); - } - - @Override - public String getId() { - return getCatalogItemId(); - } - - @Override - public String getCatalogItemId() { - return CatalogUtils.getVersionedId(getSymbolicName(), getVersion()); - } - - @Override - public String getJavaType() { - if (javaType != null) return javaType; - return type; - } - - @Deprecated - public String getName() { - return getDisplayName(); - } - - @Deprecated - public String getRegisteredTypeName() { - return getSymbolicName(); - } - - @Override - public String getDisplayName() { - return displayName; - } - - @Override - public String getDescription() { - return description; - } - - @Override - public String getIconUrl() { - return iconUrl; - } - - @Override - public String getSymbolicName() { - if (symbolicName != null) return symbolicName; - return getJavaType(); - } - - @Override - public String getVersion() { - // The property is set to NO_VERSION when the object is initialized so it's not supposed to be null ever. - // But xstream doesn't call constructors when reading from the catalog.xml file which results in null value - // for the version property. That's why we have to fix it in the getter. - if (version != null) { - return version; - } else { - return BasicBrooklynCatalog.NO_VERSION; - } - } - - @Override - public boolean isDeprecated() { - return deprecated; - } - - @Override - public void setDeprecated(boolean deprecated) { - this.deprecated = deprecated; - } - - @Nonnull - @Override - public Collection<CatalogBundle> getLibraries() { - if (libraries != null) { - return ImmutableList.copyOf(libraries); - } else { - return Collections.emptyList(); - } - } - - @Nullable @Override - public String getPlanYaml() { - return planYaml; - } - - @Override - public int hashCode() { - return Objects.hashCode(symbolicName, planYaml, javaType, nullIfEmpty(libraries), version, getCatalogItemId()); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null) return false; - if (getClass() != obj.getClass()) return false; - CatalogItemDtoAbstract<?,?> other = (CatalogItemDtoAbstract<?,?>) obj; - if (!Objects.equal(symbolicName, other.symbolicName)) return false; - if (!Objects.equal(planYaml, other.planYaml)) return false; - if (!Objects.equal(javaType, other.javaType)) return false; - if (!Objects.equal(nullIfEmpty(libraries), nullIfEmpty(other.libraries))) return false; - if (!Objects.equal(getCatalogItemId(), other.getCatalogItemId())) return false; - if (!Objects.equal(version, other.version)) return false; - if (!Objects.equal(deprecated, other.deprecated)) return false; - if (!Objects.equal(description, other.description)) return false; - if (!Objects.equal(displayName, other.displayName)) return false; - if (!Objects.equal(iconUrl, other.iconUrl)) return false; - if (!Objects.equal(tags, other.tags)) return false; - // 'type' not checked, because deprecated, - // and in future we might want to allow it to be removed/blanked in some impls without affecting equality - // (in most cases it is the same as symbolicName so doesn't matter) - return true; - } - - private static <T> Collection<T> nullIfEmpty(Collection<T> coll) { - if (coll==null || coll.isEmpty()) return null; - return coll; - } - - @Override - public String toString() { - return getClass().getSimpleName()+"["+getId()+"/"+getDisplayName()+"]"; - } - - public abstract Class<SpecT> getSpecType(); - - transient CatalogXmlSerializer serializer; - - @Override - public String toXmlString() { - if (serializer==null) loadSerializer(); - return serializer.toString(this); - } - - private synchronized void loadSerializer() { - if (serializer == null) { - serializer = new CatalogXmlSerializer(); - } - } - - @Override - public RebindSupport<CatalogItemMemento> getRebindSupport() { - return new BasicCatalogItemRebindSupport(this); - } - - @Override - public void setDisplayName(String newName) { - this.displayName = newName; - } - - @Override - protected AbstractBrooklynObject configure(Map<?, ?> flags) { - FlagUtils.setFieldsFromFlags(flags, this); - return this; - } - - @Override - public TagSupport tags() { - return new BasicTagSupport(); - } - - /* - * Using a custom tag support class rather than the one in AbstractBrooklynObject because - * when XStream unmarshals a catalog item with no tags (e.g. from any catalog.xml file) - * super.tags will be null, and any call to getTags throws a NullPointerException on the - * synchronized (tags) statement. It can't just be initialised here because super.tags is - * final. - */ - private class BasicTagSupport implements TagSupport { - - private void setTagsIfNull() { - // Possible if the class was unmarshalled by Xstream with no tags - synchronized (CatalogItemDtoAbstract.this) { - if (tags == null) { - tags = Sets.newLinkedHashSet(); - } - } - } - - @Nonnull - @Override - public Set<Object> getTags() { - synchronized (CatalogItemDtoAbstract.this) { - setTagsIfNull(); - return ImmutableSet.copyOf(tags); - } - } - - @Override - public boolean containsTag(Object tag) { - synchronized (CatalogItemDtoAbstract.this) { - setTagsIfNull(); - return tags.contains(tag); - } - } - - @Override - public boolean addTag(Object tag) { - boolean result; - synchronized (CatalogItemDtoAbstract.this) { - setTagsIfNull(); - result = tags.add(tag); - } - onTagsChanged(); - return result; - } - - @Override - public boolean addTags(Iterable<?> newTags) { - boolean result; - synchronized (CatalogItemDtoAbstract.this) { - setTagsIfNull(); - result = Iterables.addAll(tags, newTags); - } - onTagsChanged(); - return result; - } - - @Override - public boolean removeTag(Object tag) { - boolean result; - synchronized (CatalogItemDtoAbstract.this) { - setTagsIfNull(); - result = tags.remove(tag); - } - onTagsChanged(); - return result; - } - } - - @Override - @Deprecated - public void setCatalogItemId(String id) { - //no op, should be used by rebind code only - } - - protected void setSymbolicName(String symbolicName) { - this.symbolicName = symbolicName; - } - - protected void setVersion(String version) { - this.version = version; - } - - protected void setDescription(String description) { - this.description = description; - } - - protected void setIconUrl(String iconUrl) { - this.iconUrl = iconUrl; - } - - protected void setJavaType(String javaType) { - this.javaType = javaType; - this.type = null; - } - - protected void setPlanYaml(String planYaml) { - this.planYaml = planYaml; - } - - protected void setLibraries(Collection<CatalogBundle> libraries) { - this.libraries = libraries; - } - - protected void setTags(Set<Object> tags) { - this.tags = tags; - } - - protected void setSerializer(CatalogXmlSerializer serializer) { - this.serializer = serializer; - } - - /** - * Parses an instance of CatalogLibrariesDto from the given List. Expects the list entries - * to be either Strings or Maps of String -> String. Will skip items that are not. - */ - public static Collection<CatalogBundle> parseLibraries(Collection<?> possibleLibraries) { - Collection<CatalogBundle> dto = MutableList.of(); - for (Object object : possibleLibraries) { - if (object instanceof Map) { - Map<?, ?> entry = (Map<?, ?>) object; - String name = stringValOrNull(entry, "name"); - String version = stringValOrNull(entry, "version"); - String url = stringValOrNull(entry, "url"); - dto.add(new CatalogBundleDto(name, version, url)); - } else if (object instanceof String) { - String inlineRef = (String) object; - - final String name; - final String version; - final String url; - - //Infer reference type (heuristically) - if (inlineRef.contains("/") || inlineRef.contains("\\")) { - //looks like an url/file path - name = null; - version = null; - url = inlineRef; - } else if (CatalogUtils.looksLikeVersionedId(inlineRef)) { - //looks like a name+version ref - name = CatalogUtils.getIdFromVersionedId(inlineRef); - version = CatalogUtils.getVersionFromVersionedId(inlineRef); - url = null; - } else { - //assume it to be relative url - name = null; - version = null; - url = inlineRef; - } - - dto.add(new CatalogBundleDto(name, version, url)); - } else { - LOG.debug("Unexpected entry in libraries list neither string nor map: " + object); - } - } - return dto; - } - - private static String stringValOrNull(Map<?, ?> map, String key) { - Object val = map.get(key); - return val != null ? String.valueOf(val) : null; - } -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDo.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDo.java b/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDo.java deleted file mode 100644 index 2adc851..0000000 --- a/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDo.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 brooklyn.catalog.internal; - -import java.util.Collection; - -import org.apache.brooklyn.api.catalog.CatalogItem; - -import com.google.common.base.Preconditions; - -@Deprecated -public class CatalogLibrariesDo implements CatalogItem.CatalogItemLibraries { - - private final CatalogLibrariesDto librariesDto; - - - public CatalogLibrariesDo(CatalogLibrariesDto librariesDto) { - this.librariesDto = Preconditions.checkNotNull(librariesDto, "librariesDto"); - } - - @Override - public Collection<String> getBundles() { - return librariesDto.getBundles(); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDto.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDto.java b/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDto.java deleted file mode 100644 index 47dcdd5..0000000 --- a/core/src/main/java/brooklyn/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 brooklyn.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/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogLocationItemDto.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogLocationItemDto.java b/core/src/main/java/brooklyn/catalog/internal/CatalogLocationItemDto.java deleted file mode 100644 index da185f2..0000000 --- a/core/src/main/java/brooklyn/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 brooklyn.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/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogPolicyItemDto.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogPolicyItemDto.java b/core/src/main/java/brooklyn/catalog/internal/CatalogPolicyItemDto.java deleted file mode 100644 index 0475876..0000000 --- a/core/src/main/java/brooklyn/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 brooklyn.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/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogTemplateItemDto.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogTemplateItemDto.java b/core/src/main/java/brooklyn/catalog/internal/CatalogTemplateItemDto.java deleted file mode 100644 index 1003a4c..0000000 --- a/core/src/main/java/brooklyn/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 brooklyn.catalog.internal; - -import org.apache.brooklyn.api.entity.Application; -import org.apache.brooklyn.api.entity.proxying.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/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java b/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java deleted file mode 100644 index 302e17c..0000000 --- a/core/src/main/java/brooklyn/catalog/internal/CatalogUtils.java +++ /dev/null @@ -1,254 +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.catalog.internal; - -import java.util.Collection; - -import javax.annotation.Nullable; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import brooklyn.basic.BrooklynObjectInternal; - -import org.apache.brooklyn.api.basic.BrooklynObject; -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.management.ManagementContext; -import org.apache.brooklyn.api.management.classloading.BrooklynClassLoadingContext; -import org.apache.brooklyn.core.management.classloading.BrooklynClassLoadingContextSequential; -import org.apache.brooklyn.core.management.classloading.JavaBrooklynClassLoadingContext; -import org.apache.brooklyn.core.management.classloading.OsgiBrooklynClassLoadingContext; -import org.apache.brooklyn.core.management.ha.OsgiManager; -import org.apache.brooklyn.core.management.internal.ManagementContextInternal; - -import brooklyn.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker; -import brooklyn.config.BrooklynLogging; -import brooklyn.entity.basic.EntityInternal; -import brooklyn.entity.rebind.RebindManagerImpl.RebindTracker; -import brooklyn.util.guava.Maybe; -import brooklyn.util.text.Strings; -import brooklyn.util.time.Time; - -import com.google.common.annotations.Beta; -import com.google.common.base.Joiner; -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 getClassLoadingContext(Entity entity) { - ManagementContext mgmt = ((EntityInternal)entity).getManagementContext(); - String catId = entity.getCatalogItemId(); - if (Strings.isBlank(catId)) return JavaBrooklynClassLoadingContext.create(mgmt); - CatalogItem<?, ?> cat = getCatalogItemOptionalVersion(mgmt, catId); - if (cat==null) { - 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); - } - - public static BrooklynClassLoadingContext newClassLoadingContext(@Nullable ManagementContext mgmt, String catalogItemId, Collection<CatalogBundle> libraries) { - 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)); - 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; - } - - public static String getIdFromVersionedId(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; - } - - //TODO Don't really like this, but it's better to have it here than on the interface to keep the API's - //surface minimal. Could instead have the interface methods accept VerionedId object and have the helpers - //construct it as needed. - public static CatalogItem<?, ?> getCatalogItemOptionalVersion(ManagementContext mgmt, String versionedId) { - if (versionedId == null) return null; - if (looksLikeVersionedId(versionedId)) { - String id = getIdFromVersionedId(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) { - CatalogItem<?, ?> bestVersion = getCatalogItemOptionalVersion(mgmt, item.getSymbolicName()); - if (bestVersion==null) return false; - return (bestVersion.getVersion().equals(item.getVersion())); - } - - public static <T,SpecT> CatalogItem<T, SpecT> getCatalogItemOptionalVersion(ManagementContext mgmt, Class<T> type, String versionedId) { - if (looksLikeVersionedId(versionedId)) { - String id = getIdFromVersionedId(versionedId); - String version = getVersionFromVersionedId(versionedId); - return mgmt.getCatalog().getCatalogItem(type, id, version); - } else { - return mgmt.getCatalog().getCatalogItem(type, versionedId, BrooklynCatalog.DEFAULT_VERSION); - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/catalog/internal/CatalogXmlSerializer.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogXmlSerializer.java b/core/src/main/java/brooklyn/catalog/internal/CatalogXmlSerializer.java deleted file mode 100644 index dbfd3fc..0000000 --- a/core/src/main/java/brooklyn/catalog/internal/CatalogXmlSerializer.java +++ /dev/null @@ -1,73 +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.catalog.internal; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import brooklyn.basic.AbstractBrooklynObject; -import brooklyn.catalog.internal.CatalogClasspathDo.CatalogScanningModes; -import brooklyn.util.xstream.EnumCaseForgivingSingleValueConverter; -import brooklyn.util.xstream.XmlSerializer; - -public class CatalogXmlSerializer extends XmlSerializer<Object> { - - @SuppressWarnings("deprecation") - public CatalogXmlSerializer() { - xstream.addDefaultImplementation(ArrayList.class, Collection.class); - - 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/incubator-brooklyn/blob/6caee589/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 index 2eae73e..e884bdd 100644 --- a/core/src/main/java/brooklyn/config/BrooklynServerConfig.java +++ b/core/src/main/java/brooklyn/config/BrooklynServerConfig.java @@ -26,10 +26,10 @@ import java.net.URI; import java.util.Map; import org.apache.brooklyn.api.management.ManagementContext; +import org.apache.brooklyn.core.catalog.internal.CatalogInitialization; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import brooklyn.catalog.internal.CatalogInitialization; import brooklyn.entity.basic.ConfigKeys; import brooklyn.util.guava.Maybe; import brooklyn.util.os.Os; @@ -103,7 +103,7 @@ public class BrooklynServerConfig { /** @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<brooklyn.catalog.CatalogLoadMode> CATALOG_LOAD_MODE = ConfigKeys.newConfigKey(brooklyn.catalog.CatalogLoadMode.class, + 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"); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java index 2860b82..1d21a7e 100644 --- a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java +++ b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java @@ -53,6 +53,7 @@ import org.apache.brooklyn.api.policy.EnricherSpec; import org.apache.brooklyn.api.policy.EntityAdjunct; import org.apache.brooklyn.api.policy.Policy; import org.apache.brooklyn.api.policy.PolicySpec; +import org.apache.brooklyn.core.catalog.internal.CatalogUtils; import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement; import org.apache.brooklyn.core.internal.BrooklynInitialization; import org.apache.brooklyn.core.management.internal.EffectorUtils; @@ -64,7 +65,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import brooklyn.basic.AbstractBrooklynObject; -import brooklyn.catalog.internal.CatalogUtils; import brooklyn.config.BrooklynLogging; import brooklyn.config.ConfigKey; import brooklyn.config.ConfigKey.HasConfigKey; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java b/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java index 0d4d92c..52e87a6 100644 --- a/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java +++ b/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java @@ -20,10 +20,10 @@ package brooklyn.entity.rebind; import org.apache.brooklyn.api.entity.rebind.RebindContext; import org.apache.brooklyn.api.mementos.CatalogItemMemento; +import org.apache.brooklyn.core.catalog.internal.CatalogItemDtoAbstract; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import brooklyn.catalog.internal.CatalogItemDtoAbstract; import brooklyn.util.collections.MutableMap; import brooklyn.util.flags.FlagUtils; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/RebindContextLookupContext.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindContextLookupContext.java b/core/src/main/java/brooklyn/entity/rebind/RebindContextLookupContext.java index 81b1321..e132a51 100644 --- a/core/src/main/java/brooklyn/entity/rebind/RebindContextLookupContext.java +++ b/core/src/main/java/brooklyn/entity/rebind/RebindContextLookupContext.java @@ -34,8 +34,7 @@ import org.apache.brooklyn.api.management.ManagementContext; import org.apache.brooklyn.api.mementos.BrooklynMementoPersister.LookupContext; import org.apache.brooklyn.api.policy.Enricher; import org.apache.brooklyn.api.policy.Policy; - -import brooklyn.catalog.internal.CatalogUtils; +import org.apache.brooklyn.core.catalog.internal.CatalogUtils; /** Looks in {@link RebindContext} <i>and</i> {@link ManagementContext} to find entities, locations, etc. */ public class RebindContextLookupContext implements LookupContext { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java index 8c6a402..1164fff 100644 --- a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java +++ b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java @@ -64,6 +64,8 @@ import org.apache.brooklyn.api.mementos.TreeNode; import org.apache.brooklyn.api.mementos.BrooklynMementoManifest.EntityMementoManifest; import org.apache.brooklyn.api.policy.Enricher; import org.apache.brooklyn.api.policy.Policy; +import org.apache.brooklyn.core.catalog.internal.CatalogInitialization; +import org.apache.brooklyn.core.catalog.internal.CatalogUtils; import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement; import org.apache.brooklyn.core.management.internal.BrooklynObjectManagementMode; import org.apache.brooklyn.core.management.internal.BrooklynObjectManagerInternal; @@ -72,8 +74,6 @@ import org.apache.brooklyn.core.management.internal.LocationManagerInternal; import org.apache.brooklyn.core.management.internal.ManagementContextInternal; import org.apache.brooklyn.core.management.internal.ManagementTransitionMode; -import brooklyn.catalog.internal.CatalogInitialization; -import brooklyn.catalog.internal.CatalogUtils; import brooklyn.config.BrooklynLogging; import brooklyn.config.BrooklynLogging.LoggingLevel; import brooklyn.enricher.basic.AbstractEnricher; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java b/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java index b2a3068..e46a6af 100644 --- a/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java +++ b/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java @@ -26,9 +26,8 @@ import java.util.Map; import org.codehaus.jackson.annotate.JsonAutoDetect; import org.apache.brooklyn.api.catalog.CatalogItem; import org.apache.brooklyn.api.mementos.CatalogItemMemento; - -import brooklyn.catalog.internal.BasicBrooklynCatalog; -import brooklyn.catalog.internal.CatalogUtils; +import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog; +import org.apache.brooklyn.core.catalog.internal.CatalogUtils; import com.google.common.base.Joiner; import com.google.common.base.Objects; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java index 3525d84..dbe6e26 100644 --- a/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java +++ b/core/src/main/java/brooklyn/entity/rebind/dto/MementosGenerators.java @@ -49,8 +49,8 @@ import org.apache.brooklyn.api.mementos.PolicyMemento; import org.apache.brooklyn.api.policy.Enricher; import org.apache.brooklyn.api.policy.EntityAdjunct; import org.apache.brooklyn.api.policy.Policy; +import org.apache.brooklyn.core.catalog.internal.CatalogItemDo; -import brooklyn.catalog.internal.CatalogItemDo; import brooklyn.config.ConfigKey; import brooklyn.enricher.basic.AbstractEnricher; import brooklyn.entity.basic.EntityDynamicType; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java index be51b44..b5ca9c1 100644 --- a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java +++ b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java @@ -48,9 +48,9 @@ import org.apache.brooklyn.api.mementos.BrooklynMementoPersister; import org.apache.brooklyn.api.mementos.BrooklynMementoRawData; import org.apache.brooklyn.api.mementos.CatalogItemMemento; import org.apache.brooklyn.api.mementos.Memento; +import org.apache.brooklyn.core.catalog.internal.CatalogUtils; import org.apache.brooklyn.core.management.classloading.ClassLoaderFromBrooklynClassLoadingContext; -import brooklyn.catalog.internal.CatalogUtils; import brooklyn.config.ConfigKey; import brooklyn.config.StringConfigMap; import brooklyn.entity.basic.ConfigKeys; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/persister/CatalogItemLibrariesConverter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/CatalogItemLibrariesConverter.java b/core/src/main/java/brooklyn/entity/rebind/persister/CatalogItemLibrariesConverter.java index 7a7481c..4cf6310 100644 --- a/core/src/main/java/brooklyn/entity/rebind/persister/CatalogItemLibrariesConverter.java +++ b/core/src/main/java/brooklyn/entity/rebind/persister/CatalogItemLibrariesConverter.java @@ -23,8 +23,7 @@ import java.util.Collection; import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle; import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemLibraries; - -import brooklyn.catalog.internal.CatalogBundleDto; +import org.apache.brooklyn.core.catalog.internal.CatalogBundleDto; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java b/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java index fe5a677..99ee2e5 100644 --- a/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java +++ b/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java @@ -42,12 +42,12 @@ import org.apache.brooklyn.api.management.classloading.BrooklynClassLoadingConte import org.apache.brooklyn.api.mementos.BrooklynMementoPersister.LookupContext; import org.apache.brooklyn.api.policy.Enricher; import org.apache.brooklyn.api.policy.Policy; +import org.apache.brooklyn.core.catalog.internal.CatalogBundleDto; +import org.apache.brooklyn.core.catalog.internal.CatalogUtils; import org.apache.brooklyn.core.management.classloading.BrooklynClassLoadingContextSequential; import org.apache.brooklyn.core.management.classloading.ClassLoaderFromBrooklynClassLoadingContext; import org.apache.brooklyn.core.management.classloading.JavaBrooklynClassLoadingContext; -import brooklyn.catalog.internal.CatalogBundleDto; -import brooklyn.catalog.internal.CatalogUtils; import brooklyn.entity.basic.BasicParameterType; import brooklyn.entity.effector.EffectorAndBody; import brooklyn.entity.effector.EffectorTasks.EffectorBodyTaskFactory; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/brooklyn/util/ResourceUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/util/ResourceUtils.java b/core/src/main/java/brooklyn/util/ResourceUtils.java index 9b23b7a..338b223 100644 --- a/core/src/main/java/brooklyn/util/ResourceUtils.java +++ b/core/src/main/java/brooklyn/util/ResourceUtils.java @@ -40,6 +40,8 @@ import java.util.regex.Pattern; import org.apache.brooklyn.api.management.ManagementContext; import org.apache.brooklyn.api.management.classloading.BrooklynClassLoadingContext; +import org.apache.brooklyn.core.catalog.internal.CatalogUtils; +import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker; import org.apache.brooklyn.core.internal.BrooklynInitialization; import org.apache.brooklyn.core.management.classloading.JavaBrooklynClassLoadingContext; import org.apache.http.HttpEntity; @@ -51,10 +53,6 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import brooklyn.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker; -import brooklyn.catalog.internal.CatalogUtils; - import org.apache.brooklyn.location.basic.SshMachineLocation; import brooklyn.util.collections.MutableMap; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogLoadMode.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogLoadMode.java b/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogLoadMode.java new file mode 100644 index 0000000..8e9d6d5 --- /dev/null +++ b/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogLoadMode.java @@ -0,0 +1,73 @@ +/* + * 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; + +import org.apache.brooklyn.core.catalog.internal.CatalogInitialization; +import org.slf4j.LoggerFactory; + +import brooklyn.entity.rebind.persister.PersistMode; + +/** @deprecated since 0.7.0 replaced by {@link CatalogInitialization} */ +@Deprecated +public enum CatalogLoadMode { + /** + * The server will load its initial catalog from the URL configured in + * {@link brooklyn.config.BrooklynServerConfig#BROOKLYN_CATALOG_URL} and will + * disregard existing persisted state. + */ + LOAD_BROOKLYN_CATALOG_URL, + + /** + * The server will load its initial catalog from previously persisted state, + * and will behave as {@link #LOAD_BROOKLYN_CATALOG_URL} if no state exists. + */ + LOAD_BROOKLYN_CATALOG_URL_IF_NO_PERSISTED_STATE, + + /** + * The server will load its initial catalog from previously persisted state. + * The catalog will be empty if no previous state exists. + */ + LOAD_PERSISTED_STATE; + + /** + * @return A catalog load mode suitable for the given persistence mode: + * <ul> + * <li>disabled: {@link #LOAD_BROOKLYN_CATALOG_URL}</li> + * <li>rebind: {@link #LOAD_PERSISTED_STATE}</li> + * <li>auto or clean: {@link #LOAD_BROOKLYN_CATALOG_URL_IF_NO_PERSISTED_STATE}</li> + * </ul> + */ + public static CatalogLoadMode forPersistMode(PersistMode m) { + // Clean case relies on the persistence directory being cleaned and rebind manager + // believing the store to be empty. + switch (m) { + case DISABLED: + return LOAD_BROOKLYN_CATALOG_URL; + case AUTO: + case CLEAN: + return LOAD_BROOKLYN_CATALOG_URL_IF_NO_PERSISTED_STATE; + case REBIND: + return LOAD_PERSISTED_STATE; + default: + LoggerFactory.getLogger(CatalogLoadMode.class) + .warn("Unhandled persistence mode {}. Catalog defaulting to {}", m.name(), LOAD_BROOKLYN_CATALOG_URL.name()); + return LOAD_BROOKLYN_CATALOG_URL; + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6caee589/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogPredicates.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogPredicates.java b/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogPredicates.java new file mode 100644 index 0000000..654fe56 --- /dev/null +++ b/core/src/main/java/org/apache/brooklyn/core/catalog/CatalogPredicates.java @@ -0,0 +1,142 @@ +/* + * 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; + +import javax.annotation.Nullable; + +import org.apache.brooklyn.api.catalog.CatalogItem; +import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType; +import org.apache.brooklyn.api.entity.Application; +import org.apache.brooklyn.api.entity.Entity; +import org.apache.brooklyn.api.entity.proxying.EntitySpec; +import org.apache.brooklyn.api.location.Location; +import org.apache.brooklyn.api.location.LocationSpec; +import org.apache.brooklyn.api.management.ManagementContext; +import org.apache.brooklyn.api.policy.Policy; +import org.apache.brooklyn.api.policy.PolicySpec; +import org.apache.brooklyn.core.catalog.internal.CatalogUtils; +import org.apache.brooklyn.core.management.entitlement.Entitlements; + +import com.google.common.base.Function; +import com.google.common.base.Predicate; + +public class CatalogPredicates { + + public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> isCatalogItemType(final CatalogItemType ciType) { + return new Predicate<CatalogItem<T,SpecT>>() { + @Override + public boolean apply(@Nullable CatalogItem<T,SpecT> item) { + return (item != null) && item.getCatalogItemType()==ciType; + } + }; + } + + public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> deprecated(final boolean deprecated) { + return new Predicate<CatalogItem<T,SpecT>>() { + @Override + public boolean apply(@Nullable CatalogItem<T,SpecT> item) { + return (item != null) && item.isDeprecated() == deprecated; + } + }; + } + + public static final Predicate<CatalogItem<Application,EntitySpec<? extends Application>>> IS_TEMPLATE = + CatalogPredicates.<Application,EntitySpec<? extends Application>>isCatalogItemType(CatalogItemType.TEMPLATE); + public static final Predicate<CatalogItem<Entity,EntitySpec<?>>> IS_ENTITY = + CatalogPredicates.<Entity,EntitySpec<?>>isCatalogItemType(CatalogItemType.ENTITY); + public static final Predicate<CatalogItem<Policy,PolicySpec<?>>> IS_POLICY = + CatalogPredicates.<Policy,PolicySpec<?>>isCatalogItemType(CatalogItemType.POLICY); + public static final Predicate<CatalogItem<Location,LocationSpec<?>>> IS_LOCATION = + CatalogPredicates.<Location,LocationSpec<?>>isCatalogItemType(CatalogItemType.LOCATION); + + public static final Function<CatalogItem<?,?>,String> ID_OF_ITEM_TRANSFORMER = new Function<CatalogItem<?,?>, String>() { + @Override @Nullable + public String apply(@Nullable CatalogItem<?,?> input) { + if (input==null) return null; + return input.getId(); + } + }; + + /** @deprecated since 0.7.0 use {@link #displayName(Predicate)} */ + @Deprecated + public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> name(final Predicate<? super String> filter) { + return displayName(filter); + } + + public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> displayName(final Predicate<? super String> filter) { + return new Predicate<CatalogItem<T,SpecT>>() { + @Override + public boolean apply(@Nullable CatalogItem<T,SpecT> item) { + return (item != null) && filter.apply(item.getDisplayName()); + } + }; + } + + @Deprecated + public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> registeredTypeName(final Predicate<? super String> filter) { + return symbolicName(filter); + } + + public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> symbolicName(final Predicate<? super String> filter) { + return new Predicate<CatalogItem<T,SpecT>>() { + @Override + public boolean apply(@Nullable CatalogItem<T,SpecT> item) { + return (item != null) && filter.apply(item.getSymbolicName()); + } + }; + } + + public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> javaType(final Predicate<? super String> filter) { + return new Predicate<CatalogItem<T,SpecT>>() { + @Override + public boolean apply(@Nullable CatalogItem<T,SpecT> item) { + return (item != null) && filter.apply(item.getJavaType()); + } + }; + } + + public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> xml(final Predicate<? super String> filter) { + return new Predicate<CatalogItem<T,SpecT>>() { + @Override + public boolean apply(@Nullable CatalogItem<T,SpecT> item) { + return (item != null) && filter.apply(item.toXmlString()); + } + }; + } + + public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> entitledToSee(final ManagementContext mgmt) { + return new Predicate<CatalogItem<T,SpecT>>() { + @Override + public boolean apply(@Nullable CatalogItem<T,SpecT> item) { + return (item != null) && + Entitlements.isEntitled(mgmt.getEntitlementManager(), Entitlements.SEE_CATALOG_ITEM, item.getCatalogItemId()); + } + }; + } + + public static <T,SpecT> Predicate<CatalogItem<T,SpecT>> isBestVersion(final ManagementContext mgmt) { + return new Predicate<CatalogItem<T,SpecT>>() { + @Override + public boolean apply(@Nullable CatalogItem<T,SpecT> item) { + return CatalogUtils.isBestVersion(mgmt, item); + } + }; + } + +} \ No newline at end of file
