package org.ovirt.engine.ui.common.widget.editor.generic; import java.text.ParseException; import org.ovirt.engine.ui.common.widget.editor.EditorStateUpdateEvent; import org.ovirt.engine.ui.common.widget.editor.EditorWidget; import org.ovirt.engine.ui.common.widget.editor.HasEditorValidityState; import com.google.gwt.dom.client.Document; import com.google.gwt.editor.ui.client.adapters.ValueBoxEditor; import com.google.gwt.text.shared.Parser; import com.google.gwt.text.shared.Renderer; import com.google.gwt.user.client.ui.ValueBox; public class EntityModelTextBox<T> extends ValueBox<T> implements EditorWidget<T, ValueBoxEditor<T>>, HasEditorValidityState { private ObservableValueBoxEditor<T> editor; private boolean isValid = true; public EntityModelTextBox(Renderer<T> renderer, Parser<T> parser) { super(Document.get().createTextInputElement(), renderer, parser); } @Override public ValueBoxEditor<T> asEditor() { if (editor == null) { editor = new ObservableValueBoxEditor<>(this); } return editor; } /** * Return the parsed value, or null if the field is empty or parsing fails. If the validity of the box changes * fire an {@code EditorStateUpdateEvent}, so interested parties can handle it. */ @Override public T getValue() { T value = null; boolean originalValidState = isValid; try { value = getValueOrThrow(); isValid = true; } catch (ParseException e) { isValid = false; } if (originalValidState != isValid) { fireEvent(new EditorStateUpdateEvent(isValid)); } return value; } @Override public boolean isStateValid() { return isValid; } }