summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2015-06-18 21:59:51 +0300
committerVaadin Code Review <review@vaadin.com>2015-06-26 10:45:24 +0000
commitf7a852e3df45437568e54cff592aae50ae9a06ce (patch)
treed3dcc281693c73959b9a3538a4c992562d3c4f44
parent7355f1a26277d7644cfc974f4c4d8b7bc898c366 (diff)
downloadvaadin-framework-f7a852e3df45437568e54cff592aae50ae9a06ce.tar.gz
vaadin-framework-f7a852e3df45437568e54cff592aae50ae9a06ce.zip
Properly toggle editor state when calling editId() on the server (#18287)
Ensure isEditorActive() returns false if editItem(...) has been called but the editor has not yet been opened, as it should according to javadoc isRendered() requires that the editor fields are marked as dirty when they are made visible on the client (isEditorActive() changes state) Change-Id: I7fbe1cb484cf83974ffa6ca50a6c642fbf7e8378
-rw-r--r--server/src/com/vaadin/ui/Grid.java6
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControl.java46
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControlTest.java62
3 files changed, 113 insertions, 1 deletions
diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java
index 88a3195857..e5eebff879 100644
--- a/server/src/com/vaadin/ui/Grid.java
+++ b/server/src/com/vaadin/ui/Grid.java
@@ -3533,6 +3533,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
private final Footer footer = new Footer(this);
private Object editedItemId = null;
+ private boolean editorActive = false;
private FieldGroup editorFieldGroup = new CustomFieldGroup();
private CellStyleGenerator cellStyleGenerator;
@@ -5691,7 +5692,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
* @return true iff the editor is open
*/
public boolean isEditorActive() {
- return editedItemId != null;
+ return editorActive;
}
private void checkColumnExists(Object propertyId) {
@@ -5765,6 +5766,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
.getPropertyId());
}
+ editorActive = true;
// Must ensure that all fields, recursively, are sent to the client
// This is needed because the fields are hidden using isRendered
for (Field<?> f : getEditorFields()) {
@@ -5816,6 +5818,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
protected void doCancelEditor() {
editedItemId = null;
+ editorActive = false;
editorFieldGroup.discard();
editorFieldGroup.setItemDataSource(null);
}
@@ -5833,6 +5836,7 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
}
editedItemId = null;
+ editorActive = false;
editorFieldGroup = new CustomFieldGroup();
}
diff --git a/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControl.java b/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControl.java
new file mode 100644
index 0000000000..a9075a77d1
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControl.java
@@ -0,0 +1,46 @@
+package com.vaadin.tests.components.grid;
+
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUIWithLog;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Grid;
+
+@SuppressWarnings("serial")
+// @Push
+public class ProgrammaticEditorControl extends AbstractTestUIWithLog {
+
+ private Grid grid;
+ private IndexedContainer container = new IndexedContainer();
+
+ @Override
+ protected void setup(VaadinRequest request) {
+ container.addContainerProperty("name", String.class, null);
+ container.addItem("test").getItemProperty("name").setValue("test");
+ grid = new Grid();
+ grid.setContainerDataSource(container);
+ grid.setEditorEnabled(true);
+ addComponent(grid);
+
+ Button button = new Button("Edit", new ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ grid.editItem("test");
+ }
+ });
+ addComponent(button);
+ Button button2 = new Button("Cancel", new ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ grid.cancelEditor();
+ }
+ });
+ addComponent(button2);
+
+ }
+
+} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControlTest.java b/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControlTest.java
new file mode 100644
index 0000000000..811bd03a64
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/grid/ProgrammaticEditorControlTest.java
@@ -0,0 +1,62 @@
+/*
+ * 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 org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.testbench.elements.TextFieldElement;
+import com.vaadin.tests.tb3.SingleBrowserTest;
+
+public class ProgrammaticEditorControlTest extends SingleBrowserTest {
+
+ @Test
+ public void multipleOpenFromServerSide() {
+ openTestURL();
+ GridElement grid = $(GridElement.class).first();
+ ButtonElement editButton = $(ButtonElement.class).caption("Edit")
+ .first();
+ ButtonElement cancelButton = $(ButtonElement.class).caption("Cancel")
+ .first();
+
+ editButton.click();
+ assertEditorFieldContents(grid, "test");
+ cancelButton.click();
+
+ assertEditorNotPresent(grid);
+
+ editButton.click();
+ assertEditorFieldContents(grid, "test");
+ }
+
+ private void assertEditorFieldContents(GridElement grid, String text) {
+ TextFieldElement editorField = wrap(TextFieldElement.class, grid
+ .getEditor().getField(0));
+ Assert.assertEquals(text, editorField.getValue());
+ }
+
+ private void assertEditorNotPresent(GridElement grid) {
+ try {
+ grid.getEditor();
+ Assert.fail("Editor should not be present");
+ } catch (Exception e) {
+
+ }
+ }
+
+} \ No newline at end of file