From 0a72368de7fe680d60cc121590cf7a6a3a95b413 Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 29 Sep 2009 01:58:42 +0000 Subject: [PATCH] toSilk for array git-svn-id: http://www.xerial.org/svn/project/XerialJ/trunk/xerial-core@3609 ae02f08e-27ec-0310-ae8c-8ba02fe2eafd --- src/main/java/org/xerial/silk/SilkWriter.java | 47 ++++++- src/test/java/org/xerial/silk/SilkWriterTest.java | 40 +++++- .../java/org/xerial/util/xml/dtd/SigmodRecord.dtd | 151 +++++++++++++++++++++ 3 files changed, 231 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/xerial/silk/SilkWriter.java b/src/main/java/org/xerial/silk/SilkWriter.java index 50e92a6..cd65e0b 100644 --- a/src/main/java/org/xerial/silk/SilkWriter.java +++ b/src/main/java/org/xerial/silk/SilkWriter.java @@ -28,8 +28,10 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Writer; +import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; @@ -283,14 +285,19 @@ public class SilkWriter { attributeParenCloseCheck(true); - printIndent(); - out.print("-"); - out.print(nodeName); + printNodeName(nodeName); SilkWriter child = new SilkWriter(nodeName, this); registChildWriter(child); return child; } + private void printNodeName(String nodeName) { + printIndent(); + out.print("-"); + if (nodeName != null) + out.print(nodeName); + } + public SilkWriter tabDataSchema(String nodeName) { SilkWriter child = node(nodeName); child.setNodeValueSyntax(SyntaxType.TAB); @@ -480,7 +487,8 @@ public class SilkWriter { Class< ? > c = obj.getClass(); if (TypeInfo.isBasicType(c)) { - return nodeValue(obj.toString()); + nodeValue(obj.toString()); + return this; } ObjectLens lens = ObjectLens.getObjectLens(obj.getClass()); @@ -494,7 +502,8 @@ public class SilkWriter { if (!collection.isEmpty()) { for (Object elem : collection) { - toSilk(elem); + SilkWriter w = node(null); + w.toSilk(elem); } } } @@ -540,7 +549,33 @@ public class SilkWriter { } private void outputParemters(ObjectLens lens, Object obj) { - for (ParameterGetter getter : lens.getGetterContainer()) { + + List getterContainer = lens.getGetterContainer(); + List postponedParameters = new ArrayList(); + + // output attribute-like parameters first + for (ParameterGetter getter : getterContainer) { + + Class< ? > c = getter.getReturnType(); + if (TypeInfo.isBasicType(c)) { + leafObject(getter.getParamName(), getter.get(obj)); + } + else { + if (TypeInfo.isCollection(c) || TypeInfo.isMap(c)) { + postponedParameters.add(getter); + } + else { + ObjectLens paramLens = ObjectLens.getObjectLens(c); + if (paramLens.hasAttributes()) + postponedParameters.add(getter); + else + leafObject(getter.getParamName(), getter.get(obj)); + } + } + + } + + for (ParameterGetter getter : postponedParameters) { Class< ? > c = getter.getReturnType(); if (TypeInfo.isCollection(c)) { diff --git a/src/test/java/org/xerial/silk/SilkWriterTest.java b/src/test/java/org/xerial/silk/SilkWriterTest.java index 9edf94d..e5e2a82 100644 --- a/src/test/java/org/xerial/silk/SilkWriterTest.java +++ b/src/test/java/org/xerial/silk/SilkWriterTest.java @@ -24,7 +24,7 @@ //-------------------------------------- package org.xerial.silk; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import java.io.StringReader; import java.io.StringWriter; @@ -142,4 +142,42 @@ public class SilkWriterTest { String s = Lens.toSilk(i); _logger.info(s); } + + @Test + public void array() throws Exception { + ArrayList input = new ArrayList(); + input.add("hello"); + input.add("world"); + String s = Lens.toSilk(input); + _logger.info(s); + } + + static class Person { + public int id; + public String name; + + public Person(int id, String name) { + this.id = id; + this.name = name; + } + + } + + @Test + public void objectArray() throws Exception { + + /* + * expect + *
+         * -(id:1, name:leo)
+         * -(id:2, name:yui)
+         * 
+ */ + ArrayList p = new ArrayList(); + p.add(new Person(1, "leo")); + p.add(new Person(2, "yui")); + String s = Lens.toSilk(p); + _logger.info(s); + } + } diff --git a/src/test/java/org/xerial/util/xml/dtd/SigmodRecord.dtd b/src/test/java/org/xerial/util/xml/dtd/SigmodRecord.dtd index 79b1d28..6d7e059 100644 --- a/src/test/java/org/xerial/util/xml/dtd/SigmodRecord.dtd +++ b/src/test/java/org/xerial/util/xml/dtd/SigmodRecord.dtd @@ -4,8 +4,159 @@ All rights reserved. --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.11.0