dol: initial dol commit
[jump.git] / dol / src / dol / visitor / xml / PNXmlVisitor.java
diff --git a/dol/src/dol/visitor/xml/PNXmlVisitor.java b/dol/src/dol/visitor/xml/PNXmlVisitor.java
new file mode 100644 (file)
index 0000000..19666e0
--- /dev/null
@@ -0,0 +1,217 @@
+/* $Id: PNXmlVisitor.java 1 2010-02-24 13:03:05Z haidw $ */
+package dol.visitor.xml;
+
+import dol.datamodel.XmlTag;
+import dol.datamodel.pn.Channel;
+import dol.datamodel.pn.Configuration;
+import dol.datamodel.pn.Connection;
+import dol.datamodel.pn.Port;
+import dol.datamodel.pn.Process;
+import dol.datamodel.pn.ProcessNetwork;
+import dol.datamodel.pn.ProfilingConfiguration;
+import dol.datamodel.pn.SourceCode;
+import dol.util.CodePrintString;
+import dol.visitor.PNVisitor;
+
+/**
+ * This is a class for a visitor that is used to generate
+ * a schema compatible XML for process network.
+ */
+public class PNXmlVisitor extends PNVisitor {
+
+    /**
+     * Constructor.
+     *
+     * @param stringBuffer buffer where the result is stored
+     */
+    public PNXmlVisitor(StringBuffer stringBuffer) {
+        _ps = new CodePrintString(stringBuffer);
+    }
+
+    /**
+     *
+     * @param x process network that needs to be rendered.
+     */
+    public void visitComponent(ProcessNetwork x) {
+        String xmlns = dol.util.SchemaLocation.
+                getProcessNetworkNamespace();
+        String xsiLocation = dol.util.SchemaLocation.
+                getProcessNetworkSchemaLocation();
+
+
+        _ps.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+        _ps.printOpeningTag(_xt.getPNTag());
+        _ps.println(" xmlns=\"" + xmlns
+                    + "\" xmlns:xsi=\"http://www.w3.org/2001/"
+                    + "XMLSchema-instance\""
+                    + System.getProperty("line.separator")
+                    + "  xsi:schemaLocation=\""
+                    + xmlns + " " + xsiLocation + "\" name=\""
+                    + x.getName() + "_annotated" + "\">");
+
+        //visit all processes
+        for (Process p : x.getProcessList()) {
+            p.accept(this);
+        }
+        _ps.println();
+
+        //visit all channels
+        for (Channel c : x.getChannelList()) {
+            c.accept(this);
+        }
+        _ps.println();
+
+        //visit all connections
+        for (Connection n : x.getConnectionList()) {
+            n.accept(this);
+        }
+
+        _ps.printClosingTag(_xt.getPNTag());
+    }
+
+    /**
+     * Print a line for the process in the correct format for XML.
+     *
+     * @param x process that needs to be rendered
+     */
+    public void visitComponent(Process x) {
+        _ps.printOpeningTag(_xt.getProcessTag());
+        _ps.println(" name=\"" + x.getName()
+                    + "\" basename=\"" + x.getBasename()
+                    + "\" range=\"" + x.getRange()
+                    + "\">");
+
+        for (Port p : x.getPortList()) {
+            p.accept(this);
+        }
+
+        for (SourceCode s : x.getSrcList()) {
+            s.accept(this);
+        }
+
+        for (Configuration c : x.getCfgList()) {
+            c.accept(this);
+        }
+
+        for (ProfilingConfiguration c : x.getProfilingList()) {
+            c.accept(this);
+        }
+
+        _ps.printClosingTag(_xt.getProcessTag());
+    }
+
+    /**
+     * Print a line for the channel in the correct format for XML.
+     *
+     * @param x channel that needs to be rendered
+     */
+    public void visitComponent(Channel x) {
+        _ps.printOpeningTag(_xt.getSWChannelTag());
+        _ps.println(" name=\"" + x.getName()
+                    + "\" basename=\"" + x.getBasename()
+                    + "\" type=\"" + x.getType()
+                    + "\" size=\"" + x.getSize()
+                    + "\">");
+
+        for (Port p : x.getPortList()) {
+            p.accept(this);
+        }
+
+        for (Configuration c : x.getCfgList()) {
+            c.accept(this);
+        }
+
+        for (ProfilingConfiguration c : x.getProfilingList()) {
+            c.accept(this);
+        }
+
+        _ps.printClosingTag(_xt.getSWChannelTag());
+    }
+
+    /**
+     * Print a line for the connection in the correct format for XML.
+     *
+     * @param x channel that needs to be rendered
+     */
+    public void visitComponent(Connection x) {
+        _ps.printOpeningTag(_xt.getConnectionTag());
+        _ps.println(" name=\"" + x.getName() + "\">");
+
+        //origin
+        _ps.printOpeningTag("origin");
+        _ps.println(" name=\"" + x.getOrigin().getName() + "\">");
+        _ps.println("          <port name=\""
+                + x.getOriginPort().getName() + "\"/>");
+        _ps.printClosingTag("origin");
+
+        //target
+        _ps.printOpeningTag("target");
+        _ps.println(" name=\"" + x.getTarget().getName() + "\">");
+        _ps.println("          <port name=\""
+                + x.getTargetPort().getName() + "\"/>");
+        _ps.printClosingTag("target");
+        _ps.printClosingTag("connection");
+    }
+
+    /**
+     * Print a line for the port in the correct format for XML.
+     *
+     * @param x port that needs to be rendered
+     */
+    public void visitComponent(Port x) {
+        _ps.printPrefix();
+        String s = "<" + _xt.getPortTag() 
+            + " name=\"" + x.getName()
+            + "\" basename=\"" + x.getBasename()
+            + "\" range=\"" + x.getRange()
+            + "\"";
+        if (!x.getType().equals(""))
+            s += " type=\"" + x.getType() + "\"";
+        s +=  " />";
+
+        _ps.println(s);
+    }
+
+    /**
+     * Print a line for the source code in the correct format for XML.
+     *
+     * @param x source that needs to be rendered
+     */
+    public void visitComponent(SourceCode x) {
+        _ps.printPrefix();
+        _ps.println("<" + _xt.getSourceTag()
+                    + " type=\"" + x.getType()
+                    + "\" location=\"" + x.getLocality()
+                    + "\" />");
+    }
+
+    /**
+     * Print a line for the configuration in the correct format for XML.
+     *
+     * @param x configuration that needs to be rendered
+     */
+    public void visitComponent(Configuration x) {
+        _ps.printPrefix();
+        _ps.println("<" + _xt.getConfigurationTag()
+                    + " name=\"" + x.getName()
+                    + "\" value=\"" + x.getValue()
+                    + "\" />");
+    }
+    
+    /**
+     * Print a line for the profiling configuration in the correct format for XML.
+     *
+     * @param x configuration that needs to be rendered
+     */
+    public void visitComponent(ProfilingConfiguration x) {
+        _ps.printPrefix();
+        _ps.println("<" + _xt.getProfilingTag()
+                    + " name=\"" + x.getName()
+                    + "\" value=\"" + x.getValue()
+                    + "\" />");
+    }
+
+    protected CodePrintString _ps = null;
+    
+    protected XmlTag _xt = XmlTag.getInstance();
+}