]> source.dussan.org Git - vaadin-framework.git/commitdiff
Required indicator for Table now works as expected (#17294)
authorMatti Tahvonen <matti@vaadin.com>
Wed, 3 Jun 2015 13:32:18 +0000 (16:32 +0300)
committerVaadin Code Review <review@vaadin.com>
Thu, 4 Jun 2015 14:14:59 +0000 (14:14 +0000)
Table is a field (and one of the most powerful ones), but it cannot be
used as required, especially if one wants to use the built in "required
indicators" in Vaadin. Those only work if client side connector extends
AbstractFieldConnector so Table is now extending it as well and
(I expect that it ) needs to do the AbstractHasComponentsConnector
stuff internally.

Change-Id: I4ceb719366621053c7fe4c9691d624d61ed57567

client/src/com/vaadin/client/ui/table/TableConnector.java
uitest/src/com/vaadin/tests/components/table/TableRequiredIndicator.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/table/TableRequiredIndicatorTest.java [new file with mode: 0644]

index 0d34d2d4d9efe8c993422bf7716a0e7a776721f5..7bbda39c4354165063e195a87418d052640e74b4 100644 (file)
  */
 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 (file)
index 0000000..2985932
--- /dev/null
@@ -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 (file)
index 0000000..b94ddae
--- /dev/null
@@ -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")));
+    }
+
+}