]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/SCLDependencyChangeListener.java
Obey Indexing.isDependenciesIndexingDisabled
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / scl / SCLDependencyChangeListener.java
1 package org.simantics.modeling.scl;
2
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;
15
16 public class SCLDependencyChangeListener extends GenericChangeListener<DependencyChangesRequest, DependencyChanges> {
17
18     private Function1<Tuple0, Boolean> preEventRequest;
19     private Function onEvent;
20
21     public SCLDependencyChangeListener(Function1<Tuple0, Boolean> preEventRequest, Function onEvent) {
22         this.preEventRequest = preEventRequest;
23         this.onEvent = onEvent;
24     }
25
26     @Override
27     public boolean preEventRequest() {
28         if(Indexing.isDependenciesIndexingDisabled()) return false;
29         return preEventRequest.apply(Tuple0.INSTANCE);
30     }
31
32     @SuppressWarnings("unchecked")
33     @Override
34     public void onEvent(ReadGraph graph, MetadataI metadata, DependencyChanges event) throws DatabaseException {
35         Simantics.applySCLRead(graph, onEvent, metadata, event);
36     }
37
38     public static ChangeListener create(Function1<Tuple0, Boolean> preEventRequest, Function onEvent) {
39         return new SCLDependencyChangeListener(preEventRequest, onEvent);
40     }
41
42 }