1 package org.scilab.modules.graphic_objects.xmlloader;
3 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.*;
6 import java.util.HashMap;
7 import java.util.StringTokenizer;
9 import javax.xml.parsers.DocumentBuilder;
10 import javax.xml.parsers.DocumentBuilderFactory;
12 import org.scilab.modules.commons.gui.FindIconHelper;
13 import org.scilab.modules.graphic_objects.builder.Builder;
14 import org.scilab.modules.graphic_objects.console.Console;
15 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
16 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
17 import org.scilab.modules.graphic_objects.uicontrol.frame.border.FrameBorderType;
18 import org.w3c.dom.Document;
19 import org.w3c.dom.NamedNodeMap;
20 import org.w3c.dom.Node;
21 import org.w3c.dom.NodeList;
23 public class XMLDomLoader {
25 private enum ModelType {
26 BOOLEAN, BOOLEAN_ARRAY, DOUBLE, DOUBLE_ARRAY, STRING, STRING_ARRAY, INTEGER, INTEGER_ARRAY;
29 private static final int __NODE_SCILABGUI__ = -10;
30 private static final int __NODE_OUT__ = -20;
31 private static final int __NODE_IN__ = -30;
32 private static final int __NODE_TITLE__ = -40;
34 private static HashMap<String, Integer> nameToGO = new HashMap<String, Integer>();
36 private static HashMap<String, Pair<Integer, ModelType>> figPropToGO = new HashMap<String, Pair<Integer, ModelType>>();
37 private static HashMap<String, Pair<Integer, ModelType>> UiPropToGO = new HashMap<String, Pair<Integer, ModelType>>();
38 private static HashMap<String, Pair<Integer, ModelType>> MenuPropToGO = new HashMap<String, Pair<Integer, ModelType>>();
39 private static HashMap<String, Pair<Integer, ModelType>> BorderPropToGO = new HashMap<String, Pair<Integer, ModelType>>();
43 // init map to convert control name to id
44 nameToGO.put("figure", __GO_FIGURE__);
45 nameToGO.put("frame", __GO_UI_FRAME__);
46 nameToGO.put("layer", __GO_UI_LAYER__);
47 nameToGO.put("pushbutton", __GO_UI_PUSHBUTTON__);
48 nameToGO.put("text", __GO_UI_TEXT__);
49 nameToGO.put("checkbox", __GO_UI_CHECKBOX__);
50 nameToGO.put("textfield", __GO_UI_EDIT__);
51 nameToGO.put("edit", __GO_UI_EDIT__);
52 nameToGO.put("image", __GO_UI_IMAGE__);
53 nameToGO.put("picture", __GO_UI_IMAGE__);
54 nameToGO.put("listbox", __GO_UI_LISTBOX__);
55 nameToGO.put("popupmenu", __GO_UI_POPUPMENU__);
56 nameToGO.put("radiobutton", __GO_UI_RADIOBUTTON__);
57 nameToGO.put("slider", __GO_UI_SLIDER__);
58 nameToGO.put("table", __GO_UI_TABLE__);
59 nameToGO.put("tab", __GO_UI_TAB__);
61 nameToGO.put("menu", __GO_UIMENU__);
62 nameToGO.put("contextmenu", __GO_UICONTEXTMENU__);
64 nameToGO.put("axes", __GO_AXES__);
66 nameToGO.put("borders", __GO_UI_FRAME_BORDER__);
67 nameToGO.put("out", __NODE_OUT__);
68 nameToGO.put("in", __NODE_IN__);
69 nameToGO.put("title", __NODE_TITLE__);
72 nameToGO.put("scilabgui", __NODE_SCILABGUI__);
74 //fill map of property -> {GO, ModelType}
76 //figure property list
77 figPropToGO.put("figure_position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.INTEGER_ARRAY));
78 figPropToGO.put("figure_size", new Pair<Integer, ModelType>(__GO_SIZE__, ModelType.INTEGER_ARRAY));
79 figPropToGO.put("axes_size", new Pair<Integer, ModelType>(__GO_AXES_SIZE__, ModelType.INTEGER_ARRAY));
80 figPropToGO.put("auto_resize", new Pair<Integer, ModelType>(__GO_AUTORESIZE__, ModelType.BOOLEAN));
81 figPropToGO.put("view_port", new Pair<Integer, ModelType>(__GO_VIEWPORT__, ModelType.INTEGER_ARRAY));
82 figPropToGO.put("figure_name", new Pair<Integer, ModelType>(__GO_NAME__, ModelType.STRING));
83 figPropToGO.put("figure_id", new Pair<Integer, ModelType>(__GO_ID__, ModelType.INTEGER));
84 figPropToGO.put("info_message", new Pair<Integer, ModelType>(__GO_INFO_MESSAGE__, ModelType.STRING));
85 figPropToGO.put("pixel_drawing_mode", new Pair<Integer, ModelType>(__GO_PIXEL_DRAWING_MODE__, ModelType.STRING));
86 figPropToGO.put("anti_aliasing", new Pair<Integer, ModelType>(__GO_ANTIALIASING__, ModelType.BOOLEAN));
87 figPropToGO.put("immediate_drawing", new Pair<Integer, ModelType>(__GO_IMMEDIATE_DRAWING__, ModelType.BOOLEAN));
88 figPropToGO.put("background", new Pair<Integer, ModelType>(__GO_BACKGROUND__, ModelType.INTEGER));
89 figPropToGO.put("visible", new Pair<Integer, ModelType>(__GO_VISIBLE__, ModelType.BOOLEAN));
90 figPropToGO.put("rotation_style", new Pair<Integer, ModelType>(__GO_ROTATION_TYPE__, ModelType.STRING));
91 figPropToGO.put("event_handler", new Pair<Integer, ModelType>(__GO_EVENTHANDLER_NAME__, ModelType.STRING));
92 figPropToGO.put("event_handler_enable", new Pair<Integer, ModelType>(__GO_EVENTHANDLER_ENABLE__, ModelType.BOOLEAN));
93 figPropToGO.put("resizefcn", new Pair<Integer, ModelType>(__GO_RESIZEFCN__, ModelType.STRING));
94 figPropToGO.put("closerequestfcn", new Pair<Integer, ModelType>(__GO_CLOSEREQUESTFCN__, ModelType.STRING));
95 figPropToGO.put("resize", new Pair<Integer, ModelType>(__GO_RESIZE__, ModelType.BOOLEAN));
96 figPropToGO.put("toolbar", new Pair<Integer, ModelType>(__GO_TOOLBAR__, ModelType.INTEGER));
97 figPropToGO.put("toolbar_visible", new Pair<Integer, ModelType>(__GO_TOOLBAR_VISIBLE__, ModelType.BOOLEAN));
98 figPropToGO.put("menubar", new Pair<Integer, ModelType>(__GO_MENUBAR__, ModelType.INTEGER));
99 figPropToGO.put("menubar_visible", new Pair<Integer, ModelType>(__GO_MENUBAR_VISIBLE__, ModelType.BOOLEAN));
100 figPropToGO.put("infobar_visible", new Pair<Integer, ModelType>(__GO_INFOBAR_VISIBLE__, ModelType.BOOLEAN));
101 figPropToGO.put("dockable", new Pair<Integer, ModelType>(__GO_DOCKABLE__, ModelType.BOOLEAN));
102 figPropToGO.put("layout", new Pair<Integer, ModelType>(__GO_LAYOUT__, ModelType.INTEGER));
103 figPropToGO.put("default_axes", new Pair<Integer, ModelType>(__GO_DEFAULT_AXES__, ModelType.BOOLEAN));
104 figPropToGO.put("icon", new Pair<Integer, ModelType>(__GO_UI_ICON__, ModelType.STRING));
105 figPropToGO.put("tag", new Pair<Integer, ModelType>(__GO_TAG__, ModelType.STRING));
106 figPropToGO.put("grid_opt_grid", new Pair<Integer, ModelType>(__GO_GRID_OPT_GRID__, ModelType.INTEGER_ARRAY));
107 figPropToGO.put("grid_opt_padding", new Pair<Integer, ModelType>(__GO_GRID_OPT_PADDING__, ModelType.INTEGER_ARRAY));
108 figPropToGO.put("border_opt_padding", new Pair<Integer, ModelType>(__GO_BORDER_OPT_PADDING__, ModelType.INTEGER_ARRAY));
110 //uicontrol property list
111 UiPropToGO.put("position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.INTEGER));
112 UiPropToGO.put("backgroundcolor", new Pair<Integer, ModelType>(__GO_UI_BACKGROUNDCOLOR__, ModelType.DOUBLE_ARRAY));
113 UiPropToGO.put("enable", new Pair<Integer, ModelType>(__GO_UI_ENABLE__, ModelType.BOOLEAN));
114 UiPropToGO.put("fontangle", new Pair<Integer, ModelType>(__GO_UI_FONTANGLE__, ModelType.STRING));
115 UiPropToGO.put("fontname", new Pair<Integer, ModelType>(__GO_UI_FONTNAME__, ModelType.STRING));
116 UiPropToGO.put("fontsize", new Pair<Integer, ModelType>(__GO_UI_FONTSIZE__, ModelType.DOUBLE));
117 UiPropToGO.put("fontunits", new Pair<Integer, ModelType>(__GO_UI_FONTUNITS__, ModelType.STRING));
118 UiPropToGO.put("fontweight", new Pair<Integer, ModelType>(__GO_UI_FONTWEIGHT__, ModelType.STRING));
119 UiPropToGO.put("foregroundcolor", new Pair<Integer, ModelType>(__GO_UI_FOREGROUNDCOLOR__, ModelType.INTEGER_ARRAY));
120 UiPropToGO.put("horizontalalignment", new Pair<Integer, ModelType>(__GO_UI_HORIZONTALALIGNMENT__, ModelType.STRING));
121 UiPropToGO.put("listboxtop", new Pair<Integer, ModelType>(__GO_UI_LISTBOXTOP__, ModelType.INTEGER_ARRAY));
122 UiPropToGO.put("max", new Pair<Integer, ModelType>(__GO_UI_MAX__, ModelType.DOUBLE));
123 UiPropToGO.put("min", new Pair<Integer, ModelType>(__GO_UI_MIN__, ModelType.DOUBLE));
124 UiPropToGO.put("position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.DOUBLE_ARRAY));
125 UiPropToGO.put("relief", new Pair<Integer, ModelType>(__GO_UI_RELIEF__, ModelType.STRING));
126 UiPropToGO.put("sliderstep", new Pair<Integer, ModelType>(__GO_UI_SLIDERSTEP__, ModelType.DOUBLE_ARRAY));
127 UiPropToGO.put("string", new Pair<Integer, ModelType>(__GO_UI_STRING__, ModelType.STRING_ARRAY));
128 UiPropToGO.put("tooltipstring", new Pair<Integer, ModelType>(__GO_UI_TOOLTIPSTRING__, ModelType.STRING_ARRAY));
129 UiPropToGO.put("units", new Pair<Integer, ModelType>(__GO_UI_UNITS__, ModelType.STRING));
130 UiPropToGO.put("value", new Pair<Integer, ModelType>(__GO_UI_VALUE__, ModelType.DOUBLE_ARRAY));
131 UiPropToGO.put("verticalalignment", new Pair<Integer, ModelType>(__GO_UI_VERTICALALIGNMENT__, ModelType.STRING));
132 UiPropToGO.put("visible", new Pair<Integer, ModelType>(__GO_VISIBLE__, ModelType.BOOLEAN));
133 UiPropToGO.put("layout", new Pair<Integer, ModelType>(__GO_LAYOUT__, ModelType.INTEGER));
134 UiPropToGO.put("callback", new Pair<Integer, ModelType>(__GO_CALLBACK__, ModelType.STRING));
135 UiPropToGO.put("callback_type", new Pair<Integer, ModelType>(__GO_CALLBACKTYPE__, ModelType.INTEGER));
136 UiPropToGO.put("gridbaggrid", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_GRID__, ModelType.INTEGER_ARRAY));
137 UiPropToGO.put("gridbagweight", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_WEIGHT__, ModelType.DOUBLE_ARRAY));
138 UiPropToGO.put("gridbagfill", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_FILL__, ModelType.INTEGER));
139 UiPropToGO.put("gridbaganchor", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_ANCHOR__, ModelType.INTEGER));
140 UiPropToGO.put("gridbagpadding", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_PADDING__, ModelType.INTEGER_ARRAY));
141 UiPropToGO.put("gridbagpreferredsize", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_PREFERREDSIZE__, ModelType.INTEGER_ARRAY));
142 UiPropToGO.put("borderposition", new Pair<Integer, ModelType>(__GO_UI_BORDER_POSITION__, ModelType.INTEGER));
143 UiPropToGO.put("borderpreferredsize", new Pair<Integer, ModelType>(__GO_UI_BORDER_PREFERREDSIZE__, ModelType.INTEGER_ARRAY));
144 UiPropToGO.put("margins", new Pair<Integer, ModelType>(__GO_MARGINS__, ModelType.DOUBLE_ARRAY));
145 UiPropToGO.put("groupname", new Pair<Integer, ModelType>(__GO_UI_GROUP_NAME__, ModelType.STRING));
146 UiPropToGO.put("icon", new Pair<Integer, ModelType>(__GO_UI_ICON__, ModelType.STRING));
147 UiPropToGO.put("scrollable", new Pair<Integer, ModelType>(__GO_UI_SCROLLABLE__, ModelType.BOOLEAN));
148 UiPropToGO.put("gridoptgrid", new Pair<Integer, ModelType>(__GO_GRID_OPT_GRID__, ModelType.INTEGER_ARRAY));
149 UiPropToGO.put("gridoptpadding", new Pair<Integer, ModelType>(__GO_GRID_OPT_PADDING__, ModelType.INTEGER_ARRAY));
150 UiPropToGO.put("borderoptpadding", new Pair<Integer, ModelType>(__GO_BORDER_OPT_PADDING__, ModelType.INTEGER_ARRAY));
151 UiPropToGO.put("tag", new Pair<Integer, ModelType>(__GO_TAG__, ModelType.STRING));
153 //border property list
154 BorderPropToGO.put("style", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_STYLE__, ModelType.INTEGER));
155 BorderPropToGO.put("type", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_TYPE__, ModelType.INTEGER));
156 BorderPropToGO.put("position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.DOUBLE_ARRAY));
157 BorderPropToGO.put("hlout", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_HIGHLIGHT_OUT__, ModelType.STRING));
158 BorderPropToGO.put("hlin", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_HIGHLIGHT_IN__, ModelType.STRING));
159 BorderPropToGO.put("shadowout", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_SHADOW_OUT__, ModelType.STRING));
160 BorderPropToGO.put("shadowin", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_SHADOW_IN__, ModelType.STRING));
161 BorderPropToGO.put("titleposition", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_POSITION__, ModelType.DOUBLE_ARRAY));
162 BorderPropToGO.put("hl", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_HIGHLIGHT_OUT__, ModelType.STRING));
163 BorderPropToGO.put("shadow", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_SHADOW_OUT__, ModelType.STRING));
164 BorderPropToGO.put("color", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_COLOR__, ModelType.STRING));
165 BorderPropToGO.put("thickness", new Pair<Integer, ModelType>(__GO_LINE_THICKNESS__, ModelType.INTEGER));
166 BorderPropToGO.put("rounded", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_ROUNDED__, ModelType.BOOLEAN));
167 BorderPropToGO.put("title", new Pair<Integer, ModelType>(__GO_TITLE__, ModelType.STRING));
168 BorderPropToGO.put("justification", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_JUSTIFICATION__, ModelType.INTEGER));
169 BorderPropToGO.put("fontangle", new Pair<Integer, ModelType>(__GO_UI_FONTANGLE__, ModelType.STRING));
170 BorderPropToGO.put("fontname", new Pair<Integer, ModelType>(__GO_UI_FONTNAME__, ModelType.STRING));
171 BorderPropToGO.put("fontsize", new Pair<Integer, ModelType>(__GO_UI_FONTSIZE__, ModelType.INTEGER));
172 BorderPropToGO.put("fontweight", new Pair<Integer, ModelType>(__GO_UI_FONTWEIGHT__, ModelType.STRING));
174 MenuPropToGO.put("enable", new Pair<Integer, ModelType>(__GO_UI_ENABLE__, ModelType.BOOLEAN));
175 MenuPropToGO.put("foreground", new Pair<Integer, ModelType>(__GO_UI_FOREGROUNDCOLOR__, ModelType.DOUBLE_ARRAY));
176 MenuPropToGO.put("label", new Pair<Integer, ModelType>(__GO_UI_LABEL__, ModelType.STRING));
177 MenuPropToGO.put("hidden", new Pair<Integer, ModelType>(__GO_HIDDEN__, ModelType.BOOLEAN));
178 MenuPropToGO.put("visible", new Pair<Integer, ModelType>(__GO_VISIBLE__, ModelType.BOOLEAN));
179 MenuPropToGO.put("callback", new Pair<Integer, ModelType>(__GO_CALLBACK__, ModelType.STRING));
180 MenuPropToGO.put("callback_type", new Pair<Integer, ModelType>(__GO_CALLBACKTYPE__, ModelType.INTEGER));
181 MenuPropToGO.put("checked", new Pair<Integer, ModelType>(__GO_UI_CHECKED__, ModelType.BOOLEAN));
182 MenuPropToGO.put("icon", new Pair<Integer, ModelType>(__GO_UI_ICON__, ModelType.STRING));
183 MenuPropToGO.put("tag", new Pair<Integer, ModelType>(__GO_TAG__, ModelType.STRING));
186 private String filename = "";
187 private Integer figure = 0;
188 private Boolean figVisible = true;
190 public XMLDomLoader(String filename) {
191 this.filename = filename;
195 return parse(filename);
198 public int parse(String filename) {
200 this.filename = filename;
201 File file = new File(filename);
204 //add filename filepath in FindIconHelper paths
205 String absoluteFilePath = file.getAbsolutePath();
206 String path = absoluteFilePath.substring(0, absoluteFilePath.lastIndexOf(File.separator));
207 FindIconHelper.addThemePath(path);
212 DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
213 Document doc = dBuilder.parse(file);
214 doc.getDocumentElement().normalize();
216 if (doc.hasChildNodes()) {
217 parseNode(0, doc.getChildNodes());
219 } catch (Exception e) {
223 //update visible property of main window
224 GraphicController.getController().setProperty(figure, __GO_VISIBLE__, figVisible);
228 private void parseNode(Integer parent, NodeList nodes) {
229 for (int i = nodes.getLength() - 1 ; i >= 0; i--) {
230 Node childNode = nodes.item(i);
232 boolean makeRelationShip = true;
234 // make sure it's element node.
235 if (childNode.getNodeType() == Node.ELEMENT_NODE) {
236 // get node name and value
237 int nodeType = nameToGO.get(childNode.getNodeName());
239 case __GO_FIGURE__: {
240 child = createFigure(childNode);
245 case __GO_UI_CHECKBOX__:
247 case __GO_UI_FRAME__:
248 case __GO_UI_IMAGE__:
249 case __GO_UI_LAYER__:
250 case __GO_UI_LISTBOX__:
251 case __GO_UI_POPUPMENU__:
252 case __GO_UI_PUSHBUTTON__:
253 case __GO_UI_RADIOBUTTON__:
254 case __GO_UI_SLIDER__:
255 case __GO_UI_TABLE__:
257 case __GO_UI_TEXT__: {
258 child = createUiControl(nodeType, parent, childNode);
263 child = Builder.createSubWin(parent);
267 case __GO_UI_FRAME_BORDER__: {
268 makeRelationShip = false;
269 child = createBorder(childNode);
270 GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER__, child);
275 makeRelationShip = false;
276 // child = createBorder(childNode);
277 // GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER_OUT_BORDER__, child);
282 makeRelationShip = false;
283 // child = createBorder(childNode);
284 // GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER_IN_BORDER__, child);
288 case __NODE_TITLE__: {
289 makeRelationShip = false;
290 // child = createBorder(childNode);
291 // GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER_TITLE__, child);
295 case __NODE_SCILABGUI__ : {
297 Node nodeVersion = childNode.getAttributes().getNamedItem("version");
298 double version = Double.parseDouble(nodeVersion.getNodeValue());
300 //call version manager ^^
303 Integer console = Console.getConsole().getIdentifier();
304 //set usedeprecatedskin flag
305 setBooleanAttribute(console, __GO_USEDEPRECATEDLF__, childNode.getAttributes(), "usedeprecatedskin");
309 case __GO_UICONTEXTMENU__: {
312 case __GO_UIMENU__: {
313 child = createUiMenu(parent, childNode);
323 if (makeRelationShip && parent != 0 && child != 0) {
324 GraphicController.getController().setGraphicObjectRelationship(parent, child);
327 if (childNode.hasChildNodes()) {
328 parseNode(child, childNode.getChildNodes());
335 private Integer createBorder(Node node) {
336 GraphicController controller = GraphicController.getController();
337 Integer uib = controller.askObject(GraphicObject.getTypeFromName(__GO_UI_FRAME_BORDER__));
339 NamedNodeMap attr = node.getAttributes();
341 Node styleNode = attr.getNamedItem("style");
342 if (styleNode != null) {
343 Integer style = FrameBorderType.stringToEnum(styleNode.getNodeValue()).ordinal();
344 controller.setProperty(uib, __GO_UI_FRAME_BORDER_STYLE__, style);
345 attr.removeNamedItem("style");
348 for (int i = 0 ; i < attr.getLength() ; i++) {
349 Node prop = attr.item(i);
350 Pair<Integer, ModelType> pair = BorderPropToGO.get(prop.getNodeName());
352 ModelType modelType = pair.getSecond();
355 controller.setProperty(uib, pair.getFirst(), getAttributeAsBoolean(prop.getNodeValue()));
358 controller.setProperty(uib, pair.getFirst(), getAttributeAsBooleanArray(prop.getNodeValue()));
361 controller.setProperty(uib, pair.getFirst(), getAttributeAsDouble(prop.getNodeValue()));
364 controller.setProperty(uib, pair.getFirst(), getAttributeAsDoubleArray(prop.getNodeValue()));
367 controller.setProperty(uib, pair.getFirst(), getAttributeAsInteger(prop.getNodeValue()));
370 controller.setProperty(uib, pair.getFirst(), getAttributeAsIntegerArray(prop.getNodeValue()));
373 controller.setProperty(uib, pair.getFirst(), getAttributeAsString(prop.getNodeValue()));
376 controller.setProperty(uib, pair.getFirst(), getAttributeAsStringArray(prop.getNodeValue()));
379 System.out.println("missing type");
384 //manage children here to avoid trouble on draw without children in SwingView
385 if (node.hasChildNodes()) {
386 NodeList list = node.getChildNodes();
387 for (int i = 0 ; i < list.getLength() ; i++) {
388 Node childNode = list.item(i);
389 if (childNode.getNodeType() == Node.ELEMENT_NODE) {
390 Integer child = createBorder(childNode);
391 String nodeName = childNode.getNodeName();
392 if (nodeName.equals("title")) {
393 GraphicController.getController().setProperty(uib, __GO_UI_FRAME_BORDER_TITLE__, child);
394 } else if (nodeName.equals("out")) {
395 GraphicController.getController().setProperty(uib, __GO_UI_FRAME_BORDER_OUT_BORDER__, child);
396 } else if (nodeName.equals("in")) {
397 GraphicController.getController().setProperty(uib, __GO_UI_FRAME_BORDER_IN_BORDER__, child);
405 private Integer createFigure(Node node) {
406 GraphicController controller = GraphicController.getController();
407 Boolean dockable = true;
410 Boolean default_axes = true;
412 NamedNodeMap attr = node.getAttributes();
414 Node tempnode = attr.getNamedItem("dockable");
415 if (tempnode != null) {
416 dockable = getAttributeAsBoolean(tempnode.getNodeValue());
417 attr.removeNamedItem("dockable");
420 tempnode = attr.getNamedItem("menubar");
421 if (tempnode != null) {
422 menubar = getAttributeAsInteger(tempnode.getNodeValue());
423 attr.removeNamedItem("menubar");
426 tempnode = attr.getNamedItem("toolbar");
427 if (tempnode != null) {
428 toolbar = getAttributeAsInteger(tempnode.getNodeValue());
429 attr.removeNamedItem("toolbar");
432 tempnode = attr.getNamedItem("default_axes");
433 if (tempnode != null) {
434 default_axes = getAttributeAsBoolean(tempnode.getNodeValue());
435 attr.removeNamedItem("default_axes");
438 tempnode = attr.getNamedItem("visible");
439 if (tempnode != null) {
440 figVisible = getAttributeAsBoolean(tempnode.getNodeValue());
441 attr.removeNamedItem("visible");
444 Integer fig = Builder.createFigure(dockable, menubar, toolbar, default_axes, false);
446 for (int i = 0 ; i < attr.getLength() ; i++) {
447 Node prop = attr.item(i);
448 Pair<Integer, ModelType> pair = figPropToGO.get(prop.getNodeName());
450 ModelType type = pair.getSecond();
453 controller.setProperty(fig, pair.getFirst(), getAttributeAsBoolean(prop.getNodeValue()));
456 controller.setProperty(fig, pair.getFirst(), getAttributeAsBooleanArray(prop.getNodeValue()));
459 controller.setProperty(fig, pair.getFirst(), getAttributeAsDouble(prop.getNodeValue()));
462 controller.setProperty(fig, pair.getFirst(), getAttributeAsDoubleArray(prop.getNodeValue()));
465 controller.setProperty(fig, pair.getFirst(), getAttributeAsInteger(prop.getNodeValue()));
468 controller.setProperty(fig, pair.getFirst(), getAttributeAsIntegerArray(prop.getNodeValue()));
471 controller.setProperty(fig, pair.getFirst(), getAttributeAsString(prop.getNodeValue()));
474 controller.setProperty(fig, pair.getFirst(), getAttributeAsStringArray(prop.getNodeValue()));
477 System.out.println("missing type");
485 private Integer createUiControl(Integer type, Integer parent, Node node) {
486 GraphicController controller = GraphicController.getController();
487 NamedNodeMap attr = node.getAttributes();
489 /*for frame we have to take care of scrollable property*/
490 if (type == __GO_UI_FRAME__) {
491 Node item = attr.getNamedItem("scrollable");
492 if (item != null && item.getNodeValue().equals("on")) {
493 type = __GO_UI_FRAME_SCROLLABLE__;
497 Integer uic = GraphicController.getController().askObject(GraphicObject.getTypeFromName(type));
498 controller.setProperty(uic, __GO_VISIBLE__, true);
500 for (int i = 0 ; i < attr.getLength() ; i++) {
501 Node prop = attr.item(i);
502 Pair<Integer, ModelType> pair = UiPropToGO.get(prop.getNodeName());
504 ModelType modelType = pair.getSecond();
507 controller.setProperty(uic, pair.getFirst(), getAttributeAsBoolean(prop.getNodeValue()));
510 controller.setProperty(uic, pair.getFirst(), getAttributeAsBooleanArray(prop.getNodeValue()));
513 controller.setProperty(uic, pair.getFirst(), getAttributeAsDouble(prop.getNodeValue()));
516 controller.setProperty(uic, pair.getFirst(), getAttributeAsDoubleArray(prop.getNodeValue()));
519 controller.setProperty(uic, pair.getFirst(), getAttributeAsInteger(prop.getNodeValue()));
522 controller.setProperty(uic, pair.getFirst(), getAttributeAsIntegerArray(prop.getNodeValue()));
525 controller.setProperty(uic, pair.getFirst(), getAttributeAsString(prop.getNodeValue()));
528 controller.setProperty(uic, pair.getFirst(), getAttributeAsStringArray(prop.getNodeValue()));
531 System.out.println("missing type");
539 private Integer createUiMenu(Integer parent, Node node) {
540 GraphicController controller = GraphicController.getController();
541 NamedNodeMap attr = node.getAttributes();
543 Integer uim = GraphicController.getController().askObject(GraphicObject.getTypeFromName(__GO_UIMENU__));
544 controller.setProperty(uim, __GO_VISIBLE__, true);
546 for (int i = 0 ; i < attr.getLength() ; i++) {
547 Node prop = attr.item(i);
548 Pair<Integer, ModelType> pair = MenuPropToGO.get(prop.getNodeName());
549 System.out.println("node : " + prop.getNodeName());
550 ModelType modelType = pair.getSecond();
553 controller.setProperty(uim, pair.getFirst(), getAttributeAsBoolean(prop.getNodeValue()));
556 controller.setProperty(uim, pair.getFirst(), getAttributeAsBooleanArray(prop.getNodeValue()));
559 controller.setProperty(uim, pair.getFirst(), getAttributeAsDouble(prop.getNodeValue()));
562 controller.setProperty(uim, pair.getFirst(), getAttributeAsDoubleArray(prop.getNodeValue()));
565 controller.setProperty(uim, pair.getFirst(), getAttributeAsInteger(prop.getNodeValue()));
568 controller.setProperty(uim, pair.getFirst(), getAttributeAsIntegerArray(prop.getNodeValue()));
571 controller.setProperty(uim, pair.getFirst(), getAttributeAsString(prop.getNodeValue()));
574 controller.setProperty(uim, pair.getFirst(), getAttributeAsStringArray(prop.getNodeValue()));
577 System.out.println("missing type");
585 private Boolean getAttributeAsBoolean(String val) {
590 if (val.equals("on")) {
594 if (val.equals("off")) {
601 private void setBooleanAttribute(Integer id, int property, NamedNodeMap attributes, String attr) {
602 Node node = attributes.getNamedItem(attr);
604 Boolean b = getAttributeAsBoolean(node.getNodeValue());
606 GraphicController.getController().setProperty(id, property, b);
611 private Double getAttributeAsDouble(String val) {
616 return Double.parseDouble(val);
619 private Integer getAttributeAsInteger(String val) {
624 return Integer.parseInt(val);
627 private String getAttributeAsString(String val) {
631 private Boolean[] getAttributeAsBooleanArray(String val) {
634 return new Boolean[] {};
637 StringTokenizer token = new StringTokenizer(val, ",");
639 Boolean[] b = new Boolean[token.countTokens()];
641 while (token.hasMoreElements()) {
642 String s = token.nextToken();
643 if (s.equals("on")) {
653 private Double[] getAttributeAsDoubleArray(String val) {
656 return new Double[] {};
659 StringTokenizer token = new StringTokenizer(val, ",");
661 Double[] d = new Double[token.countTokens()];
663 while (token.hasMoreElements()) {
664 String s = token.nextToken();
665 d[i++] = Double.parseDouble(s);
671 private Integer[] getAttributeAsIntegerArray(String val) {
674 return new Integer[] {};
677 StringTokenizer token = new StringTokenizer(val, ",");
679 Integer[] integer = new Integer[token.countTokens()];
681 while (token.hasMoreElements()) {
682 String s = token.nextToken();
683 integer[i++] = Integer.parseInt(s);
689 private String[] getAttributeAsStringArray(String val) {
695 StringTokenizer token = new StringTokenizer(val, ",");
697 String[] s = new String[token.countTokens()];
699 while (token.hasMoreElements()) {
700 s[i++] = token.nextToken();