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>> BorderPropToGO = new HashMap<String, Pair<Integer, ModelType>>();
42 // init map to convert control name to id
43 nameToGO.put("figure", __GO_FIGURE__);
44 nameToGO.put("frame", __GO_UI_FRAME__);
45 nameToGO.put("layer", __GO_UI_LAYER__);
46 nameToGO.put("pushbutton", __GO_UI_PUSHBUTTON__);
47 nameToGO.put("text", __GO_UI_TEXT__);
48 nameToGO.put("checkbox", __GO_UI_CHECKBOX__);
49 nameToGO.put("textfield", __GO_UI_EDIT__);
50 nameToGO.put("edit", __GO_UI_EDIT__);
51 nameToGO.put("image", __GO_UI_IMAGE__);
52 nameToGO.put("picture", __GO_UI_IMAGE__);
53 nameToGO.put("listbox", __GO_UI_LISTBOX__);
54 nameToGO.put("popupmenu", __GO_UI_POPUPMENU__);
55 nameToGO.put("radiobutton", __GO_UI_RADIOBUTTON__);
56 nameToGO.put("slider", __GO_UI_SLIDER__);
57 nameToGO.put("table", __GO_UI_TABLE__);
58 nameToGO.put("tab", __GO_UI_TAB__);
60 nameToGO.put("menu", __GO_UIMENU__);
61 nameToGO.put("contextmenu", __GO_UICONTEXTMENU__);
63 nameToGO.put("axes", __GO_AXES__);
65 nameToGO.put("borders", __GO_UI_FRAME_BORDER__);
66 nameToGO.put("out", __NODE_OUT__);
67 nameToGO.put("in", __NODE_IN__);
68 nameToGO.put("title", __NODE_TITLE__);
71 nameToGO.put("scilabgui", __NODE_SCILABGUI__);
73 //fill map of property -> {GO, ModelType}
75 //figure property list
76 figPropToGO.put("figure_position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.INTEGER_ARRAY));
77 figPropToGO.put("figure_size", new Pair<Integer, ModelType>(__GO_SIZE__, ModelType.INTEGER_ARRAY));
78 figPropToGO.put("axes_size", new Pair<Integer, ModelType>(__GO_AXES_SIZE__, ModelType.INTEGER_ARRAY));
79 figPropToGO.put("auto_resize", new Pair<Integer, ModelType>(__GO_AUTORESIZE__, ModelType.BOOLEAN));
80 figPropToGO.put("view_port", new Pair<Integer, ModelType>(__GO_VIEWPORT__, ModelType.INTEGER_ARRAY));
81 figPropToGO.put("figure_name", new Pair<Integer, ModelType>(__GO_NAME__, ModelType.STRING));
82 figPropToGO.put("figure_id", new Pair<Integer, ModelType>(__GO_ID__, ModelType.INTEGER));
83 figPropToGO.put("info_message", new Pair<Integer, ModelType>(__GO_INFO_MESSAGE__, ModelType.STRING));
84 figPropToGO.put("pixel_drawing_mode", new Pair<Integer, ModelType>(__GO_PIXEL_DRAWING_MODE__, ModelType.STRING));
85 figPropToGO.put("anti_aliasing", new Pair<Integer, ModelType>(__GO_ANTIALIASING__, ModelType.BOOLEAN));
86 figPropToGO.put("immediate_drawing", new Pair<Integer, ModelType>(__GO_IMMEDIATE_DRAWING__, ModelType.BOOLEAN));
87 figPropToGO.put("background", new Pair<Integer, ModelType>(__GO_BACKGROUND__, ModelType.INTEGER));
88 figPropToGO.put("visible", new Pair<Integer, ModelType>(__GO_VISIBLE__, ModelType.BOOLEAN));
89 figPropToGO.put("rotation_style", new Pair<Integer, ModelType>(__GO_ROTATION_TYPE__, ModelType.STRING));
90 figPropToGO.put("event_handler", new Pair<Integer, ModelType>(__GO_EVENTHANDLER_NAME__, ModelType.STRING));
91 figPropToGO.put("event_handler_enable", new Pair<Integer, ModelType>(__GO_EVENTHANDLER_ENABLE__, ModelType.BOOLEAN));
92 figPropToGO.put("resizefcn", new Pair<Integer, ModelType>(__GO_RESIZEFCN__, ModelType.STRING));
93 figPropToGO.put("closerequestfcn", new Pair<Integer, ModelType>(__GO_CLOSEREQUESTFCN__, ModelType.STRING));
94 figPropToGO.put("resize", new Pair<Integer, ModelType>(__GO_RESIZE__, ModelType.BOOLEAN));
95 figPropToGO.put("toolbar", new Pair<Integer, ModelType>(__GO_TOOLBAR__, ModelType.INTEGER));
96 figPropToGO.put("toolbar_visible", new Pair<Integer, ModelType>(__GO_TOOLBAR_VISIBLE__, ModelType.BOOLEAN));
97 figPropToGO.put("menubar", new Pair<Integer, ModelType>(__GO_MENUBAR__, ModelType.INTEGER));
98 figPropToGO.put("menubar_visible", new Pair<Integer, ModelType>(__GO_MENUBAR_VISIBLE__, ModelType.BOOLEAN));
99 figPropToGO.put("infobar_visible", new Pair<Integer, ModelType>(__GO_INFOBAR_VISIBLE__, ModelType.BOOLEAN));
100 figPropToGO.put("dockable", new Pair<Integer, ModelType>(__GO_DOCKABLE__, ModelType.BOOLEAN));
101 figPropToGO.put("layout", new Pair<Integer, ModelType>(__GO_LAYOUT__, ModelType.INTEGER));
102 figPropToGO.put("default_axes", new Pair<Integer, ModelType>(__GO_DEFAULT_AXES__, ModelType.BOOLEAN));
103 figPropToGO.put("icon", new Pair<Integer, ModelType>(__GO_UI_ICON__, ModelType.STRING));
104 figPropToGO.put("tag", new Pair<Integer, ModelType>(__GO_TAG__, ModelType.STRING));
105 figPropToGO.put("grid_opt_grid", new Pair<Integer, ModelType>(__GO_GRID_OPT_GRID__, ModelType.INTEGER_ARRAY));
106 figPropToGO.put("grid_opt_padding", new Pair<Integer, ModelType>(__GO_GRID_OPT_PADDING__, ModelType.INTEGER_ARRAY));
107 figPropToGO.put("border_opt_padding", new Pair<Integer, ModelType>(__GO_BORDER_OPT_PADDING__, ModelType.INTEGER_ARRAY));
109 //uicontrol property list
110 UiPropToGO.put("position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.INTEGER));
111 UiPropToGO.put("backgroundcolor", new Pair<Integer, ModelType>(__GO_UI_BACKGROUNDCOLOR__, ModelType.DOUBLE_ARRAY));
112 UiPropToGO.put("enable", new Pair<Integer, ModelType>(__GO_UI_ENABLE__, ModelType.BOOLEAN));
113 UiPropToGO.put("fontangle", new Pair<Integer, ModelType>(__GO_UI_FONTANGLE__, ModelType.STRING));
114 UiPropToGO.put("fontname", new Pair<Integer, ModelType>(__GO_UI_FONTNAME__, ModelType.STRING));
115 UiPropToGO.put("fontsize", new Pair<Integer, ModelType>(__GO_UI_FONTSIZE__, ModelType.DOUBLE));
116 UiPropToGO.put("fontunits", new Pair<Integer, ModelType>(__GO_UI_FONTUNITS__, ModelType.STRING));
117 UiPropToGO.put("fontweight", new Pair<Integer, ModelType>(__GO_UI_FONTWEIGHT__, ModelType.STRING));
118 UiPropToGO.put("foregroundcolor", new Pair<Integer, ModelType>(__GO_UI_FOREGROUNDCOLOR__, ModelType.INTEGER_ARRAY));
119 UiPropToGO.put("horizontalalignment", new Pair<Integer, ModelType>(__GO_UI_HORIZONTALALIGNMENT__, ModelType.STRING));
120 UiPropToGO.put("listboxtop", new Pair<Integer, ModelType>(__GO_UI_LISTBOXTOP__, ModelType.INTEGER_ARRAY));
121 UiPropToGO.put("max", new Pair<Integer, ModelType>(__GO_UI_MAX__, ModelType.DOUBLE));
122 UiPropToGO.put("min", new Pair<Integer, ModelType>(__GO_UI_MIN__, ModelType.DOUBLE));
123 UiPropToGO.put("position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.DOUBLE_ARRAY));
124 UiPropToGO.put("relief", new Pair<Integer, ModelType>(__GO_UI_RELIEF__, ModelType.STRING));
125 UiPropToGO.put("sliderstep", new Pair<Integer, ModelType>(__GO_UI_SLIDERSTEP__, ModelType.DOUBLE_ARRAY));
126 UiPropToGO.put("string", new Pair<Integer, ModelType>(__GO_UI_STRING__, ModelType.STRING_ARRAY));
127 UiPropToGO.put("tooltipstring", new Pair<Integer, ModelType>(__GO_UI_TOOLTIPSTRING__, ModelType.STRING_ARRAY));
128 UiPropToGO.put("units", new Pair<Integer, ModelType>(__GO_UI_UNITS__, ModelType.STRING));
129 UiPropToGO.put("value", new Pair<Integer, ModelType>(__GO_UI_VALUE__, ModelType.DOUBLE_ARRAY));
130 UiPropToGO.put("verticalalignment", new Pair<Integer, ModelType>(__GO_UI_VERTICALALIGNMENT__, ModelType.STRING));
131 UiPropToGO.put("visible", new Pair<Integer, ModelType>(__GO_VISIBLE__, ModelType.BOOLEAN));
132 UiPropToGO.put("layout", new Pair<Integer, ModelType>(__GO_LAYOUT__, ModelType.INTEGER));
133 UiPropToGO.put("callback", new Pair<Integer, ModelType>(__GO_CALLBACK__, ModelType.STRING));
134 UiPropToGO.put("callback_type", new Pair<Integer, ModelType>(__GO_CALLBACKTYPE__, ModelType.INTEGER));
135 UiPropToGO.put("gridbaggrid", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_GRID__, ModelType.INTEGER_ARRAY));
136 UiPropToGO.put("gridbagweight", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_WEIGHT__, ModelType.DOUBLE_ARRAY));
137 UiPropToGO.put("gridbagfill", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_FILL__, ModelType.INTEGER));
138 UiPropToGO.put("gridbaganchor", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_ANCHOR__, ModelType.INTEGER));
139 UiPropToGO.put("gridbagpadding", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_PADDING__, ModelType.INTEGER_ARRAY));
140 UiPropToGO.put("gridbagpreferredsize", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_PREFERREDSIZE__, ModelType.INTEGER_ARRAY));
141 UiPropToGO.put("borderposition", new Pair<Integer, ModelType>(__GO_UI_BORDER_POSITION__, ModelType.INTEGER));
142 UiPropToGO.put("borderpreferredsize", new Pair<Integer, ModelType>(__GO_UI_BORDER_PREFERREDSIZE__, ModelType.INTEGER_ARRAY));
143 UiPropToGO.put("margins", new Pair<Integer, ModelType>(__GO_MARGINS__, ModelType.DOUBLE_ARRAY));
144 UiPropToGO.put("groupname", new Pair<Integer, ModelType>(__GO_UI_GROUP_NAME__, ModelType.STRING));
145 UiPropToGO.put("icon", new Pair<Integer, ModelType>(__GO_UI_ICON__, ModelType.STRING));
146 UiPropToGO.put("scrollable", new Pair<Integer, ModelType>(__GO_UI_SCROLLABLE__, ModelType.BOOLEAN));
147 UiPropToGO.put("gridoptgrid", new Pair<Integer, ModelType>(__GO_GRID_OPT_GRID__, ModelType.INTEGER_ARRAY));
148 UiPropToGO.put("gridoptpadding", new Pair<Integer, ModelType>(__GO_GRID_OPT_PADDING__, ModelType.INTEGER_ARRAY));
149 UiPropToGO.put("borderoptpadding", new Pair<Integer, ModelType>(__GO_BORDER_OPT_PADDING__, ModelType.INTEGER_ARRAY));
150 UiPropToGO.put("tag", new Pair<Integer, ModelType>(__GO_TAG__, ModelType.STRING));
152 //border property list
153 BorderPropToGO.put("style", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_STYLE__, ModelType.INTEGER));
154 BorderPropToGO.put("type", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_TYPE__, ModelType.INTEGER));
155 BorderPropToGO.put("position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.DOUBLE_ARRAY));
156 BorderPropToGO.put("hlout", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_HIGHLIGHT_OUT__, ModelType.STRING));
157 BorderPropToGO.put("hlin", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_HIGHLIGHT_IN__, ModelType.STRING));
158 BorderPropToGO.put("shadowout", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_SHADOW_OUT__, ModelType.STRING));
159 BorderPropToGO.put("shadowin", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_SHADOW_IN__, ModelType.STRING));
160 BorderPropToGO.put("titleposition", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_POSITION__, ModelType.DOUBLE_ARRAY));
161 BorderPropToGO.put("hl", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_HIGHLIGHT_OUT__, ModelType.STRING));
162 BorderPropToGO.put("shadow", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_SHADOW_OUT__, ModelType.STRING));
163 BorderPropToGO.put("color", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_COLOR__, ModelType.STRING));
164 BorderPropToGO.put("thickness", new Pair<Integer, ModelType>(__GO_LINE_THICKNESS__, ModelType.INTEGER));
165 BorderPropToGO.put("rounded", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_ROUNDED__, ModelType.BOOLEAN));
166 BorderPropToGO.put("title", new Pair<Integer, ModelType>(__GO_TITLE__, ModelType.STRING));
167 BorderPropToGO.put("justification", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_JUSTIFICATION__, ModelType.INTEGER));
168 BorderPropToGO.put("fontangle", new Pair<Integer, ModelType>(__GO_UI_FONTANGLE__, ModelType.STRING));
169 BorderPropToGO.put("fontname", new Pair<Integer, ModelType>(__GO_UI_FONTNAME__, ModelType.STRING));
170 BorderPropToGO.put("fontsize", new Pair<Integer, ModelType>(__GO_UI_FONTSIZE__, ModelType.INTEGER));
171 BorderPropToGO.put("fontweight", new Pair<Integer, ModelType>(__GO_UI_FONTWEIGHT__, ModelType.STRING));
174 private String filename = "";
175 private Integer figure = 0;
176 private Boolean figVisible = true;
178 public XMLDomLoader(String filename) {
179 this.filename = filename;
183 return parse(filename);
186 public int parse(String filename) {
188 this.filename = filename;
189 File file = new File(filename);
192 //add filename filepath in FindIconHelper paths
193 String absoluteFilePath = file.getAbsolutePath();
194 String path = absoluteFilePath.substring(0, absoluteFilePath.lastIndexOf(File.separator));
195 FindIconHelper.addThemePath(path);
200 DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
201 Document doc = dBuilder.parse(file);
202 doc.getDocumentElement().normalize();
204 if (doc.hasChildNodes()) {
205 parseNode(0, doc.getChildNodes());
207 } catch (Exception e) {
211 //update visible property of main window
212 GraphicController.getController().setProperty(figure, __GO_VISIBLE__, figVisible);
216 private void parseNode(Integer parent, NodeList nodes) {
217 for (int i = nodes.getLength() - 1 ; i >= 0; i--) {
218 Node childNode = nodes.item(i);
220 boolean makeRelationShip = true;
222 // make sure it's element node.
223 if (childNode.getNodeType() == Node.ELEMENT_NODE) {
224 // get node name and value
225 int nodeType = nameToGO.get(childNode.getNodeName());
227 case __GO_FIGURE__: {
228 child = createFigure(childNode);
233 case __GO_UI_CHECKBOX__:
235 case __GO_UI_FRAME__:
236 case __GO_UI_IMAGE__:
237 case __GO_UI_LAYER__:
238 case __GO_UI_LISTBOX__:
239 case __GO_UI_POPUPMENU__:
240 case __GO_UI_PUSHBUTTON__:
241 case __GO_UI_RADIOBUTTON__:
242 case __GO_UI_SLIDER__:
243 case __GO_UI_TABLE__:
245 case __GO_UI_TEXT__: {
246 child = createUiControl(nodeType, parent, childNode);
251 child = Builder.createSubWin(parent);
255 case __GO_UI_FRAME_BORDER__: {
256 makeRelationShip = false;
257 child = createBorder(childNode);
258 GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER__, child);
263 makeRelationShip = false;
264 // child = createBorder(childNode);
265 // GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER_OUT_BORDER__, child);
270 makeRelationShip = false;
271 // child = createBorder(childNode);
272 // GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER_IN_BORDER__, child);
276 case __NODE_TITLE__: {
277 makeRelationShip = false;
278 // child = createBorder(childNode);
279 // GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER_TITLE__, child);
283 case __NODE_SCILABGUI__ : {
285 Node nodeVersion = childNode.getAttributes().getNamedItem("version");
286 double version = Double.parseDouble(nodeVersion.getNodeValue());
288 //call version manager ^^
291 Integer console = Console.getConsole().getIdentifier();
292 //set usedeprecatedskin flag
293 setBooleanAttribute(console, __GO_USEDEPRECATEDLF__, childNode.getAttributes(), "usedeprecatedskin");
297 case __GO_UICONTEXTMENU__:
298 case __GO_UIMENU__: {
308 if (makeRelationShip && parent != 0 && child != 0) {
309 GraphicController.getController().setGraphicObjectRelationship(parent, child);
312 if (childNode.hasChildNodes()) {
313 parseNode(child, childNode.getChildNodes());
320 private Integer createBorder(Node node) {
321 GraphicController controller = GraphicController.getController();
322 Integer uib = controller.askObject(GraphicObject.getTypeFromName(__GO_UI_FRAME_BORDER__));
324 NamedNodeMap attr = node.getAttributes();
326 Node styleNode = attr.getNamedItem("style");
327 if (styleNode != null) {
328 Integer style = FrameBorderType.stringToEnum(styleNode.getNodeValue()).ordinal();
329 controller.setProperty(uib, __GO_UI_FRAME_BORDER_STYLE__, style);
330 attr.removeNamedItem("style");
333 for (int i = 0 ; i < attr.getLength() ; i++) {
334 Node prop = attr.item(i);
335 Pair<Integer, ModelType> pair = BorderPropToGO.get(prop.getNodeName());
337 ModelType modelType = pair.getSecond();
340 controller.setProperty(uib, pair.getFirst(), getAttributeAsBoolean(prop.getNodeValue()));
343 controller.setProperty(uib, pair.getFirst(), getAttributeAsBooleanArray(prop.getNodeValue()));
346 controller.setProperty(uib, pair.getFirst(), getAttributeAsDouble(prop.getNodeValue()));
349 controller.setProperty(uib, pair.getFirst(), getAttributeAsDoubleArray(prop.getNodeValue()));
352 controller.setProperty(uib, pair.getFirst(), getAttributeAsInteger(prop.getNodeValue()));
355 controller.setProperty(uib, pair.getFirst(), getAttributeAsIntegerArray(prop.getNodeValue()));
358 controller.setProperty(uib, pair.getFirst(), getAttributeAsString(prop.getNodeValue()));
361 controller.setProperty(uib, pair.getFirst(), getAttributeAsStringArray(prop.getNodeValue()));
364 System.out.println("missing type");
369 //manage children here to avoid trouble on draw without children in SwingView
370 if (node.hasChildNodes()) {
371 NodeList list = node.getChildNodes();
372 for (int i = 0 ; i < list.getLength() ; i++) {
373 Node childNode = list.item(i);
374 if (childNode.getNodeType() == Node.ELEMENT_NODE) {
375 Integer child = createBorder(childNode);
376 String nodeName = childNode.getNodeName();
377 if (nodeName.equals("title")) {
378 GraphicController.getController().setProperty(uib, __GO_UI_FRAME_BORDER_TITLE__, child);
379 } else if (nodeName.equals("out")) {
380 GraphicController.getController().setProperty(uib, __GO_UI_FRAME_BORDER_OUT_BORDER__, child);
381 } else if (nodeName.equals("in")) {
382 GraphicController.getController().setProperty(uib, __GO_UI_FRAME_BORDER_IN_BORDER__, child);
390 private Integer createFigure(Node node) {
391 GraphicController controller = GraphicController.getController();
392 Boolean dockable = true;
395 Boolean default_axes = true;
397 NamedNodeMap attr = node.getAttributes();
399 Node tempnode = attr.getNamedItem("dockable");
400 if (tempnode != null) {
401 dockable = getAttributeAsBoolean(tempnode.getNodeValue());
402 attr.removeNamedItem("dockable");
405 tempnode = attr.getNamedItem("menubar");
406 if (tempnode != null) {
407 menubar = getAttributeAsInteger(tempnode.getNodeValue());
408 attr.removeNamedItem("menubar");
411 tempnode = attr.getNamedItem("toolbar");
412 if (tempnode != null) {
413 toolbar = getAttributeAsInteger(tempnode.getNodeValue());
414 attr.removeNamedItem("toolbar");
417 tempnode = attr.getNamedItem("default_axes");
418 if (tempnode != null) {
419 default_axes = getAttributeAsBoolean(tempnode.getNodeValue());
420 attr.removeNamedItem("default_axes");
423 tempnode = attr.getNamedItem("visible");
424 if (tempnode != null) {
425 figVisible = getAttributeAsBoolean(tempnode.getNodeValue());
426 attr.removeNamedItem("visible");
429 Integer fig = Builder.createFigure(dockable, menubar, toolbar, default_axes, false);
431 for (int i = 0 ; i < attr.getLength() ; i++) {
432 Node prop = attr.item(i);
433 Pair<Integer, ModelType> pair = figPropToGO.get(prop.getNodeName());
435 ModelType type = pair.getSecond();
438 controller.setProperty(fig, pair.getFirst(), getAttributeAsBoolean(prop.getNodeValue()));
441 controller.setProperty(fig, pair.getFirst(), getAttributeAsBooleanArray(prop.getNodeValue()));
444 controller.setProperty(fig, pair.getFirst(), getAttributeAsDouble(prop.getNodeValue()));
447 controller.setProperty(fig, pair.getFirst(), getAttributeAsDoubleArray(prop.getNodeValue()));
450 controller.setProperty(fig, pair.getFirst(), getAttributeAsInteger(prop.getNodeValue()));
453 controller.setProperty(fig, pair.getFirst(), getAttributeAsIntegerArray(prop.getNodeValue()));
456 controller.setProperty(fig, pair.getFirst(), getAttributeAsString(prop.getNodeValue()));
459 controller.setProperty(fig, pair.getFirst(), getAttributeAsStringArray(prop.getNodeValue()));
462 System.out.println("missing type");
470 private Integer createUiControl(Integer type, Integer parent, Node node) {
471 GraphicController controller = GraphicController.getController();
472 NamedNodeMap attr = node.getAttributes();
474 /*for frame we have to take care of scrollable property*/
475 if (type == __GO_UI_FRAME__) {
476 Node item = attr.getNamedItem("scrollable");
477 if (item != null && item.getNodeValue().equals("on")) {
478 type = __GO_UI_FRAME_SCROLLABLE__;
482 Integer uic = GraphicController.getController().askObject(GraphicObject.getTypeFromName(type));
483 controller.setProperty(uic, __GO_VISIBLE__, true);
485 for (int i = 0 ; i < attr.getLength() ; i++) {
486 Node prop = attr.item(i);
487 Pair<Integer, ModelType> pair = UiPropToGO.get(prop.getNodeName());
489 ModelType modelType = pair.getSecond();
492 controller.setProperty(uic, pair.getFirst(), getAttributeAsBoolean(prop.getNodeValue()));
495 controller.setProperty(uic, pair.getFirst(), getAttributeAsBooleanArray(prop.getNodeValue()));
498 controller.setProperty(uic, pair.getFirst(), getAttributeAsDouble(prop.getNodeValue()));
501 controller.setProperty(uic, pair.getFirst(), getAttributeAsDoubleArray(prop.getNodeValue()));
504 controller.setProperty(uic, pair.getFirst(), getAttributeAsInteger(prop.getNodeValue()));
507 controller.setProperty(uic, pair.getFirst(), getAttributeAsIntegerArray(prop.getNodeValue()));
510 controller.setProperty(uic, pair.getFirst(), getAttributeAsString(prop.getNodeValue()));
513 controller.setProperty(uic, pair.getFirst(), getAttributeAsStringArray(prop.getNodeValue()));
516 System.out.println("missing type");
524 private Boolean getAttributeAsBoolean(String val) {
529 if (val.equals("on")) {
533 if (val.equals("off")) {
540 private void setBooleanAttribute(Integer id, int property, NamedNodeMap attributes, String attr) {
541 Node node = attributes.getNamedItem(attr);
543 Boolean b = getAttributeAsBoolean(node.getNodeValue());
545 GraphicController.getController().setProperty(id, property, b);
550 private Double getAttributeAsDouble(String val) {
555 return Double.parseDouble(val);
558 private Integer getAttributeAsInteger(String val) {
563 return Integer.parseInt(val);
566 private String getAttributeAsString(String val) {
570 private Boolean[] getAttributeAsBooleanArray(String val) {
573 return new Boolean[] {};
576 StringTokenizer token = new StringTokenizer(val, ",");
578 Boolean[] b = new Boolean[token.countTokens()];
580 while (token.hasMoreElements()) {
581 String s = token.nextToken();
582 if (s.equals("on")) {
592 private Double[] getAttributeAsDoubleArray(String val) {
595 return new Double[] {};
598 StringTokenizer token = new StringTokenizer(val, ",");
600 Double[] d = new Double[token.countTokens()];
602 while (token.hasMoreElements()) {
603 String s = token.nextToken();
604 d[i++] = Double.parseDouble(s);
610 private Integer[] getAttributeAsIntegerArray(String val) {
613 return new Integer[] {};
616 StringTokenizer token = new StringTokenizer(val, ",");
618 Integer[] integer = new Integer[token.countTokens()];
620 while (token.hasMoreElements()) {
621 String s = token.nextToken();
622 integer[i++] = Integer.parseInt(s);
628 private String[] getAttributeAsStringArray(String val) {
634 StringTokenizer token = new StringTokenizer(val, ",");
636 String[] s = new String[token.countTokens()];
638 while (token.hasMoreElements()) {
639 s[i++] = token.nextToken();