|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.simantics.databoard.accessor.java.JavaObject
public abstract class JavaObject
Accessor to a Java Object.
The monitoring contract forbids modifications to the object outside this accessor object. If you do modifications to the value using other mechanisms, do not use the listening mechanism.
Operations cannot be performed safely in multi-threaded environment. The caller must provide external synchronization protection, not just to one object but the whole accessor tree.
Nested Class Summary |
---|
Nested classes/interfaces inherited from interface org.simantics.databoard.accessor.Accessor |
---|
Accessor.Listener |
Constructor Summary | |
---|---|
JavaObject(JavaObject parent,
Binding binding,
java.lang.Object initialValue)
|
Method Summary | |
---|---|
void |
addListener(Accessor.Listener listener,
InterestSet interestSet,
AccessorReference path)
Place a listener to an accessor node. |
void |
apply(java.util.List<Event> cs,
java.util.LinkedList<Event> rollback)
Apply a change set in a single transaction operation. |
static JavaObject |
createAccessor(Binding b,
java.lang.Object v)
|
Binding |
getBinding()
|
java.lang.Object |
getObject()
Get the Java Object |
java.lang.Object |
getValue(Binding binding)
Get a snapshot of the object model as a single data value. |
void |
removeListener(Accessor.Listener listener)
Remove a listener. |
java.lang.String |
toString()
|
DataType |
type()
Get structural represtentation of the accessor presented in databoard's type system format. |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Methods inherited from interface org.simantics.databoard.accessor.Accessor |
---|
getAccessor, setValue |
Constructor Detail |
---|
public JavaObject(JavaObject parent, Binding binding, java.lang.Object initialValue)
Method Detail |
---|
public java.lang.Object getObject()
public Binding getBinding()
public DataType type()
Accessor
type
in interface Accessor
public java.lang.Object getValue(Binding binding) throws AccessorException
Accessor
getValue
in interface Accessor
AccessorException
public void addListener(Accessor.Listener listener, InterestSet interestSet, AccessorReference path) throws AccessorException
Accessor
The synchronization contract is implementation specific, so read the document. A common contract is that the listener object must not make modifications to the accessor within the handle event function. The correct strategy is to collect events and mutate the accessor afterwards.
Each event instance spawned by the listener, is annotated with a reference that describes the reference path of the node to which the event applies to. The path originates from the node where the listener was placed.
Listener is attached to the container that holds the value at the time at the of the adding. For example, If a listener is attached to an array of element at index 3, and a new value is inserted at position 2, the listener still monitors the same container, which is now at index 4. The references of incoming the events are modified to have the new index.
Also, if a new value is assigned to the parent of an object that is listened, the listener keeps on monitoring the new value at the same reference. This doesn't apply when a new value is set to a union of different tag, to a variant with a new type, or value is removed from Optional type. In these two cases the listener is invalidated.
See ChangeSet
is an implementation that collects events.
addListener
in interface Accessor
path
- path to the accessor or null
. This is used in the events the accessor produces
AccessorException
collects events
public void removeListener(Accessor.Listener listener) throws AccessorException
Accessor
removeListener
in interface Accessor
AccessorException
public static JavaObject createAccessor(Binding b, java.lang.Object v) throws AccessorConstructionException
AccessorConstructionException
public void apply(java.util.List<Event> cs, java.util.LinkedList<Event> rollback) throws AccessorException
Accessor
apply
in interface Accessor
rollback
- log to be filled with rollback events or null
AccessorException
- failed to apply change setpublic java.lang.String toString()
toString
in class java.lang.Object
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |