1 /* $Id: ArchFlattener.java 1 2010-02-24 13:03:05Z haidw $ */
2 package dol.helper.flattener;
6 import org.jdom.Element;
7 import org.jdom.Namespace;
12 public class ArchFlattener extends FlattenerHelper {
17 * @param classname class name of the generated class
19 public ArchFlattener(String classname) {
23 public String processElement(Element element)
24 throws RuntimeException {
28 if (element.getName().equalsIgnoreCase("processor")) {
29 _generateElement = true;
30 string = generateProcessor(element);
32 else if (element.getName().equalsIgnoreCase("hw_channel")) {
33 _generateElement = true;
34 string = generateLink(element);
36 else if (element.getName().equalsIgnoreCase("memory")) {
37 _generateElement = true;
38 string = generateMemory(element);
40 else if (element.getName().equalsIgnoreCase("node")) {
41 _generateElement = true;
42 string = generateNode(element);
45 if (element.getName().equalsIgnoreCase("connection")) {
46 _generateElement = false;
47 string = generateConnection(element);
51 if (element.getName().equalsIgnoreCase("binding")) {
52 string = generateBinding(element);
60 @SuppressWarnings("unchecked")
61 protected String generateProcessor(Element element) {
62 String attributes[] = {"name", "type", "basename"};
63 String sourceCode = generateElement(element, attributes, false);
65 for (Element childElement : (List<Element>)element.getChildren()) {
66 if (childElement.getName().equalsIgnoreCase("iterator")) {
67 sourceCode += generateIterator(childElement);
69 else if (childElement.getName().equalsIgnoreCase("node")) {
70 sourceCode += generateNode(childElement);
72 else if (childElement.getName().equalsIgnoreCase("configuration")) {
73 sourceCode += generateConfiguration(childElement);
77 sourceCode += _indent + "System.out.println(\"</processor>\");\n";
84 @SuppressWarnings("unchecked")
85 protected String generateMemory(Element element) {
86 String attributes[] = {"name", "type", "basename"};
87 String sourceCode = generateElement(element, attributes, false);
89 for (Element childElement : (List<Element>)element.getChildren()) {
90 if (childElement.getName().equalsIgnoreCase("iterator")) {
91 sourceCode += generateIterator(childElement);
93 else if (childElement.getName().equalsIgnoreCase("node")) {
94 sourceCode += generateNode(childElement);
96 else if (childElement.getName().equalsIgnoreCase("configuration")) {
97 sourceCode += generateConfiguration(childElement);
100 sourceCode += _indent + "System.out.println(\"</memory>\");\n";
107 @SuppressWarnings("unchecked")
108 protected String generateLink(Element element) {
109 String attributes[] = {"name", "type", "basename"};
110 String sourceCode = generateElement(element, attributes, false);
112 for (Element childElement : (List<Element>)element.getChildren()) {
113 if (childElement.getName().equalsIgnoreCase("iterator")) {
114 sourceCode += generateIterator(childElement);
116 else if (childElement.getName().equalsIgnoreCase("node")) {
117 sourceCode += generateNode(childElement);
119 else if (childElement.getName().equalsIgnoreCase("configuration")) {
120 sourceCode += generateConfiguration(childElement);
123 sourceCode += _indent + "System.out.println(\"</hw_channel>\");\n";
127 protected String generateConfiguration(Element element) {
128 String attributes[] = {"name", "value"};
130 String sourceCode = generateElement(element, attributes, true);
138 @SuppressWarnings("unchecked")
139 protected String generateNode(Element element) {
142 String sourceCode = "";
143 if (_generateElement) {
144 String attributes[] = {"name", "basename"};
145 sourceCode = generateElement(element, attributes, false);
148 String attributes[] = {"name"};
149 sourceCode = generateElement(element, attributes, false);
152 for (Element childElement : (List<Element>)element.getChildren()) {
153 if (childElement.getName().equalsIgnoreCase("duplexport")) {
154 sourceCode += generatePort(childElement);
156 else if (childElement.getName().equalsIgnoreCase("inputport")) {
157 sourceCode += generatePort(childElement);
159 else if (childElement.getName().equalsIgnoreCase("outputport")) {
160 sourceCode += generatePort(childElement);
162 else if (childElement.getName().equalsIgnoreCase("port")) {
163 sourceCode += generatePort(childElement);
166 sourceCode += _indent + "System.out.println(\"" + _xmlIndent
173 protected String generatePort(Element element) {
175 String sourceCode = "";
176 if (_generateElement) {
177 String attributes[] = {"name", "basename"};
178 sourceCode = generateElement(element, attributes, true);
181 String attributes[] = {"name"};
182 sourceCode = generateElement(element, attributes, true);
191 @SuppressWarnings("unchecked")
192 protected String generateConnection(Element element) {
193 String attributes[] = {"name"};
194 String sourceCode = generateElement(element, attributes, false);
196 //add origin and target elements
197 for (Element childElement : (List<Element>)element.getChildren()) {
198 if (childElement.getName().equalsIgnoreCase("origin")) {
201 sourceCode += generateElement(childElement, attributes, false);
203 Namespace ns= childElement.getNamespace();
204 Element nodeElement = childElement.getChild("node", ns);
205 if (nodeElement != null) {
206 sourceCode += generateNode(nodeElement);
208 sourceCode += _indent +
209 "System.out.println(\"" + _xmlIndent + "</origin>\");\n";
212 else if (childElement.getName().equalsIgnoreCase("target")) {
215 sourceCode += generateElement(childElement, attributes, false);
217 Namespace ns= childElement.getNamespace();
218 Element nodeElement = childElement.getChild("node", ns);
219 if (nodeElement != null) {
220 sourceCode += generateNode(nodeElement);
222 sourceCode += _indent +
223 "System.out.println(\"" + _xmlIndent + "</target>\");\n";
227 sourceCode += _indent + "System.out.println(\"</connection>\");\n";
234 @SuppressWarnings("unchecked")
235 protected String generateBinding(Element element) {
236 String attributes[] = {"name", "parameter", "type"};
237 String sourceCode = generateElement(element, attributes, false);
239 //add origin and target elements
240 for (Element childElement : (List<Element>)element.getChildren()) {
241 if (childElement.getName().equalsIgnoreCase("origin")) {
244 sourceCode += generateElement(childElement, attributes, false);
246 Namespace ns = childElement.getNamespace();
247 Element portElement = childElement.getChild("port", ns);
248 if (portElement != null) {
250 String[] portAttributes = {"name", "basename"};
251 sourceCode += generateElement(portElement,
252 portAttributes, true);
255 sourceCode += _indent +
256 "System.out.println(\"" + _xmlIndent + "</origin>\");\n";
259 else if (childElement.getName().equalsIgnoreCase("target")) {
262 sourceCode += generateElement(childElement, attributes, false);
264 Namespace ns = childElement.getNamespace();
265 Element portElement = childElement.getChild("port", ns);
266 if (portElement != null) {
268 String[] portAttributes = {"name", "basename"};
269 sourceCode += generateElement(portElement,
270 portAttributes, true);
273 sourceCode += _indent +
274 "System.out.println(\"" + _xmlIndent + "</target>\");\n";
278 sourceCode += _indent + "System.out.println(\"</binding>\");\n";