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;
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);
Class< ? > c = obj.getClass();
if (TypeInfo.isBasicType(c)) {
- return nodeValue(obj.toString());
+ nodeValue(obj.toString());
+ return this;
}
ObjectLens lens = ObjectLens.getObjectLens(obj.getClass());
if (!collection.isEmpty()) {
for (Object elem : collection) {
- toSilk(elem);
+ SilkWriter w = node(null);
+ w.toSilk(elem);
}
}
}
}
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)) {
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 " " >\r
+<!ENTITY iexcl "¡" >\r
+<!ENTITY cent "¢" >\r
+<!ENTITY pound "£" >\r
+<!ENTITY curren "¤" >\r
+<!ENTITY yen "¥" >\r
+<!ENTITY brvbar "¦" >\r
+<!ENTITY sect "§" >\r
+<!ENTITY uml "¨" >\r
+<!ENTITY copy "©" >\r
+<!ENTITY ordf "ª" >\r
+<!ENTITY laquo "«" >\r
+<!ENTITY not "¬" >\r
+<!ENTITY shy "­" >\r
+<!ENTITY reg "®" >\r
+<!ENTITY macr "¯" >\r
+<!ENTITY deg "°" >\r
+<!ENTITY plusmn "±" >\r
+<!ENTITY sup2 "²" >\r
+<!ENTITY sup3 "³" >\r
+<!ENTITY acute "´" >\r
+<!ENTITY micro "µ" >\r
+<!ENTITY para "¶" >\r
+<!ENTITY middot "·" >\r
+<!ENTITY cedil "¸" >\r
+<!ENTITY sup1 "¹" >\r
+<!ENTITY ordm "º" >\r
+<!ENTITY raquo "»" >\r
+<!ENTITY frac14 "¼" >\r
+<!ENTITY frac12 "½" >\r
+<!ENTITY frac34 "¾" >\r
+<!ENTITY iquest "¿" >\r
+<!ENTITY Agrave "À" >\r
+<!ENTITY Aacute "Á" >\r
+<!ENTITY Acirc "Â" >\r
+<!ENTITY Atilde "Ã" >\r
+<!ENTITY Auml "Ä" >\r
+<!ENTITY Aring "Å" >\r
+<!ENTITY AElig "Æ" >\r
+<!ENTITY Ccedil "Ç" >\r
+<!ENTITY Egrave "È" >\r
+<!ENTITY Eacute "É" >\r
+<!ENTITY Ecirc "Ê" >\r
+<!ENTITY Euml "Ë" >\r
+<!ENTITY Igrave "Ì" >\r
+<!ENTITY Iacute "Í" >\r
+<!ENTITY Icirc "Î" >\r
+<!ENTITY Iuml "Ï" >\r
+<!ENTITY ETH "Ð" >\r
+<!ENTITY Ntilde "Ñ" >\r
+<!ENTITY Ograve "Ò" >\r
+<!ENTITY Oacute "Ó" >\r
+<!ENTITY Ocirc "Ô" >\r
+<!ENTITY Otilde "Õ" >\r
+<!ENTITY Ouml "Ö" >\r
+<!ENTITY times "×" >\r
+<!ENTITY Oslash "Ø" >\r
+<!ENTITY Ugrave "Ù" >\r
+<!ENTITY Uacute "Ú" >\r
+<!ENTITY Ucirc "Û" >\r
+<!ENTITY Uuml "Ü" >\r
+<!ENTITY Yacute "Ý" >\r
+<!ENTITY THORN "Þ" >\r
+<!ENTITY szlig "ß" >\r
+<!ENTITY agrave "à" >\r
+<!ENTITY aacute "á" >\r
+<!ENTITY acirc "â" >\r
+<!ENTITY atilde "ã" >\r
+<!ENTITY auml "ä" >\r
+<!ENTITY aring "å" >\r
+<!ENTITY aelig "æ" >\r
+<!ENTITY ccedil "ç" >\r
+<!ENTITY egrave "è" >\r
+<!ENTITY eacute "é" >\r
+<!ENTITY ecirc "ê" >\r
+<!ENTITY euml "ë" >\r
+<!ENTITY igrave "ì" >\r
+<!ENTITY iacute "í" >\r
+<!ENTITY icirc "î" >\r
+<!ENTITY iuml "ï" >\r
+<!ENTITY eth "ð" >\r
+<!ENTITY ntilde "ñ" >\r
+<!ENTITY ograve "ò" >\r
+<!ENTITY oacute "ó" >\r
+<!ENTITY ocirc "ô" >\r
+<!ENTITY otilde "õ" >\r
+<!ENTITY ouml "ö" >\r
+<!ENTITY divide "÷" >\r
+<!ENTITY oslash "ø" >\r
+<!ENTITY ugrave "ù" >\r
+<!ENTITY uacute "ú" >\r
+<!ENTITY ucirc "û" >\r
+<!ENTITY uuml "ü" >\r
+<!ENTITY yacute "ý" >\r
+<!ENTITY thorn "þ" >\r
+<!ENTITY yuml "ÿ" >\r
+\r
+\r
+\r
+<!-- C0 Controls and Basic Latin -->\r
+<!ENTITY quot """ >\r
+<!--ENTITY amp "&"-->\r
+<!--ENTITY lt "<" -->\r
+<!ENTITY gt ">" >\r
+\r
+<!-- Latin Extended-A -->\r
+<!ENTITY OElig "Œ" >\r
+<!ENTITY oelig "œ" >\r
+\r
+<!-- ligature is a misnomer, this is a separate character in some languages -->\r
+<!ENTITY Scaron "Š" >\r
+<!ENTITY scaron "š" >\r
+<!ENTITY Yuml "Ÿ" >\r
+\r
+<!-- Spacing Modifier Letters -->\r
+<!ENTITY circ "ˆ" >\r
+<!ENTITY tilde "˜" >\r
+\r
+<!-- General Punctuation -->\r
+<!ENTITY ensp " " >\r
+<!ENTITY emsp " " >\r
+<!ENTITY thinsp " " >\r
+<!ENTITY zwnj "‌" >\r
+<!ENTITY zwj "‍" >\r
+<!ENTITY lrm "‎" >\r
+<!ENTITY rlm "‏" >\r
+<!ENTITY ndash "–" >\r
+<!ENTITY mdash "—" >\r
+<!ENTITY lsquo "‘" >\r
+<!ENTITY rsquo "’" >\r
+<!ENTITY sbquo "‚" >\r
+<!ENTITY ldquo "“" >\r
+<!ENTITY rdquo "”" >\r
+<!ENTITY bdquo "„" >\r
+<!ENTITY dagger "†" >\r
+<!ENTITY Dagger "‡" >\r
+<!ENTITY permil "‰" >\r
+<!ENTITY lsaquo "‹" >\r
+\r
+<!-- lsaquo is proposed but not yet ISO standardized -->\r
+<!ENTITY rsaquo "›" >\r
+\r
+<!-- rsaquo is proposed but not yet ISO standardized -->\r
+<!ENTITY euro "€" > \r
+\r
+\r
<!ELEMENT SigmodRecord (issue)* >\r
<!ELEMENT issue (volume,number,articles) >\r
<!ELEMENT volume (#PCDATA)>\r