com.google.gwt.editor.client.adapters

## Class OptionalFieldEditor<T,E extends Editor<? super T>>

- java.lang.Object
- - com.google.gwt.editor.client.adapters.OptionalFieldEditor<T,E>

Type Parameters:
  `T` - The type of data being managed
  `E` - The type of Editor

All Implemented Interfaces:
  CompositeEditor<T,T,E>, Editor<T>, HasEditorDelegate<T>, LeafValueEditor<T>, ValueAwareEditor<T>, TakesValue<T>

    public class OptionalFieldEditor<T,E extends Editor<? super T>>
    extends java.lang.Object
    implements CompositeEditor<T,T,E>, LeafValueEditor<T>

This adapter can be used when a type being edited has an optional field that may be nullified or reassigned as part of the editing process. This consumer of this adapter will typically expose it via the `IsEditor` interface:

     class FooSelector extends Composite implements IsEditor<OptionalFieldEditor<Foo, FooEditor>> {
       private OptionalFieldEditor<Foo, FooEditor> editor = OptionalFieldEditor.of(new FooEditor());
       public OptionalFieldEditor<Foo, FooEditor> asEditor() {
         return editor;
       }
     }

### Nested Class Summary

### Nested classes/interfaces inherited from interface com.google.gwt.editor.client.CompositeEditor

`CompositeEditor.EditorChain<C,E extends Editor<? super C>>`

### Nested classes/interfaces inherited from interface com.google.gwt.editor.client.Editor

`Editor.Ignore, Editor.Path`

### Constructor Summary

Constructors
`protected` `OptionalFieldEditor(E subEditor)` Construct an OptionalFieldEditor backed by the given sub-Editor.

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`E` `createEditorForTraversal()` Returns the sub-Editor that the OptionalFieldEditor was constructed with.
`void` `flush()` Indicates that the Editor cycle is finished.
`java.lang.String` `getPathElement(E subEditor)` Returns an empty string because there is only ever one sub-editor used.
`T` `getValue()` Returns the current value.
`static <T,E extends Editor<? super T>> OptionalFieldEditor<T,E>` `of(E subEditor)` Construct an OptionalFieldEditor backed by the given sub-Editor.
`void` `onPropertyChange(java.lang.String... paths)` Notifies the Editor that one or more value properties have changed.
`void` `setDelegate(EditorDelegate<T> delegate)` Called by the EditorDriver to provide access to the EditorDelegate the Editor is peered with.
`void` `setEditorChain(CompositeEditor.EditorChain<T,E> chain)` Called by the Editor framework to provide the `CompositeEditor.EditorChain`.
`void` `setValue(T value)` Called by the EditorDriver to set the object the Editor is peered with

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### OptionalFieldEditor

    protected OptionalFieldEditor(E subEditor)

Construct an OptionalFieldEditor backed by the given sub-Editor.

Parameters:
  `subEditor` - the sub-Editor that will be attached to the Editor hierarchy

### Method Detail

#### of

    public static <T,E extends Editor<? super T>> OptionalFieldEditor<T,E> of(E subEditor)

Construct an OptionalFieldEditor backed by the given sub-Editor.

Type Parameters:
  `T` - The type of data being managed
  `E` - The type of Editor
Parameters:
  `subEditor` - the sub-Editor that will be attached to the Editor hierarchy
Returns:
  a new instance of OptionalFieldEditor

#### createEditorForTraversal

    public E createEditorForTraversal()

Returns the sub-Editor that the OptionalFieldEditor was constructed with.

Specified by:
  `createEditorForTraversal` in interface `CompositeEditor<T,T,E extends Editor<? super T>>`
Returns:
  an `Editor` of type E

#### flush

    public void flush()

Description copied from interface: `ValueAwareEditor`
Indicates that the Editor cycle is finished. This method will be called in a depth-first order by the EditorDriver, so Editors do not generally need to flush their sub-editors.

Specified by:
  `flush` in interface `ValueAwareEditor<T>`

#### getPathElement

    public java.lang.String getPathElement(E subEditor)

Returns an empty string because there is only ever one sub-editor used.

Specified by:
  `getPathElement` in interface `CompositeEditor<T,T,E extends Editor<? super T>>`
Parameters:
  `subEditor` - an instance of the Editor type previously passed into `CompositeEditor.EditorChain.attach(C, E)`
Returns:
  the path element as a String

#### getValue

    public T getValue()

Description copied from interface: `TakesValue`
Returns the current value.

Specified by:
  `getValue` in interface `TakesValue<T>`
Returns:
  the value as an object of type V
See Also:
  `TakesValue.setValue(V)`

#### onPropertyChange

    public void onPropertyChange(java.lang.String... paths)

Description copied from interface: `ValueAwareEditor`
Notifies the Editor that one or more value properties have changed. Not all backing services support property-based notifications.

Specified by:
  `onPropertyChange` in interface `ValueAwareEditor<T>`
Parameters:
  `paths` - a list of String paths

#### setDelegate

    public void setDelegate(EditorDelegate<T> delegate)

Description copied from interface: `HasEditorDelegate`
Called by the EditorDriver to provide access to the EditorDelegate the Editor is peered with.

Specified by:
  `setDelegate` in interface `HasEditorDelegate<T>`
Parameters:
  `delegate` - an `EditorDelegate` of type T

#### setEditorChain

    public void setEditorChain(CompositeEditor.EditorChain<T,E> chain)

Description copied from interface: `CompositeEditor`
Called by the Editor framework to provide the `CompositeEditor.EditorChain`.

Specified by:
  `setEditorChain` in interface `CompositeEditor<T,T,E extends Editor<? super T>>`
Parameters:
  `chain` - an `CompositeEditor.EditorChain` instance

#### setValue

    public void setValue(T value)

Description copied from interface: `ValueAwareEditor`
Called by the EditorDriver to set the object the Editor is peered with

ValueAwareEditors should preferentially use sub-editors to alter the properties of the object being edited.

Specified by:
  `setValue` in interface `ValueAwareEditor<T>`
Specified by:
  `setValue` in interface `TakesValue<T>`
Parameters:
  `value` - a value of type T
See Also:
  `TakesValue.getValue()`