Added SetSelectionModel interface and made Single- and MultiSelectionModels
implement it. Updated test just for SingleSelectionModel, as MultiSelectionModel
already implemented the interface.
Added some missing overrides in SelectionModel.
Review at http://gwt-code-reviews.appspot.com/1798806
Fixes issue 7578
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@11217 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/view/client/MultiSelectionModel.java b/user/src/com/google/gwt/view/client/MultiSelectionModel.java
index a782c0d..1beac98 100644
--- a/user/src/com/google/gwt/view/client/MultiSelectionModel.java
+++ b/user/src/com/google/gwt/view/client/MultiSelectionModel.java
@@ -27,7 +27,8 @@
*
* @param <T> the data type of the items
*/
-public class MultiSelectionModel<T> extends AbstractSelectionModel<T> {
+public class MultiSelectionModel<T> extends AbstractSelectionModel<T>
+ implements SetSelectionModel<T> {
/**
* Stores an item and its pending selection state.
@@ -97,6 +98,7 @@
/**
* Deselect all selected values.
*/
+ @Override
public void clear() {
// Clear the current list of pending changes.
selectionChanges.clear();
@@ -119,6 +121,7 @@
*
* @return the set of selected items
*/
+ @Override
public Set<T> getSelectedSet() {
resolveChanges();
return new HashSet<T>(selectedSet.values());
diff --git a/user/src/com/google/gwt/view/client/SelectionModel.java b/user/src/com/google/gwt/view/client/SelectionModel.java
index 9768b8f..026165a 100644
--- a/user/src/com/google/gwt/view/client/SelectionModel.java
+++ b/user/src/com/google/gwt/view/client/SelectionModel.java
@@ -61,15 +61,18 @@
this.keyProvider = keyProvider;
}
+ @Override
public HandlerRegistration addSelectionChangeHandler(
SelectionChangeEvent.Handler handler) {
return handlerManager.addHandler(SelectionChangeEvent.getType(), handler);
}
+ @Override
public void fireEvent(GwtEvent<?> event) {
handlerManager.fireEvent(event);
}
+ @Override
public Object getKey(T item) {
return (keyProvider == null || item == null) ? item
: keyProvider.getKey(item);
@@ -159,6 +162,7 @@
* @param handler the handler
* @return the registration for the event
*/
+ @Override
HandlerRegistration addSelectionChangeHandler(SelectionChangeEvent.Handler handler);
/**
diff --git a/user/src/com/google/gwt/view/client/SetSelectionModel.java b/user/src/com/google/gwt/view/client/SetSelectionModel.java
new file mode 100644
index 0000000..7149cbb
--- /dev/null
+++ b/user/src/com/google/gwt/view/client/SetSelectionModel.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2012 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.view.client;
+
+import java.util.Set;
+
+/**
+ * A model that allows getting all elements and clearing the selection.
+ *
+ * @param <T> the record data type
+ */
+public interface SetSelectionModel<T> extends SelectionModel<T> {
+ /**
+ * Clears the current selection.
+ */
+ void clear();
+
+ /**
+ * Get the set of selected items.
+ *
+ * @return the set of selected items
+ */
+ Set<T> getSelectedSet();
+}
diff --git a/user/src/com/google/gwt/view/client/SingleSelectionModel.java b/user/src/com/google/gwt/view/client/SingleSelectionModel.java
index b92aba6..c34c338 100644
--- a/user/src/com/google/gwt/view/client/SingleSelectionModel.java
+++ b/user/src/com/google/gwt/view/client/SingleSelectionModel.java
@@ -17,12 +17,16 @@
import com.google.gwt.view.client.SelectionModel.AbstractSelectionModel;
+import java.util.HashSet;
+import java.util.Set;
+
/**
* A simple selection model that allows only one item to be selected a a time.
*
* @param <T> the record data type
*/
-public class SingleSelectionModel<T> extends AbstractSelectionModel<T> {
+public class SingleSelectionModel<T> extends AbstractSelectionModel<T>
+ implements SetSelectionModel<T> {
private Object curKey;
private T curSelection;
@@ -49,6 +53,11 @@
super(keyProvider);
}
+ @Override
+ public void clear() {
+ setSelected(getSelectedObject(), false);
+ }
+
/**
* Gets the currently-selected item.
*
@@ -60,6 +69,15 @@
}
@Override
+ public Set<T> getSelectedSet() {
+ Set<T> set = new HashSet<T>();
+ if (curSelection != null) {
+ set.add(curSelection);
+ }
+ return set;
+ }
+
+ @Override
public boolean isSelected(T item) {
resolveChanges();
if (curSelection == null || curKey == null || item == null) {
diff --git a/user/test/com/google/gwt/view/client/SingleSelectionModelTest.java b/user/test/com/google/gwt/view/client/SingleSelectionModelTest.java
index fda80ff..5ab75f1 100644
--- a/user/test/com/google/gwt/view/client/SingleSelectionModelTest.java
+++ b/user/test/com/google/gwt/view/client/SingleSelectionModelTest.java
@@ -38,9 +38,11 @@
model.setSelected("test", true);
assertEquals("test", model.getSelectedObject());
+ assertEquals("test", model.getSelectedSet().iterator().next());
model.setSelected("test", false);
assertNull(model.getSelectedObject());
+ assertEquals(0, model.getSelectedSet().size());
}
public void testSelectedChangeEvent() {
@@ -91,14 +93,18 @@
model.setSelected("test0", true);
assertTrue(model.isSelected("test0"));
+ assertEquals("test0", model.getSelectedSet().iterator().next());
model.setSelected("test1", true);
assertTrue(model.isSelected("test1"));
assertFalse(model.isSelected("test0"));
+ assertEquals("test1", model.getSelectedSet().iterator().next());
+ assertEquals(1, model.getSelectedSet().size());
model.setSelected("test1", false);
assertFalse(model.isSelected("test1"));
assertFalse(model.isSelected("test0"));
+ assertEquals(0, model.getSelectedSet().size());
}
public void testSetSelectedNull() {
@@ -112,6 +118,7 @@
assertNull(model.getSelectedObject());
assertFalse(model.isSelected("test"));
assertFalse(model.isSelected(null));
+ assertEquals(0, model.getSelectedSet().size());
}
public void testSetSelectedWithKeyProvider() {