]> source.dussan.org Git - vaadin-framework.git/commitdiff
Split AbstractGridExtension from AbstractRenderer (#18003)
authorTeemu Suo-Anttila <teemusa@vaadin.com>
Tue, 26 May 2015 08:47:39 +0000 (11:47 +0300)
committerVaadin Code Review <review@vaadin.com>
Tue, 26 May 2015 12:26:55 +0000 (12:26 +0000)
Change-Id: Ibe5766cde606091ce2bd58055472fa7cf3f21374

server/src/com/vaadin/ui/Grid.java
server/tests/src/com/vaadin/tests/server/component/grid/GridExtensionTest.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/grid/GridExtensionCommunication.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/grid/GridExtensionCommunicationTest.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/widgetset/client/grid/GridClickExtensionConnector.java [new file with mode: 0644]

index 902098e8d06cf20a3b542fffd825474aa0f11aae..2c7e63ddf8a207aac90a9b6ceca0835ba6cb04db 100644 (file)
@@ -3274,15 +3274,15 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
     /**
      * An abstract base class for server-side Grid renderers.
      * {@link com.vaadin.client.widget.grid.Renderer Grid renderers}. This class
-     * currently extends the AbstractExtension superclass, but this fact should
-     * be regarded as an implementation detail and subject to change in a future
-     * major or minor Vaadin revision.
+     * currently extends the AbstractGridExtension superclass, but this fact
+     * should be regarded as an implementation detail and subject to change in a
+     * future major or minor Vaadin revision.
      * 
      * @param <T>
      *            the type this renderer knows how to present
      */
-    public static abstract class AbstractRenderer<T> extends AbstractExtension
-            implements Renderer<T> {
+    public static abstract class AbstractRenderer<T> extends
+            AbstractGridExtension implements Renderer<T> {
 
         private final Class<T> presentationType;
 
@@ -3340,6 +3340,33 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
             return JsonCodec.encode(value, null, type,
                     getUI().getConnectorTracker()).getEncodedValue();
         }
+    }
+
+    /**
+     * An abstract base class for server-side Grid extensions.
+     * 
+     * @since
+     */
+    public static abstract class AbstractGridExtension extends
+            AbstractExtension {
+
+        /**
+         * Constructs a new Grid extension.
+         */
+        public AbstractGridExtension() {
+            super();
+        }
+
+        /**
+         * Constructs a new Grid extension and extends given Grid.
+         * 
+         * @param grid
+         *            a grid instance
+         */
+        public AbstractGridExtension(Grid grid) {
+            super();
+            extend(grid);
+        }
 
         /**
          * Gets the item id for a row key.
diff --git a/server/tests/src/com/vaadin/tests/server/component/grid/GridExtensionTest.java b/server/tests/src/com/vaadin/tests/server/component/grid/GridExtensionTest.java
new file mode 100644 (file)
index 0000000..d9db217
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2000-2014 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.server.component.grid;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Grid.AbstractGridExtension;
+
+public class GridExtensionTest {
+
+    public static class DummyGridExtension extends AbstractGridExtension {
+
+        public DummyGridExtension(Grid grid) {
+            super(grid);
+        }
+    }
+
+    @Test
+    public void testCreateExtension() {
+        Grid grid = new Grid();
+        DummyGridExtension dummy = new DummyGridExtension(grid);
+        assertTrue("DummyGridExtension never made it to Grid", grid
+                .getExtensions().contains(dummy));
+    }
+}
diff --git a/uitest/src/com/vaadin/tests/components/grid/GridExtensionCommunication.java b/uitest/src/com/vaadin/tests/components/grid/GridExtensionCommunication.java
new file mode 100644 (file)
index 0000000..181c9ca
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2000-2014 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.annotations.Widgetset;
+import com.vaadin.data.Item;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.tests.widgetset.TestingWidgetSet;
+import com.vaadin.tests.widgetset.client.grid.GridClickExtensionConnector.GridClickServerRpc;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Grid.AbstractGridExtension;
+import com.vaadin.ui.Grid.Column;
+import com.vaadin.ui.Grid.SelectionMode;
+
+@Widgetset(TestingWidgetSet.NAME)
+public class GridExtensionCommunication extends AbstractTestUIWithLog {
+
+    public class GridClickExtension extends AbstractGridExtension {
+
+        public GridClickExtension(Grid grid) {
+            super(grid);
+            registerRpc(new GridClickServerRpc() {
+
+                @Override
+                public void click(String row, String column,
+                        MouseEventDetails click) {
+                    Object itemId = getItemId(row);
+                    Column col = getColumn(column);
+
+                    Item person = getParentGrid().getContainerDataSource()
+                            .getItem(itemId);
+
+                    log("Click on Person "
+                            + person.getItemProperty("firstName").getValue()
+                            + " "
+                            + person.getItemProperty("lastName").getValue()
+                            + "  on column " + col.toString());
+                    log("MouseEventDetails: " + click.getButtonName() + " ("
+                            + click.getClientX() + ", " + click.getClientY()
+                            + ")");
+                }
+            });
+        }
+    }
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        Grid grid = new PersonTestGrid(50);
+        grid.setSelectionMode(SelectionMode.NONE);
+        new GridClickExtension(grid);
+        addComponent(grid);
+    }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/grid/GridExtensionCommunicationTest.java b/uitest/src/com/vaadin/tests/components/grid/GridExtensionCommunicationTest.java
new file mode 100644 (file)
index 0000000..9fd35fe
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2000-2014 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 static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.testbench.elements.GridElement.GridCellElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class GridExtensionCommunicationTest extends SingleBrowserTest {
+
+    @Test
+    public void testMouseClickIsSentToExtension() {
+        openTestURL();
+
+        GridCellElement cell = $(GridElement.class).first().getCell(0, 4);
+        cell.click(5, 5);
+
+        int expectedX = cell.getLocation().getX() + 5;
+        int expectedY = cell.getLocation().getY() + 5;
+
+        assertEquals(
+                "1. Click on Person Nina Brown on column Column[propertyId:gender]",
+                getLogRow(1));
+        assertEquals("2. MouseEventDetails: left (" + expectedX + ", "
+                + expectedY + ")", getLogRow(0));
+
+    }
+}
diff --git a/uitest/src/com/vaadin/tests/widgetset/client/grid/GridClickExtensionConnector.java b/uitest/src/com/vaadin/tests/widgetset/client/grid/GridClickExtensionConnector.java
new file mode 100644 (file)
index 0000000..6402068
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2000-2014 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.widgetset.client.grid;
+
+import com.vaadin.client.MouseEventDetailsBuilder;
+import com.vaadin.client.ServerConnector;
+import com.vaadin.client.connectors.GridConnector;
+import com.vaadin.client.extensions.AbstractExtensionConnector;
+import com.vaadin.client.widget.grid.CellReference;
+import com.vaadin.client.widget.grid.events.BodyClickHandler;
+import com.vaadin.client.widget.grid.events.GridClickEvent;
+import com.vaadin.client.widgets.Grid;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.tests.components.grid.GridExtensionCommunication.GridClickExtension;
+
+import elemental.json.JsonObject;
+
+@Connect(GridClickExtension.class)
+public class GridClickExtensionConnector extends AbstractExtensionConnector {
+    public interface GridClickServerRpc extends ServerRpc {
+
+        public void click(String row, String column, MouseEventDetails click);
+    }
+
+    @Override
+    protected void extend(ServerConnector target) {
+        Grid<JsonObject> grid = getParent().getWidget();
+        grid.addBodyClickHandler(new BodyClickHandler() {
+
+            @Override
+            public void onClick(GridClickEvent event) {
+                CellReference<?> cellRef = event.getTargetCell();
+
+                // Gather needed information.
+                String rowKey = getParent().getRowKey(
+                        (JsonObject) cellRef.getRow());
+                String columnId = getParent().getColumnId(cellRef.getColumn());
+                MouseEventDetails clickDetails = MouseEventDetailsBuilder
+                        .buildMouseEventDetails(event.getNativeEvent());
+
+                getRpcProxy(GridClickServerRpc.class).click(rowKey, columnId,
+                        clickDetails);
+            }
+        });
+    }
+
+    @Override
+    public GridConnector getParent() {
+        return (GridConnector) super.getParent();
+    }
+
+}