diff options
3 files changed, 152 insertions, 6 deletions
diff --git a/client/src/com/vaadin/client/ui/table/TableConnector.java b/client/src/com/vaadin/client/ui/table/TableConnector.java index 0d34d2d4d9..7bbda39c43 100644 --- a/client/src/com/vaadin/client/ui/table/TableConnector.java +++ b/client/src/com/vaadin/client/ui/table/TableConnector.java @@ -15,24 +15,29 @@ */ package com.vaadin.client.ui.table; +import java.util.Collections; import java.util.Iterator; +import java.util.List; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style.Position; +import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.ui.Widget; import com.vaadin.client.ApplicationConnection; import com.vaadin.client.BrowserInfo; import com.vaadin.client.ComponentConnector; import com.vaadin.client.ConnectorHierarchyChangeEvent; +import com.vaadin.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler; import com.vaadin.client.DirectionalManagedLayout; +import com.vaadin.client.HasComponentsConnector; import com.vaadin.client.Paintable; import com.vaadin.client.ServerConnector; import com.vaadin.client.TooltipInfo; import com.vaadin.client.UIDL; import com.vaadin.client.WidgetUtil; -import com.vaadin.client.ui.AbstractHasComponentsConnector; +import com.vaadin.client.ui.AbstractFieldConnector; import com.vaadin.client.ui.PostLayoutListener; import com.vaadin.client.ui.VScrollTable; import com.vaadin.client.ui.VScrollTable.ContextMenuDetails; @@ -42,8 +47,15 @@ import com.vaadin.shared.ui.table.TableConstants; import com.vaadin.shared.ui.table.TableState; @Connect(com.vaadin.ui.Table.class) -public class TableConnector extends AbstractHasComponentsConnector implements - Paintable, DirectionalManagedLayout, PostLayoutListener { +public class TableConnector extends AbstractFieldConnector implements + HasComponentsConnector, ConnectorHierarchyChangeHandler, Paintable, + DirectionalManagedLayout, PostLayoutListener { + + private List<ComponentConnector> childComponents; + + public TableConnector() { + addConnectorHierarchyChangeHandler(this); + } @Override protected void init() { @@ -371,7 +383,7 @@ public class TableConnector extends AbstractHasComponentsConnector implements /** * Shows a saved row context menu if the row for the context menu is still * visible. Does nothing if a context menu has not been saved. - * + * * @param savedContextMenu */ public void showSavedContextMenu(ContextMenuDetails savedContextMenu) { @@ -429,11 +441,33 @@ public class TableConnector extends AbstractHasComponentsConnector implements protected void updateComponentSize(String newWidth, String newHeight) { super.updateComponentSize(newWidth, newHeight); - if("".equals(newWidth)) { + if ("".equals(newWidth)) { getWidget().updateWidth(); } - if("".equals(newHeight)) { + if ("".equals(newHeight)) { getWidget().updateHeight(); } } + + @Override + public List<ComponentConnector> getChildComponents() { + if (childComponents == null) { + return Collections.emptyList(); + } + + return childComponents; + } + + @Override + public void setChildComponents(List<ComponentConnector> childComponents) { + this.childComponents = childComponents; + } + + @Override + public HandlerRegistration addConnectorHierarchyChangeHandler( + ConnectorHierarchyChangeHandler handler) { + return ensureHandlerManager().addHandler( + ConnectorHierarchyChangeEvent.TYPE, handler); + } + } diff --git a/uitest/src/com/vaadin/tests/components/table/TableRequiredIndicator.java b/uitest/src/com/vaadin/tests/components/table/TableRequiredIndicator.java new file mode 100644 index 0000000000..2985932145 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/TableRequiredIndicator.java @@ -0,0 +1,73 @@ +/* + * 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.table; + +import com.vaadin.data.Property.ValueChangeEvent; +import com.vaadin.data.Property.ValueChangeListener; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Notification; +import com.vaadin.ui.Table; + +public class TableRequiredIndicator extends AbstractTestUI { + + static final String TABLE = "table"; + static final String COUNT_SELECTED_BUTTON = "button"; + static final int TOTAL_NUMBER_OF_ROWS = 300; + static final String COUNT_OF_SELECTED_ROWS_LABEL = "label"; + + @Override + protected void setup(VaadinRequest request) { + + final Table table = new Table(); + table.setId(TABLE); + table.setSelectable(true); + table.addContainerProperty("row", String.class, null); + for (int i = 0; i < TOTAL_NUMBER_OF_ROWS; i++) { + Object itemId = table.addItem(); + table.getContainerProperty(itemId, "row").setValue("row " + i); + } + addComponent(table); + + // This should cause red asterisk to the vertical layout + table.setRequired(true); + + table.addValueChangeListener(new ValueChangeListener() { + + @Override + public void valueChange(ValueChangeEvent event) { + Object value = table.getValue(); + if (value != null) { + Notification.show("Value is set."); + } else { + Notification.show("Value is NOT set."); + } + + } + }); + } + + @Override + protected String getTestDescription() { + return "Table is required and should have red asterisk to indicate that."; + } + + @Override + protected Integer getTicketNumber() { + return 13008; + } + +} diff --git a/uitest/src/com/vaadin/tests/components/table/TableRequiredIndicatorTest.java b/uitest/src/com/vaadin/tests/components/table/TableRequiredIndicatorTest.java new file mode 100644 index 0000000000..b94ddaee45 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/table/TableRequiredIndicatorTest.java @@ -0,0 +1,39 @@ +/* + * 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.table; + +import org.junit.Assert; +import org.junit.Test; +import org.openqa.selenium.By; + +import com.vaadin.tests.tb3.MultiBrowserTest; + +/** + * Checks that Table that has required flag set to true is also indicated as + * such on the client side. + * + * @author Vaadin Ltd + */ +public class TableRequiredIndicatorTest extends MultiBrowserTest { + + @Test + public void testRequiredIndicatorIsVisible() { + openTestURL(); + Assert.assertTrue(isElementPresent(By + .className("v-required-field-indicator"))); + } + +} |