This forces the user of the adapter to still handle the life-cycle of
the listener, which should never be neglected.
refs #7581
Change-Id: I1a54b3f130dfe5f82fcdf01eb799ac96b31e7636
12 files changed:
import org.simantics.db.AsyncReadGraph;
import org.simantics.db.procedure.AsyncListener;
import org.simantics.db.AsyncReadGraph;
import org.simantics.db.procedure.AsyncListener;
-public class AsyncListenerAdapter<T> implements AsyncListener<T> {
+public abstract class AsyncListenerAdapter<T> implements AsyncListener<T> {
@Override
public void exception(AsyncReadGraph graph, Throwable t) {
@Override
public void exception(AsyncReadGraph graph, Throwable t) {
- public boolean isDisposed() {
- return false;
- }
+ public abstract boolean isDisposed();
import org.simantics.db.procedure.Listener;
import org.simantics.db.procedure.Listener;
-public class ListenerAdapter<T> implements Listener<T> {
+public abstract class ListenerAdapter<T> implements Listener<T> {
@Override
public void exception(Throwable t) {
@Override
public void exception(Throwable t) {
- public boolean isDisposed() {
- return false;
- }
+ public abstract boolean isDisposed();
import org.simantics.db.ReadGraph;
import org.simantics.db.procedure.SyncListener;
import org.simantics.db.ReadGraph;
import org.simantics.db.procedure.SyncListener;
-public class SyncListenerAdapter<T> implements SyncListener<T> {
+public abstract class SyncListenerAdapter<T> implements SyncListener<T> {
@Override
public void exception(ReadGraph graph, Throwable t) {
@Override
public void exception(ReadGraph graph, Throwable t) {
- public boolean isDisposed() {
- return false;
- }
+ public abstract boolean isDisposed();
import org.simantics.db.RequestProcessor;
import org.simantics.db.Resource;
import org.simantics.db.common.NamedResource;
import org.simantics.db.RequestProcessor;
import org.simantics.db.Resource;
import org.simantics.db.common.NamedResource;
-import org.simantics.db.common.procedure.adapter.ListenerAdapter;
+import org.simantics.db.common.procedure.adapter.ProcedureAdapter;
import org.simantics.db.common.request.BinaryRead;
import org.simantics.db.common.request.ParametrizedPrimitiveRead;
import org.simantics.db.common.request.ResourceRead;
import org.simantics.db.common.request.BinaryRead;
import org.simantics.db.common.request.ParametrizedPrimitiveRead;
import org.simantics.db.common.request.ResourceRead;
import org.simantics.db.layer0.variable.VariableBuilder;
import org.simantics.db.layer0.variable.Variables;
import org.simantics.db.procedure.Listener;
import org.simantics.db.layer0.variable.VariableBuilder;
import org.simantics.db.layer0.variable.Variables;
import org.simantics.db.procedure.Listener;
+import org.simantics.db.procedure.Procedure;
import org.simantics.layer0.Layer0;
import org.simantics.scenegraph.INode;
import org.simantics.scenegraph.LoaderNode;
import org.simantics.layer0.Layer0;
import org.simantics.scenegraph.INode;
import org.simantics.scenegraph.LoaderNode;
public class ScenegraphLoaderUtils {
public class ScenegraphLoaderUtils {
- static Map<Pair<Variable, String>, Collection<Listener<Object>>> externalMap = new HashMap<Pair<Variable, String>, Collection<Listener<Object>>>();
+ static Map<Pair<Variable, String>, Collection<Procedure<Object>>> externalMap = new HashMap<Pair<Variable, String>, Collection<Procedure<Object>>>();
static Map<Pair<Variable, String>, Object> externalValueMap = new HashMap<Pair<Variable, String>, Object>();
final public static class ScenegraphPropertyReference<T> {
static Map<Pair<Variable, String>, Object> externalValueMap = new HashMap<Pair<Variable, String>, Object>();
final public static class ScenegraphPropertyReference<T> {
public void register(ReadGraph graph, final Listener<T> procedure) {
Object value = externalValueMap.get(parameter);
procedure.execute((T)value);
public void register(ReadGraph graph, final Listener<T> procedure) {
Object value = externalValueMap.get(parameter);
procedure.execute((T)value);
- Collection<Listener<Object>> listeners = externalMap.get(parameter);
+ Collection<Procedure<Object>> listeners = externalMap.get(parameter);
- listeners = new ArrayList<Listener<Object>>();
+ listeners = new ArrayList<Procedure<Object>>();
externalMap.put(parameter, listeners);
}
externalMap.put(parameter, listeners);
}
- listeners.add(new ListenerAdapter<Object>() {
+ listeners.add(new ProcedureAdapter<Object>() {
@Override
public void execute(Object result) {
@Override
public void execute(Object result) {
public Boolean apply(String property, Object value) {
Pair<Variable, String> key = Pair.make(reference.first, reference.second + "#" + property);
externalValueMap.put(key, value);
public Boolean apply(String property, Object value) {
Pair<Variable, String> key = Pair.make(reference.first, reference.second + "#" + property);
externalValueMap.put(key, value);
- Collection<Listener<Object>> listeners = externalMap.get(key);
+ Collection<Procedure<Object>> listeners = externalMap.get(key);
- for(Listener<Object> listener : listeners) listener.execute(value);
+ for(Procedure<Object> listener : listeners) listener.execute(value);
return graph.getResource("http://A");
}
return graph.getResource("http://A");
}
- }, new ListenerAdapter<Resource>());
+ }, new ListenerAdapter<Resource>() {
+ @Override
+ public boolean isDisposed() {
+ return false;
+ }
+ });
/*
* Invalidates the request. Request is updated (is has a listener) and enters 'Excepted' state.
/*
* Invalidates the request. Request is updated (is has a listener) and enters 'Excepted' state.
executions.incrementAndGet();
}
executions.incrementAndGet();
}
+ @Override
+ public boolean isDisposed() {
+ return false;
+ }
+
});
session.syncRequest(new WriteRequest() {
});
session.syncRequest(new WriteRequest() {
+ @Override
+ public boolean isDisposed() {
+ return false;
+ }
+
};
assertEquals(Layer0.URIs.ConsistsOf, graph.sync(new R1(L0.ConsistsOf)));
};
assertEquals(Layer0.URIs.ConsistsOf, graph.sync(new R1(L0.ConsistsOf)));
- }, new ListenerAdapter<Integer>());
+ }, new ListenerAdapter<Integer>() {
+ @Override
+ public boolean isDisposed() {
+ return false;
+ }
+ });
- }, new ListenerAdapter<Integer>());
+ }, new ListenerAdapter<Integer>() {
+ @Override
+ public boolean isDisposed() {
+ return false;
+ }
+ });
return graph.hasStatement(L0.Entity);
}
return graph.hasStatement(L0.Entity);
}
- }, new ListenerAdapter<Boolean>());
+ }, new ListenerAdapter<Boolean>() {
+ @Override
+ public boolean isDisposed() {
+ return false;
+ }
+ });
ClusterControl support = getSession().getService(ClusterControl.class);
support.collectClusters(Integer.MAX_VALUE);
ClusterControl support = getSession().getService(ClusterControl.class);
support.collectClusters(Integer.MAX_VALUE);
});
// Cache RelationInfo for HasName
});
// Cache RelationInfo for HasName
- session.syncRequest(new PossibleObject(L0.Entity, L0.HasName), new ListenerAdapter<Resource>());
+ session.syncRequest(new PossibleObject(L0.Entity, L0.HasName), new ListenerAdapter<Resource>() {
+ @Override
+ public boolean isDisposed() {
+ return false;
+ }
+ });
// Flush clusters
ClusterControl support = getSession().getService(ClusterControl.class);
// Flush clusters
ClusterControl support = getSession().getService(ClusterControl.class);
private void listenTime(String label, Read<Object> request) throws DatabaseException {
long start = System.nanoTime();
private void listenTime(String label, Read<Object> request) throws DatabaseException {
long start = System.nanoTime();
- getSession().syncRequest(request, new ListenerAdapter<Object>());
+ getSession().syncRequest(request, new ListenerAdapter<Object>() {
+ @Override
+ public boolean isDisposed() {
+ return false;
+ }
+ });
long duration = System.nanoTime() - start;
System.out.println(label + " = " + 1e-9*duration);
long duration = System.nanoTime() - start;
System.out.println(label + " = " + 1e-9*duration);