org.simantics.databoard.accessor.java
Class JavaOptional

java.lang.Object
  extended by org.simantics.databoard.accessor.java.JavaObject
      extended by org.simantics.databoard.accessor.java.JavaOptional
All Implemented Interfaces:
Accessor, OptionalAccessor

public class JavaOptional
extends JavaObject
implements OptionalAccessor


Nested Class Summary
 
Nested classes/interfaces inherited from interface org.simantics.databoard.accessor.Accessor
Accessor.Listener
 
Constructor Summary
JavaOptional(JavaObject parent, OptionalBinding binding, java.lang.Object object)
           
 
Method Summary
 void addListener(Accessor.Listener listener, InterestSet interestSet, AccessorReference path)
          Place a listener to an accessor node.
<T extends Accessor>
T
getAccessor(AccessorReference reference)
          Get an accessor to a sub-container.
 OptionalBinding getBinding()
           
<T extends Accessor>
T
getComponentAccessor()
          Get accessor to the component value or null if there is no component value
 java.lang.Object getComponentValue(Binding componentBinding)
          Return component value if there is a component value.
 boolean hasValue()
          Return true if there is a value assigned
 void removeListener(Accessor.Listener listener)
          Remove a listener.
 void setComponentValue(Binding binding, java.lang.Object value)
          Set a new component value.
 void setNoValue()
          Sets no value.
 void setValue(Binding binding, java.lang.Object newValue)
          Set a new value.
 OptionalType type()
          Get structural represtentation of the accessor presented in databoard's type system format.
 
Methods inherited from class org.simantics.databoard.accessor.java.JavaObject
apply, createAccessor, getObject, getValue, toString
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.simantics.databoard.accessor.Accessor
apply, getValue
 

Constructor Detail

JavaOptional

public JavaOptional(JavaObject parent,
                    OptionalBinding binding,
                    java.lang.Object object)
Method Detail

getBinding

public OptionalBinding getBinding()
Overrides:
getBinding in class JavaObject

type

public OptionalType type()
Description copied from interface: Accessor
Get structural represtentation of the accessor presented in databoard's type system format.

Specified by:
type in interface Accessor
Specified by:
type in interface OptionalAccessor
Overrides:
type in class JavaObject
Returns:
type description

getComponentAccessor

public <T extends Accessor> T getComponentAccessor()
                                        throws AccessorConstructionException
Description copied from interface: OptionalAccessor
Get accessor to the component value or null if there is no component value

Specified by:
getComponentAccessor in interface OptionalAccessor
Returns:
accessor or null
Throws:
AccessorConstructionException

getComponentValue

public java.lang.Object getComponentValue(Binding componentBinding)
                                   throws AccessorException
Description copied from interface: OptionalAccessor
Return component value if there is a component value. Exception is thrown if there is no component value.

Specified by:
getComponentValue in interface OptionalAccessor
Parameters:
componentBinding - component binding
Returns:
component value
Throws:
AccessorException

addListener

public void addListener(Accessor.Listener listener,
                        InterestSet interestSet,
                        AccessorReference path)
                 throws AccessorException
Description copied from interface: Accessor
Place a listener to an accessor node. The listener will be notified for changes in the node or posssibly its decendant nodes, depending on interest set.

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.

Specified by:
addListener in interface Accessor
Overrides:
addListener in class JavaObject
path - path to the accessor or null. This is used in the events the accessor produces
Throws:
AccessorException
See Also:
collects events

removeListener

public void removeListener(Accessor.Listener listener)
                    throws AccessorException
Description copied from interface: Accessor
Remove a listener. If the listener is added multiple times, the last one added is removed.

Specified by:
removeListener in interface Accessor
Overrides:
removeListener in class JavaObject
Throws:
AccessorException

getAccessor

public <T extends Accessor> T getAccessor(AccessorReference reference)
                               throws AccessorConstructionException
Description copied from interface: Accessor
Get an accessor to a sub-container. If one already exists, the same is returned, otherwise a new is created.

InvalidatedEvent is thrown from the accessor if it is unlinked from the parent hierarchy.

Specified by:
getAccessor in interface Accessor
Parameters:
reference - component reference or null to return _this_ accessor
Returns:
accessor
Throws:
AccessorConstructionException

setValue

public void setValue(Binding binding,
                     java.lang.Object newValue)
              throws AccessorException
Description copied from interface: OptionalAccessor
Set a new value. Copies values from an Optional Value. If existing sub-value is removed, then possibly existing accessor is invalidated.

Specified by:
setValue in interface Accessor
Specified by:
setValue in interface OptionalAccessor
Parameters:
binding - of component type
newValue - component value
Throws:
AccessorException

hasValue

public boolean hasValue()
                 throws AccessorException
Description copied from interface: OptionalAccessor
Return true if there is a value assigned

Specified by:
hasValue in interface OptionalAccessor
Returns:
true if there is a value
Throws:
AccessorException

setNoValue

public void setNoValue()
                throws AccessorException
Description copied from interface: OptionalAccessor
Sets no value. Any existing component accessor is invalidated.

Specified by:
setNoValue in interface OptionalAccessor
Throws:
AccessorException

setComponentValue

public void setComponentValue(Binding binding,
                              java.lang.Object value)
                       throws AccessorException
Description copied from interface: OptionalAccessor
Set a new component value. Any existing component accessor is invalidated.

Specified by:
setComponentValue in interface OptionalAccessor
Throws:
AccessorException