]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.diagram/src/org/simantics/interop/diagram/Diagram.java
Support for element connections.
[simantics/interop.git] / org.simantics.interop.diagram / src / org / simantics / interop / diagram / Diagram.java
index d7f0631e034c53fdf81d5087ffcf604b67461d68..365cde242a5e1bea827e1fcdd8ce3612cccd6bfd 100644 (file)
@@ -250,12 +250,19 @@ public abstract class Diagram<T extends Symbol> {
        public Diagram<T> fromExisting(ReadGraph g, Resource diagram) throws DatabaseException {
                ModelingResources m = ModelingResources.getInstance(g);
                StructuralResource2 s = StructuralResource2.getInstance(g);
+               DiagramResource d = DiagramResource.getInstance(g);
                Resource composite = null;
                if (g.isInstanceOf(diagram, s.Composite)) {
                        composite = diagram;
                        diagram = g.getPossibleObject(composite, m.CompositeToDiagram);
                        if (diagram == null)
                                return null;
+               } else if (g.isInheritedFrom(diagram, d.DefinedElement)) {
+                       // TODO : Defined Element behaves differently to regular configuration diagrams; should we have separate implementation?
+                       composite = diagram;
+                       diagram = g.getPossibleObject(composite, s.IsDefinedBy);
+                       if (diagram == null)
+                               return null;
                } else {
                        composite = g.getPossibleObject(diagram, m.DiagramToComposite);
                        if (composite == null)
@@ -276,6 +283,8 @@ public abstract class Diagram<T extends Symbol> {
        
        
        
+       
+       
        /**
         * Returns diagram type from composite type
         * @param g
@@ -400,8 +409,13 @@ public abstract class Diagram<T extends Symbol> {
        public T getSymbol(ReadGraph g, Resource element) throws DatabaseException {
                ModelingResources mr = ModelingResources.getInstance(g);
                DiagramResource dr = DiagramResource.getInstance(g);
+               StructuralResource2 s = StructuralResource2.getInstance(g);
                if (g.isInstanceOf(element, dr.Element))
                        return getSymbol(g, element, g.getPossibleObject(element, mr.ElementToComponent));
+               else if (g.isSubrelationOf(element, s.IsConnectedTo)) {
+                       // TODO : Defined Element
+                       return getSymbol(g, g.getSingleObject(element, dr.HasConnectionPoint_Inverse),element);
+               }
                else
                        return getSymbol(g, g.getSingleObject(element, mr.ComponentToElement), element);
        }