blob: 9ca0e49b6d6e3e4082b840c4bdd68d0f7f88be1d [file] [log] [blame]
/*
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.editor.client;
/**
* Describes an Editor within an Editor hierarchy.
*
* @param <T> The type of data edited by the Editor
* @see com.google.gwt.editor.client.testing.FakeEditorContext
*/
public interface EditorContext<T> {
String ROOT_PATH = "";
/**
* Returns a non-null value if the editor returned by {@link #getEditor()}
* implements {@link CompositeEditor}.
*/
CompositeEditor<T, ?, ?> asCompositeEditor();
/**
* Returns a non-null value if the editor returned by {@link #getEditor()}
* implements {@link HasEditorDelegate}.
*/
HasEditorDelegate<T> asHasEditorDelegate();
/**
* Returns a non-null value if the editor returned by {@link #getEditor()}
* implements {@link HasEditorErrors}.
*/
HasEditorErrors<T> asHasEditorErrors();
/**
* Returns a non-null value if the editor returned by {@link #getEditor()}
* implements {@link LeafValueEditor}.
*/
LeafValueEditor<T> asLeafValueEditor();
/**
* Returns a non-null value if the editor returned by {@link #getEditor()}
* implements {@link ValueAwareEditor}.
*/
ValueAwareEditor<T> asValueAwareEditor();
/**
* Returns {@code true} if {@link #setInModel(Object)} can be called
* successfully.
*/
boolean canSetInModel();
/**
* Returns {@code value} cast to the type accepted by the Editor or throws a
* {@link ClassCastException}.
*
* @param value any value, including {@code null}
* @return {@code value} cast to the {@code T} type
* @throws ClassCastException if {@code} value is not assignable to the type
* {@code T}
*/
T checkAssignment(Object value);
/**
* Returns the absolute path of the Editor within the hierarchy. This method
* should be preferred to calling {@code getEditorDelegate().getPath()}
* becasue not all {@link LeafValueEditor LeafValueEditors} are guaranteed to
* have an associated delegate.
*/
String getAbsolutePath();
/**
* Returns the {@code T} type.
*/
Class<T> getEditedType();
/**
* Returns the associated Editor.
*/
Editor<T> getEditor();
/**
* Returns the {@link EditorDelegate} associated with the current Editor,
* which may be {@code null} for {@link LeafValueEditor LeafValueEditors}.
*/
EditorDelegate<T> getEditorDelegate();
/**
* Returns the value to be edited by the current editor.
*/
T getFromModel();
/**
* Sets a new value in the data hierarchy being edited. The
* {@link #checkAssignment(Object)} method may be used to avoid an unsafe
* generic cast.
*/
void setInModel(T data);
/**
* Traverse an editor created by
* {@link CompositeEditor#createEditorForTraversal()} that reflects an
* uninitialized instance of a composite sub-editor. This can be used to
* examine the internal structure of a {@link CompositeEditor} even if there
* are no data elements being edited by that editor.
*
* @throws IllegalStateException if the current Editor is not a
* CompositeEditor
*/
void traverseSyntheticCompositeEditor(EditorVisitor visitor);
}