X-Git-Url: http://sraa.de/git/?a=blobdiff_plain;f=dol%2Fsrc%2Fdol%2Fhelper%2Fflattener%2FArchFlattener.java;fp=dol%2Fsrc%2Fdol%2Fhelper%2Fflattener%2FArchFlattener.java;h=c011d43f50b36b780c6ffdc09dabd84547b69cf8;hb=8c411cf24ed0eb889191aaeafd8fa1e69081df42;hp=0000000000000000000000000000000000000000;hpb=dea7a4fb1ed110d3ce6e6d9255103d724bd66c0e;p=jump.git diff --git a/dol/src/dol/helper/flattener/ArchFlattener.java b/dol/src/dol/helper/flattener/ArchFlattener.java new file mode 100644 index 0000000..c011d43 --- /dev/null +++ b/dol/src/dol/helper/flattener/ArchFlattener.java @@ -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.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(\"\");\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.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(\"\");\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.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(\"\");\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.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 + + "\");\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.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 + "\");\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 + "\");\n"; + decreaseXmlIndent(); + } + } + sourceCode += _indent + "System.out.println(\"\");\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.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 + "\");\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 + "\");\n"; + decreaseXmlIndent(); + } + } + sourceCode += _indent + "System.out.println(\"\");\n"; + return sourceCode; + } +}