dol: initial dol commit
[jump.git] / dol / src / dol / helper / flattener / PNFlattener.java
diff --git a/dol/src/dol/helper/flattener/PNFlattener.java b/dol/src/dol/helper/flattener/PNFlattener.java
new file mode 100644 (file)
index 0000000..fc6af53
--- /dev/null
@@ -0,0 +1,184 @@
+/* $Id: PNFlattener.java 1 2010-02-24 13:03:05Z haidw $ */
+package dol.helper.flattener;
+
+import java.util.List;
+
+import org.jdom.Element;
+import org.jdom.Namespace;
+
+/**
+ *
+ */
+public class PNFlattener extends FlattenerHelper {
+
+    /**
+     * Constructor.
+     *
+     * @param classname class name of the generated class
+     */
+    public PNFlattener(String classname) {
+        super(classname);
+    }
+
+    public String processElement(Element element)
+        throws RuntimeException {
+
+        String string = "";
+
+        _generateElement = true;
+        if (element.getName().equalsIgnoreCase(_xt.getProcessTag())) {
+            string = generateProcess(element);
+        } else if (element.getName().equalsIgnoreCase(_xt.getSWChannelTag())) {
+            string = generateChannel(element);
+        } else if (element.getName().equalsIgnoreCase(_xt.getPortTag())) {
+            string = generatePort(element);
+        } else if (element.getName().equalsIgnoreCase(_xt.getConfigurationTag())) {
+            string = generateConfiguration(element);
+        } else if (element.getName().equalsIgnoreCase(_xt.getProfilingTag())) {
+            string = generateProfiling(element);
+        }
+
+        _generateElement = false;
+
+        if (element.getName().equalsIgnoreCase(_xt.getConnectionTag())) {
+            string = generateConnection(element);
+        }
+        return string;
+    }
+
+    /**
+     * 
+     */
+    @SuppressWarnings("unchecked")
+    protected String generateProcess(Element element) {
+        String attributes[] = {"name", "basename"};
+        String sourceCode = generateElement(element, attributes, false);
+
+        for (Element childElement : (List<Element>)element.getChildren()) {
+            if (!(childElement.getName().equalsIgnoreCase(_xt.getPortTag()) ||
+                  childElement.getName().equalsIgnoreCase(_xt.getSourceTag()) ||
+                  childElement.getName().equalsIgnoreCase(_xt.getConfigurationTag()) ||
+                  childElement.getName().equalsIgnoreCase(_xt.getProfilingTag()))) {
+                if (childElement.getName().equalsIgnoreCase(_xt.getIteratorTag())) {
+                    sourceCode += generateIterator(childElement);
+                }
+            } else {
+                if (childElement.getName().equalsIgnoreCase(_xt.getPortTag())) {
+                    sourceCode += generatePort(childElement);
+                } else if (childElement.getName().equalsIgnoreCase(_xt.getConfigurationTag())) {
+                    sourceCode += generateConfiguration(childElement);
+                } else if (childElement.getName().equalsIgnoreCase(_xt.getProfilingTag())) {
+                    sourceCode += generateProfiling(childElement);
+                }
+                else {
+                    //source found
+                    increaseXmlIndent();
+                    String[] sourceAttributes = {"location", "type"};
+                    sourceCode += generateElement(childElement,
+                                                  sourceAttributes, true);
+                    decreaseXmlIndent();
+                }
+            }
+        }
+        sourceCode += _indent + "System.out.println(\"</process>\");\n";
+        return sourceCode;
+    }
+
+    /**
+     * 
+     */
+    @SuppressWarnings("unchecked")
+    protected String generateChannel(Element element) {
+        String attributes[] = {"name", "type", "size",
+                               "basename", "tokensize"};
+        String sourceCode = generateElement(element, attributes, false);
+
+        for (Element childElement : (List<Element>)element.getChildren()) {
+            if (childElement.getName().equalsIgnoreCase(_xt.getPortTag())) {
+                sourceCode += generatePort(childElement);
+            } else if (childElement.getName().equalsIgnoreCase(_xt.getConfigurationTag())) {
+                sourceCode += generateConfiguration(childElement);
+            } else if (childElement.getName().equalsIgnoreCase(_xt.getProfilingTag())) {
+                sourceCode += generateProfiling(childElement);
+            }
+        }
+        sourceCode += _indent + "System.out.println(\"</sw_channel>\");\n";
+        return sourceCode;
+    }
+
+    protected String generatePort(Element element) {
+        String attributes[] = {"name", "type", "basename"};
+        increaseXmlIndent();
+        String sourceCode = generateElement(element, attributes, true);
+        decreaseXmlIndent();
+        return sourceCode;
+    }
+
+    protected String generateConfiguration(Element element) {
+        String attributes[] = {"name", "value"};
+        increaseXmlIndent();
+        String sourceCode = generateElement(element, attributes, true);
+        decreaseXmlIndent();
+        return sourceCode;
+    }
+
+    protected String generateProfiling(Element element) {
+        String attributes[] = {"name", "value"};
+        increaseXmlIndent();
+        String sourceCode = generateElement(element, attributes, true);
+        decreaseXmlIndent();
+        return sourceCode;
+    }
+    
+    /**
+     * 
+     */
+    @SuppressWarnings("unchecked")
+    protected String generateConnection(Element element) {
+        String attributes[] = {"name"};
+        String sourceCode = generateElement(element, attributes, false);
+
+        //add origin and target elements
+        for (Element childElement : (List<Element>)element.getChildren()) {
+            if (childElement.getName().equalsIgnoreCase("origin")) {
+                //origin found
+                increaseXmlIndent();
+                sourceCode += generateElement(childElement, attributes, false);
+
+                Namespace ns = childElement.getNamespace();
+                Element portElement = childElement.getChild("port", ns);
+                if (portElement != null) {
+                    increaseXmlIndent();
+                    String[] portAttributes = {"name"};
+                    sourceCode += generateElement(portElement,
+                                                  portAttributes, true);
+                    decreaseXmlIndent();
+                }
+                decreaseXmlIndent();
+                sourceCode += _indent +
+                    "System.out.println(\"  </" + _xt.getOriginTag()+">\");\n";
+            }
+            else if (childElement.getName().equalsIgnoreCase(_xt.getTargetTag())) {
+                //target found
+                increaseXmlIndent();
+                sourceCode += generateElement(childElement, attributes, false);
+
+                Namespace ns = childElement.getNamespace();
+                Element portElement = childElement.getChild(_xt.getPortTag(), ns);
+                if (portElement != null) {
+                    increaseXmlIndent();
+                    String[] portAttributes = {"name"};
+                    sourceCode += generateElement(portElement,
+                                                  portAttributes, true);
+                    decreaseXmlIndent();
+                }
+                decreaseXmlIndent();
+                sourceCode += _indent +
+                    "System.out.println(\"  </"+_xt.getTargetTag()+">\");\n";
+            }
+        }
+        sourceCode += _indent + "System.out.println(\"</"
+                    + _xt.getConnectionTag() + ">\");\n";
+        return sourceCode;
+    }
+}