You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2009/09/17 16:02:27 UTC
svn commit: r816198 - in /cayenne/sandbox/cayenne-serialization/src:
main/java/org/apache/cayenne/serialization/
test/java/org/apache/cayenne/serialization/xstream/
Author: aadamchik
Date: Thu Sep 17 14:02:27 2009
New Revision: 816198
URL: http://svn.apache.org/viewvc?rev=816198&view=rev
Log:
prototyping (de)serializer based on XStream
adding support for excluding certain attributes from serialization
Modified:
cayenne/sandbox/cayenne-serialization/src/main/java/org/apache/cayenne/serialization/Subgraph.java
cayenne/sandbox/cayenne-serialization/src/main/java/org/apache/cayenne/serialization/SubgraphNode.java
cayenne/sandbox/cayenne-serialization/src/test/java/org/apache/cayenne/serialization/xstream/XStreamSerializerTest.java
Modified: cayenne/sandbox/cayenne-serialization/src/main/java/org/apache/cayenne/serialization/Subgraph.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-serialization/src/main/java/org/apache/cayenne/serialization/Subgraph.java?rev=816198&r1=816197&r2=816198&view=diff
==============================================================================
--- cayenne/sandbox/cayenne-serialization/src/main/java/org/apache/cayenne/serialization/Subgraph.java (original)
+++ cayenne/sandbox/cayenne-serialization/src/main/java/org/apache/cayenne/serialization/Subgraph.java Thu Sep 17 14:02:27 2009
@@ -56,6 +56,28 @@
}
/**
+ * Adds the name of the ObjAttribute to exclude from serialization. This is
+ * useful for excluding mapped ids or attributes auto-generated with
+ * listeners. The path must end in the ObjAttribute.
+ */
+ public void excludeAttribute(String path) {
+ StringTokenizer tokens = new StringTokenizer(path, ".");
+
+ SubgraphNode node = rootNode;
+ while (tokens.hasMoreTokens()) {
+
+ String token = tokens.nextToken();
+
+ if (tokens.hasMoreTokens()) {
+ node = node.getOrAppendChild(token);
+ } else {
+ // last token is the attribute name
+ node.excludeAttribute(token);
+ }
+ }
+ }
+
+ /**
* Adds a subgraph path based on a relationship. On deserialization a new
* object will be created in the database.
*/
Modified: cayenne/sandbox/cayenne-serialization/src/main/java/org/apache/cayenne/serialization/SubgraphNode.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-serialization/src/main/java/org/apache/cayenne/serialization/SubgraphNode.java?rev=816198&r1=816197&r2=816198&view=diff
==============================================================================
--- cayenne/sandbox/cayenne-serialization/src/main/java/org/apache/cayenne/serialization/SubgraphNode.java (original)
+++ cayenne/sandbox/cayenne-serialization/src/main/java/org/apache/cayenne/serialization/SubgraphNode.java Thu Sep 17 14:02:27 2009
@@ -21,6 +21,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -103,6 +104,17 @@
void setSerializedByReference(boolean reference) {
this.serializedByReference = reference;
}
+
+ void excludeAttribute(String attributeName) {
+ Iterator<AttributeProperty> it = attributeProperties.iterator();
+ while(it.hasNext()) {
+ AttributeProperty property = it.next();
+ if(property.getName().equals(attributeName)) {
+ it.remove();
+ break;
+ }
+ }
+ }
SubgraphNode getOrAppendChild(String path) {
Modified: cayenne/sandbox/cayenne-serialization/src/test/java/org/apache/cayenne/serialization/xstream/XStreamSerializerTest.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-serialization/src/test/java/org/apache/cayenne/serialization/xstream/XStreamSerializerTest.java?rev=816198&r1=816197&r2=816198&view=diff
==============================================================================
--- cayenne/sandbox/cayenne-serialization/src/test/java/org/apache/cayenne/serialization/xstream/XStreamSerializerTest.java (original)
+++ cayenne/sandbox/cayenne-serialization/src/test/java/org/apache/cayenne/serialization/xstream/XStreamSerializerTest.java Thu Sep 17 14:02:27 2009
@@ -146,4 +146,52 @@
+ id + "</PK></Table1></table1></Table2>", Util
.stringFromFile(file).trim());
}
+
+ public void testExcludeAttribute() throws IOException {
+
+ XStreamSerializer serializer = new XStreamSerializer();
+ serializer.setCreatingCompactXML(true);
+
+ ObjectContext context = newContext();
+ Table1 t11 = context.newObject(Table1.class);
+ t11.setName("t11");
+
+ context.commitChanges();
+
+ Subgraph<Table1> subgraph = new Subgraph<Table1>(Table1.class, context
+ .getEntityResolver());
+
+ File f1 = tempFile(".xml");
+
+ FileOutputStream out = new FileOutputStream(f1);
+ try {
+ serializer.serialize(t11, subgraph, out);
+ } finally {
+ out.close();
+ }
+
+ assertTrue(f1.isFile());
+ assertTrue(f1.length() > 0);
+
+ assertEquals("<Table1><name>t11</name></Table1>", Util.stringFromFile(
+ f1).trim());
+
+ subgraph.excludeAttribute(Table1.NAME_PROPERTY);
+
+ File f2 = tempFile(".xml");
+
+ FileOutputStream out2 = new FileOutputStream(f2);
+ try {
+ serializer.serialize(t11, subgraph, out2);
+ } finally {
+ out.close();
+ }
+
+ assertTrue(f2.isFile());
+ assertTrue(f2.length() > 0);
+
+ assertEquals("<Table1/>", Util.stringFromFile(
+ f2).trim());
+
+ }
}