X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fprofile%2FProfiles.java;h=0246143d24dccd590583e299980c54fc20979a43;hp=9baa067f783294da74d63c8ba02c5e339230e277;hb=7684baeb8bc7963700676af20db6f4a860581e46;hpb=091591094efd9ad65f51f3cc64616ed0c167a1ab diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/Profiles.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/Profiles.java index 9baa067f7..0246143d2 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/Profiles.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/profile/Profiles.java @@ -15,17 +15,28 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; +import org.simantics.db.WriteOnlyGraph; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.common.utils.ListUtils; import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.impl.DefaultCopyHandler; +import org.simantics.db.layer0.adapter.impl.DefaultPasteImportAdvisor; +import org.simantics.db.layer0.util.ClipboardUtils; +import org.simantics.db.layer0.util.SimanticsClipboard; +import org.simantics.db.layer0.util.SimanticsClipboardImpl; +import org.simantics.db.layer0.util.SimanticsKeys; import org.simantics.db.layer0.variable.Variable; import org.simantics.db.service.VirtualGraphSupport; import org.simantics.diagram.stubs.DiagramResource; +import org.simantics.graph.db.TransferableGraphs; +import org.simantics.graph.representation.Root; +import org.simantics.graph.representation.TransferableGraph1; import org.simantics.layer0.Layer0; import org.simantics.modeling.ModelingResources; import org.simantics.simulation.ontology.SimulationResource; @@ -201,7 +212,6 @@ public class Profiles { for (Resource r : enabled) { graph.claim(p, SIM.IsActive, r); } - } }); } @@ -255,6 +265,35 @@ public class Profiles { Double priority = graph.getPossibleRelatedValue(entry, DIA.ProfileEntry_HasPriority, Bindings.DOUBLE); if (priority != null) { graph.claimLiteral(instance, DIA.ProfileEntry_HasPriority, priority, Bindings.DOUBLE); + } + for (Resource template : graph.getObjects(entry, DIA.HasTemplate)) { + SimanticsClipboardImpl builder = new SimanticsClipboardImpl(); + DefaultCopyHandler handler = new DefaultCopyHandler(template); + DefaultPasteImportAdvisor advisor = new DefaultPasteImportAdvisor(instance) { + @Override + public Resource createRoot(WriteOnlyGraph graph, Root root, Resource resource) + throws DatabaseException { + Layer0 l0 = graph.getService(Layer0.class); + DiagramResource DIA = graph.getService(DiagramResource.class); + + if(resource == null) resource = graph.newResource(); + + graph.claim(library, DIA.HasTemplate, DIA.HasTemplate_Inverse, resource); + + String newName = getName(root); + graph.addLiteral(resource, l0.HasName, l0.NameOf, l0.String, newName, Bindings.STRING); + + addRootInfo(root, newName, resource); + + return resource; + } + }; + handler.copyToClipboard(graph, builder); + for(Set object : builder.getContents()) { + TransferableGraph1 tg = ClipboardUtils.accept(graph, object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH); + TransferableGraphs.importGraph1(graph, tg, advisor); + } + } return instance; }