Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / real-world application / jigsaw / src / org / w3c / tools / resources / serialization / xml / XMLDescrWriter.java
diff --git a/JMCR-Stable/real-world application/jigsaw/src/org/w3c/tools/resources/serialization/xml/XMLDescrWriter.java b/JMCR-Stable/real-world application/jigsaw/src/org/w3c/tools/resources/serialization/xml/XMLDescrWriter.java
new file mode 100644 (file)
index 0000000..1f4224e
--- /dev/null
@@ -0,0 +1,235 @@
+// XMLDescrWriter.java\r
+// $Id: XMLDescrWriter.java,v 1.1 2010/06/15 12:28:58 smhuang Exp $\r
+// (c) COPYRIGHT MIT, INRIA and Keio, 1999.\r
+// Please first read the full copyright statement in file COPYRIGHT.html\r
+package org.w3c.tools.resources.serialization.xml;\r
+\r
+import java.io.Writer;\r
+import java.io.Reader;\r
+import java.io.IOException;\r
+\r
+import org.w3c.tools.resources.Resource;\r
+import org.w3c.tools.resources.ResourceFrame;\r
+import org.w3c.tools.resources.Attribute;\r
+import org.w3c.tools.resources.SimpleAttribute;\r
+import org.w3c.tools.resources.ArrayAttribute;\r
+import org.w3c.tools.resources.FrameArrayAttribute;\r
+import org.w3c.tools.resources.serialization.AttributeDescription;\r
+import org.w3c.tools.resources.serialization.ResourceDescription;\r
+import org.w3c.tools.resources.serialization.EmptyDescription;\r
+\r
+/**\r
+ * @version $Revision: 1.1 $\r
+ * @author  Benoît Mahé (bmahe@w3.org)\r
+ */\r
+public class XMLDescrWriter extends XMLWriter implements JigXML {\r
+\r
+    protected void startResource(ResourceDescription res) \r
+       throws IOException\r
+    {\r
+       String classname = res.getClassName();\r
+       writer.write('<');\r
+       writer.write(RESOURCE_TAG);\r
+       writer.write(' ');\r
+       writer.write(CLASS_ATTR);\r
+       writer.write("='");\r
+       writer.write(classname);\r
+       writer.write("'>\n");\r
+       writeInherit(res.getClassHierarchy(), 1);\r
+       writeInterfaces(res.getInterfaces());\r
+    }\r
+\r
+    protected void startDescription(ResourceDescription res) \r
+       throws IOException\r
+    {\r
+       String classname = res.getClassName();\r
+       writer.write('<');\r
+       writer.write(DESCR_TAG);\r
+       writer.write(" ");\r
+       writer.write(CLASS_ATTR);\r
+       writer.write("='");\r
+       writer.write(classname);\r
+       String id = res.getIdentifier();\r
+       if (id == null)\r
+           id = NULL;\r
+       writer.write("' ");\r
+       writer.write(NAME_ATTR);\r
+       writer.write("='");\r
+       writer.write(id);\r
+       writer.write("'>\n");\r
+    }\r
+\r
+    protected void closeDescription() \r
+       throws IOException\r
+    {\r
+       writer.write("</");\r
+       writer.write(DESCR_TAG);\r
+       writer.write(">\n");\r
+    }\r
+\r
+    protected void writeInherit(String classes[], int idx)\r
+       throws IOException\r
+    {\r
+       if (idx < classes.length) {\r
+           level++;\r
+           indent();\r
+           writer.write('<');      \r
+           writer.write(INHERIT_TAG);\r
+           writer.write(' ');\r
+           writer.write(CLASS_ATTR);\r
+           writer.write("='");\r
+           writer.write(classes[idx]);\r
+           writer.write("'>\n");\r
+           writeInherit(classes, ++idx);\r
+           indent();\r
+           writer.write("</");\r
+           writer.write(INHERIT_TAG);\r
+           writer.write(">\n");\r
+           level--;\r
+       }\r
+    }\r
+    \r
+    protected void writeInterfaces(String classes[]) \r
+       throws IOException\r
+    {\r
+       level++;\r
+       for (int i = 0 ; i < classes.length ; i++) {\r
+           indent();\r
+           writer.write('<');\r
+           writer.write(IMPLEMENTS_TAG);\r
+           writer.write(' ');\r
+           writer.write(CLASS_ATTR);\r
+           writer.write("='");\r
+           writer.write(classes[i]);\r
+           writer.write("'/>\n");\r
+       }\r
+       level--;\r
+    }\r
+\r
+    protected void writeAttributeDescription(AttributeDescription descr)\r
+       throws IOException\r
+    {\r
+       level++;\r
+       String    classname = descr.getClassName();\r
+       Attribute attr      = descr.getAttribute();\r
+       Object    value     = descr.getValue();\r
+       if (attr instanceof SimpleAttribute) {\r
+           indent();\r
+           writer.write("<"+ATTRIBUTE_TAG+" "+NAME_ATTR+"='");\r
+           writer.write(descr.getName());\r
+           writer.write("' "+FLAG_ATTR+"='");\r
+           writer.write(attr.getFlag());\r
+           writer.write("' "+CLASS_ATTR+"='");\r
+           writer.write(classname);\r
+           if (value == null) {\r
+               writer.write("'>"+NULL);\r
+           } else {\r
+               writer.write("'>");\r
+               writer.write(encode(((SimpleAttribute)attr).pickle(value)));\r
+           }\r
+           writer.write("</");\r
+           writer.write(ATTRIBUTE_TAG);\r
+           writer.write(">\n");\r
+       } else if (attr instanceof ArrayAttribute) {\r
+           indent(); \r
+           writer.write('<');\r
+           writer.write(ARRAY_TAG);\r
+           writer.write(' ');\r
+           writer.write(NAME_ATTR);\r
+           writer.write("='");\r
+           writer.write(descr.getName());\r
+           writer.write("' ");\r
+           writer.write(FLAG_ATTR);\r
+           writer.write("='");\r
+           writer.write(attr.getFlag());\r
+           writer.write("' ");\r
+           writer.write(CLASS_ATTR);\r
+           writer.write("='");\r
+           writer.write(classname);\r
+           writer.write("' ");\r
+           String values[] = null;\r
+           if (value == null)\r
+               values = new String[0];\r
+           else\r
+               values = ((ArrayAttribute)attr).pickle(value);\r
+           int len = values.length;\r
+           writer.write(LENGTH_ATTR);\r
+           writer.write("='");\r
+           writer.write(String.valueOf(len));\r
+           writer.write("'>\n");\r
+           level++;\r
+           for (int i = 0 ; i < len ; i++) {\r
+               indent(); \r
+               writer.write('<');\r
+               writer.write(VALUE_TAG);\r
+               writer.write('>');\r
+               writer.write(encode(values[i]));\r
+               writer.write("</");\r
+               writer.write(VALUE_TAG);\r
+               writer.write(">\n");\r
+           }\r
+           level--;\r
+           indent(); \r
+           writer.write("</");\r
+           writer.write(ARRAY_TAG);\r
+           writer.write(">\n");\r
+       } else if (attr instanceof FrameArrayAttribute) {\r
+           indent();\r
+           writer.write('<');\r
+           writer.write(RESARRAY_TAG);\r
+           writer.write(' ');\r
+           writer.write(NAME_ATTR);\r
+           writer.write("='");\r
+           writer.write(descr.getName());\r
+           writer.write("' ");\r
+           writer.write(CLASS_ATTR);\r
+           writer.write("='");\r
+           writer.write(classname);\r
+           writer.write("' ");\r
+           ResourceDescription frames[] = null;\r
+           if (value == null)\r
+               frames = new ResourceDescription[0];\r
+           else\r
+               frames = (ResourceDescription[]) value;\r
+           int len = frames.length;\r
+           writer.write(LENGTH_ATTR);\r
+           writer.write("='");\r
+           writer.write(String.valueOf(len));\r
+           writer.write("'>\n");\r
+           for (int i = 0 ; i < len ; i++) {\r
+               writeResourceDescription(frames[i]);\r
+           }\r
+           indent();\r
+           writer.write("</");\r
+           writer.write(RESARRAY_TAG);\r
+           writer.write(">\n");\r
+       }\r
+       level--;\r
+    }\r
+\r
+    public void writeResourceDescription(ResourceDescription resource) \r
+       throws IOException\r
+    {\r
+       level++;\r
+       indent();\r
+       if (resource instanceof EmptyDescription) {\r
+           startDescription(resource);\r
+           indent();\r
+           closeDescription();\r
+       } else {\r
+           startResource(resource);\r
+           AttributeDescription attrs [] = \r
+               resource.getAttributeDescriptions();\r
+           for (int j = 0 ; j < attrs.length ; j++)\r
+               writeAttributeDescription(attrs[j]);\r
+           indent();\r
+           closeResource();\r
+       }\r
+       level--;\r
+    }\r
+\r
+    public XMLDescrWriter(Writer writer) {\r
+       super(writer);\r
+    }\r
+\r
+}\r