@Override
public void setParent(ClientConnector parent) {
- super.setParent(parent);
if (parent == null) {
- // We're detached, release various listeners
+ // We're being detached, release various listeners
activeRowHandler
.removeValueChangeListeners(activeRowHandler.activeRange);
throw new IllegalStateException(
"Grid is the only accepted parent type");
}
+ super.setParent(parent);
}
/**
--- /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 org.junit.Test;
+
+import com.vaadin.data.util.IndexedContainer;
+
+public class GridContainerTest {
+
+ @Test
+ public void testSetContainerTwice() throws Exception {
+
+ TestGrid grid = new TestGrid();
+
+ grid.setContainerDataSource(createContainer());
+
+ // Simulate initial response to ensure "lazy" state changes are done
+ // before resetting the datasource
+ grid.beforeClientResponse(true);
+ grid.getDataProvider().beforeClientResponse(true);
+
+ grid.setContainerDataSource(createContainer());
+ }
+
+ @SuppressWarnings("unchecked")
+ private IndexedContainer createContainer() {
+ IndexedContainer container = new IndexedContainer();
+ container.addContainerProperty("x", String.class, null);
+ container.addItem(0).getItemProperty("x").setValue("y");
+ return container;
+ }
+}
--- /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 java.lang.reflect.Field;
+
+import org.easymock.EasyMock;
+
+import com.vaadin.data.RpcDataProviderExtension;
+import com.vaadin.data.util.IndexedContainer;
+import com.vaadin.ui.ConnectorTracker;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.UI;
+
+/**
+ * A Grid attached to a mock UI with a mock ConnectorTracker.
+ *
+ * @since 7.4
+ * @author Vaadin Ltd
+ */
+public class TestGrid extends Grid {
+
+ public TestGrid() {
+ super();
+ init();
+ }
+
+ public TestGrid(IndexedContainer c) {
+ super(c);
+ init();
+ }
+
+ public RpcDataProviderExtension getDataProvider() throws Exception {
+ Field dseField = Grid.class.getDeclaredField("datasourceExtension");
+ dseField.setAccessible(true);
+ return (RpcDataProviderExtension) dseField.get(this);
+ }
+
+ private void init() {
+ UI mockUI = EasyMock.createNiceMock(UI.class);
+ ConnectorTracker mockCT = EasyMock
+ .createNiceMock(ConnectorTracker.class);
+ EasyMock.expect(mockUI.getConnectorTracker()).andReturn(mockCT)
+ .anyTimes();
+ EasyMock.replay(mockUI, mockCT);
+
+ setParent(mockUI);
+ }
+}
import java.util.Locale;
-import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;
import com.vaadin.data.util.converter.Converter;
import com.vaadin.data.util.converter.StringToIntegerConverter;
import com.vaadin.server.VaadinSession;
+import com.vaadin.tests.server.component.grid.TestGrid;
import com.vaadin.tests.util.AlwaysLockedVaadinSession;
-import com.vaadin.ui.ConnectorTracker;
import com.vaadin.ui.Grid;
import com.vaadin.ui.Grid.Column;
-import com.vaadin.ui.UI;
import com.vaadin.ui.renderers.TextRenderer;
import elemental.json.JsonValue;
item.getItemProperty("baz").setValue(new TestBean());
item.getItemProperty("bah").setValue(new ExtendedBean());
- UI ui = EasyMock.createNiceMock(UI.class);
- ConnectorTracker ct = EasyMock.createNiceMock(ConnectorTracker.class);
- EasyMock.expect(ui.getConnectorTracker()).andReturn(ct).anyTimes();
- EasyMock.replay(ui, ct);
-
- grid = new Grid(c);
- grid.setParent(ui);
+ grid = new TestGrid(c);
foo = grid.getColumn("foo");
bar = grid.getColumn("bar");