]> source.dussan.org Git - vaadin-framework.git/commitdiff
Allow to disable user selection in the grid model. (#8345)
authorDenis <denis@vaadin.com>
Fri, 27 Jan 2017 11:13:58 +0000 (13:13 +0200)
committerGitHub <noreply@github.com>
Fri, 27 Jan 2017 11:13:58 +0000 (13:13 +0200)
* Allow to disable user selection in the grid model.

Fixes vaadin/framework8-issues#546

server/src/main/java/com/vaadin/ui/components/grid/AbstractSelectionModel.java
server/src/main/java/com/vaadin/ui/components/grid/GridSelectionModel.java
server/src/main/java/com/vaadin/ui/components/grid/MultiSelectionModelImpl.java
server/src/main/java/com/vaadin/ui/components/grid/NoSelectionModel.java
server/src/main/java/com/vaadin/ui/components/grid/SingleSelectionModelImpl.java
uitest/src/main/java/com/vaadin/tests/components/grid/GridDisallowUserSelection.java [new file with mode: 0644]
uitest/src/test/java/com/vaadin/tests/components/grid/GridDisallowUserSelectionTest.java [new file with mode: 0644]

index e38c350694e882767691aa89070806111fd53b3b..7a47da0ce17da6a7bf12cdf63c34333a1833dde4 100644 (file)
@@ -99,4 +99,14 @@ public abstract class AbstractSelectionModel<T> extends AbstractGridExtension<T>
         super.remove();
     }
 
+    @Override
+    public boolean isUserSelectionAllowed() {
+        return getState(false).selectionAllowed;
+    }
+
+    @Override
+    public void setUserSelectionAllowed(boolean allowed) {
+        getState().selectionAllowed = allowed;
+    }
+
 }
index 2913318bf898c25b75608ff524fbbfe5327b6209..4160b5951b6b6129bd74d312b3d67de92bb3b75a 100644 (file)
@@ -43,4 +43,27 @@ public interface GridSelectionModel<T> extends SelectionModel<T>, Extension {
      */
     @Override
     public void remove();
+
+    /**
+     * Sets whether the user is allowed to change the selection.
+     * <p>
+     * The check is done only for the client side actions. It doesn't affect
+     * selection requests sent from the server side.
+     *
+     * @param allowed
+     *            <code>true</code> if the user is allowed to change the
+     *            selection, <code>false</code> otherwise
+     */
+    public void setUserSelectionAllowed(boolean allowed);
+
+    /**
+     * Checks if the user is allowed to change the selection.
+     * <p>
+     * The check is done only for the client side actions. It doesn't affect
+     * selection requests sent from the server side.
+     *
+     * @return <code>true</code> if the user is allowed to change the selection,
+     *         <code>false</code> otherwise
+     */
+    public boolean isUserSelectionAllowed();
 }
index 97f79a4655f68552a8cd7bddc9997659ed35ab84..122abadc5a5b1e99f2f24f8cf576175a12d468e1 100644 (file)
@@ -324,7 +324,7 @@ public class MultiSelectionModelImpl<T> extends AbstractSelectionModel<T>
 
             @Override
             public void setReadOnly(boolean readOnly) {
-                getState().selectionAllowed = !readOnly;
+                setUserSelectionAllowed(!readOnly);
             }
 
             @Override
@@ -458,10 +458,6 @@ public class MultiSelectionModelImpl<T> extends AbstractSelectionModel<T>
         }, userOriginated);
     }
 
-    private boolean isUserSelectionAllowed() {
-        return getState(false).selectionAllowed;
-    }
-
     private void doUpdateSelection(Consumer<Collection<T>> handler,
             boolean userOriginated) {
         if (getParent() == null) {
index ff51b74cfc9ad92f29f5a5ec5db1d62f1cd33563..b239469e798c8f47bf814eb6d06ca183015f6e4c 100644 (file)
@@ -64,4 +64,13 @@ public class NoSelectionModel<T> extends AbstractExtension
                 "This selection model doesn't allow selection, cannot add selection listeners to it");
     }
 
+    @Override
+    public void setUserSelectionAllowed(boolean allowed) {
+    }
+
+    @Override
+    public boolean isUserSelectionAllowed() {
+        return false;
+    }
+
 }
index 12f3ee4de452e9ff1d100f5d4abe2ddcbb46ca48..aae0da8e14b692266cfcc0170dac41b7d91ba14c 100644 (file)
@@ -27,7 +27,6 @@ import com.vaadin.event.selection.SingleSelectionListener;
 import com.vaadin.shared.Registration;
 import com.vaadin.shared.data.selection.SelectionServerRpc;
 import com.vaadin.shared.ui.grid.SingleSelectionModelState;
-import com.vaadin.ui.Component;
 import com.vaadin.ui.SingleSelect;
 
 /**
@@ -227,10 +226,6 @@ public class SingleSelectionModelImpl<T> extends AbstractSelectionModel<T>
         return getState().deselectAllowed;
     }
 
-    private boolean isUserSelectionAllowed() {
-        return getState(false).selectionAllowed;
-    }
-
     /**
      * Gets a wrapper for using this grid as a single select in a binder.
      *
@@ -275,7 +270,7 @@ public class SingleSelectionModelImpl<T> extends AbstractSelectionModel<T>
 
             @Override
             public void setReadOnly(boolean readOnly) {
-                getState().selectionAllowed = !readOnly;
+                setUserSelectionAllowed(!readOnly);
             }
 
             @Override
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridDisallowUserSelection.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridDisallowUserSelection.java
new file mode 100644 (file)
index 0000000..caac34c
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2000-2016 Vaadin Ltd.
+ *
+ * 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.vaadin.tests.components.grid;
+
+import com.vaadin.data.ValueProvider;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Grid.SelectionMode;
+import com.vaadin.ui.components.grid.GridSelectionModel;
+
+/**
+ * @author Vaadin Ltd
+ *
+ */
+public class GridDisallowUserSelection extends AbstractTestUI {
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        Grid<String> grid = new Grid<>();
+        grid.addColumn(ValueProvider.identity());
+        grid.setItems("a", "b");
+        GridSelectionModel<String> model = grid
+                .setSelectionMode(SelectionMode.SINGLE);
+        model.setUserSelectionAllowed(false);
+
+        addComponent(grid);
+
+        Button button = new Button("Multi select", event -> {
+            GridSelectionModel<String> multi = grid
+                    .setSelectionMode(SelectionMode.MULTI);
+            multi.setUserSelectionAllowed(false);
+        });
+        addComponent(button);
+    }
+}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridDisallowUserSelectionTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridDisallowUserSelectionTest.java
new file mode 100644 (file)
index 0000000..c8e6e39
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2000-2016 Vaadin Ltd.
+ *
+ * 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.vaadin.tests.components.grid;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+/**
+ * @author Vaadin Ltd
+ *
+ */
+public class GridDisallowUserSelectionTest extends MultiBrowserTest {
+
+    @Test
+    public void checkSelection() {
+        openTestURL();
+
+        assertNoSelection(0);
+        assertNoSelection(1);
+
+        // change model from single select to mutli
+        $(ButtonElement.class).first().click();
+
+        assertNoSelection(0);
+        assertNoSelection(1);
+    }
+
+    private void assertNoSelection(int index) {
+        GridElement grid = $(GridElement.class).first();
+        grid.getCell(index, 0).click();
+
+        Assert.assertFalse(grid.getRow(0).isSelected());
+    }
+}