]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/SCLDependencyChangeListener.java
5e043d4a14c6c79554fd75f093802f83a2c2fa32
[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.changeset.GenericChangeListener;
7 import org.simantics.db.event.ChangeListener;
8 import org.simantics.db.exception.DatabaseException;
9 import org.simantics.db.layer0.genericrelation.DependenciesRelation.DependencyChangesRequest;
10 import org.simantics.db.layer0.genericrelation.DependencyChanges;
11 import org.simantics.scl.runtime.function.Function;
12 import org.simantics.scl.runtime.function.Function1;
13 import org.simantics.scl.runtime.tuple.Tuple0;
14
15 public class SCLDependencyChangeListener extends GenericChangeListener<DependencyChangesRequest, DependencyChanges> {
16
17     private Function1<Tuple0, Boolean> preEventRequest;
18     private Function onEvent;
19
20     public SCLDependencyChangeListener(Function1<Tuple0, Boolean> preEventRequest, Function onEvent) {
21         this.preEventRequest = preEventRequest;
22         this.onEvent = onEvent;
23     }
24
25     @Override
26     public boolean preEventRequest() {
27         return preEventRequest.apply(Tuple0.INSTANCE);
28     }
29
30     @SuppressWarnings("unchecked")
31     @Override
32     public void onEvent(ReadGraph graph, MetadataI metadata, DependencyChanges event) throws DatabaseException {
33         Simantics.applySCLRead(graph, onEvent, metadata, event);
34     }
35
36     public static ChangeListener create(Function1<Tuple0, Boolean> preEventRequest, Function onEvent) {
37         return new SCLDependencyChangeListener(preEventRequest, onEvent);
38     }
39
40 }