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 2015/11/17 23:51:18 UTC
[03/14] incubator-brooklyn git commit: XML-based illustration of
new-style XML plan creation
XML-based illustration of new-style XML plan creation
and tidy API and update deprecation
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/e480402f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/e480402f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/e480402f
Branch: refs/heads/master
Commit: e480402f30237e5af0604eb82606901be2acaa20
Parents: e932d5f
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Nov 9 16:53:17 2015 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Tue Nov 10 17:13:02 2015 +0000
----------------------------------------------------------------------
.../brooklyn/api/catalog/CatalogItem.java | 24 ++++
.../catalog/internal/BasicBrooklynCatalog.java | 12 +-
.../catalog/internal/CatalogItemBuilder.java | 46 +++---
.../core/typereg/BasicBrooklynTypeRegistry.java | 18 ++-
.../core/plan/XmlPlanToSpecTransformer.java | 2 +
.../core/plan/XmlPlanToSpecTransformerTest.java | 2 +
.../typereg/ExampleXmlTypePlanTransformer.java | 140 +++++++++++++++++++
.../ExampleXmlTypePlanTransformerTest.java | 67 +++++++++
.../camp/brooklyn/AbstractYamlTest.java | 3 -
9 files changed, 281 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e480402f/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java b/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
index 7f4e3b3..fe21daa 100644
--- a/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
+++ b/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
@@ -23,11 +23,19 @@ import java.util.List;
import javax.annotation.Nullable;
+import org.apache.brooklyn.api.entity.Application;
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.mgmt.rebind.RebindSupport;
import org.apache.brooklyn.api.mgmt.rebind.Rebindable;
import org.apache.brooklyn.api.mgmt.rebind.mementos.CatalogItemMemento;
import org.apache.brooklyn.api.objs.BrooklynObject;
import org.apache.brooklyn.api.objs.SpecParameter;
+import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
import com.google.common.annotations.Beta;
@@ -40,6 +48,22 @@ public interface CatalogItem<T,SpecT> extends BrooklynObject, Rebindable {
ENTITY,
POLICY,
LOCATION;
+
+ public static CatalogItemType ofSpecClass(Class<? extends AbstractBrooklynObjectSpec<?, ?>> type) {
+ if (type==null) return null;
+ if (PolicySpec.class.isAssignableFrom(type)) return POLICY;
+ if (LocationSpec.class.isAssignableFrom(type)) return LOCATION;
+ if (EntitySpec.class.isAssignableFrom(type)) return ENTITY;
+ return null;
+ }
+ public static CatalogItemType ofTargetClass(Class<? extends BrooklynObject> type) {
+ if (type==null) return null;
+ if (Policy.class.isAssignableFrom(type)) return POLICY;
+ if (Location.class.isAssignableFrom(type)) return LOCATION;
+ if (Application.class.isAssignableFrom(type)) return TEMPLATE;
+ if (Entity.class.isAssignableFrom(type)) return ENTITY;
+ return null;
+ }
}
public static interface CatalogBundle extends OsgiBundleWithUrl {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e480402f/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index 0832b4f..75c727a 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -63,7 +63,6 @@ import org.slf4j.LoggerFactory;
import org.yaml.snakeyaml.Yaml;
import com.google.common.base.Function;
-import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
@@ -849,15 +848,8 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
return Strings.join(lines, "\n");
}
- private CatalogItemBuilder<?> createItemBuilder(CatalogItemType itemType, String itemId, String version) {
- Preconditions.checkNotNull(itemType, "itemType required");
- switch (itemType) {
- case ENTITY: return CatalogItemBuilder.newEntity(itemId, version);
- case TEMPLATE: return CatalogItemBuilder.newTemplate(itemId, version);
- case POLICY: return CatalogItemBuilder.newPolicy(itemId, version);
- case LOCATION: return CatalogItemBuilder.newLocation(itemId, version);
- }
- throw new IllegalStateException("Unexpected itemType: "+itemType);
+ static CatalogItemBuilder<?> createItemBuilder(CatalogItemType itemType, String symbolicName, String version) {
+ return CatalogItemBuilder.newItem(itemType, symbolicName, version);
}
// these kept as their logic may prove useful; Apr 2015
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e480402f/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
index 1f9b9a2..59bc3a9 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
@@ -23,12 +23,24 @@ import java.util.Collections;
import java.util.List;
import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
+import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
import org.apache.brooklyn.api.objs.SpecParameter;
import com.google.common.base.Preconditions;
-public class CatalogItemBuilder<CatalogItemType extends CatalogItemDtoAbstract<?, ?>> {
- private CatalogItemType dto;
+public class CatalogItemBuilder<CIConcreteType extends CatalogItemDtoAbstract<?, ?>> {
+ private CIConcreteType dto;
+
+ public static CatalogItemBuilder<?> newItem(CatalogItemType itemType, String symbolicName, String version) {
+ Preconditions.checkNotNull(itemType, "itemType required");
+ switch (itemType) {
+ case ENTITY: return newEntity(symbolicName, version);
+ case TEMPLATE: return newTemplate(symbolicName, version);
+ case POLICY: return newPolicy(symbolicName, version);
+ case LOCATION: return newLocation(symbolicName, version);
+ }
+ throw new IllegalStateException("Unexpected itemType: "+itemType);
+ }
public static CatalogItemBuilder<CatalogEntityItemDto> newEntity(String symbolicName, String version) {
return new CatalogItemBuilder<CatalogEntityItemDto>(new CatalogEntityItemDto())
@@ -54,74 +66,74 @@ public class CatalogItemBuilder<CatalogItemType extends CatalogItemDtoAbstract<?
.version(version);
}
- public CatalogItemBuilder(CatalogItemType dto) {
+ public CatalogItemBuilder(CIConcreteType dto) {
this.dto = dto;
this.dto.setLibraries(Collections.<CatalogBundle>emptyList());
}
- public CatalogItemBuilder<CatalogItemType> symbolicName(String symbolicName) {
+ public CatalogItemBuilder<CIConcreteType> symbolicName(String symbolicName) {
dto.setSymbolicName(symbolicName);
return this;
}
@Deprecated
- public CatalogItemBuilder<CatalogItemType> javaType(String javaType) {
+ public CatalogItemBuilder<CIConcreteType> javaType(String javaType) {
dto.setJavaType(javaType);
return this;
}
/** @deprecated since 0.7.0 use {@link #displayName}*/
@Deprecated
- public CatalogItemBuilder<CatalogItemType> name(String name) {
+ public CatalogItemBuilder<CIConcreteType> name(String name) {
return displayName(name);
}
- public CatalogItemBuilder<CatalogItemType> displayName(String displayName) {
+ public CatalogItemBuilder<CIConcreteType> displayName(String displayName) {
dto.setDisplayName(displayName);
return this;
}
- public CatalogItemBuilder<CatalogItemType> description(String description) {
+ public CatalogItemBuilder<CIConcreteType> description(String description) {
dto.setDescription(description);
return this;
}
- public CatalogItemBuilder<CatalogItemType> iconUrl(String iconUrl) {
+ public CatalogItemBuilder<CIConcreteType> iconUrl(String iconUrl) {
dto.setIconUrl(iconUrl);
return this;
}
- public CatalogItemBuilder<CatalogItemType> version(String version) {
+ public CatalogItemBuilder<CIConcreteType> version(String version) {
dto.setVersion(version);
return this;
}
- public CatalogItemBuilder<CatalogItemType> deprecated(boolean deprecated) {
+ public CatalogItemBuilder<CIConcreteType> deprecated(boolean deprecated) {
dto.setDeprecated(deprecated);
return this;
}
- public CatalogItemBuilder<CatalogItemType> disabled(boolean disabled) {
+ public CatalogItemBuilder<CIConcreteType> disabled(boolean disabled) {
dto.setDisabled(disabled);
return this;
}
- public CatalogItemBuilder<CatalogItemType> parameters(List<SpecParameter<?>> inputs) {
+ public CatalogItemBuilder<CIConcreteType> parameters(List<SpecParameter<?>> inputs) {
dto.setParameters(inputs);
return this;
}
- public CatalogItemBuilder<CatalogItemType> libraries(Collection<CatalogBundle> libraries) {
+ public CatalogItemBuilder<CIConcreteType> libraries(Collection<CatalogBundle> libraries) {
dto.setLibraries(libraries);
return this;
}
- public CatalogItemBuilder<CatalogItemType> plan(String yaml) {
+ public CatalogItemBuilder<CIConcreteType> plan(String yaml) {
dto.setPlanYaml(yaml);
return this;
}
- public CatalogItemType build() {
+ public CIConcreteType build() {
Preconditions.checkNotNull(dto.getSymbolicName());
Preconditions.checkNotNull(dto.getVersion());
@@ -132,7 +144,7 @@ public class CatalogItemBuilder<CatalogItemType extends CatalogItemDtoAbstract<?
dto.setLibraries(Collections.<CatalogBundle>emptyList());
}
- CatalogItemType ret = dto;
+ CIConcreteType ret = dto;
//prevent mutations through the builder
dto = null;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e480402f/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
index cfb9f9b..b5c85c1 100644
--- a/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
+++ b/core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
@@ -22,16 +22,19 @@ import javax.annotation.Nullable;
import org.apache.brooklyn.api.catalog.BrooklynCatalog;
import org.apache.brooklyn.api.catalog.CatalogItem;
+import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.api.typereg.RegisteredTypeLoadingContext;
import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
+import org.apache.brooklyn.core.catalog.internal.CatalogItemBuilder;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.guava.Maybe;
+import org.apache.brooklyn.util.text.Identifiers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -121,9 +124,18 @@ public class BasicBrooklynTypeRegistry implements BrooklynTypeRegistry {
// TODO remove once all transformers are available in the new style
CatalogItem item = (CatalogItem) mgmt.getCatalog().getCatalogItem(type.getSymbolicName(), type.getVersion());
if (item==null) {
- // if not in catalog (because loading a new item?) then throw original
- // (NB: to support any recursive legacy transformers we might have to create a CI; cross that bridge when we come to it)
- result.get();
+ // if not in catalog (because loading a new item?) then look up item based on type
+ // (only really used in tests; possibly also for any recursive legacy transformers we might have to create a CI; cross that bridge when we come to it)
+ CatalogItemType ciType = CatalogItemType.ofTargetClass( (Class)constraint.getExpectedJavaSuperType() );
+ if (ciType==null) {
+ // throw -- not supported for non-spec types
+ result.get();
+ }
+ item = CatalogItemBuilder.newItem(ciType,
+ type.getSymbolicName()!=null ? type.getSymbolicName() : Identifiers.makeRandomId(8),
+ type.getVersion()!=null ? type.getVersion() : BasicBrooklynCatalog.DEFAULT_VERSION)
+ .plan(RegisteredTypes.getImplementationDataStringForSpec(type))
+ .build();
}
try {
return (SpecT) BasicBrooklynCatalog.internalCreateSpecLegacy(mgmt, item, constraint.getAlreadyEncounteredTypes(), false);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e480402f/core/src/test/java/org/apache/brooklyn/core/plan/XmlPlanToSpecTransformer.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/plan/XmlPlanToSpecTransformer.java b/core/src/test/java/org/apache/brooklyn/core/plan/XmlPlanToSpecTransformer.java
index a4c3766..063df64 100644
--- a/core/src/test/java/org/apache/brooklyn/core/plan/XmlPlanToSpecTransformer.java
+++ b/core/src/test/java/org/apache/brooklyn/core/plan/XmlPlanToSpecTransformer.java
@@ -41,6 +41,8 @@ import org.w3c.dom.Node;
/** Example implementation of {@link PlanToSpecTransformer} showing
* how implementations are meant to be written. */
public class XmlPlanToSpecTransformer implements PlanToSpecTransformer {
+
+ // this is REPLACED by ExampleXmlTypePlanTransformer
@SuppressWarnings("unused")
private ManagementContext mgmt;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e480402f/core/src/test/java/org/apache/brooklyn/core/plan/XmlPlanToSpecTransformerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/plan/XmlPlanToSpecTransformerTest.java b/core/src/test/java/org/apache/brooklyn/core/plan/XmlPlanToSpecTransformerTest.java
index 19a6ba4..ffec32c 100644
--- a/core/src/test/java/org/apache/brooklyn/core/plan/XmlPlanToSpecTransformerTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/plan/XmlPlanToSpecTransformerTest.java
@@ -36,6 +36,8 @@ import org.testng.annotations.Test;
* which illustrates how the {@link PlanToSpecTransformer} can be used. */
public class XmlPlanToSpecTransformerTest {
+ // TEST is REPLACED by ExampleXmlTypePlanTransformerTest
+
private ManagementContext mgmt;
@BeforeMethod(alwaysRun=true)
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e480402f/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformer.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformer.java b/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformer.java
new file mode 100644
index 0000000..01b80a1
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformer.java
@@ -0,0 +1,140 @@
+/*
+ * 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.typereg;
+
+import java.io.StringReader;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.brooklyn.api.entity.Application;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
+import org.apache.brooklyn.api.typereg.RegisteredType;
+import org.apache.brooklyn.api.typereg.RegisteredTypeLoadingContext;
+import org.apache.brooklyn.entity.stock.BasicApplication;
+import org.apache.brooklyn.entity.stock.BasicEntity;
+import org.apache.brooklyn.util.core.xstream.XmlSerializer;
+import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.apache.brooklyn.util.stream.ReaderInputStream;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+/** Example implementation of {@link BrooklynTypePlanTransformer} showing
+ * how implementations are meant to be written. */
+public class ExampleXmlTypePlanTransformer extends AbstractTypePlanTransformer {
+
+ protected ExampleXmlTypePlanTransformer() {
+ super("example-xml", "Example XML", "Illustration of writing a transformer");
+ }
+
+ @Override
+ protected double scoreForNullFormat(Object planData, RegisteredType type, RegisteredTypeLoadingContext context) {
+ if (!(planData instanceof String)) return 0;
+ try {
+ // if it's XML, accept it
+ parseXml((String)planData);
+ return 0.3;
+ } catch (Exception e) {
+ Exceptions.propagateIfFatal(e);
+ return 0;
+ }
+ }
+
+ @Override
+ protected double scoreForNonmatchingNonnullFormat(String planFormat, Object planData, RegisteredType type, RegisteredTypeLoadingContext context) {
+ // only null and xml supported
+ return 0;
+ }
+
+ @Override
+ protected AbstractBrooklynObjectSpec<?, ?> createSpec(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception {
+ return toEntitySpec(parseXml((String)type.getPlan().getPlanData()),
+ isApplicationExpected(type, context) ? 0 : 1);
+ }
+
+ private static boolean isApplicationExpected(RegisteredType type, RegisteredTypeLoadingContext context) {
+ return RegisteredTypes.isSubTypeOf(type, Application.class) ||
+ (context.getExpectedJavaSuperType()!=null && context.getExpectedJavaSuperType().isAssignableFrom(Application.class));
+ }
+
+ @Override
+ protected Object createBean(RegisteredType type, RegisteredTypeLoadingContext context) throws Exception {
+ return new XmlSerializer<Object>().fromString((String)type.getPlan().getPlanData());
+ }
+
+
+ @Override
+ public double scoreForTypeDefinition(String formatCode, Object catalogData) {
+ // defining types not supported
+ return 0;
+ }
+
+ @Override
+ public List<RegisteredType> createFromTypeDefinition(String formatCode, Object catalogData) {
+ // defining types not supported
+ return null;
+ }
+
+ private Document parseXml(String plan) {
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ Document dom;
+
+ try {
+ //Using factory get an instance of document builder
+ DocumentBuilder db = dbf.newDocumentBuilder();
+
+ //parse using builder to get DOM representation of the XML file
+ dom = db.parse(new ReaderInputStream(new StringReader(plan)));
+
+ } catch (Exception e) {
+ Exceptions.propagateIfFatal(e);
+ throw new UnsupportedTypePlanException(e);
+ }
+ return dom;
+ }
+
+ private EntitySpec<?> toEntitySpec(Node dom, int depth) {
+ if (dom.getNodeType()==Node.DOCUMENT_NODE) {
+ if (dom.getChildNodes().getLength()!=1) {
+ // NB: <?...?> entity preamble might break this
+ throw new IllegalStateException("Document for "+dom+" has "+dom.getChildNodes().getLength()+" nodes; 1 expected.");
+ }
+ return toEntitySpec(dom.getChildNodes().item(0), depth);
+ }
+
+ EntitySpec<?> result = depth == 0 ? EntitySpec.create(BasicApplication.class) : EntitySpec.create(BasicEntity.class);
+ result.displayName(dom.getNodeName());
+ if (dom.getAttributes()!=null) {
+ for (int i=0; i<dom.getAttributes().getLength(); i++)
+ result.configure(dom.getAttributes().item(i).getNodeName(), dom.getAttributes().item(i).getTextContent());
+ }
+ if (dom.getChildNodes()!=null) {
+ for (int i=0; i<dom.getChildNodes().getLength(); i++) {
+ Node item = dom.getChildNodes().item(i);
+ if (item.getNodeType()==Node.ELEMENT_NODE) {
+ result.child(toEntitySpec(item, depth+1));
+ }
+ }
+ }
+ return result;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e480402f/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformerTest.java b/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformerTest.java
new file mode 100644
index 0000000..b1b7804
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/typereg/ExampleXmlTypePlanTransformerTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.typereg;
+
+import org.apache.brooklyn.api.entity.Application;
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.entity.Entities;
+import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
+import org.apache.brooklyn.core.plan.XmlPlanToSpecTransformer;
+import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.Iterables;
+
+/** Tests the sample {@link XmlPlanToSpecTransformer}
+ * which illustrates how the {@link PlanToSpecTransformer} can be used. */
+public class ExampleXmlTypePlanTransformerTest {
+
+ private ManagementContext mgmt;
+
+ @BeforeMethod(alwaysRun=true)
+ public void setUp() throws Exception {
+ TypePlanTransformers.forceAvailable(ExampleXmlTypePlanTransformer.class);
+ mgmt = LocalManagementContextForTests.newInstance();
+ }
+
+ @AfterMethod(alwaysRun = true)
+ public void tearDown() {
+ TypePlanTransformers.clearForced();
+ if (mgmt!=null) Entities.destroyAll(mgmt);
+ }
+
+ @Test
+ public void testAppSpecXmlPlanParse() {
+ EntitySpec<? extends Application> appSpec = EntityManagementUtils.createEntitySpecForApplication(mgmt,
+ "<root><a_kid foo=\"bar\"/></root>");
+ Application app = EntityManagementUtils.createStarting(mgmt, appSpec).get();
+ Entities.dumpInfo(app);
+ Assert.assertEquals(app.getDisplayName(), "root");
+ Entity child = Iterables.getOnlyElement(app.getChildren());
+ Assert.assertEquals(child.getDisplayName(), "a_kid");
+ Assert.assertEquals(child.config().get(ConfigKeys.newStringConfigKey("foo")), "bar");
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/e480402f/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java
index 15df062..06dfaa3 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java
@@ -28,9 +28,7 @@ import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.api.mgmt.Task;
-import org.apache.brooklyn.api.typereg.RegisteredType;
import org.apache.brooklyn.camp.brooklyn.spi.creation.CampTypePlanTransformer;
-import org.apache.brooklyn.camp.brooklyn.spi.creation.CampTypePlanTransformer.CampTypeImplementationPlan;
import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
import org.apache.brooklyn.core.entity.Entities;
import org.apache.brooklyn.core.entity.trait.Startable;
@@ -39,7 +37,6 @@ import org.apache.brooklyn.core.mgmt.EntityManagementUtils;
import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
import org.apache.brooklyn.core.typereg.RegisteredTypeLoadingContexts;
-import org.apache.brooklyn.core.typereg.RegisteredTypes;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.ResourceUtils;
import org.apache.brooklyn.util.stream.Streams;