dol: initial dol commit
[jump.git] / dol / src / dol / helper / flattener / ArchFlattener.java
diff --git a/dol/src/dol/helper/flattener/ArchFlattener.java b/dol/src/dol/helper/flattener/ArchFlattener.java
new file mode 100644 (file)
index 0000000..c011d43
--- /dev/null
@@ -0,0 +1,281 @@
+/* $Id: ArchFlattener.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 ArchFlattener extends FlattenerHelper {
+
+    /**
+     * Constructor.
+     *
+     * @param classname class name of the generated class
+     */
+    public ArchFlattener(String classname) {
+        super(classname);
+    }
+
+    public String processElement(Element element)
+        throws RuntimeException {
+
+        String string = "";
+
+        if (element.getName().equalsIgnoreCase("processor")) {
+            _generateElement = true;
+            string = generateProcessor(element);
+        }
+        else if (element.getName().equalsIgnoreCase("hw_channel")) {
+            _generateElement = true;
+            string = generateLink(element);
+        }
+        else if (element.getName().equalsIgnoreCase("memory")) {
+            _generateElement = true;
+            string = generateMemory(element);
+        }
+        else if (element.getName().equalsIgnoreCase("node")) {
+            _generateElement = true;
+            string = generateNode(element);
+        }
+
+        if (element.getName().equalsIgnoreCase("connection")) {
+            _generateElement = false;
+            string = generateConnection(element);
+        }
+
+        //belongs to mapping!
+        if (element.getName().equalsIgnoreCase("binding")) {
+            string = generateBinding(element);
+        }
+        return string;
+    }
+
+    /**
+     * 
+     */
+    @SuppressWarnings("unchecked")
+    protected String generateProcessor(Element element) {
+        String attributes[] = {"name", "type", "basename"};
+        String sourceCode = generateElement(element, attributes, false);
+
+        for (Element childElement : (List<Element>)element.getChildren()) {
+            if (childElement.getName().equalsIgnoreCase("iterator")) {
+                sourceCode += generateIterator(childElement);
+            }
+            else if (childElement.getName().equalsIgnoreCase("node")) {
+                sourceCode += generateNode(childElement);
+            }
+            else if (childElement.getName().equalsIgnoreCase("configuration")) {
+                sourceCode += generateConfiguration(childElement);
+            }
+
+        }
+        sourceCode += _indent + "System.out.println(\"</processor>\");\n";
+        return sourceCode;
+    }
+
+    /**
+     * 
+     */
+    @SuppressWarnings("unchecked")
+    protected String generateMemory(Element element) {
+        String attributes[] = {"name", "type", "basename"};
+        String sourceCode = generateElement(element, attributes, false);
+
+        for (Element childElement : (List<Element>)element.getChildren()) {
+            if (childElement.getName().equalsIgnoreCase("iterator")) {
+                sourceCode += generateIterator(childElement);
+            }
+            else if (childElement.getName().equalsIgnoreCase("node")) {
+                sourceCode += generateNode(childElement);
+            }
+            else if (childElement.getName().equalsIgnoreCase("configuration")) {
+                sourceCode += generateConfiguration(childElement);
+            }
+        }
+        sourceCode += _indent + "System.out.println(\"</memory>\");\n";
+        return sourceCode;
+    }
+
+    /**
+     * 
+     */
+    @SuppressWarnings("unchecked")
+    protected String generateLink(Element element) {
+        String attributes[] = {"name", "type", "basename"};
+        String sourceCode = generateElement(element, attributes, false);
+
+        for (Element childElement : (List<Element>)element.getChildren()) {
+            if (childElement.getName().equalsIgnoreCase("iterator")) {
+                sourceCode += generateIterator(childElement);
+            }
+            else if (childElement.getName().equalsIgnoreCase("node")) {
+                sourceCode += generateNode(childElement);
+            }
+            else if (childElement.getName().equalsIgnoreCase("configuration")) {
+                sourceCode += generateConfiguration(childElement);
+            }
+        }
+        sourceCode += _indent + "System.out.println(\"</hw_channel>\");\n";
+        return sourceCode;
+    }
+
+    protected String generateConfiguration(Element element) {
+        String attributes[] = {"name", "value"};
+        increaseXmlIndent();
+        String sourceCode = generateElement(element, attributes, true);
+        decreaseXmlIndent();
+        return sourceCode;
+    }
+
+    /**
+     * 
+     */
+    @SuppressWarnings("unchecked")
+    protected String generateNode(Element element) {
+        increaseXmlIndent();
+
+        String sourceCode = "";
+        if (_generateElement) {
+          String attributes[] = {"name", "basename"};
+          sourceCode = generateElement(element, attributes, false);
+        }
+        else {
+          String attributes[] = {"name"};
+          sourceCode = generateElement(element, attributes, false);
+        }
+
+        for (Element childElement : (List<Element>)element.getChildren()) {
+            if (childElement.getName().equalsIgnoreCase("duplexport")) {
+                sourceCode += generatePort(childElement);
+            }
+            else if (childElement.getName().equalsIgnoreCase("inputport")) {
+                sourceCode += generatePort(childElement);
+            }
+            else if (childElement.getName().equalsIgnoreCase("outputport")) {
+                sourceCode += generatePort(childElement);
+            }
+            else if (childElement.getName().equalsIgnoreCase("port")) {
+                sourceCode += generatePort(childElement);
+            }
+        }
+        sourceCode += _indent + "System.out.println(\"" + _xmlIndent
+                   + "</node>\");\n";
+
+        decreaseXmlIndent();
+        return sourceCode;
+    }
+
+    protected String generatePort(Element element) {
+        increaseXmlIndent();
+        String sourceCode = "";
+        if (_generateElement) {
+          String attributes[] = {"name", "basename"};
+          sourceCode = generateElement(element, attributes, true);
+        }
+        else {
+          String attributes[] = {"name"};
+          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 nodeElement = childElement.getChild("node", ns);
+                if (nodeElement != null) {
+                    sourceCode += generateNode(nodeElement);
+                }
+                sourceCode += _indent +
+                    "System.out.println(\"" + _xmlIndent + "</origin>\");\n";
+                decreaseXmlIndent();
+            }
+            else if (childElement.getName().equalsIgnoreCase("target")) {
+                //target found
+                increaseXmlIndent();
+                sourceCode += generateElement(childElement, attributes, false);
+
+                Namespace ns= childElement.getNamespace();
+                Element nodeElement = childElement.getChild("node", ns);
+                if (nodeElement != null) {
+                    sourceCode += generateNode(nodeElement);
+                }
+                sourceCode += _indent +
+                    "System.out.println(\"" + _xmlIndent + "</target>\");\n";
+                decreaseXmlIndent();
+            }
+        }
+        sourceCode += _indent + "System.out.println(\"</connection>\");\n";
+        return sourceCode;
+    }
+
+    /**
+     * 
+     */
+    @SuppressWarnings("unchecked")
+    protected String generateBinding(Element element) {
+        String attributes[] = {"name", "parameter", "type"};
+        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", "basename"};
+                    sourceCode += generateElement(portElement,
+                                                  portAttributes, true);
+                    decreaseXmlIndent();
+                }
+                sourceCode += _indent +
+                    "System.out.println(\"" + _xmlIndent + "</origin>\");\n";
+                decreaseXmlIndent();
+            }
+            else if (childElement.getName().equalsIgnoreCase("target")) {
+                //target found
+                increaseXmlIndent();
+                sourceCode += generateElement(childElement, attributes, false);
+
+                Namespace ns = childElement.getNamespace();
+                Element portElement = childElement.getChild("port", ns);
+                if (portElement != null) {
+                    increaseXmlIndent();
+                    String[] portAttributes = {"name", "basename"};
+                    sourceCode += generateElement(portElement,
+                                                  portAttributes, true);
+                    decreaseXmlIndent();
+                }
+                sourceCode += _indent +
+                    "System.out.println(\"" + _xmlIndent + "</target>\");\n";
+                decreaseXmlIndent();
+            }
+        }
+        sourceCode += _indent + "System.out.println(\"</binding>\");\n";
+        return sourceCode;
+    }
+}