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


Reply via email to