From 1ace215e82ee630279b6db4984c1f8c7a48e9a8b Mon Sep 17 00:00:00 2001 From: Antti Villberg Date: Mon, 4 Sep 2017 20:08:18 +0300 Subject: [PATCH] Publish OntologicalRequirementTracker as LifeCycleProcess refs #7462 Change-Id: Id29b225c3e7556a3afc5c4df54ed3a87a48c7908 --- .../graph/Modeling.pgraph | 8 ++++ .../scl/Simantics/Misc.scl | 2 + .../org/simantics/modeling/ModelingUtils.java | 48 +++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/bundles/org.simantics.modeling.ontology/graph/Modeling.pgraph b/bundles/org.simantics.modeling.ontology/graph/Modeling.pgraph index 2d3c38d65..a45e7419c 100644 --- a/bundles/org.simantics.modeling.ontology/graph/Modeling.pgraph +++ b/bundles/org.simantics.modeling.ontology/graph/Modeling.pgraph @@ -496,6 +496,14 @@ MOD.DependencyTrackingProcess : MOD.LifeCycleProcess "LifeCycleContext -> ()" +MOD.OntologicalRequirementTracker trackOntologicalRequirements""" + "LifeCycleContext -> ()" + @MOD.sclAssertion MOD.LifeCycleProcess.unload + """\x -> untrackOntologicalRequirements""" + "LifeCycleContext -> ()" + MOD.EditorContribution MOD.EditorContribution.canHandle ==> "Resource -> Boolean" MOD.EditorContribution.editorId --> L0.String () untrackDependencies :: () + trackOntologicalRequirements :: () + untrackOntologicalRequirements :: () \ No newline at end of file diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/ModelingUtils.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/ModelingUtils.java index 81505e0bc..e0551eb3e 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/ModelingUtils.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/ModelingUtils.java @@ -61,13 +61,17 @@ import org.simantics.databoard.serialization.SerializationException; import org.simantics.databoard.type.Datatype; import org.simantics.databoard.util.URIStringUtils; import org.simantics.datatypes.literal.GUID; +import org.simantics.db.MetadataI; import org.simantics.db.ReadGraph; import org.simantics.db.RequestProcessor; import org.simantics.db.Resource; +import org.simantics.db.Session; import org.simantics.db.Statement; import org.simantics.db.WriteGraph; +import org.simantics.db.common.Indexing; import org.simantics.db.common.NamedResource; import org.simantics.db.common.QueryMemoryWatcher; +import org.simantics.db.common.changeset.GenericChangeListener; import org.simantics.db.common.primitiverequest.IsInstanceOf; import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener; import org.simantics.db.common.procedure.adapter.TransientCacheListener; @@ -93,6 +97,8 @@ import org.simantics.db.layer0.adapter.Instances; import org.simantics.db.layer0.adapter.impl.DefaultPasteImportAdvisor; import org.simantics.db.layer0.adapter.impl.EntityInstances.QueryIndex; import org.simantics.db.layer0.adapter.impl.ImportAdvisorFactory; +import org.simantics.db.layer0.genericrelation.DependenciesRelation.DependencyChangesRequest; +import org.simantics.db.layer0.genericrelation.DependencyChanges; import org.simantics.db.layer0.genericrelation.IndexedRelations; import org.simantics.db.layer0.migration.MigrationUtils; import org.simantics.db.layer0.request.ActivateModel; @@ -117,6 +123,7 @@ import org.simantics.db.layer0.variable.Variables; import org.simantics.db.request.Read; import org.simantics.db.service.ClusterControl; import org.simantics.db.service.CollectionSupport; +import org.simantics.db.service.GraphChangeListenerSupport; import org.simantics.db.service.QueryControl; import org.simantics.db.service.VirtualGraphSupport; import org.simantics.diagram.stubs.DiagramResource; @@ -139,6 +146,7 @@ import org.simantics.layer0.Layer0; import org.simantics.layer0.utils.direct.GraphUtils; import org.simantics.modeling.adapters.ChangeInformation; import org.simantics.modeling.template2d.ontology.Template2dResource; +import org.simantics.modeling.utils.OntologicalRequirementTracker; import org.simantics.operation.Layer0X; import org.simantics.project.ontology.ProjectResource; import org.simantics.scenegraph.profile.ProfileUtils; @@ -631,6 +639,46 @@ public class ModelingUtils { } + public static void trackOntologicalRequirements() { + Session session = Simantics.getSession(); + GraphChangeListenerSupport changeListenerSupport = session.getService(GraphChangeListenerSupport.class); + changeListenerSupport.addMetadataListener( OntologicalRequirementListener.getInstance() ); + } + + public static void untrackOntologicalRequirements() { + Session session = Simantics.getSession(); + GraphChangeListenerSupport changeListenerSupport = session.getService(GraphChangeListenerSupport.class); + changeListenerSupport.removeMetadataListener( OntologicalRequirementListener.getInstance() ); + } + + public static class OntologicalRequirementListener extends GenericChangeListener { + + private static OntologicalRequirementListener INSTANCE; + + public static OntologicalRequirementListener getInstance() { + if(INSTANCE == null) { + INSTANCE = new OntologicalRequirementListener(); + } + return INSTANCE; + } + + private OntologicalRequirementListener() { + } + + private OntologicalRequirementTracker changeInformationUpdater = new OntologicalRequirementTracker(); + + @Override + public boolean preEventRequest() { + return !Indexing.isDependenciesIndexingDisabled(); + } + + @Override + public void onEvent(ReadGraph graph, MetadataI metadata, DependencyChanges event) throws DatabaseException { + changeInformationUpdater.update(graph, metadata, event); + } + + } + public static void removeIndex(WriteGraph graph, Resource model) throws DatabaseException { Layer0X L0X = Layer0X.getInstance(graph); IndexedRelations ir = graph.getService(IndexedRelations.class); -- 2.43.2