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.CommonFileUtils;
13 import org.scilab.modules.commons.gui.FindIconHelper;
14 import org.scilab.modules.graphic_objects.builder.Builder;
15 import org.scilab.modules.graphic_objects.console.Console;
16 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
17 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
18 import org.scilab.modules.graphic_objects.uicontrol.frame.border.FrameBorderType;
19 import org.w3c.dom.Document;
20 import org.w3c.dom.NamedNodeMap;
21 import org.w3c.dom.Node;
22 import org.w3c.dom.NodeList;
24 public class XMLDomLoader {
26 private enum ModelType {
27 BOOLEAN, BOOLEAN_ARRAY, DOUBLE, DOUBLE_ARRAY, STRING, STRING_ARRAY, INTEGER, INTEGER_ARRAY;
30 private static final int __NODE_SCILABGUI__ = -10;
31 private static final int __NODE_OUT__ = -20;
32 private static final int __NODE_IN__ = -30;
33 private static final int __NODE_TITLE__ = -40;
35 private static HashMap<String, Integer> nameToGO = new HashMap<String, Integer>();
37 private static HashMap<String, Pair<Integer, ModelType>> figPropToGO = new HashMap<String, Pair<Integer, ModelType>>();
38 private static HashMap<String, Pair<Integer, ModelType>> UiPropToGO = new HashMap<String, Pair<Integer, ModelType>>();
39 private static HashMap<String, Pair<Integer, ModelType>> MenuPropToGO = new HashMap<String, Pair<Integer, ModelType>>();
40 private static HashMap<String, Pair<Integer, ModelType>> BorderPropToGO = new HashMap<String, Pair<Integer, ModelType>>();
44 // init map to convert control name to id
45 nameToGO.put("figure", __GO_FIGURE__);
46 nameToGO.put("frame", __GO_UI_FRAME__);
47 nameToGO.put("layer", __GO_UI_LAYER__);
48 nameToGO.put("pushbutton", __GO_UI_PUSHBUTTON__);
49 nameToGO.put("text", __GO_UI_TEXT__);
50 nameToGO.put("checkbox", __GO_UI_CHECKBOX__);
51 nameToGO.put("textfield", __GO_UI_EDIT__);
52 nameToGO.put("edit", __GO_UI_EDIT__);
53 nameToGO.put("image", __GO_UI_IMAGE__);
54 nameToGO.put("picture", __GO_UI_IMAGE__);
55 nameToGO.put("listbox", __GO_UI_LISTBOX__);
56 nameToGO.put("popupmenu", __GO_UI_POPUPMENU__);
57 nameToGO.put("radiobutton", __GO_UI_RADIOBUTTON__);
58 nameToGO.put("slider", __GO_UI_SLIDER__);
59 nameToGO.put("table", __GO_UI_TABLE__);
60 nameToGO.put("tab", __GO_UI_TAB__);
62 nameToGO.put("menu", __GO_UIMENU__);
63 nameToGO.put("contextmenu", __GO_UICONTEXTMENU__);
65 nameToGO.put("axes", __GO_AXES__);
67 nameToGO.put("borders", __GO_UI_FRAME_BORDER__);
68 nameToGO.put("out", __NODE_OUT__);
69 nameToGO.put("in", __NODE_IN__);
70 nameToGO.put("title", __NODE_TITLE__);
73 nameToGO.put("scilabgui", __NODE_SCILABGUI__);
75 //fill map of property -> {GO, ModelType}
77 //figure property list
78 figPropToGO.put("figure_position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.INTEGER_ARRAY));
79 figPropToGO.put("figure_size", new Pair<Integer, ModelType>(__GO_SIZE__, ModelType.INTEGER_ARRAY));
80 figPropToGO.put("axes_size", new Pair<Integer, ModelType>(__GO_AXES_SIZE__, ModelType.INTEGER_ARRAY));
81 figPropToGO.put("auto_resize", new Pair<Integer, ModelType>(__GO_AUTORESIZE__, ModelType.BOOLEAN));
82 figPropToGO.put("view_port", new Pair<Integer, ModelType>(__GO_VIEWPORT__, ModelType.INTEGER_ARRAY));
83 figPropToGO.put("figure_name", new Pair<Integer, ModelType>(__GO_NAME__, ModelType.STRING));
84 figPropToGO.put("figure_id", new Pair<Integer, ModelType>(__GO_ID__, ModelType.INTEGER));
85 figPropToGO.put("info_message", new Pair<Integer, ModelType>(__GO_INFO_MESSAGE__, ModelType.STRING));
86 figPropToGO.put("pixel_drawing_mode", new Pair<Integer, ModelType>(__GO_PIXEL_DRAWING_MODE__, ModelType.STRING));
87 figPropToGO.put("anti_aliasing", new Pair<Integer, ModelType>(__GO_ANTIALIASING__, ModelType.BOOLEAN));
88 figPropToGO.put("immediate_drawing", new Pair<Integer, ModelType>(__GO_IMMEDIATE_DRAWING__, ModelType.BOOLEAN));
89 figPropToGO.put("background", new Pair<Integer, ModelType>(__GO_BACKGROUND__, ModelType.INTEGER));
90 figPropToGO.put("visible", new Pair<Integer, ModelType>(__GO_VISIBLE__, ModelType.BOOLEAN));
91 figPropToGO.put("rotation_style", new Pair<Integer, ModelType>(__GO_ROTATION_TYPE__, ModelType.STRING));
92 figPropToGO.put("event_handler", new Pair<Integer, ModelType>(__GO_EVENTHANDLER_NAME__, ModelType.STRING));
93 figPropToGO.put("event_handler_enable", new Pair<Integer, ModelType>(__GO_EVENTHANDLER_ENABLE__, ModelType.BOOLEAN));
94 figPropToGO.put("resizefcn", new Pair<Integer, ModelType>(__GO_RESIZEFCN__, ModelType.STRING));
95 figPropToGO.put("closerequestfcn", new Pair<Integer, ModelType>(__GO_CLOSEREQUESTFCN__, ModelType.STRING));
96 figPropToGO.put("resize", new Pair<Integer, ModelType>(__GO_RESIZE__, ModelType.BOOLEAN));
97 figPropToGO.put("toolbar", new Pair<Integer, ModelType>(__GO_TOOLBAR__, ModelType.INTEGER));
98 figPropToGO.put("toolbar_visible", new Pair<Integer, ModelType>(__GO_TOOLBAR_VISIBLE__, ModelType.BOOLEAN));
99 figPropToGO.put("menubar", new Pair<Integer, ModelType>(__GO_MENUBAR__, ModelType.INTEGER));
100 figPropToGO.put("menubar_visible", new Pair<Integer, ModelType>(__GO_MENUBAR_VISIBLE__, ModelType.BOOLEAN));
101 figPropToGO.put("infobar_visible", new Pair<Integer, ModelType>(__GO_INFOBAR_VISIBLE__, ModelType.BOOLEAN));
102 figPropToGO.put("dockable", new Pair<Integer, ModelType>(__GO_DOCKABLE__, ModelType.BOOLEAN));
103 figPropToGO.put("layout", new Pair<Integer, ModelType>(__GO_LAYOUT__, ModelType.INTEGER));
104 figPropToGO.put("default_axes", new Pair<Integer, ModelType>(__GO_DEFAULT_AXES__, ModelType.BOOLEAN));
105 figPropToGO.put("icon", new Pair<Integer, ModelType>(__GO_UI_ICON__, ModelType.STRING));
106 figPropToGO.put("tag", new Pair<Integer, ModelType>(__GO_TAG__, ModelType.STRING));
107 figPropToGO.put("grid_opt_grid", new Pair<Integer, ModelType>(__GO_GRID_OPT_GRID__, ModelType.INTEGER_ARRAY));
108 figPropToGO.put("grid_opt_padding", new Pair<Integer, ModelType>(__GO_GRID_OPT_PADDING__, ModelType.INTEGER_ARRAY));
109 figPropToGO.put("border_opt_padding", new Pair<Integer, ModelType>(__GO_BORDER_OPT_PADDING__, ModelType.INTEGER_ARRAY));
111 //uicontrol property list
112 UiPropToGO.put("position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.INTEGER));
113 UiPropToGO.put("backgroundcolor", new Pair<Integer, ModelType>(__GO_UI_BACKGROUNDCOLOR__, ModelType.DOUBLE_ARRAY));
114 UiPropToGO.put("enable", new Pair<Integer, ModelType>(__GO_UI_ENABLE__, ModelType.BOOLEAN));
115 UiPropToGO.put("fontangle", new Pair<Integer, ModelType>(__GO_UI_FONTANGLE__, ModelType.STRING));
116 UiPropToGO.put("fontname", new Pair<Integer, ModelType>(__GO_UI_FONTNAME__, ModelType.STRING));
117 UiPropToGO.put("fontsize", new Pair<Integer, ModelType>(__GO_UI_FONTSIZE__, ModelType.DOUBLE));
118 UiPropToGO.put("fontunits", new Pair<Integer, ModelType>(__GO_UI_FONTUNITS__, ModelType.STRING));
119 UiPropToGO.put("fontweight", new Pair<Integer, ModelType>(__GO_UI_FONTWEIGHT__, ModelType.STRING));
120 UiPropToGO.put("foregroundcolor", new Pair<Integer, ModelType>(__GO_UI_FOREGROUNDCOLOR__, ModelType.INTEGER_ARRAY));
121 UiPropToGO.put("horizontalalignment", new Pair<Integer, ModelType>(__GO_UI_HORIZONTALALIGNMENT__, ModelType.STRING));
122 UiPropToGO.put("listboxtop", new Pair<Integer, ModelType>(__GO_UI_LISTBOXTOP__, ModelType.INTEGER_ARRAY));
123 UiPropToGO.put("max", new Pair<Integer, ModelType>(__GO_UI_MAX__, ModelType.DOUBLE));
124 UiPropToGO.put("min", new Pair<Integer, ModelType>(__GO_UI_MIN__, ModelType.DOUBLE));
125 UiPropToGO.put("position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.DOUBLE_ARRAY));
126 UiPropToGO.put("relief", new Pair<Integer, ModelType>(__GO_UI_RELIEF__, ModelType.STRING));
127 UiPropToGO.put("sliderstep", new Pair<Integer, ModelType>(__GO_UI_SLIDERSTEP__, ModelType.DOUBLE_ARRAY));
128 UiPropToGO.put("string", new Pair<Integer, ModelType>(__GO_UI_STRING__, ModelType.STRING_ARRAY));
129 UiPropToGO.put("tooltipstring", new Pair<Integer, ModelType>(__GO_UI_TOOLTIPSTRING__, ModelType.STRING_ARRAY));
130 UiPropToGO.put("units", new Pair<Integer, ModelType>(__GO_UI_UNITS__, ModelType.STRING));
131 UiPropToGO.put("value", new Pair<Integer, ModelType>(__GO_UI_VALUE__, ModelType.DOUBLE_ARRAY));
132 UiPropToGO.put("verticalalignment", new Pair<Integer, ModelType>(__GO_UI_VERTICALALIGNMENT__, ModelType.STRING));
133 UiPropToGO.put("visible", new Pair<Integer, ModelType>(__GO_VISIBLE__, ModelType.BOOLEAN));
134 UiPropToGO.put("layout", new Pair<Integer, ModelType>(__GO_LAYOUT__, ModelType.INTEGER));
135 UiPropToGO.put("callback", new Pair<Integer, ModelType>(__GO_CALLBACK__, ModelType.STRING));
136 UiPropToGO.put("callback_type", new Pair<Integer, ModelType>(__GO_CALLBACKTYPE__, ModelType.INTEGER));
137 UiPropToGO.put("gridbaggrid", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_GRID__, ModelType.INTEGER_ARRAY));
138 UiPropToGO.put("gridbagweight", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_WEIGHT__, ModelType.DOUBLE_ARRAY));
139 UiPropToGO.put("gridbagfill", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_FILL__, ModelType.INTEGER));
140 UiPropToGO.put("gridbaganchor", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_ANCHOR__, ModelType.INTEGER));
141 UiPropToGO.put("gridbagpadding", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_PADDING__, ModelType.INTEGER_ARRAY));
142 UiPropToGO.put("gridbagpreferredsize", new Pair<Integer, ModelType>(__GO_UI_GRIDBAG_PREFERREDSIZE__, ModelType.INTEGER_ARRAY));
143 UiPropToGO.put("borderposition", new Pair<Integer, ModelType>(__GO_UI_BORDER_POSITION__, ModelType.INTEGER));
144 UiPropToGO.put("borderpreferredsize", new Pair<Integer, ModelType>(__GO_UI_BORDER_PREFERREDSIZE__, ModelType.INTEGER_ARRAY));
145 UiPropToGO.put("margins", new Pair<Integer, ModelType>(__GO_MARGINS__, ModelType.DOUBLE_ARRAY));
146 UiPropToGO.put("groupname", new Pair<Integer, ModelType>(__GO_UI_GROUP_NAME__, ModelType.STRING));
147 UiPropToGO.put("icon", new Pair<Integer, ModelType>(__GO_UI_ICON__, ModelType.STRING));
148 UiPropToGO.put("scrollable", new Pair<Integer, ModelType>(__GO_UI_SCROLLABLE__, ModelType.BOOLEAN));
149 UiPropToGO.put("gridoptgrid", new Pair<Integer, ModelType>(__GO_GRID_OPT_GRID__, ModelType.INTEGER_ARRAY));
150 UiPropToGO.put("gridoptpadding", new Pair<Integer, ModelType>(__GO_GRID_OPT_PADDING__, ModelType.INTEGER_ARRAY));
151 UiPropToGO.put("borderoptpadding", new Pair<Integer, ModelType>(__GO_BORDER_OPT_PADDING__, ModelType.INTEGER_ARRAY));
152 UiPropToGO.put("tag", new Pair<Integer, ModelType>(__GO_TAG__, ModelType.STRING));
154 //border property list
155 BorderPropToGO.put("style", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_STYLE__, ModelType.INTEGER));
156 BorderPropToGO.put("type", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_TYPE__, ModelType.INTEGER));
157 BorderPropToGO.put("position", new Pair<Integer, ModelType>(__GO_POSITION__, ModelType.DOUBLE_ARRAY));
158 BorderPropToGO.put("hlout", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_HIGHLIGHT_OUT__, ModelType.STRING));
159 BorderPropToGO.put("hlin", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_HIGHLIGHT_IN__, ModelType.STRING));
160 BorderPropToGO.put("shadowout", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_SHADOW_OUT__, ModelType.STRING));
161 BorderPropToGO.put("shadowin", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_SHADOW_IN__, ModelType.STRING));
162 BorderPropToGO.put("titleposition", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_POSITION__, ModelType.DOUBLE_ARRAY));
163 BorderPropToGO.put("hl", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_HIGHLIGHT_OUT__, ModelType.STRING));
164 BorderPropToGO.put("shadow", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_SHADOW_OUT__, ModelType.STRING));
165 BorderPropToGO.put("color", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_COLOR__, ModelType.STRING));
166 BorderPropToGO.put("thickness", new Pair<Integer, ModelType>(__GO_LINE_THICKNESS__, ModelType.INTEGER));
167 BorderPropToGO.put("rounded", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_ROUNDED__, ModelType.BOOLEAN));
168 BorderPropToGO.put("title", new Pair<Integer, ModelType>(__GO_TITLE__, ModelType.STRING));
169 BorderPropToGO.put("justification", new Pair<Integer, ModelType>(__GO_UI_FRAME_BORDER_JUSTIFICATION__, ModelType.INTEGER));
170 BorderPropToGO.put("fontangle", new Pair<Integer, ModelType>(__GO_UI_FONTANGLE__, ModelType.STRING));
171 BorderPropToGO.put("fontname", new Pair<Integer, ModelType>(__GO_UI_FONTNAME__, ModelType.STRING));
172 BorderPropToGO.put("fontsize", new Pair<Integer, ModelType>(__GO_UI_FONTSIZE__, ModelType.INTEGER));
173 BorderPropToGO.put("fontweight", new Pair<Integer, ModelType>(__GO_UI_FONTWEIGHT__, ModelType.STRING));
175 MenuPropToGO.put("enable", new Pair<Integer, ModelType>(__GO_UI_ENABLE__, ModelType.BOOLEAN));
176 MenuPropToGO.put("foreground", new Pair<Integer, ModelType>(__GO_UI_FOREGROUNDCOLOR__, ModelType.DOUBLE_ARRAY));
177 MenuPropToGO.put("label", new Pair<Integer, ModelType>(__GO_UI_LABEL__, ModelType.STRING));
178 MenuPropToGO.put("hidden", new Pair<Integer, ModelType>(__GO_HIDDEN__, ModelType.BOOLEAN));
179 MenuPropToGO.put("visible", new Pair<Integer, ModelType>(__GO_VISIBLE__, ModelType.BOOLEAN));
180 MenuPropToGO.put("callback", new Pair<Integer, ModelType>(__GO_CALLBACK__, ModelType.STRING));
181 MenuPropToGO.put("callback_type", new Pair<Integer, ModelType>(__GO_CALLBACKTYPE__, ModelType.INTEGER));
182 MenuPropToGO.put("checked", new Pair<Integer, ModelType>(__GO_UI_CHECKED__, ModelType.BOOLEAN));
183 MenuPropToGO.put("icon", new Pair<Integer, ModelType>(__GO_UI_ICON__, ModelType.STRING));
184 MenuPropToGO.put("tag", new Pair<Integer, ModelType>(__GO_TAG__, ModelType.STRING));
187 private String filename = "";
188 private Integer figure = 0;
189 private Boolean figVisible = true;
191 public XMLDomLoader(String filename) {
192 this.filename = filename;
196 return parse(filename);
199 public int parse(String filename) {
201 this.filename = filename;
202 File f = new File(filename);
203 String currentPath = "";
206 //add filename filepath in ScilabSwingUtilities paths
207 if (f.isAbsolute()) {
208 String filePath = f.getAbsolutePath();
209 currentPath = filePath.substring(0, filePath.lastIndexOf(File.separator));
210 FindIconHelper.addThemePath(currentPath);
212 String initialDirectoryPath = CommonFileUtils.getCWD();
213 String filePath = "";
214 Integer index = filename.lastIndexOf(File.separator);
216 filePath = filename.substring(0, index);
219 currentPath = initialDirectoryPath + File.separator + filePath;
220 FindIconHelper.addThemePath(currentPath);
222 f = new File(currentPath + File.separator + filename);
225 //try to find file in currentPath
226 if (f.isAbsolute()) {
230 String initialDirectoryPath = CommonFileUtils.getCWD();
231 String filePath = "";
232 Integer index = filename.lastIndexOf(File.separator);
234 filePath = filename.substring(0, index);
237 currentPath = initialDirectoryPath + File.separator + filePath;
240 f = new File(currentPath + File.separator + filename);
241 if (f.exists() == false) {
246 DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
247 Document doc = dBuilder.parse(f);
248 doc.getDocumentElement().normalize();
250 if (doc.hasChildNodes()) {
251 parseNode(0, doc.getChildNodes());
253 } catch (Exception e) {
257 //update visible property of main window
258 GraphicController.getController().setProperty(figure, __GO_VISIBLE__, figVisible);
262 private void parseNode(Integer parent, NodeList nodes) {
263 for (int i = nodes.getLength() - 1 ; i >= 0; i--) {
264 Node childNode = nodes.item(i);
266 boolean makeRelationShip = true;
268 // make sure it's element node.
269 if (childNode.getNodeType() == Node.ELEMENT_NODE) {
270 // get node name and value
271 int nodeType = nameToGO.get(childNode.getNodeName());
273 case __GO_FIGURE__: {
274 child = createFigure(childNode);
279 case __GO_UI_CHECKBOX__:
281 case __GO_UI_FRAME__:
282 case __GO_UI_IMAGE__:
283 case __GO_UI_LAYER__:
284 case __GO_UI_LISTBOX__:
285 case __GO_UI_POPUPMENU__:
286 case __GO_UI_PUSHBUTTON__:
287 case __GO_UI_RADIOBUTTON__:
288 case __GO_UI_SLIDER__:
289 case __GO_UI_TABLE__:
291 case __GO_UI_TEXT__: {
292 child = createUiControl(nodeType, parent, childNode);
297 child = Builder.createSubWin(parent);
301 case __GO_UI_FRAME_BORDER__: {
302 makeRelationShip = false;
303 child = createBorder(childNode);
304 GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER__, child);
309 makeRelationShip = false;
310 // child = createBorder(childNode);
311 // GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER_OUT_BORDER__, child);
316 makeRelationShip = false;
317 // child = createBorder(childNode);
318 // GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER_IN_BORDER__, child);
322 case __NODE_TITLE__: {
323 makeRelationShip = false;
324 // child = createBorder(childNode);
325 // GraphicController.getController().setProperty(parent, __GO_UI_FRAME_BORDER_TITLE__, child);
329 case __NODE_SCILABGUI__ : {
331 Node nodeVersion = childNode.getAttributes().getNamedItem("version");
332 double version = Double.parseDouble(nodeVersion.getNodeValue());
334 //call version manager ^^
337 Integer console = Console.getConsole().getIdentifier();
338 //set usedeprecatedskin flag
339 setBooleanAttribute(console, __GO_USEDEPRECATEDLF__, childNode.getAttributes(), "usedeprecatedskin");
343 case __GO_UICONTEXTMENU__: {
346 case __GO_UIMENU__: {
347 child = createUiMenu(parent, childNode);
357 if (makeRelationShip && parent != 0 && child != 0) {
358 GraphicController.getController().setGraphicObjectRelationship(parent, child);
361 if (childNode.hasChildNodes()) {
362 parseNode(child, childNode.getChildNodes());
369 private Integer createBorder(Node node) {
370 GraphicController controller = GraphicController.getController();
371 Integer uib = controller.askObject(GraphicObject.getTypeFromName(__GO_UI_FRAME_BORDER__));
373 NamedNodeMap attr = node.getAttributes();
375 Node styleNode = attr.getNamedItem("style");
376 if (styleNode != null) {
377 Integer style = FrameBorderType.stringToEnum(styleNode.getNodeValue()).ordinal();
378 controller.setProperty(uib, __GO_UI_FRAME_BORDER_STYLE__, style);
379 attr.removeNamedItem("style");
382 for (int i = 0 ; i < attr.getLength() ; i++) {
383 Node prop = attr.item(i);
384 Pair<Integer, ModelType> pair = BorderPropToGO.get(prop.getNodeName());
386 ModelType modelType = pair.getSecond();
389 controller.setProperty(uib, pair.getFirst(), getAttributeAsBoolean(prop.getNodeValue()));
392 controller.setProperty(uib, pair.getFirst(), getAttributeAsBooleanArray(prop.getNodeValue()));
395 controller.setProperty(uib, pair.getFirst(), getAttributeAsDouble(prop.getNodeValue()));
398 controller.setProperty(uib, pair.getFirst(), getAttributeAsDoubleArray(prop.getNodeValue()));
401 controller.setProperty(uib, pair.getFirst(), getAttributeAsInteger(prop.getNodeValue()));
404 controller.setProperty(uib, pair.getFirst(), getAttributeAsIntegerArray(prop.getNodeValue()));
407 controller.setProperty(uib, pair.getFirst(), getAttributeAsString(prop.getNodeValue()));
410 controller.setProperty(uib, pair.getFirst(), getAttributeAsStringArray(prop.getNodeValue()));
413 System.out.println("missing type");
418 //manage children here to avoid trouble on draw without children in SwingView
419 if (node.hasChildNodes()) {
420 NodeList list = node.getChildNodes();
421 for (int i = 0 ; i < list.getLength() ; i++) {
422 Node childNode = list.item(i);
423 if (childNode.getNodeType() == Node.ELEMENT_NODE) {
424 Integer child = createBorder(childNode);
425 String nodeName = childNode.getNodeName();
426 if (nodeName.equals("title")) {
427 GraphicController.getController().setProperty(uib, __GO_UI_FRAME_BORDER_TITLE__, child);
428 } else if (nodeName.equals("out")) {
429 GraphicController.getController().setProperty(uib, __GO_UI_FRAME_BORDER_OUT_BORDER__, child);
430 } else if (nodeName.equals("in")) {
431 GraphicController.getController().setProperty(uib, __GO_UI_FRAME_BORDER_IN_BORDER__, child);
439 private Integer createFigure(Node node) {
440 GraphicController controller = GraphicController.getController();
441 Boolean dockable = true;
444 Boolean default_axes = true;
446 NamedNodeMap attr = node.getAttributes();
448 Node tempnode = attr.getNamedItem("dockable");
449 if (tempnode != null) {
450 dockable = getAttributeAsBoolean(tempnode.getNodeValue());
451 attr.removeNamedItem("dockable");
454 tempnode = attr.getNamedItem("menubar");
455 if (tempnode != null) {
456 menubar = getAttributeAsInteger(tempnode.getNodeValue());
457 attr.removeNamedItem("menubar");
460 tempnode = attr.getNamedItem("toolbar");
461 if (tempnode != null) {
462 toolbar = getAttributeAsInteger(tempnode.getNodeValue());
463 attr.removeNamedItem("toolbar");
466 tempnode = attr.getNamedItem("default_axes");
467 if (tempnode != null) {
468 default_axes = getAttributeAsBoolean(tempnode.getNodeValue());
469 attr.removeNamedItem("default_axes");
472 tempnode = attr.getNamedItem("visible");
473 if (tempnode != null) {
474 figVisible = getAttributeAsBoolean(tempnode.getNodeValue());
475 attr.removeNamedItem("visible");
478 Integer fig = Builder.createFigure(dockable, menubar, toolbar, default_axes, false);
480 for (int i = 0 ; i < attr.getLength() ; i++) {
481 Node prop = attr.item(i);
482 Pair<Integer, ModelType> pair = figPropToGO.get(prop.getNodeName());
484 ModelType type = pair.getSecond();
487 controller.setProperty(fig, pair.getFirst(), getAttributeAsBoolean(prop.getNodeValue()));
490 controller.setProperty(fig, pair.getFirst(), getAttributeAsBooleanArray(prop.getNodeValue()));
493 controller.setProperty(fig, pair.getFirst(), getAttributeAsDouble(prop.getNodeValue()));
496 controller.setProperty(fig, pair.getFirst(), getAttributeAsDoubleArray(prop.getNodeValue()));
499 controller.setProperty(fig, pair.getFirst(), getAttributeAsInteger(prop.getNodeValue()));
502 controller.setProperty(fig, pair.getFirst(), getAttributeAsIntegerArray(prop.getNodeValue()));
505 controller.setProperty(fig, pair.getFirst(), getAttributeAsString(prop.getNodeValue()));
508 controller.setProperty(fig, pair.getFirst(), getAttributeAsStringArray(prop.getNodeValue()));
511 System.out.println("missing type");
519 private Integer createUiControl(Integer type, Integer parent, Node node) {
520 GraphicController controller = GraphicController.getController();
521 NamedNodeMap attr = node.getAttributes();
523 /*for frame we have to take care of scrollable property*/
524 if (type == __GO_UI_FRAME__) {
525 Node item = attr.getNamedItem("scrollable");
526 if (item != null && item.getNodeValue().equals("on")) {
527 type = __GO_UI_FRAME_SCROLLABLE__;
531 Integer uic = GraphicController.getController().askObject(GraphicObject.getTypeFromName(type));
532 controller.setProperty(uic, __GO_VISIBLE__, true);
534 for (int i = 0 ; i < attr.getLength() ; i++) {
535 Node prop = attr.item(i);
536 Pair<Integer, ModelType> pair = UiPropToGO.get(prop.getNodeName());
538 ModelType modelType = pair.getSecond();
541 controller.setProperty(uic, pair.getFirst(), getAttributeAsBoolean(prop.getNodeValue()));
544 controller.setProperty(uic, pair.getFirst(), getAttributeAsBooleanArray(prop.getNodeValue()));
547 controller.setProperty(uic, pair.getFirst(), getAttributeAsDouble(prop.getNodeValue()));
550 controller.setProperty(uic, pair.getFirst(), getAttributeAsDoubleArray(prop.getNodeValue()));
553 controller.setProperty(uic, pair.getFirst(), getAttributeAsInteger(prop.getNodeValue()));
556 controller.setProperty(uic, pair.getFirst(), getAttributeAsIntegerArray(prop.getNodeValue()));
559 controller.setProperty(uic, pair.getFirst(), getAttributeAsString(prop.getNodeValue()));
562 controller.setProperty(uic, pair.getFirst(), getAttributeAsStringArray(prop.getNodeValue()));
565 System.out.println("missing type");
573 private Integer createUiMenu(Integer parent, Node node) {
574 GraphicController controller = GraphicController.getController();
575 NamedNodeMap attr = node.getAttributes();
577 Integer uim = GraphicController.getController().askObject(GraphicObject.getTypeFromName(__GO_UIMENU__));
578 controller.setProperty(uim, __GO_VISIBLE__, true);
580 for (int i = 0 ; i < attr.getLength() ; i++) {
581 Node prop = attr.item(i);
582 Pair<Integer, ModelType> pair = MenuPropToGO.get(prop.getNodeName());
583 System.out.println("node : " + prop.getNodeName());
584 ModelType modelType = pair.getSecond();
587 controller.setProperty(uim, pair.getFirst(), getAttributeAsBoolean(prop.getNodeValue()));
590 controller.setProperty(uim, pair.getFirst(), getAttributeAsBooleanArray(prop.getNodeValue()));
593 controller.setProperty(uim, pair.getFirst(), getAttributeAsDouble(prop.getNodeValue()));
596 controller.setProperty(uim, pair.getFirst(), getAttributeAsDoubleArray(prop.getNodeValue()));
599 controller.setProperty(uim, pair.getFirst(), getAttributeAsInteger(prop.getNodeValue()));
602 controller.setProperty(uim, pair.getFirst(), getAttributeAsIntegerArray(prop.getNodeValue()));
605 controller.setProperty(uim, pair.getFirst(), getAttributeAsString(prop.getNodeValue()));
608 controller.setProperty(uim, pair.getFirst(), getAttributeAsStringArray(prop.getNodeValue()));
611 System.out.println("missing type");
619 private Boolean getAttributeAsBoolean(String val) {
624 if (val.equals("on")) {
628 if (val.equals("off")) {
635 private void setBooleanAttribute(Integer id, int property, NamedNodeMap attributes, String attr) {
636 Node node = attributes.getNamedItem(attr);
638 Boolean b = getAttributeAsBoolean(node.getNodeValue());
640 GraphicController.getController().setProperty(id, property, b);
645 private Double getAttributeAsDouble(String val) {
650 return Double.parseDouble(val);
653 private Integer getAttributeAsInteger(String val) {
658 return Integer.parseInt(val);
661 private String getAttributeAsString(String val) {
665 private Boolean[] getAttributeAsBooleanArray(String val) {
668 return new Boolean[] {};
671 StringTokenizer token = new StringTokenizer(val, ",");
673 Boolean[] b = new Boolean[token.countTokens()];
675 while (token.hasMoreElements()) {
676 String s = token.nextToken();
677 if (s.equals("on")) {
687 private Double[] getAttributeAsDoubleArray(String val) {
690 return new Double[] {};
693 StringTokenizer token = new StringTokenizer(val, ",");
695 Double[] d = new Double[token.countTokens()];
697 while (token.hasMoreElements()) {
698 String s = token.nextToken();
699 d[i++] = Double.parseDouble(s);
705 private Integer[] getAttributeAsIntegerArray(String val) {
708 return new Integer[] {};
711 StringTokenizer token = new StringTokenizer(val, ",");
713 Integer[] integer = new Integer[token.countTokens()];
715 while (token.hasMoreElements()) {
716 String s = token.nextToken();
717 integer[i++] = Integer.parseInt(s);
723 private String[] getAttributeAsStringArray(String val) {
729 StringTokenizer token = new StringTokenizer(val, ",");
731 String[] s = new String[token.countTokens()];
733 while (token.hasMoreElements()) {
734 s[i++] = token.nextToken();