Xcos GUI: fix ZCOS reading 94/17394/3
Paul Bignier [Tue, 27 Oct 2015 08:17:20 +0000 (09:17 +0100)]
 * Some ZCOS files define ports twice, so only read them once.
Don't create a new object in the model but resync them.

// Positioning & sizes need to be fixed but the import passes!
--> xcos(SCI + "/modules/xcos/demos/Simple_Demo.zcos");

Change-Id: Ifc47aec6f83b72df151b79c5019f352ba5f6b900

scilab/modules/xcos/src/java/org/scilab/modules/xcos/explorer/BrowserTreeNodeData.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/sax/PortHandler.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/modelica/ModelicaController.java

index 01601b5..51ba0c4 100644 (file)
@@ -36,7 +36,7 @@ public class BrowserTreeNodeData {
 
     public BrowserTreeNodeData() {
         // root TreeNode, set a default value but kind should not be used
-        this.uid = 0;
+        this.uid = 0l;
         kind = Kind.DIAGRAM;
     }
 
index 4c73e68..a581c0e 100644 (file)
@@ -44,9 +44,23 @@ class PortHandler implements ScilabHandler {
 
     @Override
     public BasicPort startElement(HandledElement found, Attributes atts) {
+        String v;
         BasicPort port;
         ObjectProperties relatedProperty;
-        final long uid = saxHandler.controller.createObject(Kind.PORT);
+
+        /*
+         * First, check if the port has already been defined. Otherwise, create the object in the model
+         */
+        v = atts.getValue("id");
+        long uid = 0;
+        if (v != null) {
+            if (saxHandler.allChildren.peek().containsKey(v)) {
+                uid = saxHandler.allChildren.peek().get(v);
+            } else {
+                uid = saxHandler.controller.createObject(Kind.PORT);
+                saxHandler.allChildren.peek().put(v, uid);
+            }
+        }
 
         /*
          * Allocate the port with the right class to set default properties
@@ -80,18 +94,11 @@ class PortHandler implements ScilabHandler {
             default:
                 throw new IllegalArgumentException();
         }
+        port.setId(v);
 
         /*
          * Setup the properties
          */
-        String v;
-
-        v = atts.getValue("id");
-        if (v != null) {
-            port.setId(v);
-            saxHandler.allChildren.peek().put(v, uid);
-        }
-
         v = atts.getValue("style");
         if (v != null) {
             saxHandler.controller.setObjectProperty(uid, Kind.PORT, ObjectProperties.STYLE, v);
index 84fa997..5d52481 100644 (file)
@@ -302,7 +302,7 @@ public final class ModelicaController {
             List<JAXBElement<String>> allIds = identifiers.getParameterOrExplicitVariableOrImplicitVariable();
             final QName implicit_name = new QName("", "implicit_variable");
 
-            long implicit_count = 0;
+            long implicit_count = 0l;
             for (JAXBElement<String> e : allIds) {
                 if (e.getName().equals(implicit_name)) {
                     implicit_count++;