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;
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;
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;
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;
}
+ 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<DependencyChangesRequest, DependencyChanges> {
+
+ 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);