|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.simantics.databoard.accessor.impl.CompositeRecord
public class CompositeRecord
Record is an accessor to a record where fields defined from a composition of other accessors. Fields should not be modified while CompositeRecord is in accessor usage.
Nested Class Summary |
---|
Nested classes/interfaces inherited from interface org.simantics.databoard.accessor.Accessor |
---|
Accessor.Listener |
Constructor Summary | |
---|---|
CompositeRecord()
|
|
CompositeRecord(Accessor parent)
|
|
CompositeRecord(Accessor parent,
AccessorParams params)
|
Method Summary | ||
---|---|---|
void |
addField(java.lang.String name,
Accessor field)
|
|
void |
addListener(Accessor.Listener listener,
InterestSet interestSet,
ChildReference path,
java.util.concurrent.Executor executor)
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. |
|
int |
count()
Get the number of fields in the record |
|
|
getComponent(ChildReference reference)
Open an accessor to a child. |
|
|
getFieldAccessor(int index)
Get an accessor to a field. |
|
|
getFieldAccessor(java.lang.String fieldName)
Get an accessor to a field. |
|
java.lang.Object |
getFieldValue(int index,
Binding fieldBinding)
Get field value. |
|
java.lang.Object |
getFieldValue(java.lang.String fieldName,
Binding fieldBinding)
Get field value. |
|
java.lang.Object |
getValue(Binding binding)
Get a snapshot of the object as a single data value. |
|
void |
getValue(Binding dstBinding,
java.lang.Object dst)
Read a copy of the accessor's object into an instance. |
|
void |
removeField(java.lang.String name)
|
|
void |
removeListener(Accessor.Listener listener)
Remove a listener. |
|
void |
setFieldValue(int index,
Binding fieldBinding,
java.lang.Object value)
Set field value. |
|
void |
setFieldValue(java.lang.String fieldName,
Binding fieldBinding,
java.lang.Object value)
Set field value. |
|
void |
setValue(Binding binding,
java.lang.Object newValue)
Set a complete new value to the data container. |
|
RecordType |
type()
Get structural represtentation of the accessor presented in databoard's type system. |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public CompositeRecord()
public CompositeRecord(Accessor parent)
public CompositeRecord(Accessor parent, AccessorParams params)
Method Detail |
---|
public void addField(java.lang.String name, Accessor field)
public void removeField(java.lang.String name)
public int count()
RecordAccessor
count
in interface RecordAccessor
public void addListener(Accessor.Listener listener, InterestSet interestSet, ChildReference path, java.util.concurrent.Executor executor) throws AccessorException
Accessor
When events are emited and in which thread processed is implementation specific. It is also implementation specific, whether the object can be mutated in the listener or whether it has to be done afterwards.
In many implementations there is a pluggable event handling strategy EventEmitter. The default behaviour is to emit events as they are spawned in the current thread.
There is a reference in each event instance that describes the path from the accessor where listener was placed to the node to which the event applies to.
Listener is attached to the object 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.
Executor argument determines the thread where the onEvents method is
handled. null argument denotes current thread.
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 <T extends Accessor> T getFieldAccessor(int index) throws AccessorConstructionException
RecordAccessor
RecordAccessor.setFieldValue(int, Binding, Object)
.
getFieldAccessor
in interface RecordAccessor
AccessorConstructionException
public <T extends Accessor> T getFieldAccessor(java.lang.String fieldName) throws AccessorConstructionException
RecordAccessor
RecordAccessor.setFieldValue(int, Binding, Object)
.
getFieldAccessor
in interface RecordAccessor
AccessorConstructionException
public java.lang.Object getFieldValue(java.lang.String fieldName, Binding fieldBinding) throws AccessorException
RecordAccessor
getFieldValue
in interface RecordAccessor
AccessorException
public java.lang.Object getFieldValue(int index, Binding fieldBinding) throws AccessorException
RecordAccessor
getFieldValue
in interface RecordAccessor
index
- field index
AccessorException
public void setFieldValue(java.lang.String fieldName, Binding fieldBinding, java.lang.Object value) throws AccessorException
RecordAccessor
setFieldValue
in interface RecordAccessor
AccessorException
public void setFieldValue(int index, Binding fieldBinding, java.lang.Object value) throws AccessorException
RecordAccessor
setFieldValue
in interface RecordAccessor
index
- field index
AccessorException
public RecordType type()
Accessor
type
in interface Accessor
type
in interface RecordAccessor
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 <T extends Accessor> T getComponent(ChildReference reference) throws AccessorConstructionException
Accessor
InvalidatedEvent is thrown from the accessor if it is unlinked from the parent hierarchy.
getComponent
in interface Accessor
reference
- component reference path or null
to return _this_ accessor
AccessorConstructionException
public java.lang.Object getValue(Binding binding) throws AccessorException
Accessor
Accessor makes type adaption to users binding if possible.
getValue
in interface Accessor
AccessorException
public void getValue(Binding dstBinding, java.lang.Object dst) throws AccessorException
Accessor
Accessor makes type adaption to users binding if possible.
getValue
in interface Accessor
dst
- object to read the value to
AccessorException
public void setValue(Binding binding, java.lang.Object newValue) throws AccessorException
Accessor
If the new value removes old map entries, array entries, optional value, or
changes union or variant value type, it will disengage any existing
sub-accessors and send InvalidatedEvent
.
Writing the current value again may not emit an event. This is implementation specific.
Write is durable, once a the method returns successfully the value has been stored in the implmentation.
setValue
in interface Accessor
AccessorException
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |