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());
+		
+	}
 }