Cherry picking bugs from trunk into release branch: 1012801, 1007801, 1010801, 988802, 1005801, 1002801, 1011801
git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/2.1@9083 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/samples/expenses/pom.xml b/samples/expenses/pom.xml
index 7e45bb9..b45c4d4 100644
--- a/samples/expenses/pom.xml
+++ b/samples/expenses/pom.xml
@@ -10,12 +10,25 @@
<roo.version>1.1.0.M2</roo.version>
<spring.version>3.0.3.RELEASE</spring.version>
<slf4j.version>1.6.1</slf4j.version>
- <gae.version>1.3.4</gae.version>
- <gae-test.version>1.3.4</gae-test.version>
+ <gae.version>1.3.7</gae.version>
+ <gae-test.version>1.3.7</gae-test.version>
<gae.home>${user.home}/.m2/repository/com/google/appengine/appengine-java-sdk/${gae.version}/appengine-java-sdk-${gae.version}</gae.home>
- <datanucleus.version>1.1.6</datanucleus.version>
+ <datanucleus.version>1.1.5</datanucleus.version>
</properties>
<repositories>
+ <repository>
+ <id>google-maven-snapshot-repository</id>
+ <name>Google Maven Snapshot Repository</name>
+ <url>https://oss.sonatype.org/content/repositories/google-snapshots/</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>maven-gae-plugin-repo</id>
+ <url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
+ <name>maven-gae-plugin repository</name>
+ </repository>
<repository>
<id>spring-maven-release</id>
<name>Spring Maven Release Repository</name>
@@ -31,11 +44,6 @@
<name>Spring Roo Repository</name>
<url>http://spring-roo-repository.springsource.org/release</url>
</repository>
- <repository>
- <id>maven-gae-plugin-repo</id>
- <url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
- <name>maven-gae-plugin repository</name>
- </repository>
<repository>
<id>DataNucleus_2</id>
<url>http://www.datanucleus.org/downloads/maven2/</url>
@@ -46,18 +54,15 @@
<url>https://repository.jboss.org/nexus/content/repositories/releases</url>
<name>JBoss Repo</name>
</repository>
+<!--
<repository>
<id>gwt-repo</id>
<url>http://google-web-toolkit.googlecode.com/svn/2.1.0.M3/gwt/maven</url>
<name>Google Web Toolkit Repository</name>
</repository>
+-->
</repositories>
<pluginRepositories>
- <pluginRepository>
- <id>maven-gae-plugin-repo</id>
- <url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
- <name>maven-gae-plugin repository</name>
- </pluginRepository>
<pluginRepository>
<id>DataNucleus_2</id>
<url>http://www.datanucleus.org/downloads/maven2/</url>
@@ -437,6 +442,11 @@
<type>jar</type>
<scope>compile</scope>
</dependency>
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ <version>2.7.1</version>
+ </dependency>
</dependencies>
<build>
<plugins>
@@ -549,7 +559,7 @@
<plugin>
<groupId>net.kindleit</groupId>
<artifactId>maven-gae-plugin</artifactId>
- <version>0.5.7</version>
+ <version>0.7.2</version>
<configuration>
<unpackVersion>${gae.version}</unpackVersion>
</configuration>
@@ -611,7 +621,7 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
- <version>1.3.1.google</version>
+ <version>1.3.2.google</version>
<configuration>
<logLevel>INFO</logLevel>
<style>PRETTY</style>
diff --git a/user/src/com/google/gwt/cell/client/AbstractEditableCell.java b/user/src/com/google/gwt/cell/client/AbstractEditableCell.java
index 2bac676..a99eb8f 100644
--- a/user/src/com/google/gwt/cell/client/AbstractEditableCell.java
+++ b/user/src/com/google/gwt/cell/client/AbstractEditableCell.java
@@ -76,6 +76,7 @@
*
* @param key the key identifying the row object
* @return the view data, or null if none has been set
+ * @see #setViewData(Object, Object)V
*/
public V getViewData(Object key) {
return (key == null) ? null : viewDataMap.get(key);
@@ -90,6 +91,7 @@
* @param parent the parent Element
* @param value the value associated with the cell
* @param key the unique key associated with the row object
+ * @return true if the cell is in edit mode
*/
@Override
public abstract boolean isEditing(Element parent, C value, Object key);
@@ -100,6 +102,7 @@
*
* @param key the key of the view data
* @param viewData the view data to associate
+ * @see #getViewData(Object)
*/
public void setViewData(Object key, V viewData) {
if (key == null) {
diff --git a/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java b/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java
index 0e2bbfd..4d7bc32 100644
--- a/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java
+++ b/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java
@@ -65,6 +65,8 @@
/**
* Return the {@link SafeHtmlRenderer} used by this cell.
+ *
+ * @return a {@link SafeHtmlRenderer} instance
*/
public SafeHtmlRenderer<C> getRenderer() {
return renderer;
diff --git a/user/src/com/google/gwt/cell/client/ActionCell.java b/user/src/com/google/gwt/cell/client/ActionCell.java
index 8e06066..0003118 100644
--- a/user/src/com/google/gwt/cell/client/ActionCell.java
+++ b/user/src/com/google/gwt/cell/client/ActionCell.java
@@ -37,6 +37,8 @@
public static interface Delegate<T> {
/**
* Perform the desired action on the given object.
+ *
+ * @param object the object to be acted upon
*/
void execute(T object);
}
diff --git a/user/src/com/google/gwt/cell/client/ButtonCell.java b/user/src/com/google/gwt/cell/client/ButtonCell.java
index e819440..d8caa83 100644
--- a/user/src/com/google/gwt/cell/client/ButtonCell.java
+++ b/user/src/com/google/gwt/cell/client/ButtonCell.java
@@ -36,6 +36,8 @@
/**
* Construct a new ButtonCell that will use a given {@link SafeHtmlRenderer}.
+ *
+ * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
*/
public ButtonCell(SafeHtmlRenderer<String> renderer) {
super(renderer, "click", "keydown");
diff --git a/user/src/com/google/gwt/cell/client/Cell.java b/user/src/com/google/gwt/cell/client/Cell.java
index 85bb507..217217f 100644
--- a/user/src/com/google/gwt/cell/client/Cell.java
+++ b/user/src/com/google/gwt/cell/client/Cell.java
@@ -41,12 +41,10 @@
boolean dependsOnSelection();
/**
- * <p>
* Get the set of events that this cell consumes. The container that uses this
* cell should only pass these events to
- * {@link #onBrowserEvent(Element, Object, Object, NativeEvent, ValueUpdater)}
- * .
- * </p>
+ * {@link #onBrowserEvent(Element, Object, Object, NativeEvent, ValueUpdater)}.
+ *
* <p>
* The returned value should not be modified, and may be an unmodifiable set.
* Changes to the return value may not be reflected in the cell.
@@ -73,6 +71,7 @@
* @param parent the parent Element
* @param value the value associated with the cell
* @param key the unique key associated with the row object
+ * @return true if the cell is in edit mode
*/
boolean isEditing(Element parent, C value, Object key);
@@ -109,6 +108,10 @@
* Reset focus on the Cell. This method is called if the cell has focus when
* it is refreshed.
*
+ * @param parent the parent Element
+ * @param value the value associated with the cell
+ * @param key the unique key associated with the row object
+ *
* @return true if focus is taken, false if not
*/
boolean resetFocus(Element parent, C value, Object key);
diff --git a/user/src/com/google/gwt/cell/client/ClickableTextCell.java b/user/src/com/google/gwt/cell/client/ClickableTextCell.java
index 2c57c59..16fbe38 100644
--- a/user/src/com/google/gwt/cell/client/ClickableTextCell.java
+++ b/user/src/com/google/gwt/cell/client/ClickableTextCell.java
@@ -39,6 +39,8 @@
/**
* Construct a new ClickableTextCell that will use a given
* {@link SafeHtmlRenderer}.
+ *
+ * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
*/
public ClickableTextCell(SafeHtmlRenderer<String> renderer) {
super(renderer, "click", "keydown");
diff --git a/user/src/com/google/gwt/cell/client/DatePickerCell.java b/user/src/com/google/gwt/cell/client/DatePickerCell.java
index 236fb03..49df900 100644
--- a/user/src/com/google/gwt/cell/client/DatePickerCell.java
+++ b/user/src/com/google/gwt/cell/client/DatePickerCell.java
@@ -79,6 +79,8 @@
/**
* Constructs a new DatePickerCell that uses the given date/time format and a
* {@link SimpleSafeHtmlRenderer}.
+ *
+ * @param format a {@link DateTimeFormat} instance
*/
public DatePickerCell(DateTimeFormat format) {
this(format, SimpleSafeHtmlRenderer.getInstance());
@@ -88,6 +90,8 @@
* Constructs a new DatePickerCell that uses the date/time format given by
* {@link DateTimeFormat#getFullDateFormat} and the given
* {@link SafeHtmlRenderer}.
+ *
+ * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
*/
public DatePickerCell(SafeHtmlRenderer<String> renderer) {
this(DateTimeFormat.getFormat(PredefinedFormat.DATE_FULL), renderer);
@@ -96,6 +100,9 @@
/**
* Constructs a new DatePickerCell that uses the given date/time format and
* {@link SafeHtmlRenderer}.
+ *
+ * @param format a {@link DateTimeFormat} instance
+ * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
*/
public DatePickerCell(DateTimeFormat format, SafeHtmlRenderer<String> renderer) {
super("click", "keydown");
diff --git a/user/src/com/google/gwt/cell/client/EditTextCell.java b/user/src/com/google/gwt/cell/client/EditTextCell.java
index 07d5ef8..004967b 100644
--- a/user/src/com/google/gwt/cell/client/EditTextCell.java
+++ b/user/src/com/google/gwt/cell/client/EditTextCell.java
@@ -145,8 +145,9 @@
}
/**
- * Construct a new EditTextCell that will use a given {@link SafeHtmlRenderer}
- * .
+ * Construct a new EditTextCell that will use a given {@link SafeHtmlRenderer}.
+ *
+ * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
*/
public EditTextCell(SafeHtmlRenderer<String> renderer) {
super("click", "keyup", "keydown", "blur");
diff --git a/user/src/com/google/gwt/cell/client/ImageLoadingCell.java b/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
index 10c1a24..67a3e23 100644
--- a/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
+++ b/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
@@ -108,15 +108,30 @@
}
}
+ /**
+ * Returns the renderer for a broken image.
+ *
+ * @return a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
+ */
public SafeHtmlRenderer<String> getErrorRenderer() {
// Show the broken image on error.
return getImageRenderer();
}
+ /**
+ * Returns the renderer for an image.
+ *
+ * @return a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
+ */
public SafeHtmlRenderer<String> getImageRenderer() {
return IMAGE_RENDERER;
}
+ /**
+ * Returns the renderer for a loading image.
+ *
+ * @return a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
+ */
public SafeHtmlRenderer<String> getLoadingRenderer() {
return LOADING_RENDERER;
}
@@ -150,7 +165,8 @@
/**
* Construct an {@link ImageResourceCell} using the specified
* {@link SafeHtmlRenderer SafeHtmlRenderers}.
- *
+ *
+ * @param renderers an instance of {@link ImageLoadingCell.Renderers Renderers}
*/
public ImageLoadingCell(Renderers renderers) {
super("load", "error");
diff --git a/user/src/com/google/gwt/cell/client/TextCell.java b/user/src/com/google/gwt/cell/client/TextCell.java
index 0a6fbeb..48db9eb 100644
--- a/user/src/com/google/gwt/cell/client/TextCell.java
+++ b/user/src/com/google/gwt/cell/client/TextCell.java
@@ -36,6 +36,8 @@
/**
* Constructs a TextCell that uses the provided {@link SafeHtmlRenderer} to
* render its text.
+ *
+ * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
*/
public TextCell(SafeHtmlRenderer<String> renderer) {
super(renderer);
diff --git a/user/src/com/google/gwt/cell/client/TextInputCell.java b/user/src/com/google/gwt/cell/client/TextInputCell.java
index ca932e5..be1f7d5 100644
--- a/user/src/com/google/gwt/cell/client/TextInputCell.java
+++ b/user/src/com/google/gwt/cell/client/TextInputCell.java
@@ -52,6 +52,8 @@
/**
* Construct a ViewData instance containing a given value.
+ *
+ * @param value a String value
*/
public ViewData(String value) {
this.lastValue = value;
@@ -74,6 +76,9 @@
/**
* Return the current value of the input element.
+ *
+ * @return the current value String
+ * @see #setCurrentValue(String)
*/
public String getCurrentValue() {
return curValue;
@@ -81,6 +86,9 @@
/**
* Return the last value sent to the {@link ValueUpdater}.
+ *
+ * @return the last value String
+ * @see #setLastValue(String)
*/
public String getLastValue() {
return lastValue;
@@ -98,6 +106,7 @@
* Set the current value.
*
* @param curValue the current value
+ * @see #getCurrentValue()
*/
protected void setCurrentValue(String curValue) {
this.curValue = curValue;
@@ -107,6 +116,7 @@
* Set the last value.
*
* @param lastValue the last value
+ * @see #getLastValue()
*/
protected void setLastValue(String lastValue) {
this.lastValue = lastValue;
diff --git a/user/src/com/google/gwt/cell/client/package.html b/user/src/com/google/gwt/cell/client/package.html
index 2ad25ad..9e1d211 100644
--- a/user/src/com/google/gwt/cell/client/package.html
+++ b/user/src/com/google/gwt/cell/client/package.html
@@ -23,7 +23,7 @@
<li>{@link com.google.gwt.cell.client.SelectionCell SelectionCell} - a cell that displays a drop-down list</li>
<li>{@link com.google.gwt.cell.client.TextCell TextCell} - a cell that displays HTML text</li>
<li>{@link com.google.gwt.cell.client.TextInputCell TextInputCell} - a cell that provides text input</li>
-<ul>
+</ul>
</p>
<p>In addition to cells, this package provides the following interfaces:
@@ -33,5 +33,7 @@
<li>{@link com.google.gwt.cell.client.FieldUpdater FieldUpdater}</li>
</ul>
</p>
+
+@since GWT 2.1
</body>
</html>
diff --git a/user/src/com/google/gwt/editor/client/AutoBean.java b/user/src/com/google/gwt/editor/client/AutoBean.java
index 8e20ef4..f90e621 100644
--- a/user/src/com/google/gwt/editor/client/AutoBean.java
+++ b/user/src/com/google/gwt/editor/client/AutoBean.java
@@ -23,12 +23,16 @@
public interface AutoBean<T> {
/**
* Accept an AutoBeanVisitor.
+ *
+ * @param visitor an {@link AutoBeanVisitor}
*/
void accept(AutoBeanVisitor visitor);
/**
* Returns a proxy implementation of the <code>T</code> interface which will
* delegate to the underlying wrapped object, if any.
+ *
+ * @return a proxy that delegates to the wrapped object
*/
T as();
@@ -40,6 +44,7 @@
* of the value of <code>deep</code>.
*
* @param deep indicates if all referenced AutoBeans should be cloned
+ * @return a copy of this {@link AutoBean}
* @throws IllegalStateException if the AutoBean is a wrapper type
*/
AutoBean<T> clone(boolean deep);
@@ -47,36 +52,52 @@
/**
* Retrieve a tag value that was previously provided to
* {@link #setTag(String, Object)}.
+ *
+ * @param tagName the tag name
+ * @return the tag value
+ * @see #setTag(String, Object)
*/
<Q> Q getTag(String tagName);
/**
- * Returns the value most recently passed to {@link #setFrozen}, or false
- * if it has never been called.
+ * Returns the value most recently passed to {@link #setFrozen}, or {@code
+ * false} if it has never been called.
+ *
+ * @return {@code true} if this instance is frozen
*/
boolean isFrozen();
/**
- * Returns <code>true</code> if the AutoBean was provided with an external
+ * Returns {@code true} if the AutoBean was provided with an external
* object.
+ *
+ * @return {@code true} if this instance is a wrapper
*/
boolean isWrapper();
/**
* Disallows any method calls other than getters. All setter and call
* operations will throw an {@link UnsupportedOperationException}.
+ *
+ * @param frozen if {@code true}, freeze this instance
*/
void setFrozen(boolean frozen);
/**
* A tag is an arbitrary piece of external metadata to be associated with the
* wrapped value.
+ *
+ * @param tagName the tag name
+ * @param value the wrapped value
+ * @see #getTag(String)
*/
void setTag(String tagName, Object value);
/**
* If the AutoBean wraps an object, return the underlying object.
- *
+ * The AutoBean will no longer function once unwrapped.
+ *
+ * @return the previously-wrapped object
* @throws IllegalStateException if the AutoBean is not a wrapper
*/
T unwrap();
diff --git a/user/src/com/google/gwt/editor/client/AutoBeanFactory.java b/user/src/com/google/gwt/editor/client/AutoBeanFactory.java
index 3f7dc88..872e1b5 100644
--- a/user/src/com/google/gwt/editor/client/AutoBeanFactory.java
+++ b/user/src/com/google/gwt/editor/client/AutoBeanFactory.java
@@ -93,12 +93,24 @@
/**
* Allows dynamic creation of AutoBean instances based on declared
* parameterizations.
+ *
+ * @param <T> the parameterization of the created {@link AutoBean}
+ * @param clazz the Class of type T of the new instance
+ * @return an {@link AutoBean} of type T or {@code null} if the interface type
+ * is unknown to the factory
*/
<T> AutoBean<T> create(Class<T> clazz);
/**
* Allows dynamic creation of wrapped AutoBean instances based on declared
* parameterizations.
+ *
+ * @param <T> the parameterization of the created {@link AutoBean}
+ * @param <U> the delegate's type, a subtype of T
+ * @param clazz the Class of type T of the new instance
+ * @param delegate a delegate that extends type T
+ * @return an {@link AutoBean} of type T or {@code null} if the interface type
+ * is unknown to the factory
*/
<T, U extends T> AutoBean<T> create(Class<T> clazz, U delegate);
}
diff --git a/user/src/com/google/gwt/editor/client/AutoBeanUtils.java b/user/src/com/google/gwt/editor/client/AutoBeanUtils.java
index 67d346a..2299b9f 100644
--- a/user/src/com/google/gwt/editor/client/AutoBeanUtils.java
+++ b/user/src/com/google/gwt/editor/client/AutoBeanUtils.java
@@ -35,6 +35,10 @@
* although the diff produced is likely meaningless.
* <p>
* This will work for both simple and wrapper AutoBeans.
+ *
+ * @param a an {@link AutoBean}
+ * @param b an {@link AutoBean}
+ * @return a {@link Map} of differing properties
*/
public static Map<String, Object> diff(AutoBean<?> a, AutoBean<?> b) {
// Fast check for comparing an object to itself
@@ -93,6 +97,9 @@
* Returns a map that is a copy of the properties contained in an AutoBean.
* The returned map is mutable, but editing it will not have any effect on the
* bean that produced it.
+ *
+ * @param bean an {@link AutoBean}
+ * @return a {@link Map} of the bean's properties
*/
public static Map<String, Object> getAllProperties(AutoBean<?> bean) {
final Map<String, Object> toReturn = new LinkedHashMap<String, Object>();
@@ -118,8 +125,11 @@
/**
* Return the single AutoBean wrapper that is observing the delegate object or
- * <code>null</code> if the parameter is <code>null</code> or not wrapped by
+ * {@code null} if the parameter is {@code null}or not wrapped by
* an AutoBean.
+ *
+ * @param delegate a delegate object, or {@code null}
+ * @return the {@link AutoBean} wrapper for the delegate, or {@code null}
*/
@SuppressWarnings("unchecked")
public static <T, U extends T> AutoBean<T> getAutoBean(U delegate) {
diff --git a/user/src/com/google/gwt/editor/client/AutoBeanVisitor.java b/user/src/com/google/gwt/editor/client/AutoBeanVisitor.java
index 305d481..40c14d1 100644
--- a/user/src/com/google/gwt/editor/client/AutoBeanVisitor.java
+++ b/user/src/com/google/gwt/editor/client/AutoBeanVisitor.java
@@ -31,37 +31,49 @@
public interface PropertyContext {
/**
* Indicates if the {@link #set} method will succeed.
+ *
+ * @return {@code true} if the property can be set
*/
boolean canSet();
/**
* If the reference property is a collection, returns the collection's
* element type.
+ *
+ * @return a Class object representing the element type or {@code null} if
+ * the property is not a collection type
*/
Class<?> getElementType();
/**
* Returns the expected type of the property.
+ *
+ * @return a Class object representing the property type
*/
Class<?> getType();
+ /**
+ * Sets a property value.
+ *
+ * @param value the new value
+ */
void set(Object value);
}
/**
- * TODO: document.
+ * Called after visiting an {@link AutoBean}.
*
- * @param bean
+ * @param bean an {@link AutoBean}
* @param ctx a Context
*/
public void endVisit(AutoBean<?> bean, Context ctx) {
}
/**
- * TODO: document.
+ * Called after visiting a reference property.
*
- * @param propertyName
- * @param value
+ * @param propertyName the property name, as a String
+ * @param value the property value
* @param ctx a PropertyContext
*/
public void endVisitReferenceProperty(String propertyName, AutoBean<?> value,
@@ -69,10 +81,10 @@
}
/**
- * TODO: document.
+ * Called after visiting a value property.
*
- * @param propertyName
- * @param value
+ * @param propertyName the property name, as a String
+ * @param value the property value
* @param ctx a PropertyContext
*/
public void endVisitValueProperty(String propertyName, Object value,
@@ -80,9 +92,9 @@
}
/**
- * TODO: document.
+ * Called when visiting an {@link AutoBean}.
*
- * @param bean
+ * @param bean an {@link AutoBean}
* @param ctx a Context
*/
public boolean visit(AutoBean<?> bean, Context ctx) {
@@ -93,8 +105,8 @@
* Called every time, but {@link #visit(AutoBean, Context)} will be called for
* the value only the first time it is encountered.
*
- * @param propertyName
- * @param value
+ * @param propertyName the property name, as a String
+ * @param value the property value
* @param ctx a PropertyContext
*/
public boolean visitReferenceProperty(String propertyName, AutoBean<?> value,
@@ -105,8 +117,8 @@
/**
* TODO: document.
*
- * @param propertyName
- * @param value
+ * @param propertyName the property name, as a String
+ * @param value the property value
* @param ctx a PropertyContext
*/
public boolean visitValueProperty(String propertyName, Object value,
diff --git a/user/src/com/google/gwt/editor/client/CompositeEditor.java b/user/src/com/google/gwt/editor/client/CompositeEditor.java
index 95d48a6..48d458d 100644
--- a/user/src/com/google/gwt/editor/client/CompositeEditor.java
+++ b/user/src/com/google/gwt/editor/client/CompositeEditor.java
@@ -84,13 +84,25 @@
/**
* Returns an canonical sub-editor instance that will be used by the driver
* for computing all edited paths.
+ *
+ * @return an instance of the Editor type
*/
E createEditorForTraversal();
/**
- * Used to implement {@link EditorDelegate#getPath()}.
+ * Used to implement {@link EditorDelegate#getPath()} for the component
+ * Editors.
+ *
+ * @param subEditor an instance of the Editor type previously passed into
+ * {@link EditorChain#attach}
+ * @return the path element as a String
*/
String getPathElement(E subEditor);
+ /**
+ * Called by the Editor framework to provide the {@link EditorChain}.
+ *
+ * @param chain an {@link EditorChain} instance
+ */
void setEditorChain(EditorChain<C, E> chain);
}
diff --git a/user/src/com/google/gwt/editor/client/EditorDelegate.java b/user/src/com/google/gwt/editor/client/EditorDelegate.java
index b77dbde..87abeb3 100644
--- a/user/src/com/google/gwt/editor/client/EditorDelegate.java
+++ b/user/src/com/google/gwt/editor/client/EditorDelegate.java
@@ -29,6 +29,8 @@
public interface EditorDelegate<T> {
/**
* Returns the Editor's path, relative to the root object.
+ *
+ * @return the path as a String
*/
String getPath();
diff --git a/user/src/com/google/gwt/editor/client/EditorError.java b/user/src/com/google/gwt/editor/client/EditorError.java
index 1a9c0f3..6f62751 100644
--- a/user/src/com/google/gwt/editor/client/EditorError.java
+++ b/user/src/com/google/gwt/editor/client/EditorError.java
@@ -26,16 +26,22 @@
/**
* Returns the absolute path location of the error, relative to the object
* that was passed into the EditorDriver.
+ *
+ * @return the absolute path as a String
*/
String getAbsolutePath();
/**
* Returns the Editor that holds the invalid value.
+ *
+ * @return the Editor instance
*/
Editor<?> getEditor();
/**
* Returns a message associated with the error.
+ *
+ * @return the error message as a String
*/
String getMessage();
@@ -43,28 +49,40 @@
* Returns the path of the error relative to the Editor receiving the error.
* If the error concerns the Editor that is receiving the error, this method
* will return an empty string.
+ *
+ * @return the error path as a String
*/
String getPath();
/**
* Returns the object passed into {@link EditorDelegate#recordError}.
+ *
+ * @return the user data Object
*/
Object getUserData();
/**
* Returns the value that triggered the error.
+ *
+ * @return the error value Object
*/
Object getValue();
/**
* Indicates whether or not the EditorError will be propagated to the
* enclosing Editor.
+ *
+ * @return {@code true} if the error will not be propagated
+ * @see #setConsumed(boolean)
*/
boolean isConsumed();
/**
* Indicates whether or not the EditorError will be propagated to the
* enclosing Editor.
+ *
+ * @param consumed {@code true} if the error will not be propagated
+ * @see #isConsumed()
*/
void setConsumed(boolean consumed);
}
diff --git a/user/src/com/google/gwt/editor/client/HasEditorDelegate.java b/user/src/com/google/gwt/editor/client/HasEditorDelegate.java
index 641bc81..9821cde 100644
--- a/user/src/com/google/gwt/editor/client/HasEditorDelegate.java
+++ b/user/src/com/google/gwt/editor/client/HasEditorDelegate.java
@@ -25,6 +25,8 @@
/**
* Called by the EditorDriver to provide access to the EditorDelegate the
* Editor is peered with.
+ *
+ * @param delegate an {@link EditorDelegate} of type T
*/
void setDelegate(EditorDelegate<T> delegate);
diff --git a/user/src/com/google/gwt/editor/client/IsEditor.java b/user/src/com/google/gwt/editor/client/IsEditor.java
index f787df2..fe5f282 100644
--- a/user/src/com/google/gwt/editor/client/IsEditor.java
+++ b/user/src/com/google/gwt/editor/client/IsEditor.java
@@ -50,6 +50,8 @@
public interface IsEditor<E extends Editor<?>> {
/**
* Returns the Editor encapsulated by the view object.
+ *
+ * @return an {@link Editor} of type E
*/
E asEditor();
}
diff --git a/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java b/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java
index 6d08afd..7ea8245 100644
--- a/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java
+++ b/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java
@@ -59,11 +59,15 @@
/**
* Returns any unconsumed EditorErrors from the last call to {@link #flush()}.
+ *
+ * @return a List of {@link EditorError} instances
*/
List<EditorError> getErrors();
/**
* Indicates if the last call to {@link #flush()} resulted in any errors.
+ *
+ * @return {@code true} if errors are present
*/
boolean hasErrors();
diff --git a/user/src/com/google/gwt/editor/client/ValueAwareEditor.java b/user/src/com/google/gwt/editor/client/ValueAwareEditor.java
index 84da806..4dc7019 100644
--- a/user/src/com/google/gwt/editor/client/ValueAwareEditor.java
+++ b/user/src/com/google/gwt/editor/client/ValueAwareEditor.java
@@ -32,6 +32,8 @@
/**
* Notifies the Editor that one or more value properties have changed. Not all
* backing services support property-based notifications.
+ *
+ * @param paths a list of String paths
*/
void onPropertyChange(String... paths);
@@ -40,6 +42,8 @@
* <p>
* ValueAwareEditors should preferentially use sub-editors to alter the
* properties of the object being edited.
+ *
+ * @param value a value of type T
*/
void setValue(T value);
}
diff --git a/user/src/com/google/gwt/editor/client/adapters/EditorSource.java b/user/src/com/google/gwt/editor/client/adapters/EditorSource.java
index 27731fe..6a1d779 100644
--- a/user/src/com/google/gwt/editor/client/adapters/EditorSource.java
+++ b/user/src/com/google/gwt/editor/client/adapters/EditorSource.java
@@ -32,6 +32,7 @@
* Create a new Editor.
*
* @param index the position at which the new Editor should be displayed
+ * @return an {@link Editor} of type E
*/
public abstract E create(int index);
@@ -41,6 +42,7 @@
*
* @param count the number of Editors desired
* @param index the position at which the new Editors should be displayed
+ * @return a List of {@link Editor}s of type E
*/
public List<E> create(int count, int index) {
List<E> toReturn = new ArrayList<E>(count);
@@ -54,7 +56,7 @@
* Called when an Editor no longer requires a sub-Editor. The default
* implementation is a no-op.
*
- * @param subEditor
+ * @param subEditor an {@link Editor} of type E
*/
public void dispose(E subEditor) {
}
@@ -62,8 +64,8 @@
/**
* Re-order a sub-Editor. The default implementation is a no-op.
*
- * @param editor
- * @param index
+ * @param editor an {@link Editor} of type E
+ * @param index the index of the Editor
*/
public void setIndex(E editor, int index) {
}
diff --git a/user/src/com/google/gwt/editor/client/adapters/ListEditor.java b/user/src/com/google/gwt/editor/client/adapters/ListEditor.java
index 988aaa2..5a6373e 100644
--- a/user/src/com/google/gwt/editor/client/adapters/ListEditor.java
+++ b/user/src/com/google/gwt/editor/client/adapters/ListEditor.java
@@ -48,10 +48,20 @@
private EditorSource<E> editorSource;
private ListEditorWrapper<T, E> list;
+ /**
+ * Create a ListEditor backed by an EditorSource.
+ *
+ * @param source the EditorSource which will create sub-Editors
+ */
protected ListEditor(EditorSource<E> source) {
this.editorSource = source;
}
+ /**
+ * Creates a temporary sub-Editor to use for traversal.
+ *
+ * @return an {@link Editor} of type E
+ */
public E createEditorForTraversal() {
E toReturn = editorSource.create(0);
editorSource.dispose(toReturn);
@@ -65,6 +75,8 @@
/**
* Returns an unmodifiable, live view of the Editors managed by the
* ListEditor.
+ *
+ * @return a List of {@link Editor Editors} of type E
*/
public List<E> getEditors() {
if (list == null) {
@@ -85,6 +97,8 @@
* listEditor.getList().set(1, new Foo());
* listEditor.getEditors().get(1).getFooFieldEditor().setValue(....);
* </pre>
+ *
+ * @return a live view of the ListEditor's backing data
*/
public List<T> getList() {
return list;
@@ -104,6 +118,11 @@
this.chain = chain;
}
+ /**
+ * Sets the ListEditor's backing data.
+ *
+ * @param value a List of data objects of type T
+ */
public void setValue(List<T> value) {
if (list != null) {
// Having entire value reset, so dump the wrapper gracefully
diff --git a/user/src/com/google/gwt/editor/client/adapters/OptionalFieldEditor.java b/user/src/com/google/gwt/editor/client/adapters/OptionalFieldEditor.java
index 0373e16..6c7d7b2 100644
--- a/user/src/com/google/gwt/editor/client/adapters/OptionalFieldEditor.java
+++ b/user/src/com/google/gwt/editor/client/adapters/OptionalFieldEditor.java
@@ -59,10 +59,22 @@
private T currentValue;
private final E subEditor;
+ /**
+ * Construct an OptionalFieldEditor backed by the given sub-Editor.
+ *
+ * @param subEditor the sub-Editor that will be attached to the Editor
+ * hierarchy
+ */
protected OptionalFieldEditor(E subEditor) {
this.subEditor = subEditor;
}
+ /**
+ * Returns the sub-Editor that the OptionalFieldEditor was constructed
+ * with.
+ *
+ * @return an {@link Editor} of type E
+ */
public E createEditorForTraversal() {
return subEditor;
}
diff --git a/user/src/com/google/gwt/editor/client/adapters/SimpleEditor.java b/user/src/com/google/gwt/editor/client/adapters/SimpleEditor.java
index d48ee9a..d1e8833 100644
--- a/user/src/com/google/gwt/editor/client/adapters/SimpleEditor.java
+++ b/user/src/com/google/gwt/editor/client/adapters/SimpleEditor.java
@@ -25,7 +25,9 @@
*/
public class SimpleEditor<T> implements LeafValueEditor<T> {
/**
- * Returns a new ValueEditor that holds a <code>null</code> value.
+ * Returns a new ValueEditor that holds a {@code null} value.
+ *
+ * @return a SimpleEditor instance holding a {@code null} value
*/
public static <T> SimpleEditor<T> of() {
return new SimpleEditor<T>(null);
@@ -33,6 +35,9 @@
/**
* Returns a new ValueEditor that holds the given value.
+ *
+ * @param value a data object of type T
+ * @return a SimpleEditor instance holding the given value
*/
public static <T> SimpleEditor<T> of(T value) {
return new SimpleEditor<T>(value);
@@ -40,6 +45,11 @@
private T value;
+ /**
+ * Constructs a new SimpleEditor that holds the given value.
+ *
+ * @param value a data object of type T
+ */
protected SimpleEditor(T value) {
this.value = value;
}
diff --git a/user/src/com/google/gwt/editor/client/adapters/TakesValueEditor.java b/user/src/com/google/gwt/editor/client/adapters/TakesValueEditor.java
index 2472e85..6e45531 100644
--- a/user/src/com/google/gwt/editor/client/adapters/TakesValueEditor.java
+++ b/user/src/com/google/gwt/editor/client/adapters/TakesValueEditor.java
@@ -24,13 +24,25 @@
* @param <T> the type of value to be edited
*/
public class TakesValueEditor<T> implements LeafValueEditor<T> {
-
+ /**
+ * Returns a new ValueEditor that modifies the given {@link TakesValue} peer
+ * instance.
+ *
+ * @param peer a {@link TakesValue} instance
+ * @return a TakesValueEditor instance of the same type as its peer
+ */
public static <T> TakesValueEditor<T> of(TakesValue<T> peer) {
return new TakesValueEditor<T>(peer);
}
private final TakesValue<T> peer;
+ /**
+ * Returns a new ValueEditor that modifies the given {@link TakesValue} peer
+ * instance.
+ *
+ * @param peer a {@link TakesValue} instance
+ */
protected TakesValueEditor(TakesValue<T> peer) {
this.peer = peer;
}
diff --git a/user/src/com/google/gwt/editor/client/adapters/package.html b/user/src/com/google/gwt/editor/client/adapters/package.html
new file mode 100644
index 0000000..01c6238
--- /dev/null
+++ b/user/src/com/google/gwt/editor/client/adapters/package.html
@@ -0,0 +1,7 @@
+<html>
+<body>
+<p>Adapters for the bean editor framework.</p>
+
+@since GWT 2.1
+</body>
+</html>
diff --git a/user/src/com/google/gwt/editor/client/package.html b/user/src/com/google/gwt/editor/client/package.html
new file mode 100644
index 0000000..8966953
--- /dev/null
+++ b/user/src/com/google/gwt/editor/client/package.html
@@ -0,0 +1,7 @@
+<html>
+<body>
+<p>A framework for editing bean-like objects.</p>
+
+@since GWT 2.1
+</body>
+</html>
diff --git a/user/src/com/google/gwt/editor/ui/client/ValueBoxEditorDecorator.java b/user/src/com/google/gwt/editor/ui/client/ValueBoxEditorDecorator.java
index eb8551e..226d912 100644
--- a/user/src/com/google/gwt/editor/ui/client/ValueBoxEditorDecorator.java
+++ b/user/src/com/google/gwt/editor/ui/client/ValueBoxEditorDecorator.java
@@ -44,7 +44,7 @@
* For example:
* <pre>
* @UiField
- * ValueBoxEditorDecorator<String> name;
+ * ValueBoxEditorDecorator<String> name;
* </pre>
* <pre>
* <e:ValueBoxEditorDecorator ui:field='name'>
@@ -70,11 +70,21 @@
private ValueBoxEditor<T> editor;
+ /**
+ * Constructs a ValueBoxEditorDecorator.
+ */
@UiConstructor
public ValueBoxEditorDecorator() {
initWidget(Binder.BINDER.createAndBindUi(this));
}
+ /**
+ * Constructs a ValueBoxEditorDecorator using a {@link ValueBoxBase}
+ * widget and a {@link ValueBoxEditor} editor.
+ *
+ * @param widget the widget
+ * @param editor the editor
+ */
public ValueBoxEditorDecorator(ValueBoxBase<T> widget,
ValueBoxEditor<T> editor) {
this();
@@ -82,10 +92,22 @@
this.editor = editor;
}
+ /**
+ * Returns the associated {@link ValueBoxEditor}.
+ *
+ * @return a {@link ValueBoxEditor} instance
+ * @see #setEditor(ValueBoxEditor)
+ */
public ValueBoxEditor<T> asEditor() {
return editor;
}
+ /**
+ * Sets the associated {@link ValueBoxEditor}.
+ *
+ * @param editor a {@link ValueBoxEditor} instance
+ * @see #asEditor()
+ */
public void setEditor(ValueBoxEditor<T> editor) {
this.editor = editor;
}
@@ -93,6 +115,8 @@
/**
* Set the widget that the EditorPanel will display. This method will
* automatically call {@link #setEditor}.
+ *
+ * @param widget a {@link ValueBoxBase} widget
*/
@UiChild(limit = 1, tagname = "valuebox")
public void setValueBox(ValueBoxBase<T> widget) {
@@ -104,6 +128,8 @@
* The default implementation will display, but not consume, received errors
* whose {@link EditorError#getEditor() getEditor()} method returns the Editor
* passed into {@link #setEditor}.
+ *
+ * @param errors a List of {@link EditorError} instances
*/
public void showErrors(List<EditorError> errors) {
StringBuilder sb = new StringBuilder();
diff --git a/user/src/com/google/gwt/editor/ui/client/adapters/HasTextEditor.java b/user/src/com/google/gwt/editor/ui/client/adapters/HasTextEditor.java
index 00f3fe4..a34d724 100644
--- a/user/src/com/google/gwt/editor/ui/client/adapters/HasTextEditor.java
+++ b/user/src/com/google/gwt/editor/ui/client/adapters/HasTextEditor.java
@@ -22,12 +22,25 @@
* Adapts the HasText interface to the Editor framework.
*/
public class HasTextEditor implements LeafValueEditor<String> {
+ /**
+ * Returns a new ValueEditor that that modifies the given {@link HasText} peer
+ * instance.
+ *
+ * @param peer a {@link HasText} instance
+ * @return a HasTextEditor instance
+ */
public static HasTextEditor of(HasText peer) {
return new HasTextEditor(peer);
}
private HasText peer;
+ /**
+ * Constructs a new HasTextEditor that that modifies the given {@link HasText}
+ * peer instance.
+ *
+ * @param peer a {@link HasText} instance
+ */
protected HasTextEditor(HasText peer) {
this.peer = peer;
}
diff --git a/user/src/com/google/gwt/editor/ui/client/adapters/ValueBoxEditor.java b/user/src/com/google/gwt/editor/ui/client/adapters/ValueBoxEditor.java
index 9dc6956..ad18aea 100644
--- a/user/src/com/google/gwt/editor/ui/client/adapters/ValueBoxEditor.java
+++ b/user/src/com/google/gwt/editor/ui/client/adapters/ValueBoxEditor.java
@@ -32,6 +32,14 @@
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);
}
@@ -40,11 +48,23 @@
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;
}
@@ -54,6 +74,9 @@
* 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() {
@@ -67,6 +90,13 @@
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;
}
diff --git a/user/src/com/google/gwt/editor/ui/client/adapters/package.html b/user/src/com/google/gwt/editor/ui/client/adapters/package.html
new file mode 100644
index 0000000..24bafb4
--- /dev/null
+++ b/user/src/com/google/gwt/editor/ui/client/adapters/package.html
@@ -0,0 +1,7 @@
+<html>
+<body>
+<p>User interface adapters for the bean editor framework.</p>
+
+@since GWT 2.1
+</body>
+</html>
diff --git a/user/src/com/google/gwt/editor/ui/client/package.html b/user/src/com/google/gwt/editor/ui/client/package.html
new file mode 100644
index 0000000..4c7efad
--- /dev/null
+++ b/user/src/com/google/gwt/editor/ui/client/package.html
@@ -0,0 +1,7 @@
+<html>
+<body>
+<p>User interface components for the bean editor framework.</p>
+
+@since GWT 2.1
+</body>
+</html>
diff --git a/user/src/com/google/gwt/requestfactory/client/DefaultRequestTransport.java b/user/src/com/google/gwt/requestfactory/client/DefaultRequestTransport.java
index 93fac74..0fd2571 100644
--- a/user/src/com/google/gwt/requestfactory/client/DefaultRequestTransport.java
+++ b/user/src/com/google/gwt/requestfactory/client/DefaultRequestTransport.java
@@ -25,9 +25,9 @@
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.requestfactory.shared.RequestEvent;
+import com.google.gwt.requestfactory.shared.RequestEvent.State;
import com.google.gwt.requestfactory.shared.RequestFactory;
import com.google.gwt.requestfactory.shared.RequestTransport;
-import com.google.gwt.requestfactory.shared.RequestEvent.State;
import com.google.gwt.user.client.Window.Location;
import java.util.logging.Level;
@@ -36,6 +36,18 @@
/**
* An implementation of {@link RequestTransport} that uses a
* {@link RequestBuilder}.
+ * <p>
+ * This implementation will send {@link RequestEvent} objects to the
+ * {@link EventBus} passed into the constructor to provide indication of
+ * transport-level activity. When an HTTP request is sent, an event with a
+ * {@link State#SENT} state and a {@code null} {@link Request} will be posted.
+ * When an HTTP transport completes successfully, an event will be posted with
+ * state {@link State#RECEIVED} and the {@link Request} object provided to the
+ * internal {@link RequestCallback#onResponseReceived()}. If an HTTP transport
+ * fails (e.g. due to network malfunction), an event with state
+ * {@link State#RECEIVED} and a {@code null} {@link Request} will be sent. The
+ * success or failure of the HTTP transport is wholly independent from whether
+ * or not the application payload was successfully executed by the server.
*/
public class DefaultRequestTransport implements RequestTransport {
diff --git a/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java b/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
index 1b44616..dc88565 100644
--- a/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
+++ b/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
@@ -19,6 +19,33 @@
/**
* Marker interface for the RequestFactory code generator.
+ * <p>
+ * A RequestFactory implementation will post {@link EntityProxyChange} events to
+ * the {@link EventBus} passed into the {@link #initialize} method. The events
+ * will have the following {@link WriteOperation} associated with them in the
+ * following circumstances:
+ * <ul>
+ * <li>{@link WriteOperation#PERSIST} when an {@link EntityProxy}
+ * {@link RequestContext#create(Class) created} on the client is successfully
+ * persisted in the server's backing store.</li>
+ * <li>{@link WriteOperation#UPDATE} when changes due to an {@link EntityProxy}
+ * being {@link RequestContext#edit(EntityProxy) edited} on the client are
+ * successfully persisted in the server's backing store.</li>
+ * <li>{@link WriteOperation#UPDATE} when a previously-unseen
+ * {@link EntityProxy} is reachable from the return value for a
+ * successfully-executed {@link Request}.</li>
+ * <li>{@link WriteOperation#UPDATE} when any property of an {@link EntityProxy}
+ * reachable from a {@link Request Request's} arguments is seen to have changed
+ * after executing the service method on the server.</li>
+ * <li>{@link WriteOperation#DELETE} when an {@link EntityProxy} reachable from
+ * a {@link Request Request's} arguments becomes irretrievable after executing
+ * the service method on the server.</li>
+ * </ul>
+ * <p>
+ * Other types of events may be posted to the {@link EventBus} by other services
+ * used by the RequestFactory.
+ *
+ * @see {@link com.google.gwt.requestfactory.client.DefaultRequestTransport}
*/
public interface RequestFactory {
String JSON_CONTENT_TYPE_UTF8 = "application/json; charset=utf-8";
diff --git a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
index 7ab531e..8dcd61d 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
@@ -968,7 +968,7 @@
/**
* Set the open state of a tree node.
- *
+ *
* @param cellList the CellList that changed state.
* @param value the value to open
* @param open true to open, false to close
@@ -1029,12 +1029,9 @@
}
// Close the node.
- TreeNode closedNode = cellList.isFocusedOpen
+ TreeNode closedNode = (cellList.isFocusedOpen && (treeNodes.size() > cellList.level + 1))
? treeNodes.get(cellList.level + 1) : null;
trimToLevel(cellList.level);
- cellList.focusedKey = null;
- cellList.focusedValue = null;
- cellList.isFocusedOpen = false;
// Refresh the display to update the styles for this node.
if (redraw) {
@@ -1065,5 +1062,13 @@
removed.destroy();
curLevel--;
}
+
+ // Nullify the focused key at the level.
+ if (level < treeNodes.size()) {
+ TreeNodeImpl<?> node = treeNodes.get(level);
+ node.display.focusedKey = null;
+ node.display.focusedValue = null;
+ node.display.isFocusedOpen = false;
+ }
}
}
diff --git a/user/src/com/google/gwt/user/client/TakesValue.java b/user/src/com/google/gwt/user/client/TakesValue.java
index 11fd99e..1e15f8e 100644
--- a/user/src/com/google/gwt/user/client/TakesValue.java
+++ b/user/src/com/google/gwt/user/client/TakesValue.java
@@ -23,11 +23,17 @@
public interface TakesValue<V> {
/**
* Sets the value.
+ *
+ * @param value a value object of type V
+ * @see #getValue()
*/
void setValue(V value);
/**
* Returns the current value.
+ *
+ * @return the value as an object of type V
+ * @see #setValue
*/
V getValue();
}
diff --git a/user/src/com/google/gwt/user/client/ui/Tree.java b/user/src/com/google/gwt/user/client/ui/Tree.java
index d5cc644..b468940 100644
--- a/user/src/com/google/gwt/user/client/ui/Tree.java
+++ b/user/src/com/google/gwt/user/client/ui/Tree.java
@@ -55,6 +55,7 @@
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
@@ -331,6 +332,16 @@
}
/**
+ * Adds a simple tree item containing the specified html.
+ *
+ * @param itemHtml the html of the item to be added
+ * @return the item that was added
+ */
+ public TreeItem addItem(SafeHtml itemHtml) {
+ return root.addItem(itemHtml);
+ }
+
+ /**
* Adds an item to the root level of this tree.
*
* @param item the item to be added
@@ -494,6 +505,19 @@
}
/**
+ * Inserts a child tree item at the specified index containing the specified
+ * html.
+ *
+ * @param beforeIndex the index where the item will be inserted
+ * @param itemHtml the html of the item to be added
+ * @return the item that was added
+ * @throws IndexOutOfBoundsException if the index is out of range
+ */
+ public TreeItem insertItem(int beforeIndex, SafeHtml itemHtml) {
+ return root.insertItem(beforeIndex, itemHtml);
+ }
+
+ /**
* Inserts an item into the root level of this tree.
*
* @param beforeIndex the index where the item will be inserted
diff --git a/user/src/com/google/gwt/user/client/ui/TreeItem.java b/user/src/com/google/gwt/user/client/ui/TreeItem.java
index 6aed8a5..1244015 100644
--- a/user/src/com/google/gwt/user/client/ui/TreeItem.java
+++ b/user/src/com/google/gwt/user/client/ui/TreeItem.java
@@ -338,6 +338,18 @@
}
/**
+ * Adds a child tree item containing the specified html.
+ *
+ * @param itemHtml the item's HTML
+ * @return the item that was added
+ */
+ public TreeItem addItem(SafeHtml itemHtml) {
+ TreeItem ret = new TreeItem(itemHtml);
+ addItem(ret);
+ return ret;
+ }
+
+ /**
* Adds another item as a child to this one.
*
* @param item the item to be added
@@ -473,6 +485,22 @@
}
/**
+ * Inserts a child tree item at the specified index containing the specified
+ * text.
+ *
+ * @param beforeIndex the index where the item will be inserted
+ * @param itemHtml the item's HTML
+ * @return the item that was added
+ * @throws IndexOutOfBoundsException if the index is out of range
+ */
+ public TreeItem insertItem(int beforeIndex, SafeHtml itemHtml)
+ throws IndexOutOfBoundsException {
+ TreeItem ret = new TreeItem(itemHtml);
+ insertItem(beforeIndex, ret);
+ return ret;
+ }
+
+ /**
* Inserts an item as a child to this one.
*
* @param beforeIndex the index where the item will be inserted
diff --git a/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java b/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
index 1f57b59..18bc2cc 100644
--- a/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
+++ b/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
@@ -387,6 +387,9 @@
// Verify the node is destroyed.
assertTrue(b.isDestroyed());
+
+ // True to open a new node.
+ assertNotNull(root.setChildOpen(0, true));
}
/**
diff --git a/user/test/com/google/gwt/user/client/ui/TreeItemTest.java b/user/test/com/google/gwt/user/client/ui/TreeItemTest.java
index df4ebf3..da6a325 100644
--- a/user/test/com/google/gwt/user/client/ui/TreeItemTest.java
+++ b/user/test/com/google/gwt/user/client/ui/TreeItemTest.java
@@ -47,6 +47,12 @@
assertEquals(a, item.getChild(1));
}
+ public void testAddItemSafeHtml() {
+ TreeItem item = new TreeItem("foo");
+ TreeItem child = item.addItem(SafeHtmlUtils.fromSafeConstant(html));
+ assertEquals(html, child.getHTML().toLowerCase());
+ }
+
public void testInsert() {
TreeItem item = new TreeItem();
TreeItem b = item.addItem("b");
@@ -124,6 +130,12 @@
}
}
+ public void testInsertItemSafeHtml() {
+ TreeItem item = new TreeItem("foo");
+ TreeItem child = item.insertItem(0, SafeHtmlUtils.fromSafeConstant(html));
+ assertEquals(html, child.getHTML().toLowerCase());
+ }
+
public void testSafeHtmlConstructor() {
TreeItem item = new TreeItem(SafeHtmlUtils.fromSafeConstant(html));
diff --git a/user/test/com/google/gwt/user/client/ui/TreeTest.java b/user/test/com/google/gwt/user/client/ui/TreeTest.java
index 0e04aa0..e283fb8 100644
--- a/user/test/com/google/gwt/user/client/ui/TreeTest.java
+++ b/user/test/com/google/gwt/user/client/ui/TreeTest.java
@@ -16,6 +16,7 @@
package com.google.gwt.user.client.ui;
import com.google.gwt.junit.client.GWTTestCase;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
@@ -26,6 +27,8 @@
*/
public class TreeTest extends GWTTestCase {
+ private static final String html = "<b>hello</b><i>world</i>";
+
static class Adder implements HasWidgetsTester.WidgetAdder {
public void addChild(HasWidgets container, Widget child) {
((Tree) container).addItem(child);
@@ -37,6 +40,12 @@
return "com.google.gwt.user.DebugTest";
}
+ public void testAddItemSafeHtml() {
+ Tree t = new Tree();
+ TreeItem item = t.addItem(SafeHtmlUtils.fromSafeConstant(html));
+ assertEquals(html, item.getHTML().toLowerCase());
+ }
+
public void testAttachDetachOrder() {
HasWidgetsTester.testAll(new Tree(), new Adder(), true);
}
@@ -111,6 +120,12 @@
assertEquals(wti, t.getItem(1));
}
+ public void testInsertItemSafeHtml() {
+ Tree t = new Tree();
+ TreeItem item = t.insertItem(0, SafeHtmlUtils.fromSafeConstant(html));
+ assertEquals(html, item.getHTML().toLowerCase());
+ }
+
public void testIterator() {
Tree tree = new Tree();
Iterator<TreeItem> iter = tree.treeItemIterator();