]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/SCLDependencyChangeListener.java
Add support for dependency changes in SCL
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / scl / SCLDependencyChangeListener.java
diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/scl/SCLDependencyChangeListener.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/scl/SCLDependencyChangeListener.java
new file mode 100644 (file)
index 0000000..5e043d4
--- /dev/null
@@ -0,0 +1,40 @@
+package org.simantics.modeling.scl;
+
+import org.simantics.Simantics;
+import org.simantics.db.MetadataI;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.common.changeset.GenericChangeListener;
+import org.simantics.db.event.ChangeListener;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.genericrelation.DependenciesRelation.DependencyChangesRequest;
+import org.simantics.db.layer0.genericrelation.DependencyChanges;
+import org.simantics.scl.runtime.function.Function;
+import org.simantics.scl.runtime.function.Function1;
+import org.simantics.scl.runtime.tuple.Tuple0;
+
+public class SCLDependencyChangeListener extends GenericChangeListener<DependencyChangesRequest, DependencyChanges> {
+
+    private Function1<Tuple0, Boolean> preEventRequest;
+    private Function onEvent;
+
+    public SCLDependencyChangeListener(Function1<Tuple0, Boolean> preEventRequest, Function onEvent) {
+        this.preEventRequest = preEventRequest;
+        this.onEvent = onEvent;
+    }
+
+    @Override
+    public boolean preEventRequest() {
+        return preEventRequest.apply(Tuple0.INSTANCE);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void onEvent(ReadGraph graph, MetadataI metadata, DependencyChanges event) throws DatabaseException {
+        Simantics.applySCLRead(graph, onEvent, metadata, event);
+    }
+
+    public static ChangeListener create(Function1<Tuple0, Boolean> preEventRequest, Function onEvent) {
+        return new SCLDependencyChangeListener(preEventRequest, onEvent);
+    }
+
+}
\ No newline at end of file