You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2014/11/13 23:23:47 UTC
[14/18] incubator-brooklyn git commit: Catalog versioning - backwards
compatibility from rebind and catalog.xml
Catalog versioning - backwards compatibility from rebind and catalog.xml
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/40eee57a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/40eee57a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/40eee57a
Branch: refs/heads/master
Commit: 40eee57a1a705caa11e500cf8e24a1aba927d40d
Parents: 65995c6
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Wed Nov 12 19:54:03 2014 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Thu Nov 13 11:49:55 2014 +0200
----------------------------------------------------------------------
.../main/java/brooklyn/catalog/CatalogItem.java | 6 +-
.../brooklyn/mementos/CatalogItemMemento.java | 2 +-
.../main/java/brooklyn/basic/BrooklynTypes.java | 2 +-
.../internal/CatalogBundleConverter.java | 59 ++++++++++++++++++
.../catalog/internal/CatalogItemDo.java | 6 ++
.../internal/CatalogItemDtoAbstract.java | 29 +++------
.../catalog/internal/CatalogLibrariesDo.java | 3 +-
.../catalog/internal/CatalogLibrariesDto.java | 14 +++--
.../catalog/internal/CatalogXmlSerializer.java | 8 +--
.../rebind/BasicCatalogItemRebindSupport.java | 2 +-
.../rebind/dto/BasicCatalogItemMemento.java | 39 +++++-------
.../BrooklynMementoPersisterToObjectStore.java | 5 +-
.../CatalogItemLibrariesConverter.java | 64 ++++++++++++++++++++
.../rebind/persister/XmlMementoSerializer.java | 6 ++
.../persister/XmlMementoSerializerTest.java | 5 ++
.../brooklyn/catalog/CatalogYamlEntityTest.java | 2 +-
16 files changed, 192 insertions(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/api/src/main/java/brooklyn/catalog/CatalogItem.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/catalog/CatalogItem.java b/api/src/main/java/brooklyn/catalog/CatalogItem.java
index d06a682..d3824fd 100644
--- a/api/src/main/java/brooklyn/catalog/CatalogItem.java
+++ b/api/src/main/java/brooklyn/catalog/CatalogItem.java
@@ -47,7 +47,7 @@ public interface CatalogItem<T,SpecT> extends BrooklynObject, Rebindable {
@Deprecated
public static interface CatalogItemLibraries {
- Collection<CatalogBundle> getBundles();
+ Collection<String> getBundles();
}
public CatalogItemType getCatalogItemType();
@@ -65,6 +65,10 @@ public interface CatalogItem<T,SpecT> extends BrooklynObject, Rebindable {
@Deprecated
public String getName();
+ /** @deprecated since 0.7.0. Use {@link #getSymbolicName} */
+ @Deprecated
+ public String getRegisteredTypeName();
+
@Nullable public String getDescription();
@Nullable public String getIconUrl();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/api/src/main/java/brooklyn/mementos/CatalogItemMemento.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/mementos/CatalogItemMemento.java b/api/src/main/java/brooklyn/mementos/CatalogItemMemento.java
index d3163e5..36d497d 100644
--- a/api/src/main/java/brooklyn/mementos/CatalogItemMemento.java
+++ b/api/src/main/java/brooklyn/mementos/CatalogItemMemento.java
@@ -36,7 +36,7 @@ public interface CatalogItemMemento extends Memento {
String getJavaType();
- Collection<CatalogItem.CatalogBundle> getBundles();
+ Collection<CatalogItem.CatalogBundle> getLibraries();
CatalogItem.CatalogItemType getCatalogItemType();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/core/src/main/java/brooklyn/basic/BrooklynTypes.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/basic/BrooklynTypes.java b/core/src/main/java/brooklyn/basic/BrooklynTypes.java
index 1a0049c..483cc2b 100644
--- a/core/src/main/java/brooklyn/basic/BrooklynTypes.java
+++ b/core/src/main/java/brooklyn/basic/BrooklynTypes.java
@@ -90,7 +90,7 @@ public class BrooklynTypes {
if (Entity.class.isAssignableFrom(brooklynClass)) {
type = new ImmutableEntityType((Class<? extends Entity>)brooklynClass);
} else if (Location.class.isAssignableFrom(brooklynClass)) {
- type = new ImmutableEntityType((Class)brooklynClass);
+ type = new ImmutableEntityType((Class<? extends Entity>)brooklynClass);
} else if (Policy.class.isAssignableFrom(brooklynClass)) {
type = new PolicyDynamicType((Class<? extends Policy>)brooklynClass); // TODO immutable?
} else if (Enricher.class.isAssignableFrom(brooklynClass)) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/core/src/main/java/brooklyn/catalog/internal/CatalogBundleConverter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogBundleConverter.java b/core/src/main/java/brooklyn/catalog/internal/CatalogBundleConverter.java
new file mode 100644
index 0000000..fe77d02
--- /dev/null
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogBundleConverter.java
@@ -0,0 +1,59 @@
+/*
+ * 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 com.thoughtworks.xstream.converters.Converter;
+import com.thoughtworks.xstream.converters.MarshallingContext;
+import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.converters.reflection.ReflectionConverter;
+import com.thoughtworks.xstream.converters.reflection.ReflectionProvider;
+import com.thoughtworks.xstream.io.HierarchicalStreamReader;
+import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
+import com.thoughtworks.xstream.mapper.Mapper;
+
+
+@Deprecated
+public class CatalogBundleConverter implements Converter {
+
+ private ReflectionConverter delegateConverter;
+
+ public CatalogBundleConverter(Mapper mapper, ReflectionProvider reflectionProvider) {
+ this.delegateConverter = new ReflectionConverter(mapper, reflectionProvider);
+ }
+
+ @Override
+ public boolean canConvert(@SuppressWarnings("rawtypes") Class type) {
+ return type == CatalogBundleDto.class;
+ }
+
+ @Override
+ public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
+ context.convertAnother(source, delegateConverter);
+ }
+
+ @Override
+ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
+ if (reader.hasMoreChildren()) {
+ return context.convertAnother(context.currentObject(), CatalogBundleDto.class, delegateConverter);
+ } else {
+ return new CatalogBundleDto(null, null, reader.getValue());
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/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
index 0b25785..f40a49b 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDo.java
@@ -77,6 +77,12 @@ public class CatalogItemDo<T,SpecT> implements CatalogItem<T,SpecT> {
return getDisplayName();
}
+ @Deprecated
+ @Override
+ public String getRegisteredTypeName() {
+ return getSymbolicName();
+ }
+
@Override
public String getDisplayName() {
return itemDto.getDisplayName();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/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
index f10aee1..9b434cc 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogItemDtoAbstract.java
@@ -50,12 +50,7 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
private @SetFromFlag String symbolicName;
private @SetFromFlag String version = BasicBrooklynCatalog.NO_VERSION;
- /**@deprecated since 0.7.0, left for deserialization backwards compatibility */
- private @Deprecated @SetFromFlag String registeredTypeName;
-
private @SetFromFlag String displayName;
- /**@deprecated since 0.7.0, left for deserialization backwards compatibility */
- private @Deprecated @SetFromFlag String name;
private @SetFromFlag String description;
private @SetFromFlag String iconUrl;
@@ -64,9 +59,7 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
private @Deprecated @SetFromFlag String type;
private @SetFromFlag String planYaml;
- private @SetFromFlag Collection<CatalogBundle> bundles;
- /**@deprecated since 0.7.0, left for deserialization backwards compatibility */
- private @Deprecated @SetFromFlag CatalogLibrariesDto libraries;
+ private @SetFromFlag Collection<CatalogBundle> libraries;
private @SetFromFlag Set<Object> tags = Sets.newLinkedHashSet();
@Override
@@ -90,10 +83,14 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
return getDisplayName();
}
+ @Deprecated
+ public String getRegisteredTypeName() {
+ return getSymbolicName();
+ }
+
@Override
public String getDisplayName() {
- if (displayName != null) return displayName;
- return name;
+ return displayName;
}
@Override
@@ -109,7 +106,6 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
@Override
public String getSymbolicName() {
if (symbolicName != null) return symbolicName;
- if (registeredTypeName != null) return registeredTypeName;
return getJavaType();
}
@@ -127,12 +123,9 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
@Nonnull
@Override
- @SuppressWarnings("deprecation")
public Collection<CatalogBundle> getLibraries() {
- if (bundles != null) {
- return ImmutableList.copyOf(bundles);
- } else if (libraries != null && libraries.getBundles() != null) {
- return ImmutableList.copyOf(libraries.getBundles());
+ if (libraries != null) {
+ return ImmutableList.copyOf(libraries);
} else {
return Collections.emptyList();
}
@@ -172,7 +165,6 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
@Override
public void setDisplayName(String newName) {
this.displayName = newName;
- this.name = null;
}
@Override
@@ -263,7 +255,6 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
protected void setSymbolicName(String symbolicName) {
this.symbolicName = symbolicName;
- this.registeredTypeName = null;
}
protected void setVersion(String version) {
@@ -288,7 +279,7 @@ public abstract class CatalogItemDtoAbstract<T, SpecT> extends AbstractBrooklynO
}
protected void setLibraries(Collection<CatalogBundle> libraries) {
- this.bundles = libraries;
+ this.libraries = libraries;
}
protected void setTags(Set<Object> tags) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/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
index 1fda2d7..2589cb2 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDo.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDo.java
@@ -21,7 +21,6 @@ package brooklyn.catalog.internal;
import java.util.Collection;
import brooklyn.catalog.CatalogItem;
-import brooklyn.catalog.CatalogItem.CatalogBundle;
import com.google.common.base.Preconditions;
@@ -36,7 +35,7 @@ public class CatalogLibrariesDo implements CatalogItem.CatalogItemLibraries {
}
@Override
- public Collection<CatalogBundle> getBundles() {
+ public Collection<String> getBundles() {
return librariesDto.getBundles();
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/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
index 8403876..dea135b 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDto.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogLibrariesDto.java
@@ -20,23 +20,29 @@ package brooklyn.catalog.internal;
import java.util.Collection;
import java.util.Collections;
-import java.util.concurrent.CopyOnWriteArrayList;
import brooklyn.catalog.CatalogItem;
-import brooklyn.catalog.CatalogItem.CatalogBundle;
import com.google.common.collect.ImmutableList;
@Deprecated
public class CatalogLibrariesDto implements CatalogItem.CatalogItemLibraries {
- private Collection<CatalogBundle> bundles = new CopyOnWriteArrayList<CatalogBundle>();
+ 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<CatalogBundle> getBundles() {
+ public Collection<String> getBundles() {
if (bundles == null) {
// can be null on deserialization
return Collections.emptyList();
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/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
index 8871edf..46c014f 100644
--- a/core/src/main/java/brooklyn/catalog/internal/CatalogXmlSerializer.java
+++ b/core/src/main/java/brooklyn/catalog/internal/CatalogXmlSerializer.java
@@ -50,17 +50,17 @@ public class CatalogXmlSerializer extends XmlSerializer<Object> {
xstream.aliasType("entity", CatalogEntityItemDto.class);
xstream.aliasType("policy", CatalogPolicyItemDto.class);
- xstream.aliasAttribute(CatalogItemDtoAbstract.class, "javaType", "type");
+ 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));
- xstream.aliasType("libraries", CatalogLibrariesDto.class);
- xstream.addImplicitCollection(CatalogLibrariesDto.class, "bundles", "bundle", CatalogBundleDto.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");
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/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 61b9511..8ef2931 100644
--- a/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java
+++ b/core/src/main/java/brooklyn/entity/rebind/BasicCatalogItemRebindSupport.java
@@ -48,7 +48,7 @@ public class BasicCatalogItemRebindSupport extends AbstractBrooklynObjectRebindS
.put("description", memento.getDescription())
.put("iconUrl", memento.getIconUrl())
.put("version", memento.getVersion())
- .put("bundles", memento.getBundles())
+ .put("libraries", memento.getLibraries())
.put("planYaml", memento.getPlanYaml())
.build(), instance);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/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 b32e841..5c07c65 100644
--- a/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java
+++ b/core/src/main/java/brooklyn/entity/rebind/dto/BasicCatalogItemMemento.java
@@ -25,14 +25,14 @@ import java.util.Map;
import org.codehaus.jackson.annotate.JsonAutoDetect;
-import com.google.common.base.Joiner;
-import com.google.common.base.Objects;
-
import brooklyn.catalog.CatalogItem;
-import brooklyn.catalog.CatalogItem.CatalogBundle;
import brooklyn.catalog.internal.BasicBrooklynCatalog;
+import brooklyn.catalog.internal.CatalogUtils;
import brooklyn.mementos.CatalogItemMemento;
+import com.google.common.base.Joiner;
+import com.google.common.base.Objects;
+
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE)
public class BasicCatalogItemMemento extends AbstractMemento implements CatalogItemMemento, Serializable {
@@ -112,7 +112,7 @@ public class BasicCatalogItemMemento extends AbstractMemento implements CatalogI
javaType = other.getJavaType();
version = other.getVersion();
planYaml = other.getPlanYaml();
- libraries = other.getBundles();
+ libraries = other.getLibraries();
catalogItemType = other.getCatalogItemType();
catalogItemJavaType = other.getCatalogItemJavaType();
specType = other.getSpecType();
@@ -130,12 +130,7 @@ public class BasicCatalogItemMemento extends AbstractMemento implements CatalogI
private String javaType;
private String version;
private String planYaml;
- //Keep libraries for deserialization compatibility and
- //introduce bundles to hold the new libraries type from
- //catalog item
- private Collection<CatalogItem.CatalogBundle> bundles;
- @SuppressWarnings("deprecation")
- private CatalogItem.CatalogItemLibraries libraries;
+ private Collection<CatalogItem.CatalogBundle> libraries;
private CatalogItem.CatalogItemType catalogItemType;
private Class<?> catalogItemJavaType;
private Class<?> specType;
@@ -150,8 +145,7 @@ public class BasicCatalogItemMemento extends AbstractMemento implements CatalogI
this.iconUrl = builder.iconUrl;
this.version = builder.version;
this.planYaml = builder.planYaml;
- this.bundles = builder.libraries;
- this.libraries = null;
+ this.libraries = builder.libraries;
this.catalogItemJavaType = builder.catalogItemJavaType;
this.catalogItemType = builder.catalogItemType;
this.specType = builder.specType;
@@ -159,6 +153,11 @@ public class BasicCatalogItemMemento extends AbstractMemento implements CatalogI
}
@Override
+ public String getId() {
+ return CatalogUtils.getVersionedId(getSymbolicName(), getVersion());
+ }
+
+ @Override
public String getDescription() {
return description;
}
@@ -193,16 +192,8 @@ public class BasicCatalogItemMemento extends AbstractMemento implements CatalogI
}
@Override
- public Collection<CatalogItem.CatalogBundle> getBundles() {
- if (bundles != null) {
- return bundles;
- } else if (libraries != null) {
- @SuppressWarnings("deprecation")
- Collection<CatalogBundle> b = libraries.getBundles();
- return b;
- } else {
- return null;
- }
+ public Collection<CatalogItem.CatalogBundle> getLibraries() {
+ return libraries;
}
@Override
@@ -241,7 +232,7 @@ public class BasicCatalogItemMemento extends AbstractMemento implements CatalogI
.add("iconUrl", getIconUrl())
.add("version", getVersion())
.add("planYaml", getPlanYaml())
- .add("bundles", getBundles())
+ .add("libraries", getLibraries())
.add("catalogItemJavaType", getCatalogItemJavaType())
.add("catalogItemType", getCatalogItemType())
.add("javaType", getJavaType())
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/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 38cc12d..de691e0 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/BrooklynMementoPersisterToObjectStore.java
@@ -248,8 +248,9 @@ public class BrooklynMementoPersisterToObjectStore implements BrooklynMementoPer
}
String xmlId = (String) XmlUtil.xpath(contents, "/"+type.toCamelCase()+"/id");
- if (!Objects.equal(id, xmlId))
- LOG.warn("ID mismatch on "+type.toCamelCase()+", "+id+" from path, "+xmlId+" from xml");
+ String safeXmlId = Strings.makeValidFilename(xmlId);
+ if (!Objects.equal(id, safeXmlId))
+ LOG.warn("ID mismatch on "+type.toCamelCase()+", "+id+" from path, "+safeXmlId+" from xml");
builder.put(type, xmlId, contents);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/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
new file mode 100644
index 0000000..ea0399b
--- /dev/null
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/CatalogItemLibrariesConverter.java
@@ -0,0 +1,64 @@
+/*
+ * 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.entity.rebind.persister;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import brooklyn.catalog.CatalogItem.CatalogBundle;
+import brooklyn.catalog.CatalogItem.CatalogItemLibraries;
+import brooklyn.catalog.internal.CatalogBundleDto;
+
+import com.thoughtworks.xstream.converters.Converter;
+import com.thoughtworks.xstream.converters.MarshallingContext;
+import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.io.HierarchicalStreamReader;
+import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
+
+@Deprecated
+public class CatalogItemLibrariesConverter implements Converter {
+
+ @Override
+ public boolean canConvert(@SuppressWarnings("rawtypes") Class type) {
+ return CatalogItemLibraries.class.isAssignableFrom(type) ||
+ Collection.class.isAssignableFrom(type);
+ }
+
+ @Override
+ public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
+ context.convertAnother(source);
+ }
+
+ @Override
+ public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
+ Object obj = context.convertAnother(context.currentObject(), context.getRequiredType());
+ if (CatalogItemLibraries.class.isAssignableFrom(context.getRequiredType())) {
+ CatalogItemLibraries libs = (CatalogItemLibraries)obj;
+ Collection<String> bundles = libs.getBundles();
+ Collection<CatalogBundle> libraries = new ArrayList<CatalogBundle>(bundles.size());
+ for (String url : bundles) {
+ libraries.add(new CatalogBundleDto(null, null, url));
+ }
+ return libraries;
+ } else {
+ return obj;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/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 a179479..533cfd2 100644
--- a/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java
+++ b/core/src/main/java/brooklyn/entity/rebind/persister/XmlMementoSerializer.java
@@ -28,6 +28,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import brooklyn.catalog.CatalogItem;
+import brooklyn.catalog.internal.CatalogBundleDto;
import brooklyn.entity.Effector;
import brooklyn.entity.Entity;
import brooklyn.entity.Feed;
@@ -90,6 +91,7 @@ public class XmlMementoSerializer<T> extends XmlSerializer<T> implements Memento
xstream.alias("enricher", BasicEnricherMemento.class);
xstream.alias("configKey", BasicConfigKey.class);
xstream.alias("catalogItem", BasicCatalogItemMemento.class);
+ xstream.alias("bundle", CatalogBundleDto.class);
xstream.alias("attributeSensor", BasicAttributeSensor.class);
xstream.alias("effector", Effector.class);
@@ -112,6 +114,10 @@ public class XmlMementoSerializer<T> extends XmlSerializer<T> implements Memento
xstream.registerConverter(new ManagementContextConverter());
xstream.registerConverter(new TaskConverter(xstream.getMapper()));
+
+ //For compatibility with existing persistence stores content.
+ xstream.aliasField("registeredTypeName", BasicCatalogItemMemento.class, "symbolicName");
+ xstream.registerLocalConverter(BasicCatalogItemMemento.class, "libraries", new CatalogItemLibrariesConverter());
}
// Warning: this is called in the super-class constuctor, so before this constructor!
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java b/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
index 7ae59f6..38a0456 100644
--- a/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/persister/XmlMementoSerializerTest.java
@@ -20,6 +20,10 @@ package brooklyn.entity.rebind.persister;
import static org.testng.Assert.assertEquals;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.nio.charset.Charset;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@@ -51,6 +55,7 @@ import brooklyn.test.entity.TestEntity;
import brooklyn.util.collections.MutableList;
import brooklyn.util.collections.MutableMap;
import brooklyn.util.collections.MutableSet;
+import brooklyn.util.stream.Streams;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/40eee57a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
index 4ce917b..a980fc4 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java
@@ -25,7 +25,7 @@ import io.brooklyn.camp.brooklyn.AbstractYamlTest;
import java.util.Collection;
-import org.junit.Assert;
+import org.testng.Assert;
import org.testng.annotations.Test;
import brooklyn.catalog.BrooklynCatalog;