+/* $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;
+ }
+}