1 package org.simantics.modeling.scl;
3 import org.simantics.Simantics;
4 import org.simantics.db.MetadataI;
5 import org.simantics.db.ReadGraph;
6 import org.simantics.db.common.Indexing;
7 import org.simantics.db.common.changeset.GenericChangeListener;
8 import org.simantics.db.event.ChangeListener;
9 import org.simantics.db.exception.DatabaseException;
10 import org.simantics.db.layer0.genericrelation.DependenciesRelation.DependencyChangesRequest;
11 import org.simantics.db.layer0.genericrelation.DependencyChanges;
12 import org.simantics.scl.runtime.function.Function;
13 import org.simantics.scl.runtime.function.Function1;
14 import org.simantics.scl.runtime.tuple.Tuple0;
16 public class SCLDependencyChangeListener extends GenericChangeListener<DependencyChangesRequest, DependencyChanges> {
18 private Function1<Tuple0, Boolean> preEventRequest;
19 private Function onEvent;
21 public SCLDependencyChangeListener(Function1<Tuple0, Boolean> preEventRequest, Function onEvent) {
22 this.preEventRequest = preEventRequest;
23 this.onEvent = onEvent;
27 public boolean preEventRequest() {
28 if(Indexing.isDependenciesIndexingDisabled()) return false;
29 return preEventRequest.apply(Tuple0.INSTANCE);
32 @SuppressWarnings("unchecked")
34 public void onEvent(ReadGraph graph, MetadataI metadata, DependencyChanges event) throws DatabaseException {
35 Simantics.applySCLRead(graph, onEvent, metadata, event);
38 public static ChangeListener create(Function1<Tuple0, Boolean> preEventRequest, Function onEvent) {
39 return new SCLDependencyChangeListener(preEventRequest, onEvent);