dol: initial dol commit
[jump.git] / dol / src / dol / helper / flattener / ArchFlattener.java
1 /* $Id: ArchFlattener.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 ArchFlattener extends FlattenerHelper {
13
14     /**
15      * Constructor.
16      *
17      * @param classname class name of the generated class
18      */
19     public ArchFlattener(String classname) {
20         super(classname);
21     }
22
23     public String processElement(Element element)
24         throws RuntimeException {
25
26         String string = "";
27
28         if (element.getName().equalsIgnoreCase("processor")) {
29             _generateElement = true;
30             string = generateProcessor(element);
31         }
32         else if (element.getName().equalsIgnoreCase("hw_channel")) {
33             _generateElement = true;
34             string = generateLink(element);
35         }
36         else if (element.getName().equalsIgnoreCase("memory")) {
37             _generateElement = true;
38             string = generateMemory(element);
39         }
40         else if (element.getName().equalsIgnoreCase("node")) {
41             _generateElement = true;
42             string = generateNode(element);
43         }
44
45         if (element.getName().equalsIgnoreCase("connection")) {
46             _generateElement = false;
47             string = generateConnection(element);
48         }
49
50         //belongs to mapping!
51         if (element.getName().equalsIgnoreCase("binding")) {
52             string = generateBinding(element);
53         }
54         return string;
55     }
56
57     /**
58      * 
59      */
60     @SuppressWarnings("unchecked")
61     protected String generateProcessor(Element element) {
62         String attributes[] = {"name", "type", "basename"};
63         String sourceCode = generateElement(element, attributes, false);
64
65         for (Element childElement : (List<Element>)element.getChildren()) {
66             if (childElement.getName().equalsIgnoreCase("iterator")) {
67                 sourceCode += generateIterator(childElement);
68             }
69             else if (childElement.getName().equalsIgnoreCase("node")) {
70                 sourceCode += generateNode(childElement);
71             }
72             else if (childElement.getName().equalsIgnoreCase("configuration")) {
73                 sourceCode += generateConfiguration(childElement);
74             }
75
76         }
77         sourceCode += _indent + "System.out.println(\"</processor>\");\n";
78         return sourceCode;
79     }
80
81     /**
82      * 
83      */
84     @SuppressWarnings("unchecked")
85     protected String generateMemory(Element element) {
86         String attributes[] = {"name", "type", "basename"};
87         String sourceCode = generateElement(element, attributes, false);
88
89         for (Element childElement : (List<Element>)element.getChildren()) {
90             if (childElement.getName().equalsIgnoreCase("iterator")) {
91                 sourceCode += generateIterator(childElement);
92             }
93             else if (childElement.getName().equalsIgnoreCase("node")) {
94                 sourceCode += generateNode(childElement);
95             }
96             else if (childElement.getName().equalsIgnoreCase("configuration")) {
97                 sourceCode += generateConfiguration(childElement);
98             }
99         }
100         sourceCode += _indent + "System.out.println(\"</memory>\");\n";
101         return sourceCode;
102     }
103
104     /**
105      * 
106      */
107     @SuppressWarnings("unchecked")
108     protected String generateLink(Element element) {
109         String attributes[] = {"name", "type", "basename"};
110         String sourceCode = generateElement(element, attributes, false);
111
112         for (Element childElement : (List<Element>)element.getChildren()) {
113             if (childElement.getName().equalsIgnoreCase("iterator")) {
114                 sourceCode += generateIterator(childElement);
115             }
116             else if (childElement.getName().equalsIgnoreCase("node")) {
117                 sourceCode += generateNode(childElement);
118             }
119             else if (childElement.getName().equalsIgnoreCase("configuration")) {
120                 sourceCode += generateConfiguration(childElement);
121             }
122         }
123         sourceCode += _indent + "System.out.println(\"</hw_channel>\");\n";
124         return sourceCode;
125     }
126
127     protected String generateConfiguration(Element element) {
128         String attributes[] = {"name", "value"};
129         increaseXmlIndent();
130         String sourceCode = generateElement(element, attributes, true);
131         decreaseXmlIndent();
132         return sourceCode;
133     }
134
135     /**
136      * 
137      */
138     @SuppressWarnings("unchecked")
139     protected String generateNode(Element element) {
140         increaseXmlIndent();
141
142         String sourceCode = "";
143         if (_generateElement) {
144           String attributes[] = {"name", "basename"};
145           sourceCode = generateElement(element, attributes, false);
146         }
147         else {
148           String attributes[] = {"name"};
149           sourceCode = generateElement(element, attributes, false);
150         }
151
152         for (Element childElement : (List<Element>)element.getChildren()) {
153             if (childElement.getName().equalsIgnoreCase("duplexport")) {
154                 sourceCode += generatePort(childElement);
155             }
156             else if (childElement.getName().equalsIgnoreCase("inputport")) {
157                 sourceCode += generatePort(childElement);
158             }
159             else if (childElement.getName().equalsIgnoreCase("outputport")) {
160                 sourceCode += generatePort(childElement);
161             }
162             else if (childElement.getName().equalsIgnoreCase("port")) {
163                 sourceCode += generatePort(childElement);
164             }
165         }
166         sourceCode += _indent + "System.out.println(\"" + _xmlIndent
167                    + "</node>\");\n";
168
169         decreaseXmlIndent();
170         return sourceCode;
171     }
172
173     protected String generatePort(Element element) {
174         increaseXmlIndent();
175         String sourceCode = "";
176         if (_generateElement) {
177           String attributes[] = {"name", "basename"};
178           sourceCode = generateElement(element, attributes, true);
179         }
180         else {
181           String attributes[] = {"name"};
182           sourceCode = generateElement(element, attributes, true);
183         }
184         decreaseXmlIndent();
185         return sourceCode;
186     }
187
188     /**
189      * 
190      */
191     @SuppressWarnings("unchecked")
192     protected String generateConnection(Element element) {
193         String attributes[] = {"name"};
194         String sourceCode = generateElement(element, attributes, false);
195
196         //add origin and target elements
197         for (Element childElement : (List<Element>)element.getChildren()) {
198             if (childElement.getName().equalsIgnoreCase("origin")) {
199                 //origin found
200                 increaseXmlIndent();
201                 sourceCode += generateElement(childElement, attributes, false);
202
203                 Namespace ns= childElement.getNamespace();
204                 Element nodeElement = childElement.getChild("node", ns);
205                 if (nodeElement != null) {
206                     sourceCode += generateNode(nodeElement);
207                 }
208                 sourceCode += _indent +
209                     "System.out.println(\"" + _xmlIndent + "</origin>\");\n";
210                 decreaseXmlIndent();
211             }
212             else if (childElement.getName().equalsIgnoreCase("target")) {
213                 //target found
214                 increaseXmlIndent();
215                 sourceCode += generateElement(childElement, attributes, false);
216
217                 Namespace ns= childElement.getNamespace();
218                 Element nodeElement = childElement.getChild("node", ns);
219                 if (nodeElement != null) {
220                     sourceCode += generateNode(nodeElement);
221                 }
222                 sourceCode += _indent +
223                     "System.out.println(\"" + _xmlIndent + "</target>\");\n";
224                 decreaseXmlIndent();
225             }
226         }
227         sourceCode += _indent + "System.out.println(\"</connection>\");\n";
228         return sourceCode;
229     }
230
231     /**
232      * 
233      */
234     @SuppressWarnings("unchecked")
235     protected String generateBinding(Element element) {
236         String attributes[] = {"name", "parameter", "type"};
237         String sourceCode = generateElement(element, attributes, false);
238
239         //add origin and target elements
240         for (Element childElement : (List<Element>)element.getChildren()) {
241             if (childElement.getName().equalsIgnoreCase("origin")) {
242                 //origin found
243                 increaseXmlIndent();
244                 sourceCode += generateElement(childElement, attributes, false);
245
246                 Namespace ns = childElement.getNamespace();
247                 Element portElement = childElement.getChild("port", ns);
248                 if (portElement != null) {
249                     increaseXmlIndent();
250                     String[] portAttributes = {"name", "basename"};
251                     sourceCode += generateElement(portElement,
252                                                   portAttributes, true);
253                     decreaseXmlIndent();
254                 }
255                 sourceCode += _indent +
256                     "System.out.println(\"" + _xmlIndent + "</origin>\");\n";
257                 decreaseXmlIndent();
258             }
259             else if (childElement.getName().equalsIgnoreCase("target")) {
260                 //target found
261                 increaseXmlIndent();
262                 sourceCode += generateElement(childElement, attributes, false);
263
264                 Namespace ns = childElement.getNamespace();
265                 Element portElement = childElement.getChild("port", ns);
266                 if (portElement != null) {
267                     increaseXmlIndent();
268                     String[] portAttributes = {"name", "basename"};
269                     sourceCode += generateElement(portElement,
270                                                   portAttributes, true);
271                     decreaseXmlIndent();
272                 }
273                 sourceCode += _indent +
274                     "System.out.println(\"" + _xmlIndent + "</target>\");\n";
275                 decreaseXmlIndent();
276             }
277         }
278         sourceCode += _indent + "System.out.println(\"</binding>\");\n";
279         return sourceCode;
280     }
281 }