OSDN Git Service

toSilk for array
authorleo <leo@ae02f08e-27ec-0310-ae8c-8ba02fe2eafd>
Tue, 29 Sep 2009 01:58:42 +0000 (01:58 +0000)
committerleo <leo@ae02f08e-27ec-0310-ae8c-8ba02fe2eafd>
Tue, 29 Sep 2009 01:58:42 +0000 (01:58 +0000)
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
src/test/java/org/xerial/silk/SilkWriterTest.java
src/test/java/org/xerial/util/xml/dtd/SigmodRecord.dtd

index 50e92a6..cd65e0b 100644 (file)
@@ -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<ParameterGetter> getterContainer = lens.getGetterContainer();
+        List<ParameterGetter> postponedParameters = new ArrayList<ParameterGetter>();
+
+        // 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)) {
index 9edf94d..e5e2a82 100644 (file)
@@ -24,7 +24,7 @@
 //--------------------------------------\r
 package org.xerial.silk;\r
 \r
-import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.*;\r
 \r
 import java.io.StringReader;\r
 import java.io.StringWriter;\r
@@ -142,4 +142,42 @@ public class SilkWriterTest {
         String s = Lens.toSilk(i);\r
         _logger.info(s);\r
     }\r
+\r
+    @Test\r
+    public void array() throws Exception {\r
+        ArrayList<String> input = new ArrayList<String>();\r
+        input.add("hello");\r
+        input.add("world");\r
+        String s = Lens.toSilk(input);\r
+        _logger.info(s);\r
+    }\r
+\r
+    static class Person {\r
+        public int id;\r
+        public String name;\r
+\r
+        public Person(int id, String name) {\r
+            this.id = id;\r
+            this.name = name;\r
+        }\r
+\r
+    }\r
+\r
+    @Test\r
+    public void objectArray() throws Exception {\r
+\r
+        /*\r
+         * expect\r
+         * <pre>\r
+         * -(id:1, name:leo)\r
+         * -(id:2, name:yui)\r
+         * </pre>\r
+         */\r
+        ArrayList<Person> p = new ArrayList<Person>();\r
+        p.add(new Person(1, "leo"));\r
+        p.add(new Person(2, "yui"));\r
+        String s = Lens.toSilk(p);\r
+        _logger.info(s);\r
+    }\r
+\r
 }\r
index 79b1d28..6d7e059 100644 (file)
@@ -4,8 +4,159 @@
   All rights reserved.\r
 -->\r
 \r
+<!-- \r
 <!ENTITY % carSet SYSTEM "http://www.cs.washington.edu/research/projects/xmltk/xmldata/data/sigmod-record/CarSet.cfg" >\r
 %carSet;\r
+-->\r
+\r
+<!-- Character entity set "ISO-8859-1"-->\r
+\r
+<!ENTITY nbsp    "&#160;" >\r
+<!ENTITY iexcl   "&#161;" >\r
+<!ENTITY cent    "&#162;" >\r
+<!ENTITY pound   "&#163;" >\r
+<!ENTITY curren  "&#164;" >\r
+<!ENTITY yen     "&#165;" >\r
+<!ENTITY brvbar  "&#166;" >\r
+<!ENTITY sect    "&#167;" >\r
+<!ENTITY uml     "&#168;" >\r
+<!ENTITY copy    "&#169;" >\r
+<!ENTITY ordf    "&#170;" >\r
+<!ENTITY laquo   "&#171;" >\r
+<!ENTITY not     "&#172;" >\r
+<!ENTITY shy     "&#173;" >\r
+<!ENTITY reg     "&#174;" >\r
+<!ENTITY macr    "&#175;" >\r
+<!ENTITY deg     "&#176;" >\r
+<!ENTITY plusmn  "&#177;" >\r
+<!ENTITY sup2    "&#178;" >\r
+<!ENTITY sup3    "&#179;" >\r
+<!ENTITY acute   "&#180;" >\r
+<!ENTITY micro   "&#181;" >\r
+<!ENTITY para    "&#182;" >\r
+<!ENTITY middot  "&#183;" >\r
+<!ENTITY cedil   "&#184;" >\r
+<!ENTITY sup1    "&#185;" >\r
+<!ENTITY ordm    "&#186;" >\r
+<!ENTITY raquo   "&#187;" >\r
+<!ENTITY frac14  "&#188;" >\r
+<!ENTITY frac12  "&#189;" >\r
+<!ENTITY frac34  "&#190;" >\r
+<!ENTITY iquest  "&#191;" >\r
+<!ENTITY Agrave  "&#192;" >\r
+<!ENTITY Aacute  "&#193;" >\r
+<!ENTITY Acirc   "&#194;" >\r
+<!ENTITY Atilde  "&#195;" >\r
+<!ENTITY Auml    "&#196;" >\r
+<!ENTITY Aring   "&#197;" >\r
+<!ENTITY AElig   "&#198;" >\r
+<!ENTITY Ccedil  "&#199;" >\r
+<!ENTITY Egrave  "&#200;" >\r
+<!ENTITY Eacute  "&#201;" >\r
+<!ENTITY Ecirc   "&#202;" >\r
+<!ENTITY Euml    "&#203;" >\r
+<!ENTITY Igrave  "&#204;" >\r
+<!ENTITY Iacute  "&#205;" >\r
+<!ENTITY Icirc   "&#206;" >\r
+<!ENTITY Iuml    "&#207;" >\r
+<!ENTITY ETH     "&#208;" >\r
+<!ENTITY Ntilde  "&#209;" >\r
+<!ENTITY Ograve  "&#210;" >\r
+<!ENTITY Oacute  "&#211;" >\r
+<!ENTITY Ocirc   "&#212;" >\r
+<!ENTITY Otilde  "&#213;" >\r
+<!ENTITY Ouml    "&#214;" >\r
+<!ENTITY times   "&#215;" >\r
+<!ENTITY Oslash  "&#216;" >\r
+<!ENTITY Ugrave  "&#217;" >\r
+<!ENTITY Uacute  "&#218;" >\r
+<!ENTITY Ucirc   "&#219;" >\r
+<!ENTITY Uuml    "&#220;" >\r
+<!ENTITY Yacute  "&#221;" >\r
+<!ENTITY THORN   "&#222;" >\r
+<!ENTITY szlig   "&#223;" >\r
+<!ENTITY agrave  "&#224;" >\r
+<!ENTITY aacute  "&#225;" >\r
+<!ENTITY acirc   "&#226;" >\r
+<!ENTITY atilde  "&#227;" >\r
+<!ENTITY auml    "&#228;" >\r
+<!ENTITY aring   "&#229;" >\r
+<!ENTITY aelig   "&#230;" >\r
+<!ENTITY ccedil  "&#231;" >\r
+<!ENTITY egrave  "&#232;" >\r
+<!ENTITY eacute  "&#233;" >\r
+<!ENTITY ecirc   "&#234;" >\r
+<!ENTITY euml    "&#235;" >\r
+<!ENTITY igrave  "&#236;" >\r
+<!ENTITY iacute  "&#237;" >\r
+<!ENTITY icirc   "&#238;" >\r
+<!ENTITY iuml    "&#239;" >\r
+<!ENTITY eth     "&#240;" >\r
+<!ENTITY ntilde  "&#241;" >\r
+<!ENTITY ograve  "&#242;" >\r
+<!ENTITY oacute  "&#243;" >\r
+<!ENTITY ocirc   "&#244;" >\r
+<!ENTITY otilde  "&#245;" >\r
+<!ENTITY ouml    "&#246;" >\r
+<!ENTITY divide  "&#247;" >\r
+<!ENTITY oslash  "&#248;" >\r
+<!ENTITY ugrave  "&#249;" >\r
+<!ENTITY uacute  "&#250;" >\r
+<!ENTITY ucirc   "&#251;" >\r
+<!ENTITY uuml    "&#252;" >\r
+<!ENTITY yacute  "&#253;" >\r
+<!ENTITY thorn   "&#254;" >\r
+<!ENTITY yuml    "&#255;" >\r
+\r
+\r
+\r
+<!-- C0 Controls and Basic Latin -->\r
+<!ENTITY quot     "&#34;" >\r
+<!--ENTITY amp      "&#38;"-->\r
+<!--ENTITY lt       "&#60;" -->\r
+<!ENTITY gt       "&#62;" >\r
+\r
+<!-- Latin Extended-A -->\r
+<!ENTITY OElig    "&#338;" >\r
+<!ENTITY oelig    "&#339;" >\r
+\r
+<!-- ligature is a misnomer, this is a separate character in some languages -->\r
+<!ENTITY Scaron   "&#352;" >\r
+<!ENTITY scaron   "&#353;" >\r
+<!ENTITY Yuml     "&#376;" >\r
+\r
+<!-- Spacing Modifier Letters -->\r
+<!ENTITY circ     "&#710;" >\r
+<!ENTITY tilde    "&#732;" >\r
+\r
+<!-- General Punctuation -->\r
+<!ENTITY ensp     "&#8194;" >\r
+<!ENTITY emsp     "&#8195;" >\r
+<!ENTITY thinsp   "&#8201;" >\r
+<!ENTITY zwnj     "&#8204;" >\r
+<!ENTITY zwj      "&#8205;" >\r
+<!ENTITY lrm      "&#8206;" >\r
+<!ENTITY rlm      "&#8207;" >\r
+<!ENTITY ndash    "&#8211;" >\r
+<!ENTITY mdash    "&#8212;" >\r
+<!ENTITY lsquo    "&#8216;" >\r
+<!ENTITY rsquo    "&#8217;" >\r
+<!ENTITY sbquo    "&#8218;" >\r
+<!ENTITY ldquo    "&#8220;" >\r
+<!ENTITY rdquo    "&#8221;" >\r
+<!ENTITY bdquo    "&#8222;" >\r
+<!ENTITY dagger   "&#8224;" >\r
+<!ENTITY Dagger   "&#8225;" >\r
+<!ENTITY permil   "&#8240;" >\r
+<!ENTITY lsaquo   "&#8249;" >\r
+\r
+<!-- lsaquo is proposed but not yet ISO standardized -->\r
+<!ENTITY rsaquo   "&#8250;" >\r
+\r
+<!-- rsaquo is proposed but not yet ISO standardized -->\r
+<!ENTITY euro    "&#8364;" > \r
+\r
+\r
  <!ELEMENT SigmodRecord (issue)* >\r
  <!ELEMENT issue (volume,number,articles) >\r
  <!ELEMENT volume (#PCDATA)>\r