aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeemu Suo-Anttila <tsuoanttila@users.noreply.github.com>2018-09-07 12:10:16 +0300
committerIlia Motornyi <elmot@vaadin.com>2018-09-07 12:10:15 +0300
commitb2745dc14f17b510df7321ab3f6285ed317da3b3 (patch)
tree23c85cae1d7b98ed318aa7539ce87b1603404f9a
parent77a921791a318c60d25f5bb19823d8c2850732b0 (diff)
downloadvaadin-framework-b2745dc14f17b510df7321ab3f6285ed317da3b3.tar.gz
vaadin-framework-b2745dc14f17b510df7321ab3f6285ed317da3b3.zip
Fix handler creation to happen on init (#11172)
Fix handler creation to happen on init
-rw-r--r--client/src/main/java/com/vaadin/client/connectors/grid/ComponentRendererConnector.java46
-rw-r--r--server/src/main/java/com/vaadin/ui/components/grid/GridMultiSelect.java2
-rw-r--r--server/src/main/java/com/vaadin/ui/components/grid/GridSingleSelect.java2
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/GridComponentsVisibility.java10
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridComponentsVisibilityTest.java42
-rw-r--r--uitest/src/test/java/com/vaadin/tests/push/BasicPushTest.java15
6 files changed, 67 insertions, 50 deletions
diff --git a/client/src/main/java/com/vaadin/client/connectors/grid/ComponentRendererConnector.java b/client/src/main/java/com/vaadin/client/connectors/grid/ComponentRendererConnector.java
index 649cec0b36..df8ace1a4e 100644
--- a/client/src/main/java/com/vaadin/client/connectors/grid/ComponentRendererConnector.java
+++ b/client/src/main/java/com/vaadin/client/connectors/grid/ComponentRendererConnector.java
@@ -25,6 +25,7 @@ import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.ComponentConnector;
import com.vaadin.client.ConnectorMap;
+import com.vaadin.client.ServerConnector;
import com.vaadin.client.renderers.Renderer;
import com.vaadin.client.renderers.WidgetRenderer;
import com.vaadin.client.ui.AbstractComponentConnector;
@@ -43,12 +44,18 @@ import com.vaadin.ui.renderers.ComponentRenderer;
*/
@Connect(ComponentRenderer.class)
public class ComponentRendererConnector
- extends AbstractGridRendererConnector<String> {
+ extends AbstractGridRendererConnector<String> {
private HashSet<String> knownConnectors = new HashSet<>();
private HandlerRegistration handlerRegistration;
@Override
+ public void setParent(ServerConnector parent) {
+ super.setParent(parent);
+ createConnectorHierarchyChangeHandler();
+ }
+
+ @Override
protected Renderer<String> createRenderer() {
return new WidgetRenderer<String, SimplePanel>() {
@@ -61,12 +68,12 @@ public class ComponentRendererConnector
@Override
public void render(RendererCellReference cell, String connectorId,
- SimplePanel widget) {
- createConnectorHierarchyChangeHandler();
+ SimplePanel widget) {
+ assert handlerRegistration != null : "HirarchyChangeHandler should not be null when rendering.";
Widget connectorWidget = null;
if (connectorId != null) {
ComponentConnector connector = (ComponentConnector) ConnectorMap
- .get(getConnection()).getConnector(connectorId);
+ .get(getConnection()).getConnector(connectorId);
if (connector != null) {
connectorWidget = connector.getWidget();
knownConnectors.add(connectorId);
@@ -95,23 +102,26 @@ public class ComponentRendererConnector
/**
* Adds a listener for grid hierarchy changes to find detached connectors
- * previously handled by this renderer in order to detach from DOM their widgets
- * before {@link AbstractComponentConnector#onUnregister()} is invoked
- * otherwise an error message is logged.
+ * previously handled by this renderer in order to detach from DOM their
+ * widgets before {@link AbstractComponentConnector#onUnregister()} is
+ * invoked otherwise an error message is logged.
*/
private void createConnectorHierarchyChangeHandler() {
- if (handlerRegistration == null) {
- handlerRegistration = getGridConnector().addConnectorHierarchyChangeHandler(event -> {
- Iterator<String> iterator = knownConnectors.iterator();
- while (iterator.hasNext()) {
- ComponentConnector connector = (ComponentConnector) ConnectorMap.get(getConnection()).getConnector(iterator.next());
- if (connector != null && connector.getParent() == null) {
- connector.getWidget().removeFromParent();
- iterator.remove();
+ assert handlerRegistration == null : "Trying to re-initialize HierarchyChangeHandler";
+ handlerRegistration = getGridConnector()
+ .addConnectorHierarchyChangeHandler(event -> {
+ Iterator<String> iterator = knownConnectors.iterator();
+ while (iterator.hasNext()) {
+ ComponentConnector connector = (ComponentConnector) ConnectorMap
+ .get(getConnection())
+ .getConnector(iterator.next());
+ if (connector != null
+ && connector.getParent() == null) {
+ connector.getWidget().removeFromParent();
+ iterator.remove();
+ }
}
- }
- });
- }
+ });
}
private void unregisterHierarchyHandler() {
diff --git a/server/src/main/java/com/vaadin/ui/components/grid/GridMultiSelect.java b/server/src/main/java/com/vaadin/ui/components/grid/GridMultiSelect.java
index bf3c9d02d3..b4c4dbc236 100644
--- a/server/src/main/java/com/vaadin/ui/components/grid/GridMultiSelect.java
+++ b/server/src/main/java/com/vaadin/ui/components/grid/GridMultiSelect.java
@@ -84,7 +84,7 @@ public class GridMultiSelect<T> implements MultiSelect<T> {
/**
* Selects the given item. If another item was already selected, that item
* is deselected.
- *
+ *
* @param item
* the item to select
*/
diff --git a/server/src/main/java/com/vaadin/ui/components/grid/GridSingleSelect.java b/server/src/main/java/com/vaadin/ui/components/grid/GridSingleSelect.java
index 41804ad617..d2bb13da62 100644
--- a/server/src/main/java/com/vaadin/ui/components/grid/GridSingleSelect.java
+++ b/server/src/main/java/com/vaadin/ui/components/grid/GridSingleSelect.java
@@ -211,7 +211,7 @@ public class GridSingleSelect<T> implements SingleSelect<T> {
/**
* Selects the given item. If another item was already selected, that item
* is deselected.
- *
+ *
* @param item
* the item to select
*/
diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridComponentsVisibility.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridComponentsVisibility.java
index 8c8810f7a8..aaa2d98027 100644
--- a/uitest/src/main/java/com/vaadin/tests/components/grid/GridComponentsVisibility.java
+++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridComponentsVisibility.java
@@ -24,9 +24,9 @@ public class GridComponentsVisibility extends AbstractTestUIWithLog {
protected void setup(VaadinRequest request) {
Grid<String> grid = new Grid<>();
grid.addColumn(string -> new Label(string), new ComponentRenderer())
- .setId("label").setCaption("Column 0");
+ .setId("label").setCaption("Column 0");
grid.getDefaultHeaderRow().getCell("label")
- .setComponent(new Label("Label"));
+ .setComponent(new Label("Label"));
grid.addComponentColumn(string -> {
if (textFields.containsKey(string)) {
log("Reusing old text field for: " + string);
@@ -41,7 +41,7 @@ public class GridComponentsVisibility extends AbstractTestUIWithLog {
grid.addColumn(string -> {
Button button = new Button("Click Me!",
- event -> toggleFieldVisibility(string));
+ event -> toggleFieldVisibility(string));
button.setId(string.replace(' ', '_').toLowerCase(Locale.ROOT));
return button;
}, new ComponentRenderer()).setId("button").setCaption("Button");
@@ -49,13 +49,13 @@ public class GridComponentsVisibility extends AbstractTestUIWithLog {
grid.setRowHeight(40);
grid.getDefaultHeaderRow().join("textField", "button")
- .setText("Other Components");
+ .setText("Other Components");
addComponent(grid);
grid.setSizeFull();
grid.setItems(IntStream.range(0, 5).boxed()
- .map(i -> "Row " + (i + (counter * 1000))));
+ .map(i -> "Row " + (i + (counter * 1000))));
}
diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridComponentsVisibilityTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridComponentsVisibilityTest.java
index 14fa82a58e..3e8f806499 100644
--- a/uitest/src/test/java/com/vaadin/tests/components/grid/GridComponentsVisibilityTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridComponentsVisibilityTest.java
@@ -23,7 +23,8 @@ public class GridComponentsVisibilityTest extends MultiBrowserTest {
@Test
public void changingVisibilityOfComponentShouldNotThrowClientSideExceptions() {
- testHideComponent(grid -> ThreadLocalRandom.current().nextInt(1, (int) grid.getRowCount() - 1));
+ testHideComponent(grid -> ThreadLocalRandom.current().nextInt(1,
+ (int) grid.getRowCount() - 1));
}
@Test
@@ -31,12 +32,13 @@ public class GridComponentsVisibilityTest extends MultiBrowserTest {
testHideComponent(grid -> (int) grid.getRowCount() - 1);
}
- private void testHideComponent(Function<GridElement, Integer> rowUnderTestSupplier) {
+ private void testHideComponent(
+ Function<GridElement, Integer> rowUnderTestSupplier) {
openTestURL("debug");
GridElement grid = $(GridElement.class).first();
int rowUnderTest = rowUnderTestSupplier.apply(grid);
assertTrue("Text field should be visible", grid.getCell(rowUnderTest, 1)
- .isElementPresent(TextFieldElement.class));
+ .isElementPresent(TextFieldElement.class));
assertOtherConnectorsArePresent(grid, rowUnderTest);
clearDebugMessages();
@@ -57,34 +59,40 @@ public class GridComponentsVisibilityTest extends MultiBrowserTest {
clickVisibilityToggleButton(grid, rowUnderTest);
}
- private void assertOnlyTextFieldOnTestedRowIsNotPresent(GridElement grid, int rowUnderTest) {
- assertFalse("Text field should not be visible", grid.getCell(rowUnderTest, 1)
- .isElementPresent(TextFieldElement.class));
+ private void assertOnlyTextFieldOnTestedRowIsNotPresent(GridElement grid,
+ int rowUnderTest) {
+ assertFalse("Text field should not be visible",
+ grid.getCell(rowUnderTest, 1)
+ .isElementPresent(TextFieldElement.class));
assertOtherConnectorsArePresent(grid, rowUnderTest);
}
- private void assertAllTextFieldsArePresent(GridElement grid, int rowUnderTest) {
+ private void assertAllTextFieldsArePresent(GridElement grid,
+ int rowUnderTest) {
assertTrue("Text field should be visible", grid.getCell(rowUnderTest, 1)
- .isElementPresent(TextFieldElement.class));
+ .isElementPresent(TextFieldElement.class));
assertOtherConnectorsArePresent(grid, rowUnderTest);
}
private void assertNotClientSideErrors() {
assertNoErrorNotifications();
- // Should not log "Widget is still attached to the DOM ..." error message
+ // Should not log "Widget is still attached to the DOM ..." error
+ // message
assertNoDebugMessage(Level.SEVERE);
}
- private void clickVisibilityToggleButton(GridElement grid, int rowUnderTest) {
- grid.getRow(rowUnderTest).getCell(2).findElement(By.className("v-button")).click();
+ private void clickVisibilityToggleButton(GridElement grid,
+ int rowUnderTest) {
+ grid.getRow(rowUnderTest).getCell(2)
+ .findElement(By.className("v-button")).click();
}
- private void assertOtherConnectorsArePresent(GridElement grid, int rowUnderTest) {
+ private void assertOtherConnectorsArePresent(GridElement grid,
+ int rowUnderTest) {
IntStream.range(1, (int) grid.getRowCount())
- .filter(row -> row != rowUnderTest)
- .forEach(row ->
- assertTrue("Text field should be visible", grid.getCell(row, 1)
- .isElementPresent(TextFieldElement.class))
- );
+ .filter(row -> row != rowUnderTest)
+ .forEach(row -> assertTrue("Text field should be visible",
+ grid.getCell(row, 1)
+ .isElementPresent(TextFieldElement.class)));
}
}
diff --git a/uitest/src/test/java/com/vaadin/tests/push/BasicPushTest.java b/uitest/src/test/java/com/vaadin/tests/push/BasicPushTest.java
index 1264affcf2..91408fa4b4 100644
--- a/uitest/src/test/java/com/vaadin/tests/push/BasicPushTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/push/BasicPushTest.java
@@ -70,14 +70,13 @@ public abstract class BasicPushTest extends MultiBrowserTest {
protected void waitUntilClientCounterChanges(final int expectedValue) {
waitUntil(input -> {
- try {
- return BasicPushTest
- .getClientCounter(BasicPushTest.this) == expectedValue;
- } catch (NoSuchElementException e) {
- return false;
- }
- },
- 10);
+ try {
+ return BasicPushTest
+ .getClientCounter(BasicPushTest.this) == expectedValue;
+ } catch (NoSuchElementException e) {
+ return false;
+ }
+ }, 10);
}
protected void waitUntilServerCounterChanges() {