X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2FModelingUtils.java;h=e0551eb3e76df1a7193d6e0f4ffcbd85b0715173;hb=refs%2Fchanges%2F13%2F913%2F3;hp=81505e0bc89863a8594cc6dc31e8fc874d6229ab;hpb=e030dd5359ab50cf88fc891af61b6cf43c01f86f;p=simantics%2Fplatform.git 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);