Xcos: refactoring of constructor-chain 66/17566/2
Clément DAVID [Thu, 10 Dec 2015 15:45:28 +0000 (16:45 +0100)]
Passing all possible arguments will setObjectProperty only once and at
allocation. It will be far easier to debug and trace things.

Change-Id: I2daeed9cf707c16099c2fbacdf9eb1b73ed079d4

61 files changed:
scilab/modules/xcos/sci_gateway/cpp/sci_xcosDiagramToScilab.cpp
scilab/modules/xcos/src/java/org/scilab/modules/xcos/JavaController.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/Xcos.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/XcosTab.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/actions/ExportAllAction.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/AfficheBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/BasicBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/SplitBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/SuperBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/TextBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/actions/BlockParametersAction.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/actions/ShowParentAction.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/ContextUpdate.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/EventInBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/EventOutBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/ExplicitInBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/ExplicitOutBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/ImplicitInBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/io/ImplicitOutBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/BigSom.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/GroundBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/Product.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/RoundBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/Summation.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/block/positionning/VoltageSensorBlock.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/configuration/ConfigurationManager.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/PaletteDiagram.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/XcosDiagram.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/model/ScicosObjectOwner.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/model/XcosCell.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/model/XcosCellFactory.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/codec/BasicLinkCodec.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/codec/BasicPortCodec.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/codec/XcosDiagramCodec.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/sax/BlockHandler.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/sax/CustomHandler.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/sax/LinkHandler.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/sax/PortHandler.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/sax/RawDataHandler.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/BlockModelElement.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/InputPortElement.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/LinkElement.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/scicos/OutputPortElement.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/io/writer/RawDataWriter.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/link/BasicLink.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/link/CommandControlLink.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/link/ExplicitLink.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/link/ImplicitLink.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/palette/Palette.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/palette/PaletteBlockCtrl.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/port/BasicPort.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/port/Orientation.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/port/command/CommandPort.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/port/control/ControlPort.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/port/input/ExplicitInputPort.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/port/input/ImplicitInputPort.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/port/input/InputPort.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/port/output/ExplicitOutputPort.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/port/output/ImplicitOutputPort.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/port/output/OutputPort.java
scilab/modules/xcos/src/java/org/scilab/modules/xcos/utils/XcosDelegates.java

index f27f3fb..c9b2621 100644 (file)
@@ -137,7 +137,7 @@ types::InternalType* importFile(char const* file)
     }
     catch (GiwsException::JniCallMethodException &exception)
     {
-        Scierror(999, "%s: %s\n", funname, exception.getJavaDescription().c_str());
+        Scierror(999, "%s: %s\n%s\n", funname, exception.getJavaDescription().c_str(), exception.getJavaStackTrace().c_str());
         controller.deleteObject(uid);
         return nullptr;
     }
@@ -169,7 +169,7 @@ bool exportFile(int index, char const* file, types::InternalType* type)
     }
     catch (GiwsException::JniCallMethodException &exception)
     {
-        Scierror(999, "%s: %s\n", funname, exception.getJavaDescription().c_str());
+        Scierror(999, "%s: %s\n%s\n", funname, exception.getJavaDescription().c_str(), exception.getJavaStackTrace().c_str());
         return false;
     }
     catch (GiwsException::JniException &exception)
index d9d64d2..9e7aec4 100644 (file)
@@ -38,5 +38,4 @@ public class JavaController extends Controller {
     JavaControllerJNI.unregister_view(View.getCPtr(view), view);
     remove_reference(view);
   }
-
 }
index 27aa29d..21ee58e 100644 (file)
@@ -488,7 +488,7 @@ public final class Xcos {
             /*
              * Allocate and setup a new diagram
              */
-            diag = new XcosDiagram(currentId, Kind.DIAGRAM);
+            diag = new XcosDiagram(controller, currentId, Kind.DIAGRAM, "");
             diag.installListeners();
 
             /*
@@ -896,13 +896,14 @@ public final class Xcos {
         if (filetype == null) {
             throw new IllegalArgumentException("not handled filetype");
         }
+
         switch (filetype) {
             case XCOS:
             case ZCOS:
                 if (export) {
-                    filetype.save(file, new XcosDiagram(diagramId, Kind.DIAGRAM));
+                    filetype.save(file, new XcosDiagram(new JavaController(), diagramId, Kind.DIAGRAM, ""));
                 } else {
-                    filetype.load(file, new XcosDiagram(diagramId, Kind.DIAGRAM));
+                    filetype.load(file, new XcosDiagram(new JavaController(), diagramId, Kind.DIAGRAM, ""));
                 }
                 break;
             case COSF:
index 5400533..531ad57 100644 (file)
@@ -15,7 +15,6 @@ package org.scilab.modules.xcos;
 
 import com.mxgraph.util.mxEvent;
 import com.mxgraph.util.mxEventObject;
-import com.mxgraph.util.mxEventSource;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.lang.ref.WeakReference;
index 56db4c0..23605f7 100644 (file)
@@ -196,7 +196,10 @@ public final class ExportAllAction extends DefaultAction {
 
 
                 if (diagrams.stream().noneMatch(d -> d.getUID() == currentUID)) {
-                    final XcosDiagram child = new XcosDiagram(currentUID, Kind.BLOCK);
+                    String[] strUID = new String[1];
+                    controller.getObjectProperty(currentUID, Kind.BLOCK, ObjectProperties.UID, strUID);
+
+                    final XcosDiagram child = new XcosDiagram(controller, currentUID, Kind.BLOCK, strUID[0]);
                     diagrams.add(child);
                     stash.add(currentUID);
                 }
index a015262..aaf5ea2 100644 (file)
@@ -12,6 +12,7 @@
  */
 package org.scilab.modules.xcos.block;
 
+import com.mxgraph.model.mxGeometry;
 import java.awt.GraphicsEnvironment;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -30,6 +31,8 @@ import javax.swing.Timer;
 import org.scilab.modules.graph.utils.ScilabExported;
 import org.scilab.modules.graph.utils.StyleMap;
 import org.scilab.modules.types.ScilabString;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 
 /**
  * Implement the AFFICH_m block
@@ -276,11 +279,11 @@ public final class AfficheBlock extends BasicBlock {
         }
     }
 
-    /** Default constructor */
-    public AfficheBlock(long uid) {
-        super(uid);
+    public AfficheBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 
+
     /**
      * Assign a value to an AfficheBlock instance
      *
index 234f20e..44f13fd 100644 (file)
@@ -206,23 +206,18 @@ public class BasicBlock extends XcosCell implements Serializable {
         }
     };
 
-    public BasicBlock(long uid) {
-        this(uid, Kind.BLOCK);
-    }
-
     /**
      * Default constructor.
      */
-    public BasicBlock(long uid, Kind kind) {
-        super(uid, kind);
+    public BasicBlock(final JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
 
         /*
-         * Default parameters for blocks
+         * Default JGraphX properties for blocks
          */
         this.visible = true;
         this.vertex = true;
         this.connectable = false;
-        this.geometry = new mxGeometry(DEFAULT_POSITION_X, DEFAULT_POSITION_Y, DEFAULT_WIDTH, DEFAULT_HEIGHT);
     }
 
     /**
@@ -569,13 +564,14 @@ public class BasicBlock extends XcosCell implements Serializable {
                 @Override
                 public void callBack() {
                     JavaController controller = new JavaController();
-                    XcosDiagram theDiagram = new XcosDiagram(controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM);
                     BasicBlock block = null;
                     try {
                         block = (BasicBlock) BasicBlock.this.clone();
                     } catch (CloneNotSupportedException e) {
                         e.printStackTrace();
                     }
+
+                    XcosDiagram theDiagram = new XcosDiagram(controller, controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM, "");
                     theDiagram.getModel().add(theDiagram.getDefaultParent(), block, 0);
                     mxGeometry geom = BasicBlock.this.getGeometry();
                     setDefaultPosition(geom);
index d19ecca..5e350b2 100644 (file)
@@ -18,6 +18,8 @@ import org.scilab.modules.xcos.port.BasicPort;
 
 import com.mxgraph.model.mxGeometry;
 import com.mxgraph.model.mxICell;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 
 /**
  * A SplitBlock is used on a junction between links.
@@ -32,8 +34,8 @@ public final class SplitBlock extends BasicBlock {
     /**
      * Constructor
      */
-    public SplitBlock(long uid) {
-        super(uid);
+    public SplitBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, new mxGeometry(0, 0, DEFAULT_SIZE, DEFAULT_SIZE), style, id);
     }
 
     /**
index 02805f8..8914900 100644 (file)
@@ -13,6 +13,7 @@
 
 package org.scilab.modules.xcos.block;
 
+import com.mxgraph.model.mxGeometry;
 import org.scilab.modules.graph.ScilabGraph;
 import org.scilab.modules.gui.contextmenu.ContextMenu;
 import org.scilab.modules.gui.menu.Menu;
@@ -67,24 +68,8 @@ public final class SuperBlock extends BasicBlock {
      */
     private static final String MASKED_INTERFUNCTION_NAME = "DSUPER";
 
-    /**
-     * Constructor
-     *
-     * @param uid the uid
-     * @param label "SUPER_f" or "DSUPER" to use as value
-     * @param masked true if the inner diagram should be hidden
-     */
-    public SuperBlock(long uid, String label, boolean masked) {
-        super(uid);
-
-        setValue(label);
-        if (masked) {
-            mask(new JavaController());
-        }
-    }
-
-    public SuperBlock(long uid) {
-        this(uid, INTERFUNCTION_NAME, false);
+    public SuperBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 
     /**
index ae3e3fa..e085009 100644 (file)
 
 package org.scilab.modules.xcos.block;
 
+import com.mxgraph.model.mxGeometry;
 import java.util.Map;
 
 import org.scilab.modules.graph.actions.base.DefaultAction;
 import org.scilab.modules.gui.menu.Menu;
+import org.scilab.modules.xcos.JavaController;
 import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.block.actions.BlockParametersAction;
 import org.scilab.modules.xcos.block.actions.RegionToSuperblockAction;
@@ -30,8 +32,8 @@ public final class TextBlock extends BasicBlock {
     /**
      * Default constructor
      */
-    public TextBlock(long uid) {
-        super(uid, Kind.ANNOTATION);
+    public TextBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 
     /**
index 20e13f7..925c72f 100644 (file)
@@ -106,7 +106,7 @@ public class BlockParametersAction extends VertexSelectionDependantAction {
             BlockInterFunction func = XcosCellFactory.lookForInterfunction(interfaceFunction[0]);
             if (func.equals(BlockInterFunction.SUPER_f)) {
                 // this is a super-block, open it
-                XcosDiagram sub = new XcosDiagram(cell.getUID(), cell.getKind());
+                XcosDiagram sub = new XcosDiagram(controller, cell.getUID(), cell.getKind(), cell.getId());
                 XcosCellFactory.insertChildren(controller, sub);
 
                 Xcos.getInstance().addDiagram(sub);
index 4c56f56..89d950b 100644 (file)
@@ -88,7 +88,10 @@ public class ShowParentAction extends DefaultAction {
 
             XcosDiagram diagram = (XcosDiagram) view.getVisibleObjects().get(parent[0]);
             if (diagram == null) {
-                diagram = new XcosDiagram(parent[0], kind);
+                String[] strUID = new String[] { "" };
+                controller.getObjectProperty(graph.getUID(), kind, ObjectProperties.UID, strUID);
+
+                diagram = new XcosDiagram(controller, parent[0], kind, strUID[0]);
                 view.getVisibleObjects().put(parent[0], diagram);
             }
 
index cfd5a9d..242edbd 100644 (file)
@@ -13,6 +13,7 @@
 
 package org.scilab.modules.xcos.block.io;
 
+import com.mxgraph.model.mxGeometry;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.io.Serializable;
@@ -355,10 +356,11 @@ public abstract class ContextUpdate extends BasicBlock {
     /**
      * Constructor.
      */
-    public ContextUpdate(final long uid) {
-        super(uid);
+    public ContextUpdate(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 
+
     /**
      * @param context
      *            new context
index 76c4c94..0cc4c5c 100644 (file)
@@ -2,6 +2,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
  * Copyright (C) 2009-2010 - DIGITEO - Clement DAVID <clement.david@scilab.org>
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+
 /**
  * Implement an event entry point of a
  * {@link org.scilab.modules.xcos.block.SuperBlock}.
@@ -24,7 +29,7 @@ public final class EventInBlock extends ContextUpdate {
     /**
      * Constructor
      */
-    public EventInBlock(long uid) {
-        super(uid);
+    public EventInBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 }
index 750ebd2..d943395 100644 (file)
@@ -2,6 +2,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
  * Copyright (C) 2009-2010 - DIGITEO - Clement DAVID <clement.david@scilab.org>
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+
 /**
  * Implement an event exit point of a
  * {@link org.scilab.modules.xcos.block.SuperBlock}.
@@ -24,7 +29,7 @@ public final class EventOutBlock extends ContextUpdate {
     /**
      * Constructor
      */
-    public EventOutBlock(long uid) {
-        super(uid);
+    public EventOutBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 }
index 1fd4f2b..8320bea 100644 (file)
@@ -2,6 +2,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
  * Copyright (C) 2009-2010 - DIGITEO - Clement DAVID <clement.david@scilab.org>
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+
 /**
  * Implement an explicit input point of a
  * {@link org.scilab.modules.xcos.block.SuperBlock}.
@@ -24,7 +29,7 @@ public final class ExplicitInBlock extends ContextUpdate {
     /**
      * Constructor
      */
-    public ExplicitInBlock(long uid) {
-        super(uid);
+    public ExplicitInBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 }
index 5d377ad..8828869 100644 (file)
@@ -2,6 +2,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
  * Copyright (C) 2009-2010 - DIGITEO - Clement DAVID <clement.david@scilab.org>
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+
 /**
  * Implement an explicit output point of a
  * {@link org.scilab.modules.xcos.block.SuperBlock}.
@@ -24,7 +29,7 @@ public final class ExplicitOutBlock extends ContextUpdate {
     /**
      * Constructor
      */
-    public ExplicitOutBlock(long uid) {
-        super(uid);
+    public ExplicitOutBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 }
index 1b67527..8f39171 100644 (file)
@@ -2,6 +2,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
  * Copyright (C) 2009-2010 - DIGITEO - Clement DAVID <clement.david@scilab.org>
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+
 /**
  * Implement an implicit input point of a
  * {@link org.scilab.modules.xcos.block.SuperBlock}.
@@ -24,7 +29,7 @@ public final class ImplicitInBlock extends ContextUpdate {
     /**
      * Constructor
      */
-    public ImplicitInBlock(long uid) {
-        super(uid);
+    public ImplicitInBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 }
index 7a3f4e6..f147519 100644 (file)
@@ -2,6 +2,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009-2009 - DIGITEO - Antoine ELIAS <antoine.elias@scilab.org>
  * Copyright (C) 2009-2010 - DIGITEO - Clement DAVID <clement.david@scilab.org>
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.io;
 
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+
 /**
  * Implement an implicit output point of a
  * {@link org.scilab.modules.xcos.block.SuperBlock}.
@@ -24,7 +29,7 @@ public final class ImplicitOutBlock extends ContextUpdate {
     /**
      * Constructor
      */
-    public ImplicitOutBlock(long uid) {
-        super(uid);
+    public ImplicitOutBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 }
index d532d99..0287c17 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2010 - DIGITEO - Clement DAVID
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
@@ -12,6 +13,9 @@
 
 package org.scilab.modules.xcos.block.positionning;
 
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.block.BasicBlock;
 import org.scilab.modules.xcos.block.listener.SumPortLabelingListener;
 
@@ -25,8 +29,7 @@ public class BigSom extends BasicBlock {
     /**
      * Default constructor
      */
-    public BigSom(long uid) {
-        super(uid);
+    public BigSom(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
-
 }
index 78ab35b..ea66f7a 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009 - DIGITEO - Clement DAVID
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.positionning;
 
+import com.mxgraph.model.mxGeometry;
 import org.scilab.modules.xcos.block.BasicBlock;
 import org.scilab.modules.xcos.port.BasicPort;
 import org.scilab.modules.xcos.port.Orientation;
 
 import com.mxgraph.model.mxICell;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 
 /**
  * The Ground block has only one specificity : it's port position.
@@ -25,8 +29,8 @@ import com.mxgraph.model.mxICell;
 public class GroundBlock extends BasicBlock {
 
     /** Default constructor */
-    public GroundBlock(long uid) {
-        super(uid);
+    public GroundBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 
     /**
index 5662dc7..94f1137 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2010 - DIGITEO - Clement DAVID
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
@@ -12,6 +13,9 @@
 
 package org.scilab.modules.xcos.block.positionning;
 
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.block.BasicBlock;
 
 /**
@@ -19,10 +23,8 @@ import org.scilab.modules.xcos.block.BasicBlock;
  */
 @SuppressWarnings(value = { "serial" })
 public class Product extends BasicBlock {
-    /**
-     * Default constructor
-     */
-    public Product(long uid) {
-        super(uid);
+
+    public Product(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 }
index cfc5c0b..ae4324d 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2010 - DIGITEO - Clement DAVID
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.positionning;
 
+import com.mxgraph.model.mxGeometry;
 import org.scilab.modules.xcos.block.BasicBlock;
 import org.scilab.modules.xcos.port.Orientation;
 import org.scilab.modules.xcos.port.input.InputPort;
 
 import com.mxgraph.model.mxICell;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 
 /**
  * Implement a round block with inputs spread around the block.
@@ -26,8 +30,8 @@ public class RoundBlock extends BasicBlock {
     /**
      * Default constructor
      */
-    public RoundBlock(long uid) {
-        super(uid);
+    public RoundBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 
     /**
index 549372d..d9130ea 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2010 - DIGITEO - Clement DAVID
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
@@ -12,6 +13,9 @@
 
 package org.scilab.modules.xcos.block.positionning;
 
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.block.BasicBlock;
 import org.scilab.modules.xcos.block.listener.SumPortLabelingListener;
 
@@ -22,11 +26,11 @@ import org.scilab.modules.xcos.block.listener.SumPortLabelingListener;
  */
 @SuppressWarnings(value = { "serial" })
 public class Summation extends BasicBlock {
+
     /**
      * Default constructor
      */
-    public Summation(long uid) {
-        super(uid);
+    public Summation(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
-
 }
index 75b6b7c..9bf31a8 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009 - DIGITEO - Clement DAVID
+ * Copyright (C) 2010-2015 - Scilab Enterprises - Clement DAVID
  *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
 
 package org.scilab.modules.xcos.block.positionning;
 
+import com.mxgraph.model.mxGeometry;
 import org.scilab.modules.xcos.block.BasicBlock;
 import org.scilab.modules.xcos.port.Orientation;
 import org.scilab.modules.xcos.port.output.OutputPort;
 
 import com.mxgraph.model.mxICell;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 
 /**
  * The VoltageSensor block has only one specificity : it's port position.
@@ -25,8 +29,8 @@ import com.mxgraph.model.mxICell;
 public class VoltageSensorBlock extends BasicBlock {
 
     /** Default constructor */
-    public VoltageSensorBlock(long uid) {
-        super(uid);
+    public VoltageSensorBlock(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style, id);
     }
 
     /**
index 7e19c0b..6f0cbad 100644 (file)
@@ -402,7 +402,7 @@ public final class ConfigurationManager {
         try {
             JavaController controller = new JavaController();
 
-            graph = new XcosDiagram(controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM);
+            graph = new XcosDiagram(controller, controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM, "");
             graph.installListeners();
 
             if (f != null) {
@@ -461,7 +461,7 @@ public final class ConfigurationManager {
         for (int i = 0 ; i < len ; i++) {
             controller.getObjectProperty(blocks.get(i), Kind.BLOCK, ObjectProperties.UID, blockUID);
             if (uid.equals(blockUID[0])) {
-                return new XcosDiagram(blocks.get(i), Kind.BLOCK);
+                return new XcosDiagram(controller, blocks.get(i), Kind.BLOCK, blockUID[0]);
             }
         }
 
index 49a2935..3dd6a0d 100644 (file)
@@ -30,6 +30,8 @@ import org.scilab.modules.xcos.utils.BlockPositioning;
 import org.scilab.modules.xcos.utils.XcosConstants;
 
 import com.mxgraph.model.mxGeometry;
+import java.rmi.server.UID;
+import org.scilab.modules.xcos.JavaController;
 
 /**
  * @author Antoine ELIAS
@@ -48,7 +50,7 @@ public class PaletteDiagram extends XcosDiagram {
      * Constructor
      */
     public PaletteDiagram(long uid) {
-        super(uid, Kind.DIAGRAM);
+        super(new JavaController(), uid, Kind.DIAGRAM, new UID().toString());
         setComponent(new PaletteComponent(this));
 
         setTitle(PaletteDiagram.class.getName());
index b9292b4..ed2887f 100644 (file)
@@ -141,15 +141,17 @@ public class XcosDiagram extends ScilabGraph {
     /**
      * Constructor
      *
-     * @param withVisibleFeatures
-     *            true if the visible features should be activated, false otherwise. Disable it on encode/decode leads to a huge performance gain.
+     * @param controller the shared controller
+     * @param diagramId the diagram MVC ID
+     * @param kind DIAGRAM or BLOCK for a root diagram or a super-block
+     * @param uid the string UID that will be used on the default parent
      */
-    public XcosDiagram(final long diagramId, final Kind kind) {
+    public XcosDiagram(final JavaController controller, final long diagramId, final Kind kind, String uid) {
         super(new mxGraphModel(), Xcos.getInstance().getStyleSheet());
 
         // add the default parent (the JGraphX layer)
-        XcosCell parent = new XcosCell(diagramId, kind);
-        new JavaController().referenceObject(diagramId);
+        XcosCell parent = new XcosCell(controller, diagramId, kind, null, null, null, uid);
+        controller.referenceObject(diagramId);
         ((mxICell) getModel().getRoot()).insert(parent);
         setDefaultParent(parent);
 
@@ -189,7 +191,11 @@ public class XcosDiagram extends ScilabGraph {
 
         setMultiplicities();
 
+        // auto-position the diagram origin
         setAutoOrigin(true);
+
+        // do not put loop links inside the common block cell but on the defaultParent
+        ((mxGraphModel) getModel()).setMaintainEdgeParent(false);
     }
 
     /*
@@ -654,11 +660,11 @@ public class XcosDiagram extends ScilabGraph {
 
             long uid = controller.createObject(Kind.LINK);
             if (src.getType() == Type.EXPLICIT) {
-                link = new ExplicitLink(uid);
+                link = new ExplicitLink(controller, uid, Kind.LINK, value, null, style, id);
             } else if (src.getType() == Type.IMPLICIT) {
-                link = new ImplicitLink(uid);
+                link = new ImplicitLink(controller, uid, Kind.LINK, value, null, style, id);
             } else {
-                link = new CommandControlLink(uid);
+                link = new CommandControlLink(controller, uid, Kind.LINK, value, null, style, id);
             }
 
             // allocate the associated geometry
index aa2df8b..79c842e 100644 (file)
@@ -20,15 +20,18 @@ public class ScicosObjectOwner {
     final Kind kind;
 
     public ScicosObjectOwner(long uid, Kind kind) {
-        this.uid = uid;
-        this.kind = kind;
+        this(new JavaController(), uid, kind);
+    }
 
+    public ScicosObjectOwner(final JavaController controller, long uid, Kind kind) {
         // defensive programming
         if (uid == 0) {
             throw new IllegalStateException();
         }
 
-        JavaController controller = new JavaController();
+        this.uid = uid;
+        this.kind = kind;
+
         controller.referenceObject(uid);
     }
 
index 1f5feda..6025586 100644 (file)
@@ -15,7 +15,6 @@ package org.scilab.modules.xcos.graph.model;
 import java.util.Collections;
 import java.util.List;
 
-import org.scilab.modules.graph.ScilabGraphUniqueObject;
 import org.scilab.modules.xcos.JavaController;
 import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.ObjectProperties;
@@ -23,11 +22,12 @@ import org.scilab.modules.xcos.PortKind;
 import org.scilab.modules.xcos.VectorOfDouble;
 import org.scilab.modules.xcos.VectorOfScicosID;
 
+import com.mxgraph.model.mxCell;
 import com.mxgraph.model.mxGeometry;
 import com.mxgraph.model.mxICell;
 import com.mxgraph.util.mxPoint;
 
-public class XcosCell extends ScilabGraphUniqueObject {
+public class XcosCell extends mxCell {
     private static final long serialVersionUID = 1L;
 
     private transient ScicosObjectOwner owner;
@@ -37,22 +37,25 @@ public class XcosCell extends ScilabGraphUniqueObject {
      *
      * This Java object owns the corresponding MVC object and thus will unrefererence it on GC.
      *
+     * @param controller
+     *            the shared controller
      * @param uid
      *            the associated MVC identifier
      * @param kind
      *            the associated MVC kind
      */
-    public XcosCell(long uid, Kind kind) {
-        owner = new ScicosObjectOwner(uid, kind);
+    public XcosCell(final JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super();
 
         // defensive programming
         if (uid == 0l) {
             throw new IllegalArgumentException();
         }
 
-        /* Store default values to the C++ side */
-        JavaController controller = new JavaController();
+        owner = new ScicosObjectOwner(controller, uid, kind);
         setValue(controller, value);
+        setGeometry(controller, geometry);
+        setStyle(controller, style);
         setId(controller, id);
     }
 
@@ -81,15 +84,15 @@ public class XcosCell extends ScilabGraphUniqueObject {
      */
     @Override
     public void setValue(Object value) {
-        super.setValue(value);
-        if (owner == null) {
-            return;
-        }
-
         setValue(new JavaController(), value);
     }
 
-    private void setValue(JavaController controller, Object value) {
+    public void setValue(JavaController controller, Object value) {
+        super.setValue(value);
+        setMVCValue(controller, value);
+    }
+
+    private void setMVCValue(JavaController controller, Object value) {
         if (value == null) {
             return;
         }
@@ -115,12 +118,19 @@ public class XcosCell extends ScilabGraphUniqueObject {
      */
     @Override
     public void setId(String id) {
-        super.setId(id);
-
         setId(new JavaController(), id);
     }
 
-    private void setId(JavaController controller, String id) {
+    public void setId(JavaController controller, String id) {
+        super.setId(id);
+        setMVCId(controller, id);
+    }
+
+    private void setMVCId(JavaController controller, String id) {
+        if (id == null) {
+            return;
+        }
+
         switch (getKind()) {
             case ANNOTATION:
             case BLOCK:
@@ -140,15 +150,19 @@ public class XcosCell extends ScilabGraphUniqueObject {
      */
     @Override
     public void setGeometry(mxGeometry geometry) {
+        setGeometry(new JavaController(), geometry);
+    }
+
+    public void setGeometry(JavaController controller, mxGeometry geometry) {
         super.setGeometry(geometry);
-        if (owner == null) {
+        setMVCGeometry(controller, geometry);
+    }
+
+    private void setMVCGeometry(JavaController controller, mxGeometry geometry) {
+        if (geometry == null) {
             return;
         }
 
-        setGeometry(new JavaController(), geometry);
-    }
-
-    private void setGeometry(JavaController controller, mxGeometry geometry) {
         switch (getKind()) {
             case ANNOTATION:
             case BLOCK: {
@@ -228,15 +242,19 @@ public class XcosCell extends ScilabGraphUniqueObject {
      */
     @Override
     public void setStyle(String style) {
+        setStyle(new JavaController(), style);
+    }
+
+    public void setStyle(JavaController controller, String style) {
         super.setStyle(style);
-        if (owner == null) {
+        setMVCStyle(controller, style);
+    }
+
+    private void setMVCStyle(JavaController controller, String style) {
+        if (style == null) {
             return;
         }
 
-        setStyle(new JavaController(), style);
-    }
-
-    private void setStyle(JavaController controller, String style) {
         switch (getKind()) {
             case ANNOTATION:
             case BLOCK:
@@ -545,9 +563,6 @@ public class XcosCell extends ScilabGraphUniqueObject {
         XcosCell c = (XcosCell) super.clone();
 
         c.owner = new ScicosObjectOwner(controller.cloneObject(getUID(), false, false), getKind());
-        c.setValue(controller, c.getValue());
-        c.setId(controller, c.getId());
-
         return c;
     }
 }
index 0b166c7..7d58a64 100644 (file)
@@ -50,6 +50,7 @@ import org.scilab.modules.xcos.utils.BlockPositioning;
 import com.mxgraph.model.mxCell;
 import com.mxgraph.model.mxGeometry;
 import com.mxgraph.util.mxPoint;
+import java.lang.reflect.Constructor;
 import java.util.EnumMap;
 import org.scilab.modules.xcos.block.SplitBlock;
 import org.scilab.modules.xcos.block.positionning.RoundBlock;
@@ -121,7 +122,10 @@ public final class XcosCellFactory {
 
             ScicosObjectOwner last = getLastCreated();
             if (last.getKind() == Kind.DIAGRAM) {
-                diagram = new XcosDiagram(last.getUID(), last.getKind());
+                String[] strUID = new String[1];
+                controller.getObjectProperty(last.getUID(), last.getKind(), ObjectProperties.UID, strUID);
+
+                diagram = new XcosDiagram(controller, last.getUID(), last.getKind(), strUID[0]);
                 insertChildren(controller, diagram);
             } else {
                 diagram = null;
@@ -216,11 +220,8 @@ public final class XcosCellFactory {
         children.clear();
         controller.setObjectProperty(diagram.getUID(), diagram.getKind(), ObjectProperties.CHILDREN, children);
 
-        // add all the children without using the diagram modification tracking features
-        diagram.getView().getStates().clear();
-        for (XcosCell c : cells) {
-            ((XcosCell) diagram.getDefaultParent()).insert(c);
-        }
+        // add all the children using the diagram modification tracking features
+        diagram.addCells(cells);
 
         // each cell has been referenced twice (CHILDREN insert and addCells), derefence them all by one
         Arrays.stream(cells).forEach(c -> controller.deleteObject(c.getUID()));
@@ -339,6 +340,14 @@ public final class XcosCellFactory {
      * @return A new instance of a block.
      */
     public static BasicBlock createBlock(final JavaController controller, BlockInterFunction func, String interfaceFunction, long uid, Kind kind) {
+
+        final EnumMap<ObjectProperties, Integer> properties = new EnumMap<>(ObjectProperties.class);
+        properties.put(ObjectProperties.INPUTS, 0);
+        properties.put(ObjectProperties.OUTPUTS, 0);
+        properties.put(ObjectProperties.EVENT_INPUTS, 0);
+        properties.put(ObjectProperties.EVENT_OUTPUTS, 0);
+
+
         /*
          * Retrieve the JGraphX data before cell creation
          */
@@ -347,6 +356,9 @@ public final class XcosCellFactory {
 
         String[] style = new String[1];
         controller.getObjectProperty(uid, kind, ObjectProperties.STYLE, style);
+        if (style[0].isEmpty()) {
+            style[0] = interfaceFunction;
+        }
 
         String value;
         if (kind == Kind.ANNOTATION) {
@@ -362,12 +374,19 @@ public final class XcosCellFactory {
         VectorOfDouble geom = new VectorOfDouble(4);
         controller.getObjectProperty(uid, kind, ObjectProperties.GEOMETRY, geom);
 
+        double x = geom.get(0);
+        double y = geom.get(1);
+        double w = geom.get(2);
+        double h = geom.get(3);
+        mxGeometry geometry = new mxGeometry(x, y, w, h);
+
         /*
          * Instanciate the block
          */
         BasicBlock block = null;
         try {
-            block = func.getKlass().getConstructor(Long.TYPE).newInstance(uid);
+            Constructor<? extends BasicBlock> cstr = func.getKlass().getConstructor(JavaController.class, Long.TYPE, Kind.class, Object.class, mxGeometry.class, String.class, String.class);
+            block = cstr.newInstance(controller, uid, kind, value, geometry, style[0], strUID[0]);
         } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
                      | SecurityException e) {
             // Something goes wrong, print it.
@@ -380,29 +399,11 @@ public final class XcosCellFactory {
          *
          * Annotations have no inputs/outputs
          */
-        EnumMap<ObjectProperties, Integer> properties = new EnumMap<>(ObjectProperties.class);
-        properties.put(ObjectProperties.INPUTS, 0);
-        properties.put(ObjectProperties.OUTPUTS, 0);
-        properties.put(ObjectProperties.EVENT_INPUTS, 0);
-        properties.put(ObjectProperties.EVENT_OUTPUTS, 0);
+
         if (block.getKind() == Kind.BLOCK) {
             insertPortChildren(controller, properties, block);
         }
 
-        block.setId(strUID[0]);
-
-        if (style[0].isEmpty()) {
-            block.setStyle(interfaceFunction);
-        } else {
-            block.setStyle(style[0]);
-        }
-
-        block.setValue(value);
-
-        double x = geom.get(0);
-        double y = geom.get(1);
-        double w = geom.get(2);
-        double h = geom.get(3);
 
         /*
          * Compatibility to ease user definition :
@@ -411,7 +412,7 @@ public final class XcosCellFactory {
          *   * generic case : layout the ports per kind per block-side
          */
         boolean convertGeometry;
-        if ((block instanceof SplitBlock)) {
+        if (block instanceof SplitBlock) {
             convertGeometry = false;
         } else if (block instanceof RoundBlock) {
             int numberOfPorts = properties.get(ObjectProperties.INPUTS) +
@@ -434,10 +435,9 @@ public final class XcosCellFactory {
              * Invert the y-axis value and translate it.
              */
             y = -y - h;
-        }
 
-
-        block.setGeometry(new mxGeometry(x, y, w, h));
+            block.setGeometry(new mxGeometry(x, y, w, h));
+        }
 
         return block;
     }
@@ -548,28 +548,37 @@ public final class XcosCellFactory {
         BasicPort port;
         boolean[] isImplicit = { false };
 
+        String[] strUID = new String[] { "" };
+        controller.getObjectProperty(uid, Kind.PORT, ObjectProperties.UID, strUID);
+
+        String[] style = new String[] { "" };
+        controller.getObjectProperty(uid, Kind.PORT, ObjectProperties.STYLE, style);
+
+        String[] value = new String[] { "" };
+        controller.getObjectProperty(uid, Kind.PORT, ObjectProperties.LABEL, value);
+
         switch (property) {
             case INPUTS:
                 controller.getObjectProperty(uid, Kind.PORT, ObjectProperties.IMPLICIT, isImplicit);
                 if (isImplicit[0]) {
-                    port = new ImplicitInputPort(uid);
+                    port = new ImplicitInputPort(controller, uid, Kind.PORT, value[0], style[0], strUID[0]);
                 } else {
-                    port = new ExplicitInputPort(uid);
+                    port = new ExplicitInputPort(controller, uid, Kind.PORT, value[0], style[0], strUID[0]);
                 }
                 break;
             case OUTPUTS:
                 controller.getObjectProperty(uid, Kind.PORT, ObjectProperties.IMPLICIT, isImplicit);
                 if (isImplicit[0]) {
-                    port = new ImplicitOutputPort(uid);
+                    port = new ImplicitOutputPort(controller, uid, Kind.PORT, value[0], style[0], strUID[0]);
                 } else {
-                    port = new ExplicitOutputPort(uid);
+                    port = new ExplicitOutputPort(controller, uid, Kind.PORT, value[0], style[0], strUID[0]);
                 }
                 break;
             case EVENT_INPUTS:
-                port = new ControlPort(uid);
+                port = new ControlPort(controller, uid, Kind.PORT, value[0], style[0], strUID[0]);
                 break;
             case EVENT_OUTPUTS:
-                port = new CommandPort(uid);
+                port = new CommandPort(controller, uid, Kind.PORT, value[0], style[0], strUID[0]);
                 break;
             default:
                 return null;
@@ -579,12 +588,6 @@ public final class XcosCellFactory {
          * Setup JGraphX properties
          */
 
-        String[] childUID = new String[1];
-        controller.getObjectProperty(port.getUID(), port.getKind(), ObjectProperties.UID, childUID);
-        if (!childUID[0].isEmpty()) {
-            port.setId(childUID[0]);
-        }
-
         return port;
     }
 
@@ -596,30 +599,18 @@ public final class XcosCellFactory {
         int[] type = new int[1];
         controller.getObjectProperty(uid, kind, ObjectProperties.KIND, type);
 
-        BasicLink link;
-        switch (type[0]) {
-            case -1:
-                link = new CommandControlLink(uid);
-                break;
-            case 1:
-                link = new ExplicitLink(uid);
-                break;
-            case 2:
-                link = new ImplicitLink(uid);
-                break;
-            default:
-                return null;
-        }
-
         /*
          * Synchronize model information back to the JGraphX data
          */
 
-        String[] strUID = new String[1];
+        String[] value = new String[] { "" };
+        controller.getObjectProperty(uid, kind, ObjectProperties.LABEL, value);
+
+        String[] style = new String[] { "" };
+        controller.getObjectProperty(uid, kind, ObjectProperties.STYLE, style);
+
+        String[] strUID = new String[] { "" };
         controller.getObjectProperty(uid, kind, ObjectProperties.UID, strUID);
-        if (!strUID[0].isEmpty()) {
-            link.setId(strUID[0]);
-        }
 
         VectorOfDouble controlPoints = new VectorOfDouble();
         controller.getObjectProperty(uid, kind, ObjectProperties.CONTROL_POINTS, controlPoints);
@@ -640,8 +631,25 @@ public final class XcosCellFactory {
         i++;
 
         geom.setPoints(points);
-        link.setGeometry(geom);
+
+        /*
+         * Allocate the link
+         */
+        BasicLink link;
+        switch (type[0]) {
+            case -1:
+                link = new CommandControlLink(controller, uid, kind, value[0], geom, style[0], strUID[0]);
+                break;
+            case 1:
+                link = new ExplicitLink(controller, uid, kind, value[0], geom, style[0], strUID[0]);
+                break;
+            case 2:
+                link = new ImplicitLink(controller, uid, kind, value[0], geom, style[0], strUID[0]);
+                break;
+            default:
+                return null;
+        }
+
         return link;
     }
-
 }
index 9077519..6184a4e 100644 (file)
@@ -34,11 +34,11 @@ public class BasicLinkCodec extends XcosObjectCodec {
     public static void register() {
         JavaController controller = new JavaController();
 
-        BasicLinkCodec explicitlinkCodec = new BasicLinkCodec(new ExplicitLink(controller.createObject(Kind.LINK)), null, REFS, null);
+        BasicLinkCodec explicitlinkCodec = new BasicLinkCodec(new ExplicitLink(controller, controller.createObject(Kind.LINK), Kind.LINK, null, null, null, null), null, REFS, null);
         mxCodecRegistry.register(explicitlinkCodec);
-        BasicLinkCodec implicitlinkCodec = new BasicLinkCodec(new ImplicitLink(controller.createObject(Kind.LINK)), null, REFS, null);
+        BasicLinkCodec implicitlinkCodec = new BasicLinkCodec(new ImplicitLink(controller, controller.createObject(Kind.LINK), Kind.LINK, null, null, null, null), null, REFS, null);
         mxCodecRegistry.register(implicitlinkCodec);
-        BasicLinkCodec commandControllinkCodec = new BasicLinkCodec(new CommandControlLink(controller.createObject(Kind.LINK)), null, REFS, null);
+        BasicLinkCodec commandControllinkCodec = new BasicLinkCodec(new CommandControlLink(controller, controller.createObject(Kind.LINK), Kind.LINK, null, null, null, null), null, REFS, null);
         mxCodecRegistry.register(commandControllinkCodec);
     }
 
index 65996f4..9754c85 100644 (file)
@@ -75,17 +75,17 @@ public class BasicPortCodec extends XcosObjectCodec {
     public static void register() {
         JavaController controller = new JavaController();
 
-        XcosObjectCodec explicitOutputPortCodec = new BasicPortCodec(new ExplicitOutputPort(controller.createObject(Kind.PORT)), IGNORED_FIELDS, REFS, null);
+        XcosObjectCodec explicitOutputPortCodec = new BasicPortCodec(new ExplicitOutputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null), IGNORED_FIELDS, REFS, null);
         mxCodecRegistry.register(explicitOutputPortCodec);
-        XcosObjectCodec explicitInputPortCodec = new BasicPortCodec(new ExplicitInputPort(controller.createObject(Kind.PORT)), IGNORED_FIELDS, REFS, null);
+        XcosObjectCodec explicitInputPortCodec = new BasicPortCodec(new ExplicitInputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null), IGNORED_FIELDS, REFS, null);
         mxCodecRegistry.register(explicitInputPortCodec);
-        XcosObjectCodec implicitOutputPortCodec = new BasicPortCodec(new ImplicitOutputPort(controller.createObject(Kind.PORT)), IGNORED_FIELDS, REFS, null);
+        XcosObjectCodec implicitOutputPortCodec = new BasicPortCodec(new ImplicitOutputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null), IGNORED_FIELDS, REFS, null);
         mxCodecRegistry.register(implicitOutputPortCodec);
-        XcosObjectCodec implicitInputPortCodec = new BasicPortCodec(new ImplicitInputPort(controller.createObject(Kind.PORT)), IGNORED_FIELDS, REFS, null);
+        XcosObjectCodec implicitInputPortCodec = new BasicPortCodec(new ImplicitInputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null), IGNORED_FIELDS, REFS, null);
         mxCodecRegistry.register(implicitInputPortCodec);
-        XcosObjectCodec commandPortCodec = new BasicPortCodec(new CommandPort(controller.createObject(Kind.PORT)), IGNORED_FIELDS, REFS, null);
+        XcosObjectCodec commandPortCodec = new BasicPortCodec(new CommandPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null), IGNORED_FIELDS, REFS, null);
         mxCodecRegistry.register(commandPortCodec);
-        XcosObjectCodec controlPortCodec = new BasicPortCodec(new ControlPort(controller.createObject(Kind.PORT)), IGNORED_FIELDS, REFS, null);
+        XcosObjectCodec controlPortCodec = new BasicPortCodec(new ControlPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null), IGNORED_FIELDS, REFS, null);
         mxCodecRegistry.register(controlPortCodec);
         mxCodecRegistry.register(new mxObjectCodec(Orientation.EAST));
     }
index ba913ea..f38033f 100644 (file)
@@ -98,10 +98,10 @@ public class XcosDiagramCodec extends ScilabGraphCodec {
     public static void register() {
         JavaController controller = new JavaController();
 
-        ScilabGraphCodec diagramCodec = new XcosDiagramCodec(new XcosDiagram(controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM), DIAGRAM_IGNORED_FIELDS, null,
+        ScilabGraphCodec diagramCodec = new XcosDiagramCodec(new XcosDiagram(controller, controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM, ""), DIAGRAM_IGNORED_FIELDS, null,
                 null);
         mxCodecRegistry.register(diagramCodec);
-        ScilabGraphCodec superBlockDiagramCodec = new XcosDiagramCodec(new XcosDiagram(controller.createObject(Kind.BLOCK), Kind.BLOCK),
+        ScilabGraphCodec superBlockDiagramCodec = new XcosDiagramCodec(new XcosDiagram(controller, controller.createObject(Kind.BLOCK), Kind.BLOCK, ""),
                 SUPERBLOCKDIAGRAM_IGNORED_FIELDS, null, null);
         mxCodecRegistry.register(superBlockDiagramCodec);
     }
index dc7d575..b28d4de 100644 (file)
@@ -62,66 +62,85 @@ class BlockHandler implements ScilabHandler {
         }
         final long uid = saxHandler.controller.createObject(kind);
 
+        String value = atts.getValue("value");
+        if (value != null) {
+            if (kind == Kind.BLOCK) {
+                saxHandler.controller.setObjectProperty(uid, kind, ObjectProperties.LABEL, value);
+            } else { // ANNOTATION
+                saxHandler.controller.setObjectProperty(uid, kind, ObjectProperties.DESCRIPTION, value);
+            }
+        }
+
+        String style = atts.getValue("style");
+        if (style != null) {
+            saxHandler.controller.setObjectProperty(uid, kind, ObjectProperties.STYLE, style);
+        }
+
+        String strUID = atts.getValue("id");
+        if (strUID != null) {
+            saxHandler.allChildren.peek().put(strUID, uid);
+        }
+
         switch (found) {
             case AfficheBlock:
-                block = new AfficheBlock(uid);
+                block = new AfficheBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case BasicBlock:
-                block = new BasicBlock(uid);
+                block = new BasicBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case BigSom:
-                block = new BigSom(uid);
+                block = new BigSom(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case ConstBlock:
-                block = new BasicBlock(uid);
+                block = new BasicBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case EventInBlock:
-                block = new EventInBlock(uid);
+                block = new EventInBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case EventOutBlock:
-                block = new EventOutBlock(uid);
+                block = new EventOutBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case ExplicitInBlock:
-                block = new ExplicitInBlock(uid);
+                block = new ExplicitInBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case ExplicitOutBlock:
-                block = new ExplicitOutBlock(uid);
+                block = new ExplicitOutBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case GainBlock:
-                block = new BasicBlock(uid);
+                block = new BasicBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case GroundBlock:
-                block = new GroundBlock(uid);
+                block = new GroundBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case ImplicitInBlock:
-                block = new ImplicitInBlock(uid);
+                block = new ImplicitInBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case ImplicitOutBlock:
-                block = new ImplicitOutBlock(uid);
+                block = new ImplicitOutBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case PrintBlock:
-                block = new BasicBlock(uid);
+                block = new BasicBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case Product:
-                block = new Product(uid);
+                block = new Product(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case RoundBlock:
-                block = new RoundBlock(uid);
+                block = new RoundBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case SplitBlock:
-                block = new SplitBlock(uid);
+                block = new SplitBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case Summation:
-                block = new Summation(uid);
+                block = new Summation(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case SuperBlock:
-                block = new SuperBlock(uid);
+                block = new SuperBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case TextBlock:
-                block = new TextBlock(uid);
+                block = new TextBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             case VoltageSensorBlock:
-                block = new VoltageSensorBlock(uid);
+                block = new VoltageSensorBlock(saxHandler.controller, uid, kind, value, null, style, strUID);
                 break;
             default:
                 throw new IllegalArgumentException();
@@ -130,12 +149,6 @@ class BlockHandler implements ScilabHandler {
         /*
          * Set the attributes
          */
-        v = atts.getValue("id");
-        if (v != null) {
-            block.setId(v);
-            saxHandler.allChildren.peek().put(v, uid);
-        }
-
         v = atts.getValue("interfaceFunctionName");
         if (v != null) {
             saxHandler.controller.setObjectProperty(uid, kind, ObjectProperties.INTERFACE_FUNCTION, v);
@@ -161,20 +174,6 @@ class BlockHandler implements ScilabHandler {
             saxHandler.controller.setObjectProperty(uid, kind, ObjectProperties.SIM_FUNCTION_API, type.getValue());
         }
 
-        v = atts.getValue("style");
-        if (v != null) {
-            saxHandler.controller.setObjectProperty(uid, kind, ObjectProperties.STYLE, v);
-        }
-
-        v = atts.getValue("value");
-        if (v != null) {
-            if (kind == Kind.BLOCK) {
-                saxHandler.controller.setObjectProperty(uid, kind, ObjectProperties.LABEL, v);
-            } else { // ANNOTATION
-                saxHandler.controller.setObjectProperty(uid, kind, ObjectProperties.DESCRIPTION, v);
-            }
-        }
-
         saxHandler.insertChild(block);
         return block;
     }
index d3fe9b5..248c4aa 100644 (file)
@@ -133,12 +133,14 @@ class CustomHandler implements ScilabHandler {
             // no break on purpose, we decode non-root specific properties later
             case SuperBlockDiagram:
                 final Kind kind;
+                XcosCell parent;
                 if (uid == 0l) {
-                    XcosCell parent = saxHandler.lookupForParentXcosCellElement();
+                    parent = saxHandler.lookupForParentXcosCellElement();
                     uid = parent.getUID();
                     kind = parent.getKind();
                 } else {
                     kind = Kind.DIAGRAM;
+                    parent = new XcosCell(saxHandler.controller, uid, kind, null, null, "", "");
                 }
 
                 /*
@@ -166,7 +168,7 @@ class CustomHandler implements ScilabHandler {
                  * Update some states
                  */
                 saxHandler.allChildren.push(new HashMap<>());
-                return new XcosCell(uid, kind);
+                return parent;
             default:
                 throw new IllegalArgumentException();
         }
index 0a3741d..769be87 100644 (file)
@@ -46,17 +46,24 @@ class LinkHandler implements ScilabHandler {
         int linkKind;
         final long uid = saxHandler.controller.createObject(Kind.LINK);
 
+        String strUID = atts.getValue("id");
+        if (strUID != null) {
+            saxHandler.allChildren.peek().put(strUID, uid);
+        }
+        String style = atts.getValue("style");
+        String value = atts.getValue("value");
+
         switch (found) {
             case CommandControlLink:
-                link = new CommandControlLink(uid);
+                link = new CommandControlLink(saxHandler.controller, uid, Kind.LINK, value, null, style, strUID);
                 linkKind = -1;
                 break;
             case ExplicitLink:
-                link = new ExplicitLink(uid);
+                link = new ExplicitLink(saxHandler.controller, uid, Kind.LINK, value, null, style, strUID);
                 linkKind = 1;
                 break;
             case ImplicitLink:
-                link = new ImplicitLink(uid);
+                link = new ImplicitLink(saxHandler.controller, uid, Kind.LINK, value, null, style, strUID);
                 linkKind = 2;
                 break;
             default:
@@ -66,11 +73,6 @@ class LinkHandler implements ScilabHandler {
         /*
          * Set the attributes
          */
-        v = atts.getValue("id");
-        if (v != null) {
-            link.setId(v);
-            saxHandler.allChildren.peek().put(v, uid);
-        }
 
         saxHandler.controller.setObjectProperty(uid, Kind.LINK, ObjectProperties.KIND, linkKind);
 
@@ -112,16 +114,6 @@ class LinkHandler implements ScilabHandler {
             }
         }
 
-        v = atts.getValue("style");
-        if (v != null) {
-            saxHandler.controller.setObjectProperty(uid, Kind.LINK, ObjectProperties.STYLE, v);
-        }
-
-        v = atts.getValue("value");
-        if (v != null) {
-            saxHandler.controller.setObjectProperty(uid, Kind.LINK, ObjectProperties.LABEL, v);
-        }
-
         saxHandler.insertChild(link);
         return link;
     }
index 96cfdc8..b8291f0 100644 (file)
@@ -53,49 +53,59 @@ class PortHandler implements ScilabHandler {
         /*
          * First, check if the port has already been defined. Otherwise, create the object in the model
          */
-        v = atts.getValue("id");
+        String strUID = atts.getValue("id");
         long uid = 0;
-        if (v != null) {
-            if (shared.allChildren.peek().containsKey(v)) {
-                uid = shared.allChildren.peek().get(v);
+        if (strUID != null) {
+            if (shared.allChildren.peek().containsKey(strUID)) {
+                uid = shared.allChildren.peek().get(strUID);
             } else {
                 uid = shared.controller.createObject(Kind.PORT);
-                shared.allChildren.peek().put(v, uid);
+                shared.allChildren.peek().put(strUID, uid);
             }
         }
 
+        String style = atts.getValue("style");
+        if (style != null) {
+            shared.controller.setObjectProperty(uid, Kind.PORT, ObjectProperties.STYLE, style);
+        }
+
+        String value = atts.getValue("value");
+        if (value != null) {
+            shared.controller.setObjectProperty(uid, Kind.PORT, ObjectProperties.LABEL, value);
+        }
+
         /*
          * Allocate the port with the right class to set default properties
          */
 
         switch (found) {
             case CommandPort:
-                port = new CommandPort(uid);
+                port = new CommandPort(shared.controller, uid, Kind.PORT, value, style, strUID);
                 relatedProperty = ObjectProperties.EVENT_OUTPUTS;
                 isImplicit = false;
                 break;
             case ControlPort:
-                port = new ControlPort(uid);
+                port = new ControlPort(shared.controller, uid, Kind.PORT, value, style, strUID);
                 relatedProperty = ObjectProperties.EVENT_INPUTS;
                 isImplicit = false;
                 break;
             case ExplicitInputPort:
-                port = new ExplicitInputPort(uid);
+                port = new ExplicitInputPort(shared.controller, uid, Kind.PORT, value, style, strUID);
                 relatedProperty = ObjectProperties.INPUTS;
                 isImplicit = false;
                 break;
             case ExplicitOutputPort:
-                port = new ExplicitOutputPort(uid);
+                port = new ExplicitOutputPort(shared.controller, uid, Kind.PORT, value, style, strUID);
                 relatedProperty = ObjectProperties.OUTPUTS;
                 isImplicit = false;
                 break;
             case ImplicitInputPort:
-                port = new ImplicitInputPort(uid);
+                port = new ImplicitInputPort(shared.controller, uid, Kind.PORT, value, style, strUID);
                 relatedProperty = ObjectProperties.INPUTS;
                 isImplicit = true;
                 break;
             case ImplicitOutputPort:
-                port = new ImplicitOutputPort(uid);
+                port = new ImplicitOutputPort(shared.controller, uid, Kind.PORT, value, style, strUID);
                 relatedProperty = ObjectProperties.OUTPUTS;
                 isImplicit = true;
                 break;
@@ -103,24 +113,9 @@ class PortHandler implements ScilabHandler {
                 throw new IllegalArgumentException();
         }
 
-        // set the decoded XML ID
-        port.setId(v);
-
-        // set the implicit
-        shared.controller.setObjectProperty(uid, Kind.PORT, ObjectProperties.IMPLICIT, isImplicit);
-
         /*
          * Setup the properties
          */
-        v = atts.getValue("style");
-        if (v != null) {
-            shared.controller.setObjectProperty(uid, Kind.PORT, ObjectProperties.STYLE, v);
-        }
-
-        v = atts.getValue("value");
-        if (v != null) {
-            shared.controller.setObjectProperty(uid, Kind.PORT, ObjectProperties.LABEL, v);
-        }
 
         VectorOfInt datatype = new VectorOfInt();
         shared.controller.getObjectProperty(uid, Kind.PORT, ObjectProperties.DATATYPE, datatype);
index 6d8f0e0..c7fe04e 100644 (file)
@@ -430,7 +430,7 @@ class RawDataHandler implements ScilabHandler {
                             saxHandler.controller.getObjectProperty(cell.getUID(), cell.getKind(), ObjectProperties.CHILDREN, children);
                             if (children.size() == 0) {
                                 try {
-                                    new DiagramElement(saxHandler.controller).decode((ScilabMList) fieldValue.value, new XcosDiagram(cell.getUID(), cell.getKind()));
+                                    new DiagramElement(saxHandler.controller).decode((ScilabMList) fieldValue.value, new XcosDiagram(saxHandler.controller, cell.getUID(), cell.getKind(), cell.getId()));
                                 } catch (ScicosFormatException e) {
                                 }
                             }
index 801326e..78cdb36 100644 (file)
@@ -157,8 +157,7 @@ final class BlockModelElement extends BlockPartsElement {
 
             int nbControlPort = dataNbControlPort.getHeight();
             for (int i = 0; i < nbControlPort; i++) {
-                final BasicPort port = new ControlPort(controller.createObject(Kind.PORT));
-                port.setId(new UID().toString());
+                final BasicPort port = new ControlPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, new UID().toString());
 
                 // do not use BasicPort#addPort() to avoid the view update
                 into.insert(port, baseIndex + i);
@@ -170,8 +169,7 @@ final class BlockModelElement extends BlockPartsElement {
 
             int nbCommandPort = dataNbCommandPort.getHeight();
             for (int i = 0; i < nbCommandPort; i++) {
-                final BasicPort port = new CommandPort(controller.createObject(Kind.PORT));
-                port.setId(new UID().toString());
+                final BasicPort port = new CommandPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, new UID().toString());
 
                 // do not use BasicPort#addPort() to avoid the view update
                 into.insert(port, baseIndex + i);
@@ -202,7 +200,7 @@ final class BlockModelElement extends BlockPartsElement {
         field++;
         if (data.get(field) instanceof ScilabMList) {
             try {
-                new DiagramElement(new JavaController()).decode((ScilabMList) data.get(field), new XcosDiagram(into.getUID(), into.getKind()));
+                new DiagramElement(controller).decode((ScilabMList) data.get(field), new XcosDiagram(controller, into.getUID(), into.getKind(), into.getId()));
             } catch (ScicosFormatException e) {}
         } else if (data.get(field) instanceof ScilabDouble ) {
             controller.setObjectProperty(into.getUID(), into.getKind(), ObjectProperties.RPAR, toVectorOfDouble((ScilabDouble) data.get(field)));
index 932c6ec..5fc5864 100644 (file)
@@ -130,7 +130,7 @@ public final class InputPortElement extends AbstractElement<InputPort> {
          * backward compatibility, use explicit as default.
          */
         if (graphics.size() <= GRAPHICS_INIMPL_INDEX) {
-            return new ExplicitInputPort(controller.createObject(Kind.PORT));
+            return new ExplicitInputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         }
         ScilabType inImpl = graphics.get(GRAPHICS_INIMPL_INDEX);
 
@@ -138,7 +138,7 @@ public final class InputPortElement extends AbstractElement<InputPort> {
          * backward compatibility, use explicit as default.
          */
         if (isEmptyField(inImpl)) {
-            return new ExplicitInputPort(controller.createObject(Kind.PORT));
+            return new ExplicitInputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         }
 
         final ScilabString inImplicit = (ScilabString) inImpl;
@@ -147,7 +147,7 @@ public final class InputPortElement extends AbstractElement<InputPort> {
          * backward compatibility, use explicit as default.
          */
         if (isEmptyField(inImplicit)) {
-            return new ExplicitInputPort(controller.createObject(Kind.PORT));
+            return new ExplicitInputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         }
 
         final boolean isColumnDominant = inImplicit.getHeight() >= inImplicit.getWidth();
@@ -161,12 +161,12 @@ public final class InputPortElement extends AbstractElement<InputPort> {
          * when the type is set, create a new port instance; create an explicit typed port otherwise.
          */
         if (isSet && inimpl[indexes[0]][indexes[1]].equals(EXPLICIT)) {
-            ret = new ExplicitInputPort(controller.createObject(Kind.PORT));
+            ret = new ExplicitInputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         } else if (isSet && inimpl[indexes[0]][indexes[1]].equals(IMPLICIT)) {
-            ret = new ImplicitInputPort(controller.createObject(Kind.PORT));
+            ret = new ImplicitInputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         } else {
             // when not specified, use explicit
-            ret = new ExplicitInputPort(controller.createObject(Kind.PORT));
+            ret = new ExplicitInputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         }
 
         return ret;
index 8ca6ef7..47c2676 100644 (file)
@@ -130,15 +130,16 @@ public final class LinkElement extends AbstractElement<BasicLink> {
         BasicLink link = null;
         final int type = (int) ((ScilabDouble) data.get(CT_INDEX)).getRealPart()[0][1];
 
+        String id = new UID().toString();
+
         try {
             Class<? extends BasicLink> klass = LinkPortMap.getLinkClass(type);
-            Constructor<? extends BasicLink> cstr = klass.getConstructor(Long.TYPE);
-            link = cstr.newInstance(controller.createObject(Kind.LINK));
+            Constructor<? extends BasicLink> cstr = klass.getConstructor(JavaController.class, Long.TYPE, Kind.class, Object.class, mxGeometry.class, String.class, String.class);
+            link = cstr.newInstance(controller, controller.createObject(Kind.LINK), Kind.LINK, null, null, null, id);
         } catch (ReflectiveOperationException e) {
             LOG.severe(e.toString());
         }
 
-        link.setId(new UID().toString());
         return link;
     }
 
index 1ead3aa..5271e03 100644 (file)
@@ -132,7 +132,7 @@ public final class OutputPortElement extends AbstractElement<OutputPort> {
          * backward compatibility, use explicit as default.
          */
         if (graphics.size() <= GRAPHICS_OUTIMPL_INDEX) {
-            return new ExplicitOutputPort(controller.createObject(Kind.PORT));
+            return new ExplicitOutputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         }
         ScilabType outImpl = graphics.get(GRAPHICS_OUTIMPL_INDEX);
 
@@ -140,7 +140,7 @@ public final class OutputPortElement extends AbstractElement<OutputPort> {
          * backward compatibility, use explicit as default.
          */
         if (isEmptyField(outImpl)) {
-            return new ExplicitOutputPort(controller.createObject(Kind.PORT));
+            return new ExplicitOutputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         }
 
         final ScilabString outImplicit = (ScilabString) outImpl;
@@ -149,7 +149,7 @@ public final class OutputPortElement extends AbstractElement<OutputPort> {
          * backward compatibility, use explicit as default.
          */
         if (isEmptyField(outImplicit)) {
-            return new ExplicitOutputPort(controller.createObject(Kind.PORT));
+            return new ExplicitOutputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         }
 
         final boolean isColumnDominant = outImplicit.getHeight() >= outImplicit.getWidth();
@@ -164,12 +164,12 @@ public final class OutputPortElement extends AbstractElement<OutputPort> {
          * typed port otherwise.
          */
         if (isSet && outimpl[indexes[0]][indexes[1]].equals(EXPLICIT)) {
-            ret = new ExplicitOutputPort(controller.createObject(Kind.PORT));
+            ret = new ExplicitOutputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         } else if (isSet && outimpl[indexes[0]][indexes[1]].equals(IMPLICIT)) {
-            ret = new ImplicitOutputPort(controller.createObject(Kind.PORT));
+            ret = new ImplicitOutputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         } else {
             // when not specified, use explicit
-            ret = new ExplicitOutputPort(controller.createObject(Kind.PORT));
+            ret = new ExplicitOutputPort(controller, controller.createObject(Kind.PORT), Kind.PORT, null, null, null);
         }
 
         return ret;
index 571d57e..b55f562 100644 (file)
@@ -53,7 +53,7 @@ public class RawDataWriter extends ScilabWriter {
             return;
         }
 
-        // reserve the size with null values
+        // reserve the size with empty values
         shared.dictionary.addAll(Collections.nCopies(dictionaryMap.size(), new ScilabDouble()));
 
         // push all the values
index 1ed6fa5..1b367e8 100644 (file)
@@ -54,20 +54,13 @@ public abstract class BasicLink extends XcosCell {
     private static final int DETECTION_RECTANGLE_DIMENSION = 10;
     private transient int ordering;
 
-    /**
-     * Default constructor
-     *
-     * @param style
-     *            The style to use for this link
-     */
-    public BasicLink(long uid, String style) {
-        super(uid, Kind.LINK);
-        setVertex(false);
-        setEdge(true);
-        setStyle(style + XcosOptions.getEdition().getEdgeStyle());
-
-        JavaController controller = new JavaController();
-        controller.setObjectProperty(getUID(), getKind(), ObjectProperties.KIND, getLinkKind());
+    public BasicLink(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id, int linkKind) {
+        super(controller, uid, kind, value, geometry, style == null ? XcosOptions.getEdition().getEdgeStyle() : style, id);
+
+        this.vertex = false;
+        this.edge = true;
+
+        controller.setObjectProperty(getUID(), getKind(), ObjectProperties.KIND, linkKind);
     }
 
     /**
index 5587fba..1fce150 100644 (file)
@@ -13,7 +13,9 @@
 
 package org.scilab.modules.xcos.link;
 
-import org.scilab.modules.xcos.link.BasicLink;
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 
 /**
  * An command control link connect an
@@ -27,9 +29,8 @@ public class CommandControlLink extends BasicLink {
     // -1 means activation link
     private static final double[][] COLOR_AND_TYPE = { { 5.0, -1.0 } };
 
-    /** Default constructor */
-    public CommandControlLink(long uid) {
-        super(uid, "CommandControlLink");
+    public CommandControlLink(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style == null || style.isEmpty() ? "CommandControlLink" : style, id, -1);
     }
 
     /** @return A red colored activation link identifier */
index 6fe19bc..1b8ec0d 100644 (file)
@@ -13,7 +13,9 @@
 
 package org.scilab.modules.xcos.link;
 
-import org.scilab.modules.xcos.link.BasicLink;
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 
 /**
  * An explicit link connect an
@@ -27,9 +29,8 @@ public class ExplicitLink extends BasicLink {
     // 1 means regular link
     private static final double[][] COLOR_AND_TYPE = { { 1.0, 1.0 } };
 
-    /** Default constructor */
-    public ExplicitLink(long uid) {
-        super(uid, "ExplicitLink");
+    public ExplicitLink(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style == null || style.isEmpty() ? "ExplicitLink" : style, id, 1);
     }
 
     /** @return A black colored explicit link identifier */
index 6a87d82..3431cfc 100644 (file)
@@ -13,7 +13,9 @@
 
 package org.scilab.modules.xcos.link;
 
-import org.scilab.modules.xcos.link.BasicLink;
+import com.mxgraph.model.mxGeometry;
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 
 /**
  * An implicit link connect an
@@ -28,8 +30,8 @@ public class ImplicitLink extends BasicLink {
     private static final double[][] COLOR_AND_TYPE = { { 1.0, 2.0 } };
 
     /** Default constructor */
-    public ImplicitLink(long uid) {
-        super(uid, "ImplicitLink");
+    public ImplicitLink(JavaController controller, long uid, Kind kind, Object value, mxGeometry geometry, String style, String id) {
+        super(controller, uid, kind, value, geometry, style == null || style.isEmpty() ? "ImplicitLink"  : style, id, 2);
     }
 
     /** @return A red colored implicit link identifier */
index 026bb3d..f5b675d 100644 (file)
@@ -509,7 +509,19 @@ public final class Palette {
             return;
         }
 
-        final BasicBlock block = new BasicBlock(uid);
+        JavaController controller = new JavaController();
+        Kind kind = controller.getKind(uid);
+
+        String[] strUID = new String[] { "" };
+        controller.getObjectProperty(uid, kind, ObjectProperties.UID, strUID);
+
+        String[] label = new String[] { "" };
+        controller.getObjectProperty(uid, kind, ObjectProperties.LABEL, label);
+
+        String[] style = new String[] { "" };
+        controller.getObjectProperty(uid, kind, ObjectProperties.STYLE, style);
+
+        final BasicBlock block = new BasicBlock(new JavaController(), uid, kind, label[0], null, style[0], strUID[0]);
         generateIcon(block, iconPath);
 
         if (LOG.isLoggable(Level.FINEST)) {
@@ -526,7 +538,7 @@ public final class Palette {
 
         JavaController controller = new JavaController();
 
-        final XcosDiagram graph = new XcosDiagram(controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM);
+        final XcosDiagram graph = new XcosDiagram(controller, controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM, "");
         graph.installListeners();
 
         graph.addCell(block);
index e4aed82..aa4e12f 100644 (file)
@@ -55,7 +55,7 @@ public final class PaletteBlockCtrl {
     public static final XcosDiagram INTERNAL_GRAPH;
     static {
         JavaController controller = new JavaController();
-        INTERNAL_GRAPH = new XcosDiagram(controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM);
+        INTERNAL_GRAPH = new XcosDiagram(controller, controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM, "");
         INTERNAL_GRAPH.installListeners();
     }
 
index d832597..9d4b13b 100644 (file)
@@ -119,18 +119,14 @@ public abstract class BasicPort extends XcosCell {
      * @param style
      *            Value to be set as a Style and as TypeName
      */
-    public BasicPort(long uid, String style, Orientation orientation) {
-        super(uid, Kind.PORT);
+    public BasicPort(final JavaController controller, long uid, Kind kind, Object value, String style, String id, Orientation orientation, boolean isImplicit, PortKind portKind) {
+        super(controller, uid, kind, value, new mxGeometry(0, 0, DEFAULT_PORTSIZE, DEFAULT_PORTSIZE), style, id);
 
-        setVertex(true);
-        setStyle(style);
-        setGeometry(new mxGeometry(0, 0, DEFAULT_PORTSIZE, DEFAULT_PORTSIZE));
-        setOrientation(orientation);
+        this.vertex = true;
 
-        boolean isImplicit = getType() == Type.IMPLICIT;
-        JavaController controller = new JavaController();
+        setOrientation(orientation);
         controller.setObjectProperty(uid, Kind.PORT, ObjectProperties.IMPLICIT, isImplicit);
-        controller.setObjectProperty(uid, Kind.PORT, ObjectProperties.PORT_KIND, getPortKind().ordinal());
+        controller.setObjectProperty(uid, Kind.PORT, ObjectProperties.PORT_KIND, portKind.ordinal());
     }
 
     /**
index 5c097a3..7ae88e3 100644 (file)
 
 package org.scilab.modules.xcos.port;
 
-import java.util.NoSuchElementException;
-
+import com.mxgraph.util.mxConstants;
 import org.scilab.modules.xcos.port.command.CommandPort;
 import org.scilab.modules.xcos.port.output.OutputPort;
 
-import com.mxgraph.util.mxConstants;
-
 /**
  * Represent a port orientation related to the associated block. These
  * orientation semantics are valid when there is no rotation/mirror/flip applied
@@ -105,7 +102,7 @@ public enum Orientation {
                 break;
 
             default:
-                throw new NoSuchElementException();
+                break;
         }
 
         /* Calculate angle */
index c434374..50305e4 100644 (file)
@@ -13,6 +13,8 @@
 
 package org.scilab.modules.xcos.port.command;
 
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.PortKind;
 import org.scilab.modules.xcos.port.BasicPort;
 import org.scilab.modules.xcos.port.Orientation;
@@ -30,8 +32,8 @@ public class CommandPort extends BasicPort {
     private static final long serialVersionUID = 0L;
 
     /** Default constructor */
-    public CommandPort(long uid) {
-        super(uid, "CommandPort", Orientation.SOUTH);
+    public CommandPort(JavaController controller, long uid, Kind kind, Object value, String style, String id) {
+        super(controller, uid, kind, value, style == null || style.isEmpty() ? "CommandPort" : style, id, Orientation.SOUTH, false, PortKind.PORT_EOUT);
     }
 
     @Override
index 69c52c3..20f838e 100644 (file)
@@ -13,6 +13,8 @@
 
 package org.scilab.modules.xcos.port.control;
 
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.PortKind;
 import org.scilab.modules.xcos.port.BasicPort;
 import org.scilab.modules.xcos.port.Orientation;
@@ -30,8 +32,8 @@ public class ControlPort extends BasicPort {
     private static final long serialVersionUID = -7919292589336989591L;
 
     /** Default constructor */
-    public ControlPort(long uid) {
-        super(uid, "ControlPort", Orientation.NORTH);
+    public ControlPort(JavaController controller, long uid, Kind kind, Object value, String style, String id) {
+        super(controller, uid, kind, value, style == null || style.isEmpty() ? "ControlPort" : style, id, Orientation.NORTH, false, PortKind.PORT_EIN);
     }
 
     /**
index f5453e9..19d783b 100644 (file)
@@ -13,6 +13,9 @@
 
 package org.scilab.modules.xcos.port.input;
 
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+
 /**
  * An explicit output port is a port where the transfer of information has a
  * 'IN' direction.
@@ -22,8 +25,8 @@ public class ExplicitInputPort extends InputPort {
     private static final long serialVersionUID = 3389508566614965375L;
 
     /** Default constructor */
-    public ExplicitInputPort(long uid) {
-        super(uid, "ExplicitInputPort");
+    public ExplicitInputPort(JavaController controller, long uid, Kind kind, Object value, String style, String id) {
+        super(controller, uid, kind, value, style == null || style.isEmpty() ? "ExplicitInputPort" : style, id, false);
     }
 
     /** @return always Type.EXPLICIT */
index 7c340fa..6d556e3 100644 (file)
@@ -13,6 +13,9 @@
 
 package org.scilab.modules.xcos.port.input;
 
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+
 /**
  * An implicit output port is a port where the output characteristic does not
  * imply the transfer of information in an a priori known direction (Output and
@@ -27,8 +30,8 @@ public class ImplicitInputPort extends InputPort {
     private static final long serialVersionUID = 8711291857895989304L;
 
     /** Default constructor */
-    public ImplicitInputPort(long uid) {
-        super(uid, "ImplicitInputPort");
+    public ImplicitInputPort(JavaController controller, long uid, Kind kind, Object value, String style, String id) {
+        super(controller, uid, kind, value, style == null || style.isEmpty() ? "ImplicitInputPort" : style, id, true);
     }
 
     /** @return always Type.IMPLICIT */
index fccb27c..93fd516 100644 (file)
@@ -13,6 +13,8 @@
 
 package org.scilab.modules.xcos.port.input;
 
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.PortKind;
 import org.scilab.modules.xcos.port.BasicPort;
 import org.scilab.modules.xcos.port.Orientation;
@@ -29,13 +31,9 @@ public abstract class InputPort extends BasicPort {
 
     /**
      * Default constructor
-     *
-     * @param type
-     *            The string port name ("ExplicitInputPort" or
-     *            "ImplicitInputPort")
      */
-    protected InputPort(long uid, String style) {
-        super(uid, style, Orientation.WEST);
+    public InputPort(JavaController controller, long uid, Kind kind, Object value, String style, String id, boolean isImplicit) {
+        super(controller, uid, kind, value, style, id, Orientation.WEST, isImplicit, PortKind.PORT_IN);
     }
 
     @Override
index 712a8dd..8fe76fb 100644 (file)
@@ -13,6 +13,9 @@
 
 package org.scilab.modules.xcos.port.output;
 
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+
 /**
  * An explicit output port is a port where the transfer of information has a
  * 'OUT' direction.
@@ -21,9 +24,8 @@ public class ExplicitOutputPort extends OutputPort {
 
     private static final long serialVersionUID = -8199491929829046860L;
 
-    /** Default constructor */
-    public ExplicitOutputPort(long uid) {
-        super(uid, "ExplicitOutputPort");
+    public ExplicitOutputPort(JavaController controller, long uid, Kind kind, Object value, String style, String id) {
+        super(controller, uid, kind, value, style == null || style.isEmpty() ? "ExplicitOutputPort" : style, id, false);
     }
 
     /**
index b796ef2..3552217 100644 (file)
@@ -13,6 +13,9 @@
 
 package org.scilab.modules.xcos.port.output;
 
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
+
 /**
  * An implicit output port is a port where the input characteristic does not
  * imply the transfer of information in an a priori known direction (Output and
@@ -27,8 +30,8 @@ public class ImplicitOutputPort extends OutputPort {
     private static final long serialVersionUID = 4210196486062437007L;
 
     /** Default constructor */
-    public ImplicitOutputPort(long uid) {
-        super(uid, "ImplicitOutputPort");
+    public ImplicitOutputPort(JavaController controller, long uid, Kind kind, Object value, String style, String id) {
+        super(controller, uid, kind, value, style == null || style.isEmpty() ? "ImplicitOutputPort" : style, id, true);
     }
 
     /** @return always Type.IMPLICIT */
index 803a52d..bf82596 100644 (file)
@@ -13,6 +13,8 @@
 
 package org.scilab.modules.xcos.port.output;
 
+import org.scilab.modules.xcos.JavaController;
+import org.scilab.modules.xcos.Kind;
 import org.scilab.modules.xcos.PortKind;
 import org.scilab.modules.xcos.port.BasicPort;
 import org.scilab.modules.xcos.port.Orientation;
@@ -29,13 +31,9 @@ public abstract class OutputPort extends BasicPort {
 
     /**
      * Default constructor
-     *
-     * @param type
-     *            The string port name ("ExplicitOutputPort" or
-     *            "ImplicitOutputPort")
      */
-    public OutputPort(long uid, String style) {
-        super(uid, style, Orientation.EAST);
+    public OutputPort(JavaController controller, long uid, Kind kind, Object value, String style, String id, boolean isImplicit) {
+        super(controller, uid, kind, value, style, id, Orientation.EAST, isImplicit, PortKind.PORT_OUT);
     }
 
     @Override
index f0167d3..f051858 100644 (file)
@@ -50,7 +50,7 @@ public class XcosDelegates {
     public static final void convertToPNG(final String helpID, final String xcosFile, final File imageFile, final String imageName) throws Exception {
         JavaController controller = new JavaController();
 
-        final XcosDiagram diag = new XcosDiagram(controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM);
+        final XcosDiagram diag = new XcosDiagram(controller, controller.createObject(Kind.DIAGRAM), Kind.DIAGRAM, "");
         diag.installListeners();
 
         final XcosFileType filetype = XcosFileType.findFileType(xcosFile);