dol: initial dol commit
[jump.git] / dol / src / dol / helper / flattener / PNFlattener.java
1 /* $Id: PNFlattener.java 1 2010-02-24 13:03:05Z haidw $ */
2 package dol.helper.flattener;
3
4 import java.util.List;
5
6 import org.jdom.Element;
7 import org.jdom.Namespace;
8
9 /**
10  *
11  */
12 public class PNFlattener extends FlattenerHelper {
13
14     /**
15      * Constructor.
16      *
17      * @param classname class name of the generated class
18      */
19     public PNFlattener(String classname) {
20         super(classname);
21     }
22
23     public String processElement(Element element)
24         throws RuntimeException {
25
26         String string = "";
27
28         _generateElement = true;
29         if (element.getName().equalsIgnoreCase(_xt.getProcessTag())) {
30             string = generateProcess(element);
31         } else if (element.getName().equalsIgnoreCase(_xt.getSWChannelTag())) {
32             string = generateChannel(element);
33         } else if (element.getName().equalsIgnoreCase(_xt.getPortTag())) {
34             string = generatePort(element);
35         } else if (element.getName().equalsIgnoreCase(_xt.getConfigurationTag())) {
36             string = generateConfiguration(element);
37         } else if (element.getName().equalsIgnoreCase(_xt.getProfilingTag())) {
38             string = generateProfiling(element);
39         }
40
41         _generateElement = false;
42
43         if (element.getName().equalsIgnoreCase(_xt.getConnectionTag())) {
44             string = generateConnection(element);
45         }
46         return string;
47     }
48
49     /**
50      * 
51      */
52     @SuppressWarnings("unchecked")
53     protected String generateProcess(Element element) {
54         String attributes[] = {"name", "basename"};
55         String sourceCode = generateElement(element, attributes, false);
56
57         for (Element childElement : (List<Element>)element.getChildren()) {
58             if (!(childElement.getName().equalsIgnoreCase(_xt.getPortTag()) ||
59                   childElement.getName().equalsIgnoreCase(_xt.getSourceTag()) ||
60                   childElement.getName().equalsIgnoreCase(_xt.getConfigurationTag()) ||
61                   childElement.getName().equalsIgnoreCase(_xt.getProfilingTag()))) {
62                 if (childElement.getName().equalsIgnoreCase(_xt.getIteratorTag())) {
63                     sourceCode += generateIterator(childElement);
64                 }
65             } else {
66                 if (childElement.getName().equalsIgnoreCase(_xt.getPortTag())) {
67                     sourceCode += generatePort(childElement);
68                 } else if (childElement.getName().equalsIgnoreCase(_xt.getConfigurationTag())) {
69                     sourceCode += generateConfiguration(childElement);
70                 } else if (childElement.getName().equalsIgnoreCase(_xt.getProfilingTag())) {
71                     sourceCode += generateProfiling(childElement);
72                 }
73                 else {
74                     //source found
75                     increaseXmlIndent();
76                     String[] sourceAttributes = {"location", "type"};
77                     sourceCode += generateElement(childElement,
78                                                   sourceAttributes, true);
79                     decreaseXmlIndent();
80                 }
81             }
82         }
83         sourceCode += _indent + "System.out.println(\"</process>\");\n";
84         return sourceCode;
85     }
86
87     /**
88      * 
89      */
90     @SuppressWarnings("unchecked")
91     protected String generateChannel(Element element) {
92         String attributes[] = {"name", "type", "size",
93                                "basename", "tokensize"};
94         String sourceCode = generateElement(element, attributes, false);
95
96         for (Element childElement : (List<Element>)element.getChildren()) {
97             if (childElement.getName().equalsIgnoreCase(_xt.getPortTag())) {
98                 sourceCode += generatePort(childElement);
99             } else if (childElement.getName().equalsIgnoreCase(_xt.getConfigurationTag())) {
100                 sourceCode += generateConfiguration(childElement);
101             } else if (childElement.getName().equalsIgnoreCase(_xt.getProfilingTag())) {
102                 sourceCode += generateProfiling(childElement);
103             }
104         }
105         sourceCode += _indent + "System.out.println(\"</sw_channel>\");\n";
106         return sourceCode;
107     }
108
109     protected String generatePort(Element element) {
110         String attributes[] = {"name", "type", "basename"};
111         increaseXmlIndent();
112         String sourceCode = generateElement(element, attributes, true);
113         decreaseXmlIndent();
114         return sourceCode;
115     }
116
117     protected String generateConfiguration(Element element) {
118         String attributes[] = {"name", "value"};
119         increaseXmlIndent();
120         String sourceCode = generateElement(element, attributes, true);
121         decreaseXmlIndent();
122         return sourceCode;
123     }
124
125     protected String generateProfiling(Element element) {
126         String attributes[] = {"name", "value"};
127         increaseXmlIndent();
128         String sourceCode = generateElement(element, attributes, true);
129         decreaseXmlIndent();
130         return sourceCode;
131     }
132     
133     /**
134      * 
135      */
136     @SuppressWarnings("unchecked")
137     protected String generateConnection(Element element) {
138         String attributes[] = {"name"};
139         String sourceCode = generateElement(element, attributes, false);
140
141         //add origin and target elements
142         for (Element childElement : (List<Element>)element.getChildren()) {
143             if (childElement.getName().equalsIgnoreCase("origin")) {
144                 //origin found
145                 increaseXmlIndent();
146                 sourceCode += generateElement(childElement, attributes, false);
147
148                 Namespace ns = childElement.getNamespace();
149                 Element portElement = childElement.getChild("port", ns);
150                 if (portElement != null) {
151                     increaseXmlIndent();
152                     String[] portAttributes = {"name"};
153                     sourceCode += generateElement(portElement,
154                                                   portAttributes, true);
155                     decreaseXmlIndent();
156                 }
157                 decreaseXmlIndent();
158                 sourceCode += _indent +
159                     "System.out.println(\"  </" + _xt.getOriginTag()+">\");\n";
160             }
161             else if (childElement.getName().equalsIgnoreCase(_xt.getTargetTag())) {
162                 //target found
163                 increaseXmlIndent();
164                 sourceCode += generateElement(childElement, attributes, false);
165
166                 Namespace ns = childElement.getNamespace();
167                 Element portElement = childElement.getChild(_xt.getPortTag(), ns);
168                 if (portElement != null) {
169                     increaseXmlIndent();
170                     String[] portAttributes = {"name"};
171                     sourceCode += generateElement(portElement,
172                                                   portAttributes, true);
173                     decreaseXmlIndent();
174                 }
175                 decreaseXmlIndent();
176                 sourceCode += _indent +
177                     "System.out.println(\"  </"+_xt.getTargetTag()+">\");\n";
178             }
179         }
180         sourceCode += _indent + "System.out.println(\"</"
181                     + _xt.getConnectionTag() + ">\");\n";
182         return sourceCode;
183     }
184 }