]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.diagram/src/org/simantics/interop/diagram/Diagram.java
Diagram API fixes.
[simantics/interop.git] / org.simantics.interop.diagram / src / org / simantics / interop / diagram / Diagram.java
index 5695798e65946d0ffaa59918053f81dbfa933eb7..365cde242a5e1bea827e1fcdd8ce3612cccd6bfd 100644 (file)
@@ -123,6 +123,8 @@ public abstract class Diagram<T extends Symbol> {
                Resource model = DiagramUtils.getModel(graph, res);
                Resource configuration = DiagramUtils.getConfiguration(graph, model);
                Set<String> names = new HashSet<String>();
+               if (configuration == null)
+                       return names;
                Collection<Resource> composites = getAllComposites(graph, configuration);
                for (Resource composite : composites) {
                        names.addAll(getAllModuleNamesForComposite(graph, composite));
@@ -196,6 +198,7 @@ public abstract class Diagram<T extends Symbol> {
                Layer0 l0 = Layer0.getInstance(g);
                Layer0X l0x = Layer0X.getInstance(g);
                ModelingResources m = ModelingResources.getInstance(g);
+               DiagramResource dia = DiagramResource.getInstance(g);
                
                // create composite
                Resource composite = g.newResource();
@@ -230,7 +233,7 @@ public abstract class Diagram<T extends Symbol> {
         // This would cause problems because a diagram is a structural composite/component also.
         g.claimLiteral(diagram, l0.HasName, name, Bindings.STRING);
         Resource container = g.newResource();
-        g.claim(container, l0.InstanceOf, null, l0.Library);
+        g.claim(container, l0.InstanceOf, null, dia.DiagramContainer);
         g.addLiteral(container, l0.HasName, l0.NameOf, l0.String, "__CONTAINER__", Bindings.STRING);
         g.claim(container, l0.ConsistsOf, diagram);
         g.claim(composite, l0.ConsistsOf, container);
@@ -247,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)
@@ -273,6 +283,8 @@ public abstract class Diagram<T extends Symbol> {
        
        
        
+       
+       
        /**
         * Returns diagram type from composite type
         * @param g
@@ -282,7 +294,7 @@ public abstract class Diagram<T extends Symbol> {
         * @throws ManyObjectsForFunctionalRelationException
         * @throws ServiceException
         */
-       private static Resource getDiagramFromComposite(ReadGraph g, Resource compositeType) throws DatabaseException {
+       public Resource getDiagramFromComposite(ReadGraph g, Resource compositeType) throws DatabaseException {
                ModelingResources m  = ModelingResources.getInstance(g);
                Collection<Resource> diagramTemplates = g.getAssertedObjects(compositeType, m.HasModelingTemplate);
                for (Resource diagramTemplate : diagramTemplates) {
@@ -397,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);
        }