You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by al...@apache.org on 2015/02/25 18:17:39 UTC
[1/2] incubator-brooklyn git commit: Improve state transformers
Repository: incubator-brooklyn
Updated Branches:
refs/heads/master eab2d3999 -> 40edb8b51
Improve state transformers
* Accept a list of single key-value maps so one file can contain multiple actions with same name
* When renaming a class replace the new name in the class tag, type element, class attribute
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/596bc528
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/596bc528
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/596bc528
Branch: refs/heads/master
Commit: 596bc528aa99023600ffdce2890b13346835b42a
Parents: eab2d39
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Tue Feb 24 15:54:26 2015 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Tue Feb 24 16:15:20 2015 +0200
----------------------------------------------------------------------
.../rebind/transformer/CompoundTransformer.java | 23 +++++++++-
.../transformer/CompoundTransformerLoader.java | 20 +++++++--
.../CompoundTransformerLoaderTest.java | 42 ++++++++---------
.../transformer/CompoundTransformerTest.java | 47 ++++++++++++++++++--
4 files changed, 101 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/596bc528/core/src/main/java/brooklyn/entity/rebind/transformer/CompoundTransformer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/transformer/CompoundTransformer.java b/core/src/main/java/brooklyn/entity/rebind/transformer/CompoundTransformer.java
index bb87783..550a80c 100644
--- a/core/src/main/java/brooklyn/entity/rebind/transformer/CompoundTransformer.java
+++ b/core/src/main/java/brooklyn/entity/rebind/transformer/CompoundTransformer.java
@@ -114,11 +114,18 @@ public class CompoundTransformer {
* Replaces a tag, but while continuing to recurse.
*/
public Builder xmlRenameTag(String xpathToMatch, String newValue) {
- return xmlReplaceItem(xpathToMatch,
+ return xmlReplaceItem(xpathToMatch,
"<"+newValue+">"
+ "<xsl:apply-templates select=\"@*|node()\" />"
+ "</"+newValue+">");
}
+
+ public Builder xmlChangeAttribute(String xpathToMatch, String newValue) {
+ return xmlReplaceItem(xpathToMatch,
+ "<xsl:attribute name='{local-name()}'>" +
+ newValue +
+ "</xsl:attribute>");
+ }
/**
* Renames an explicit type name reference in brooklyn-xstream serialization.
@@ -145,7 +152,7 @@ public class CompoundTransformer {
* that's how this works to to change the java class (or xstream alias)
* of a persisted instance, included nested instances.
*/
- public Builder renameClass(String oldVal, String newVal) {
+ public Builder renameClassTag(String oldVal, String newVal) {
return xmlRenameTag(toXstreamClassnameFormat(oldVal), toXstreamClassnameFormat(newVal));
}
/**
@@ -181,6 +188,18 @@ public class CompoundTransformer {
Preconditions.checkNotNull(newSymbolicName, "new_symbolic_name")+":"+Preconditions.checkNotNull(newVersion, "new_version"));
}
+ /**
+ * Updates all references to a class to a new value
+ * @param oldName the old name of the class
+ * @param newName the new name of the class to be used instead
+ */
+ public Builder renameClass(String oldName, String newName) {
+ return renameClassTag(oldName, newName)
+ .xmlChangeAttribute("//@class[.='" + oldName + "']", newName)
+ .renameType(oldName, newName);
+ //TODO update reference attributes
+ }
+
private String toXstreamClassnameFormat(String val) {
// xstream format for inner classes is like <brooklyn.entity.rebind.transformer.CompoundTransformerTest_-OrigType>
return (val.contains("$")) ? val.replace("$", "_-") : val;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/596bc528/core/src/main/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoader.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoader.java b/core/src/main/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoader.java
index 3465709..8a2d4bb 100644
--- a/core/src/main/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoader.java
+++ b/core/src/main/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoader.java
@@ -18,7 +18,12 @@
*/
package brooklyn.entity.rebind.transformer;
+import java.util.Collection;
import java.util.Map;
+import java.util.Map.Entry;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import brooklyn.entity.rebind.transformer.CompoundTransformer.Builder;
import brooklyn.util.ResourceUtils;
@@ -32,6 +37,7 @@ import com.google.common.collect.Iterables;
@Beta
public class CompoundTransformerLoader {
+ private static final Logger LOG = LoggerFactory.getLogger(CompoundTransformerLoader.class);
// TODO Improve error handing so get nicer errors.
// TODO Improve names (e.g. always camel case?)
@@ -40,11 +46,13 @@ public class CompoundTransformerLoader {
public static CompoundTransformer load(String contents) {
CompoundTransformer.Builder builder = CompoundTransformer.builder();
Iterable<Object> toplevel = Yamls.parseAll(contents);
- @SuppressWarnings("unchecked")
- Map<String, Map<?,?>> rules = (Map<String, Map<?,?>>) ((Map<?,?>)Iterables.getOnlyElement(toplevel));
- for (Map.Entry<String, Map<?,?>> entry : rules.entrySet()) {
- addRule(builder, entry.getKey(), entry.getValue());
+ Collection<?> rules = (Collection<?>)Iterables.getOnlyElement(toplevel);
+ for (Object obj : rules) {
+ Map<?, ?> map = (Map<?, ?>)obj;
+ Entry<?, ?> entry = Iterables.getOnlyElement(map.entrySet());
+ addRule(builder, (String)entry.getKey(), (Map<?, ?>)entry.getValue());
}
+ LOG.info("Loaded " + rules.size() + " transforms");
return builder.build();
}
@@ -53,6 +61,10 @@ public class CompoundTransformerLoader {
String oldVal = (String) args.get("old_val");
String newVal = (String) args.get("new_val");
builder.renameClass(oldVal, newVal);
+ } else if (name.equals("renameClassTag")) {
+ String oldVal = (String) args.get("old_val");
+ String newVal = (String) args.get("new_val");
+ builder.renameClassTag(oldVal, newVal);
} else if (name.equals("renameType")) {
String oldVal = (String) args.get("old_val");
String newVal = (String) args.get("new_val");
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/596bc528/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoaderTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoaderTest.java b/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoaderTest.java
index d55e073..b23f1bd 100644
--- a/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoaderTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerLoaderTest.java
@@ -34,29 +34,29 @@ public class CompoundTransformerLoaderTest {
@Test
public void testLoadsTransformerFromYaml() throws Exception {
String contents =
- "renameType:\n"+
- " old_val: myoldname\n"+
- " new_val: mynewname\n"+
- "renameClass:\n"+
- " old_val: myoldname\n"+
- " new_val: mynewname\n"+
- "renameField:\n"+
- " class_name: myclassname\n"+
- " old_val: myoldname\n"+
- " new_val: mynewname\n"+
- // low-level mechanism to change catalogItemId; used (and tested) by higher-level methods
- // which use symbolic_name:version notation to avoid the unpleasant need for yaml quotes
- "catalogItemId:\n"+
- " old_symbolic_name: myclassname\n"+
- " new_symbolic_name: myclassname\n"+
- " new_version: '2.0'\n"+
- "xslt:\n"+
- " url: classpath://brooklyn/entity/rebind/transformer/impl/renameType.xslt\n"+
- " substitutions:\n"+
+ "- renameType:\n"+
+ " old_val: myoldname\n"+
+ " new_val: mynewname\n"+
+ "- renameClassTag:\n"+
" old_val: myoldname\n"+
" new_val: mynewname\n"+
- "rawDataTransformer:\n"+
- " type: "+MyRawDataTransformer.class.getName()+"\n";
+ "- renameField:\n"+
+ " class_name: myclassname\n"+
+ " old_val: myoldname\n"+
+ " new_val: mynewname\n"+
+ // low-level mechanism to change catalogItemId; used (and tested) by higher-level methods
+ // which use symbolic_name:version notation to avoid the unpleasant need for yaml quotes
+ "- catalogItemId:\n"+
+ " old_symbolic_name: myclassname\n"+
+ " new_symbolic_name: myclassname\n"+
+ " new_version: '2.0'\n"+
+ "- xslt:\n"+
+ " url: classpath://brooklyn/entity/rebind/transformer/impl/renameType.xslt\n"+
+ " substitutions:\n"+
+ " old_val: myoldname\n"+
+ " new_val: mynewname\n"+
+ "- rawDataTransformer:\n"+
+ " type: "+MyRawDataTransformer.class.getName()+"\n";
CompoundTransformer transformer = CompoundTransformerLoader.load(contents);
Collection<RawDataTransformer> rawDataTransformers = transformer.getRawDataTransformers().get(BrooklynObjectType.ENTITY);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/596bc528/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerTest.java b/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerTest.java
index db3cbc2..50e31bf 100644
--- a/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/transformer/CompoundTransformerTest.java
@@ -57,6 +57,7 @@ import brooklyn.util.os.Os;
import com.google.common.base.Objects;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
+import com.google.common.collect.Multimap;
@SuppressWarnings("serial")
public class CompoundTransformerTest extends RebindTestFixtureWithApp {
@@ -148,6 +149,14 @@ public class CompoundTransformerTest extends RebindTestFixtureWithApp {
Assert.assertEquals(xmlOutActual, xmlOutExpected);
}
+ protected void assertXmlTransformation(CompoundTransformer transformer, String xmlIn, String xmlOutExpected) throws Exception {
+ BrooklynMementoRawData rawData = BrooklynMementoRawData.builder()
+ .entity("test", xmlIn)
+ .build();
+ BrooklynMementoRawData rawDataOut = transformer.transform(rawData);
+ Assert.assertEquals(rawDataOut.getEntities().get("test"), xmlOutExpected);
+ }
+
@Test
public void testNoopTransformation() throws Exception {
CompoundTransformer transformer = CompoundTransformer.builder()
@@ -166,7 +175,7 @@ public class CompoundTransformerTest extends RebindTestFixtureWithApp {
origApp.setConfig(CONF1, new OrigType("myfieldval"));
CompoundTransformer transformer = CompoundTransformer.builder()
- .renameClass(OrigType.class.getName(), RenamedType.class.getName())
+ .renameClassTag(OrigType.class.getName(), RenamedType.class.getName())
.build();
newApp = transformAndRebind(transformer);
@@ -183,7 +192,7 @@ public class CompoundTransformerTest extends RebindTestFixtureWithApp {
origApp.setConfig(CONF1, origPredicate);
CompoundTransformer transformer = CompoundTransformer.builder()
- .renameClass(origPredicate.getClass().getName(), RenamedIdEqualToPredicate.class.getName())
+ .renameClassTag(origPredicate.getClass().getName(), RenamedIdEqualToPredicate.class.getName())
.renameField(RenamedIdEqualToPredicate.class.getName(), "val$paramVal", "val")
.build();
@@ -266,9 +275,9 @@ public class CompoundTransformerTest extends RebindTestFixtureWithApp {
}
@Test
- public void testRenameClassInXml() throws Exception {
+ public void testRenameClassTagInXml() throws Exception {
CompoundTransformer transformer = CompoundTransformer.builder()
- .renameClass("MyClassBefore", "MyClassAfter")
+ .renameClassTag("MyClassBefore", "MyClassAfter")
.build();
String input =
@@ -296,6 +305,36 @@ public class CompoundTransformerTest extends RebindTestFixtureWithApp {
}
@Test
+ public void testRenameClassInXml() throws Exception {
+ CompoundTransformer transformer = CompoundTransformer.builder()
+ .renameClass("MyClassBefore", "MyClassAfter")
+ .build();
+
+ String input =
+ "<entity myattrib=\"myval\">"+NEWLINE+
+ " <type myattrib2=\"myval2\">MyClassBefore</type>"+NEWLINE+
+ " <config>"+NEWLINE+
+ " <test.conf1 class=\"MyClassBefore\">"+NEWLINE+
+ " <MyClassBefore>"+NEWLINE+
+ " </MyClassBefore>"+NEWLINE+
+ " </test.conf1>"+NEWLINE+
+ " </config>"+NEWLINE+
+ "</entity>";
+ String expected =
+ "<entity myattrib=\"myval\">"+NEWLINE+
+ " <type myattrib2=\"myval2\">MyClassAfter</type>"+NEWLINE+
+ " <config>"+NEWLINE+
+ " <test.conf1 class=\"MyClassAfter\">"+NEWLINE+
+ " <MyClassAfter>"+NEWLINE+
+ " </MyClassAfter>"+NEWLINE+
+ " </test.conf1>"+NEWLINE+
+ " </config>"+NEWLINE+
+ "</entity>";
+
+ assertXmlTransformation(transformer, input, expected);
+ }
+
+ @Test
public void testChangeCatalogItemIdExplicitVersionInXml() throws Exception {
CompoundTransformer transformer = CompoundTransformer.builder()
.changeCatalogItemId("foo", "1.0", "bar", "2.0")
[2/2] incubator-brooklyn git commit: This closes #528
Posted by al...@apache.org.
This closes #528
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/40edb8b5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/40edb8b5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/40edb8b5
Branch: refs/heads/master
Commit: 40edb8b5120a59c5f480ccdcb42e612b9f61bf67
Parents: eab2d39 596bc52
Author: Aled Sage <al...@gmail.com>
Authored: Wed Feb 25 17:17:31 2015 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Wed Feb 25 17:17:31 2015 +0000
----------------------------------------------------------------------
.../rebind/transformer/CompoundTransformer.java | 23 +++++++++-
.../transformer/CompoundTransformerLoader.java | 20 +++++++--
.../CompoundTransformerLoaderTest.java | 42 ++++++++---------
.../transformer/CompoundTransformerTest.java | 47 ++++++++++++++++++--
4 files changed, 101 insertions(+), 31 deletions(-)
----------------------------------------------------------------------