]> source.dussan.org Git - vaadin-framework.git/commitdiff
Changed CustomFieldConnector hierarchy to be consistent with server side (#8797) 18/618/1
authorArtur Signell <artur@vaadin.com>
Thu, 10 Jan 2013 17:26:19 +0000 (19:26 +0200)
committerArtur Signell <artur@vaadin.com>
Thu, 10 Jan 2013 18:01:18 +0000 (20:01 +0200)
Change-Id: I6a2286cd1247ba4f3cd205aa805a62c194c0085b

client/src/com/vaadin/client/ui/customfield/CustomFieldConnector.java

index 541c3d6b623b3b1fc2d0e324c777e13c30ddcdf3..c6e4b87b733f4a236e87a0740dfffe79c3155476 100644 (file)
  */
 package com.vaadin.client.ui.customfield;
 
-import com.google.gwt.core.client.GWT;
-import com.vaadin.client.ui.customcomponent.CustomComponentConnector;
-import com.vaadin.shared.AbstractFieldState;
-import com.vaadin.shared.communication.SharedState;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.ConnectorHierarchyChangeEvent;
+import com.vaadin.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler;
+import com.vaadin.client.HasComponentsConnector;
+import com.vaadin.client.ui.AbstractFieldConnector;
+import com.vaadin.client.ui.VCustomComponent;
 import com.vaadin.shared.ui.Connect;
 import com.vaadin.ui.CustomField;
 
 @Connect(value = CustomField.class)
-public class CustomFieldConnector extends CustomComponentConnector {
+public class CustomFieldConnector extends AbstractFieldConnector implements
+        HasComponentsConnector, ConnectorHierarchyChangeHandler {
+
+    List<ComponentConnector> childComponents;
+
+    /**
+     * Default constructor
+     */
+    public CustomFieldConnector() {
+        addConnectorHierarchyChangeHandler(this);
+    }
+
     @Override
-    protected SharedState createState() {
-        // Workaround as CustomFieldConnector does not extend
-        // AbstractFieldConnector.
-        return GWT.create(AbstractFieldState.class);
+    public VCustomComponent getWidget() {
+        return (VCustomComponent) super.getWidget();
+    }
+
+    @Override
+    public void updateCaption(ComponentConnector connector) {
+        // NOP, custom field does not render the caption of its content
+    }
+
+    @Override
+    public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
+        // We always have 1 child, unless the child is hidden
+        getWidget().setWidget(getContentWidget());
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.vaadin.client.HasComponentsConnector#getChildren()
+     */
+    @Override
+    public List<ComponentConnector> getChildComponents() {
+        if (childComponents == null) {
+            return Collections.emptyList();
+        }
+
+        return childComponents;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.vaadin.client.HasComponentsConnector#setChildren
+     * (java.util.Collection)
+     */
+    @Override
+    public void setChildComponents(List<ComponentConnector> childComponents) {
+        this.childComponents = childComponents;
+    }
+
+    @Override
+    public HandlerRegistration addConnectorHierarchyChangeHandler(
+            ConnectorHierarchyChangeHandler handler) {
+        return ensureHandlerManager().addHandler(
+                ConnectorHierarchyChangeEvent.TYPE, handler);
+    }
+
+    /**
+     * Returns the content (only/first child) of the container.
+     * 
+     * @return child connector or null if none (e.g. invisible or not set on
+     *         server)
+     */
+    protected ComponentConnector getContent() {
+        List<ComponentConnector> children = getChildComponents();
+        if (children.isEmpty()) {
+            return null;
+        } else {
+            return children.get(0);
+        }
+    }
+
+    /**
+     * Returns the widget (if any) of the content of the container.
+     * 
+     * @return widget of the only/first connector of the container, null if no
+     *         content or if there is no widget for the connector
+     */
+    protected Widget getContentWidget() {
+        ComponentConnector content = getContent();
+        if (null != content) {
+            return content.getWidget();
+        } else {
+            return null;
+        }
     }
 
 }