Changes required to make the Scaffold app look like the mocks. Added null checks AbstractProxyListActivity to prevent NPEs. Relaxed the CellTable used in AbstractProxyListView to be any HasData and added a protected method that takes a HasData instead of a CellTable. Fixed a bug in SingleSelectionModel where setting the selected value to null would cause an infinite loop.
Review at http://gwt-code-reviews.appspot.com/925801
Review by: rjrjr@google.com
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8886 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/app/place/AbstractProxyListActivity.java b/user/src/com/google/gwt/app/place/AbstractProxyListActivity.java
index 359571f..96f0956 100644
--- a/user/src/com/google/gwt/app/place/AbstractProxyListActivity.java
+++ b/user/src/com/google/gwt/app/place/AbstractProxyListActivity.java
@@ -253,6 +253,10 @@
fireCountRequest(new Receiver<Long>() {
@Override
public void onSuccess(Long response) {
+ if (view == null) {
+ // This activity is dead
+ return;
+ }
HasData<P> table = getView().asHasData();
int rows = response.intValue();
table.setRowCount(rows, true);
@@ -274,6 +278,10 @@
fireCountRequest(new Receiver<Long>() {
@Override
public void onSuccess(Long response) {
+ if (view == null) {
+ // This activity is dead
+ return;
+ }
getView().asHasData().setRowCount(response.intValue(), true);
onRangeChanged(view.asHasData());
}
diff --git a/user/src/com/google/gwt/app/place/AbstractProxyListView.java b/user/src/com/google/gwt/app/place/AbstractProxyListView.java
index 244d3fd..e8e2aa7 100644
--- a/user/src/com/google/gwt/app/place/AbstractProxyListView.java
+++ b/user/src/com/google/gwt/app/place/AbstractProxyListView.java
@@ -44,12 +44,12 @@
public abstract class AbstractProxyListView<P extends EntityProxy> extends
Composite implements ProxyListView<P> {
- private CellTable<P> table;
+ private HasData<P> display;
private Set<String> paths = new HashSet<String>();
private Delegate<P> delegate;
public HasData<P> asHasData() {
- return table;
+ return display;
}
@Override
@@ -65,14 +65,13 @@
this.delegate = delegate;
}
- protected void init(Widget root, CellTable<P> table, Button newButton,
- List<PropertyColumn<P, ?>> columns) {
+ protected void init(Widget root, HasData<P> display, Button newButton,
+ Set<String> columns) {
super.initWidget(root);
- this.table = table;
+ this.display = display;
- for (PropertyColumn<P, ?> column : columns) {
- table.addColumn(column, column.getDisplayName());
- paths.addAll(Arrays.asList(column.getPaths()));
+ if (columns != null && columns.size() > 0) {
+ paths.addAll(columns);
}
newButton.addClickHandler(new ClickHandler() {
@@ -82,6 +81,21 @@
});
}
+ /**
+ * @deprecated use {@link #init(Widget, HasData, Button, Set)} instead
+ */
+ @Deprecated
+ protected void init(Widget root, CellTable<P> table, Button newButton,
+ List<PropertyColumn<P, ?>> columns) {
+ Set<String> cols = new HashSet<String>();
+ for (PropertyColumn<P, ?> column : columns) {
+ table.addColumn(column, column.getDisplayName());
+ cols.addAll(Arrays.asList(column.getPaths()));
+ }
+
+ this.init(root, table, newButton, cols);
+ }
+
@Override
protected void initWidget(Widget widget) {
throw new UnsupportedOperationException(
diff --git a/user/test/com/google/gwt/view/client/SingleSelectionModelTest.java b/user/test/com/google/gwt/view/client/SingleSelectionModelTest.java
index 7682268..77825e9 100644
--- a/user/test/com/google/gwt/view/client/SingleSelectionModelTest.java
+++ b/user/test/com/google/gwt/view/client/SingleSelectionModelTest.java
@@ -1,12 +1,12 @@
/*
* 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
@@ -43,7 +43,7 @@
delayTestFinish(2000);
model.setSelected("test", true);
}
-
+
public void testNoDuplicateChangeEvent() {
SingleSelectionModel<String> model = createSelectionModel(null);
SelectionChangeEvent.Handler handler = new SelectionChangeEvent.Handler() {
@@ -57,7 +57,7 @@
model.setSelected("test", true); // Should not fire change event
model.setSelected("test", true); // Should not fire change event
}
-
+
public void testNoDuplicateChangeEvent2() {
SingleSelectionModel<String> model = createSelectionModel(null);
SelectionChangeEvent.Handler handler = new SelectionChangeEvent.Handler() {
@@ -89,6 +89,19 @@
assertFalse(model.isSelected("test0"));
}
+ public void testSetSelectedNull() {
+ SingleSelectionModel<String> model = createSelectionModel(null);
+
+ model.setSelected("test", true);
+ assertTrue(model.isSelected("test"));
+
+ // Null cannot be selected, but it deselects the current item.
+ model.setSelected(null, true);
+ assertNull(model.getSelectedObject());
+ assertFalse(model.isSelected("test"));
+ assertFalse(model.isSelected(null));
+ }
+
public void testSetSelectedWithKeyProvider() {
ProvidesKey<String> keyProvider = new ProvidesKey<String>() {
public Object getKey(String item) {