/* * Copyright 2010 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.ui.client.adapters; import com.google.gwt.editor.client.EditorDelegate; import com.google.gwt.editor.client.HasEditorDelegate; import com.google.gwt.editor.client.adapters.TakesValueEditor; import com.google.gwt.user.client.ui.ValueBoxBase; import java.text.ParseException; /** * Adapts the {@link ValueBoxBase} interface to the Editor framework. This * adapter uses {@link ValueBoxBase#getValueOrThrow()} to report parse errors to * the Editor framework. * * @param <T> the type of value to be edited */ public class ValueBoxEditor<T> extends TakesValueEditor<T> implements HasEditorDelegate<T> { /** * Returns a new TakesValueEditor that adapts a {@link ValueBoxBase} * instance. * * @param valueBox a {@link ValueBoxBase} instance to adapt * @return a ValueBoxEditor instance of the same type as the * adapted {@link ValueBoxBase} instance */ public static <T> ValueBoxEditor<T> of(ValueBoxBase<T> valueBox) { return new ValueBoxEditor<T>(valueBox); } private EditorDelegate<T> delegate; private final ValueBoxBase<T> peer; private T value; /** * Constructs a new ValueBoxEditor that adapts a {@link ValueBoxBase} peer * instance. * * @param peer a {@link ValueBoxBase} instance of type T */ protected ValueBoxEditor(ValueBoxBase<T> peer) { super(peer); this.peer = peer; } /** * Returns the {@link EditorDelegate} for this instance. * * @return an {@link EditorDelegate}, or {@code null} * @see #setDelegate(EditorDelegate) */ public EditorDelegate<T> getDelegate() { return delegate; } /** * Calls {@link ValueBoxBase#getValueOrThrow()}. If a {@link ParseException} * is thrown, it will be available through * {@link com.google.gwt.editor.client.EditorError#getUserData() * EditorError.getUserData()}. * * @return a value of type T * @see #setValue(Object) */ @Override public T getValue() { try { value = peer.getValueOrThrow(); } catch (ParseException e) { // TODO i18n getDelegate().recordError("Bad value (" + peer.getText() + ")", peer.getText(), e); } return value; } /** * Sets the {@link EditorDelegate} for this instance. This method is only * called by the driver. * * @param delegate an {@link EditorDelegate}, or {@code null} * @see #getDelegate() */ public void setDelegate(EditorDelegate<T> delegate) { this.delegate = delegate; } @Override public void setValue(T value) { peer.setValue(this.value = value); } }