package com.revolsys.geometry.graph.visitor;
import java.util.function.Consumer;
import com.revolsys.geometry.graph.Edge;
import com.revolsys.geometry.graph.Graph;
import com.revolsys.geometry.graph.Node;
import com.revolsys.geometry.graph.event.EdgeEventListener;
import com.revolsys.geometry.graph.event.EdgeEventListenerList;
import com.revolsys.geometry.graph.event.NodeEventListener;
import com.revolsys.geometry.graph.event.NodeEventListenerList;
import com.revolsys.util.ObjectProcessor;
public abstract class AbstractNodeListenerVisitor<T>
implements Consumer<Node<T>>, ObjectProcessor<Graph<T>> {
private final EdgeEventListenerList<T> edgeListeners = new EdgeEventListenerList<>();
private final NodeEventListenerList<T> nodeListeners = new NodeEventListenerList<>();
public void addEdgeListener(final EdgeEventListener<T> listener) {
this.edgeListeners.add(listener);
}
public void addNodeListener(final NodeEventListener<T> listener) {
this.nodeListeners.add(listener);
}
public void edgeEvent(final Edge<T> edge, final String path, final String ruleName,
final String action, final String notes) {
this.edgeListeners.edgeEvent(edge, ruleName, action, notes);
}
public EdgeEventListenerList<T> getEdgeListeners() {
return this.edgeListeners;
}
public NodeEventListenerList<T> getNodeListeners() {
return this.nodeListeners;
}
public void nodeEvent(final Node<T> node, final String typePath, final String ruleName,
final String action, final String notes) {
this.nodeListeners.nodeEvent(node, typePath, ruleName, action, notes);
}
@Override
public void process(final Graph<T> graph) {
graph.forEachNode(this);
}
}