X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.interop.diagram%2Fsrc%2Forg%2Fsimantics%2Finterop%2Fdiagram%2FDiagram.java;h=365cde242a5e1bea827e1fcdd8ce3612cccd6bfd;hb=a93da57d733f096747647e5ebf1e0b2578417ac3;hp=5695798e65946d0ffaa59918053f81dbfa933eb7;hpb=3dddcb9694df9a9da950b625345ba218344b9a37;p=simantics%2Finterop.git diff --git a/org.simantics.interop.diagram/src/org/simantics/interop/diagram/Diagram.java b/org.simantics.interop.diagram/src/org/simantics/interop/diagram/Diagram.java index 5695798..365cde2 100644 --- a/org.simantics.interop.diagram/src/org/simantics/interop/diagram/Diagram.java +++ b/org.simantics.interop.diagram/src/org/simantics/interop/diagram/Diagram.java @@ -123,6 +123,8 @@ public abstract class Diagram { Resource model = DiagramUtils.getModel(graph, res); Resource configuration = DiagramUtils.getConfiguration(graph, model); Set names = new HashSet(); + if (configuration == null) + return names; Collection composites = getAllComposites(graph, configuration); for (Resource composite : composites) { names.addAll(getAllModuleNamesForComposite(graph, composite)); @@ -196,6 +198,7 @@ public abstract class Diagram { 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 { // 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 { public Diagram 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 { + + /** * Returns diagram type from composite type * @param g @@ -282,7 +294,7 @@ public abstract class Diagram { * @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 diagramTemplates = g.getAssertedObjects(compositeType, m.HasModelingTemplate); for (Resource diagramTemplate : diagramTemplates) { @@ -397,8 +409,13 @@ public abstract class Diagram { 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); }