Xcos GUI: fix create a link from another link 86/17486/1
Clément DAVID [Fri, 20 Nov 2015 16:51:36 +0000 (17:51 +0100)]
The `linkKlass.newInstance()` method is not visible anymore on Xcos 6. We
have to create an MVC ID and then pass it to the constructor.

Change-Id: I1a0b07e63bb2cea4d2238a408cb346ed8742763d

scilab/modules/xcos/src/java/org/scilab/modules/xcos/graph/XcosDiagram.java

index dc5bd0a..e1c9fa9 100644 (file)
@@ -109,6 +109,7 @@ import com.mxgraph.util.mxUndoableEdit;
 import com.mxgraph.util.mxUndoableEdit.mxUndoableChange;
 import com.mxgraph.view.mxGraphSelectionModel;
 import com.mxgraph.view.mxMultiplicity;
+import java.lang.reflect.Constructor;
 
 /**
  * The base class for a diagram. This class contains jgraphx + Scicos data.
@@ -641,12 +642,12 @@ public class XcosDiagram extends ScilabGraph {
     @Override
     public Object createEdge(Object parent, String id, Object value, Object source, Object target, String style) {
         Object ret = null;
+        JavaController controller = new JavaController();
 
         if (source instanceof BasicPort) {
             BasicPort src = (BasicPort) source;
             BasicLink link = null;
 
-            JavaController controller = new JavaController();
             long uid = controller.createObject(Kind.LINK);
             if (src.getType() == Type.EXPLICIT) {
                 link = new ExplicitLink(uid);
@@ -667,14 +668,13 @@ public class XcosDiagram extends ScilabGraph {
             BasicLink link = null;
 
             try {
-                link = src.getClass().newInstance();
+                Class<? extends BasicLink> klass = src.getClass();
+                Constructor<? extends BasicLink> cstr = klass.getConstructor(Long.TYPE);
+                link = cstr.newInstance(controller.createObject(Kind.LINK));
 
                 // allocate the associated geometry
                 link.setGeometry(new mxGeometry());
-
-            } catch (InstantiationException e) {
-                LOG.severe(e.toString());
-            } catch (IllegalAccessException e) {
+            } catch (ReflectiveOperationException e) {
                 LOG.severe(e.toString());
             }