/**
* 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;
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.
--- /dev/null
+/*
+ * 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));
+ }
+}
--- /dev/null
+/*
+ * 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);
+ }
+
+}
--- /dev/null
+/*
+ * 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));
+
+ }
+}
--- /dev/null
+/*
+ * 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();
+ }
+
+}