package org.simantics.modeling.scl; import org.simantics.Simantics; import org.simantics.db.MetadataI; import org.simantics.db.ReadGraph; import org.simantics.db.common.Indexing; 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 { private Function1 preEventRequest; private Function onEvent; public SCLDependencyChangeListener(Function1 preEventRequest, Function onEvent) { this.preEventRequest = preEventRequest; this.onEvent = onEvent; } @Override public boolean preEventRequest() { if(Indexing.isDependenciesIndexingDisabled()) return false; 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 preEventRequest, Function onEvent) { return new SCLDependencyChangeListener(preEventRequest, onEvent); } }