public class ThreadProxyPipe extends SourceBase implements ProxyPipe
This filter allows to register it as an output for some source of events in a source thread (hereafter called the input thread) and to register listening outputs in a destination thread (hereafter called the sink thread).
| Source ---> ThreadProxyFilter ----> Sink Thread 1 | Thread 2 |
In other words, this class allows to listen in a sink thread graph events that are produced in another source thread without any explicit synchronization on the source of events.
The only restriction is that the sink thread must regularly call the
pump()
method to dispatch events coming from the source to all sinks
registered (see the explanation in ProxyPipe
).
You can register any kind of input as source of event, but if the input is a graph, then you can choose to "replay" all the content of the graph so that at the other end of the filter, all outputs receive the complete content of the graph. This is the default behavior if this filter is constructed with a graph as input.
SourceBase.ElementType
Constructor and Description |
---|
ThreadProxyPipe() |
ThreadProxyPipe(Source input)
Deprecated.
Use the default constructor and then call the
init(Source) method. |
ThreadProxyPipe(Source input,
boolean replay)
Deprecated.
Use the default constructor and then call the
init(Source) method. |
ThreadProxyPipe(Source input,
Sink initialListener,
boolean replay)
Deprecated.
Use the default constructor and then call the
init(Source) method. |
Modifier and Type | Method and Description |
---|---|
void |
blockingPump()
Same as
ProxyPipe.pump() but try to block until new events were available. |
void |
blockingPump(long timeout)
Same as
ProxyPipe.blockingPump() but including a timeout delay. |
void |
edgeAdded(java.lang.String graphId,
long timeId,
java.lang.String edgeId,
java.lang.String fromNodeId,
java.lang.String toNodeId,
boolean directed)
An edge was inserted in graph.
|
void |
edgeAttributeAdded(java.lang.String graphId,
long timeId,
java.lang.String edgeId,
java.lang.String attribute,
java.lang.Object value)
A edge attribute was added.
|
void |
edgeAttributeChanged(java.lang.String graphId,
long timeId,
java.lang.String edgeId,
java.lang.String attribute,
java.lang.Object oldValue,
java.lang.Object newValue)
A edge attribute was changed.
|
void |
edgeAttributeRemoved(java.lang.String graphId,
long timeId,
java.lang.String edgeId,
java.lang.String attribute)
A edge attribute was removed.
|
void |
edgeRemoved(java.lang.String graphId,
long timeId,
java.lang.String edgeId)
An edge of graph was removed.The nodes the edge connects may already have
been removed from the graph.
|
void |
graphAttributeAdded(java.lang.String graphId,
long timeId,
java.lang.String attribute,
java.lang.Object value)
A graph attribute was added.
|
void |
graphAttributeChanged(java.lang.String graphId,
long timeId,
java.lang.String attribute,
java.lang.Object oldValue,
java.lang.Object newValue)
A graph attribute was changed.
|
void |
graphAttributeRemoved(java.lang.String graphId,
long timeId,
java.lang.String attribute)
A graph attribute was removed.
|
void |
graphCleared(java.lang.String graphId,
long timeId)
The whole graph was cleared.
|
boolean |
hasPostRemaining() |
void |
init() |
void |
init(Source source)
Init the proxy.
|
void |
init(Source source,
boolean replay)
Init the proxy.
|
void |
nodeAdded(java.lang.String graphId,
long timeId,
java.lang.String nodeId)
A node was inserted in the given graph.
|
void |
nodeAttributeAdded(java.lang.String graphId,
long timeId,
java.lang.String nodeId,
java.lang.String attribute,
java.lang.Object value)
A node attribute was added.
|
void |
nodeAttributeChanged(java.lang.String graphId,
long timeId,
java.lang.String nodeId,
java.lang.String attribute,
java.lang.Object oldValue,
java.lang.Object newValue)
A node attribute was changed.
|
void |
nodeAttributeRemoved(java.lang.String graphId,
long timeId,
java.lang.String nodeId,
java.lang.String attribute)
A node attribute was removed.
|
void |
nodeRemoved(java.lang.String graphId,
long timeId,
java.lang.String nodeId)
A node was removed from the graph.
|
void |
pump()
This method must be called regularly in the output thread to check if the
input source sent events.
|
void |
stepBegins(java.lang.String graphId,
long timeId,
double step)
Since dynamic graphs are based on discrete event modifications, the notion of
step is defined to simulate elapsed time between events.
|
java.lang.String |
toString() |
void |
unregisterFromSource()
Ask the proxy to unregister from the event input source (stop receive events)
as soon as possible (when the next event will occur in the graph).
|
addAttributeSink, addElementSink, addSink, attributeSinks, clearAttributeSinks, clearElementSinks, clearSinks, elementSinks, removeAttributeSink, removeElementSink, removeSink, sendAttributeChangedEvent, sendAttributeChangedEvent, sendEdgeAdded, sendEdgeAdded, sendEdgeAttributeAdded, sendEdgeAttributeAdded, sendEdgeAttributeChanged, sendEdgeAttributeChanged, sendEdgeAttributeRemoved, sendEdgeAttributeRemoved, sendEdgeRemoved, sendEdgeRemoved, sendGraphAttributeAdded, sendGraphAttributeAdded, sendGraphAttributeChanged, sendGraphAttributeChanged, sendGraphAttributeRemoved, sendGraphAttributeRemoved, sendGraphCleared, sendGraphCleared, sendNodeAdded, sendNodeAdded, sendNodeAttributeAdded, sendNodeAttributeAdded, sendNodeAttributeChanged, sendNodeAttributeChanged, sendNodeAttributeRemoved, sendNodeAttributeRemoved, sendNodeRemoved, sendNodeRemoved, sendStepBegins, sendStepBegins
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
addAttributeSink, addElementSink, addSink, clearAttributeSinks, clearElementSinks, clearSinks, removeAttributeSink, removeElementSink, removeSink
public ThreadProxyPipe()
@Deprecated public ThreadProxyPipe(Source input)
init(Source)
method.input
- The source of events we listen at.@Deprecated public ThreadProxyPipe(Source input, boolean replay)
init(Source)
method.input
- replay
- @Deprecated public ThreadProxyPipe(Source input, Sink initialListener, boolean replay)
init(Source)
method.input
- initialListener
- replay
- public void init()
public void init(Source source)
source
- source of the eventspublic void init(Source source, boolean replay)
source
- source of the eventsreplay
- true if the source should be replayed. You need a
Replayable
source to enable replay,
else nothing happens.public java.lang.String toString()
toString
in class java.lang.Object
public void unregisterFromSource()
public void pump()
public void blockingPump() throws java.lang.InterruptedException
ProxyPipe
ProxyPipe.pump()
but try to block until new events were available.
Note that this feature will not be available on all proxy pipe implementation
and may throws an UnsupportedOperationException
. It can
throw an InterruptedException
if the current thread is
interrupted while proxy is waiting for events.blockingPump
in interface ProxyPipe
java.lang.InterruptedException
public void blockingPump(long timeout) throws java.lang.InterruptedException
ProxyPipe
ProxyPipe.blockingPump()
but including a timeout delay.blockingPump
in interface ProxyPipe
java.lang.InterruptedException
public boolean hasPostRemaining()
public void edgeAttributeAdded(java.lang.String graphId, long timeId, java.lang.String edgeId, java.lang.String attribute, java.lang.Object value)
AttributeSink
edgeAttributeAdded
in interface AttributeSink
graphId
- Identifier of the graph where the change occurred.edgeId
- Identifier of the edge whose attribute changed.attribute
- The attribute name.value
- The attribute new value.public void edgeAttributeChanged(java.lang.String graphId, long timeId, java.lang.String edgeId, java.lang.String attribute, java.lang.Object oldValue, java.lang.Object newValue)
AttributeSink
edgeAttributeChanged
in interface AttributeSink
graphId
- Identifier of the graph where the change occurred.edgeId
- Identifier of the edge whose attribute changed.attribute
- The attribute name.oldValue
- The attribute old value.newValue
- The attribute new value.public void edgeAttributeRemoved(java.lang.String graphId, long timeId, java.lang.String edgeId, java.lang.String attribute)
AttributeSink
edgeAttributeRemoved
in interface AttributeSink
graphId
- Identifier of the graph where the attribute was removed.edgeId
- Identifier of the edge whose attribute was removed.attribute
- The removed attribute name.public void graphAttributeAdded(java.lang.String graphId, long timeId, java.lang.String attribute, java.lang.Object value)
AttributeSink
graphAttributeAdded
in interface AttributeSink
graphId
- Identifier of the graph where the attribute changed.attribute
- The attribute name.value
- The attribute new value.public void graphAttributeChanged(java.lang.String graphId, long timeId, java.lang.String attribute, java.lang.Object oldValue, java.lang.Object newValue)
AttributeSink
graphAttributeChanged
in interface AttributeSink
graphId
- Identifier of the graph where the attribute changed.attribute
- The attribute name.oldValue
- The attribute old value.newValue
- The attribute new value.public void graphAttributeRemoved(java.lang.String graphId, long timeId, java.lang.String attribute)
AttributeSink
graphAttributeRemoved
in interface AttributeSink
graphId
- Identifier of the graph where the attribute was removed.attribute
- The removed attribute name.public void nodeAttributeAdded(java.lang.String graphId, long timeId, java.lang.String nodeId, java.lang.String attribute, java.lang.Object value)
AttributeSink
nodeAttributeAdded
in interface AttributeSink
graphId
- Identifier of the graph where the change occurred.nodeId
- Identifier of the node whose attribute changed.attribute
- The attribute name.value
- The attribute new value.public void nodeAttributeChanged(java.lang.String graphId, long timeId, java.lang.String nodeId, java.lang.String attribute, java.lang.Object oldValue, java.lang.Object newValue)
AttributeSink
nodeAttributeChanged
in interface AttributeSink
graphId
- Identifier of the graph where the change occurred.nodeId
- Identifier of the node whose attribute changed.attribute
- The attribute name.oldValue
- The attribute old value.newValue
- The attribute new value.public void nodeAttributeRemoved(java.lang.String graphId, long timeId, java.lang.String nodeId, java.lang.String attribute)
AttributeSink
nodeAttributeRemoved
in interface AttributeSink
graphId
- Identifier of the graph where the attribute was removed.nodeId
- Identifier of the node whose attribute was removed.attribute
- The removed attribute name.public void edgeAdded(java.lang.String graphId, long timeId, java.lang.String edgeId, java.lang.String fromNodeId, java.lang.String toNodeId, boolean directed)
ElementSink
edgeAdded
in interface ElementSink
graphId
- Identifier of the graph where the edge was added.edgeId
- Identifier of the added edge.fromNodeId
- Identifier of the first node of the edge.toNodeId
- Identifier of the second node of the edge.directed
- If true, the edge is directed.public void edgeRemoved(java.lang.String graphId, long timeId, java.lang.String edgeId)
ElementSink
edgeRemoved
in interface ElementSink
graphId
- The graph where the edge will be removed.edgeId
- The edge that will be removed.public void graphCleared(java.lang.String graphId, long timeId)
ElementSink
graphCleared
in interface ElementSink
graphId
- The graph cleared.public void nodeAdded(java.lang.String graphId, long timeId, java.lang.String nodeId)
ElementSink
nodeAdded
in interface ElementSink
graphId
- Identifier of the graph where the node was added.nodeId
- Identifier of the added node.public void nodeRemoved(java.lang.String graphId, long timeId, java.lang.String nodeId)
ElementSink
nodeRemoved
in interface ElementSink
graphId
- Identifier of the graph where the node will be removed.nodeId
- Identifier of the removed node.public void stepBegins(java.lang.String graphId, long timeId, double step)
ElementSink
Since dynamic graphs are based on discrete event modifications, the notion of step is defined to simulate elapsed time between events. So a step is a event that occurs in the graph, it does not modify it but it gives a kind of timestamp that allow the tracking of the progress of the graph over the time.
This kind of event is useful for dynamic algorithms that listen to the dynamic graph and need to measure the time in the graph's evolution.
stepBegins
in interface ElementSink
graphId
- Identifier of the graph where the step starts.timeId
- A numerical value that may give a timestamp to track the evolution
of the graph over the time.