]> source.dussan.org Git - vaadin-framework.git/commitdiff
Move Vaadin 7 CustomField to compatibility package
authorArtur Signell <artur@vaadin.com>
Tue, 23 Aug 2016 12:18:41 +0000 (15:18 +0300)
committerVaadin Code Review <review@vaadin.com>
Thu, 25 Aug 2016 09:08:30 +0000 (09:08 +0000)
Change-Id: Ie1d37fd2d249bf35e953f095fa80a6905a135793

client/src/main/java/com/vaadin/client/legacy/ui/LegacyCustomFieldConnector.java [deleted file]
compatibility-client/src/main/java/com/vaadin/v7/client/ui/customfield/CustomFieldConnector.java [new file with mode: 0644]
compatibility-server/src/main/java/com/vaadin/v7/ui/CustomField.java [new file with mode: 0644]
server/src/main/java/com/vaadin/v7/ui/CustomField.java [deleted file]

diff --git a/client/src/main/java/com/vaadin/client/legacy/ui/LegacyCustomFieldConnector.java b/client/src/main/java/com/vaadin/client/legacy/ui/LegacyCustomFieldConnector.java
deleted file mode 100644 (file)
index 19b13f5..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2000-2016 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.client.legacy.ui;
-
-import com.vaadin.client.ui.customfield.CustomFieldConnector;
-import com.vaadin.shared.ui.Connect;
-import com.vaadin.v7.ui.CustomField;
-
-@Connect(value = CustomField.class)
-public class LegacyCustomFieldConnector extends CustomFieldConnector {
-
-}
diff --git a/compatibility-client/src/main/java/com/vaadin/v7/client/ui/customfield/CustomFieldConnector.java b/compatibility-client/src/main/java/com/vaadin/v7/client/ui/customfield/CustomFieldConnector.java
new file mode 100644 (file)
index 0000000..33495a3
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2000-2016 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.v7.client.ui.customfield;
+
+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.v7.ui.CustomField;
+
+@Connect(value = CustomField.class)
+public class CustomFieldConnector extends AbstractFieldConnector
+        implements HasComponentsConnector, ConnectorHierarchyChangeHandler {
+
+    List<ComponentConnector> childComponents;
+
+    /**
+     * Default constructor
+     */
+    public CustomFieldConnector() {
+        addConnectorHierarchyChangeHandler(this);
+    }
+
+    @Override
+    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;
+        }
+    }
+
+}
diff --git a/compatibility-server/src/main/java/com/vaadin/v7/ui/CustomField.java b/compatibility-server/src/main/java/com/vaadin/v7/ui/CustomField.java
new file mode 100644 (file)
index 0000000..f55b330
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2000-2016 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.v7.ui;
+
+import java.io.Serializable;
+import java.util.Iterator;
+
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HasComponents;
+import com.vaadin.v7.data.Property;
+
+/**
+ * A {@link Field} whose UI content can be constructed by the user, enabling the
+ * creation of e.g. form fields by composing Vaadin components. Customization of
+ * both the visual presentation and the logic of the field is possible.
+ *
+ * Subclasses must implement {@link #getType()} and {@link #initContent()}.
+ *
+ * Most custom fields can simply compose a user interface that calls the methods
+ * {@link #setInternalValue(Object)} and {@link #getInternalValue()} when
+ * necessary.
+ *
+ * It is also possible to override {@link #validate()},
+ * {@link #setInternalValue(Object)}, {@link #commit()},
+ * {@link #setPropertyDataSource(Property)}, {@link #isEmpty()} and other logic
+ * of the field. Methods overriding {@link #setInternalValue(Object)} should
+ * also call the corresponding superclass method.
+ *
+ * @param <T>
+ *            field value type
+ *
+ * @since 7.0
+ */
+public abstract class CustomField<T> extends AbstractField<T>
+        implements HasComponents {
+
+    /**
+     * The root component implementing the custom component.
+     */
+    private Component root = null;
+
+    /**
+     * Constructs a new custom field.
+     *
+     * <p>
+     * The component is implemented by wrapping the methods of the composition
+     * root component given as parameter. The composition root must be set
+     * before the component can be used.
+     * </p>
+     */
+    public CustomField() {
+        // expand horizontally by default
+        setWidth(100, Unit.PERCENTAGE);
+    }
+
+    /**
+     * Constructs the content and notifies it that the {@link CustomField} is
+     * attached to a window.
+     *
+     * @see com.vaadin.ui.Component#attach()
+     */
+    @Override
+    public void attach() {
+        // First call super attach to notify all children (none if content has
+        // not yet been created)
+        super.attach();
+
+        // If the content has not yet been created, create and attach it at
+        // this point by calling getContent()
+        getContent();
+    }
+
+    /**
+     * Returns the content (UI) of the custom component.
+     *
+     * @return Component
+     */
+    protected Component getContent() {
+        if (null == root) {
+            root = initContent();
+            root.setParent(this);
+        }
+        return root;
+    }
+
+    /**
+     * Create the content component or layout for the field. Subclasses of
+     * {@link CustomField} should implement this method.
+     *
+     * Note that this method is called when the CustomField is attached to a
+     * layout or when {@link #getContent()} is called explicitly for the first
+     * time. It is only called once for a {@link CustomField}.
+     *
+     * @return {@link Component} representing the UI of the CustomField
+     */
+    protected abstract Component initContent();
+
+    // Size related methods
+    // TODO might not be necessary to override but following the pattern from
+    // AbstractComponentContainer
+
+    @Override
+    public void setHeight(float height, Unit unit) {
+        super.setHeight(height, unit);
+        markAsDirtyRecursive();
+    }
+
+    @Override
+    public void setWidth(float width, Unit unit) {
+        super.setWidth(width, unit);
+        markAsDirtyRecursive();
+    }
+
+    // ComponentContainer methods
+
+    private class ComponentIterator
+            implements Iterator<Component>, Serializable {
+        boolean first = (root != null);
+
+        @Override
+        public boolean hasNext() {
+            return first;
+        }
+
+        @Override
+        public Component next() {
+            first = false;
+            return getContent();
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    @Override
+    public Iterator<Component> iterator() {
+        return new ComponentIterator();
+    }
+}
diff --git a/server/src/main/java/com/vaadin/v7/ui/CustomField.java b/server/src/main/java/com/vaadin/v7/ui/CustomField.java
deleted file mode 100644 (file)
index f55b330..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright 2000-2016 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.v7.ui;
-
-import java.io.Serializable;
-import java.util.Iterator;
-
-import com.vaadin.ui.Component;
-import com.vaadin.ui.HasComponents;
-import com.vaadin.v7.data.Property;
-
-/**
- * A {@link Field} whose UI content can be constructed by the user, enabling the
- * creation of e.g. form fields by composing Vaadin components. Customization of
- * both the visual presentation and the logic of the field is possible.
- *
- * Subclasses must implement {@link #getType()} and {@link #initContent()}.
- *
- * Most custom fields can simply compose a user interface that calls the methods
- * {@link #setInternalValue(Object)} and {@link #getInternalValue()} when
- * necessary.
- *
- * It is also possible to override {@link #validate()},
- * {@link #setInternalValue(Object)}, {@link #commit()},
- * {@link #setPropertyDataSource(Property)}, {@link #isEmpty()} and other logic
- * of the field. Methods overriding {@link #setInternalValue(Object)} should
- * also call the corresponding superclass method.
- *
- * @param <T>
- *            field value type
- *
- * @since 7.0
- */
-public abstract class CustomField<T> extends AbstractField<T>
-        implements HasComponents {
-
-    /**
-     * The root component implementing the custom component.
-     */
-    private Component root = null;
-
-    /**
-     * Constructs a new custom field.
-     *
-     * <p>
-     * The component is implemented by wrapping the methods of the composition
-     * root component given as parameter. The composition root must be set
-     * before the component can be used.
-     * </p>
-     */
-    public CustomField() {
-        // expand horizontally by default
-        setWidth(100, Unit.PERCENTAGE);
-    }
-
-    /**
-     * Constructs the content and notifies it that the {@link CustomField} is
-     * attached to a window.
-     *
-     * @see com.vaadin.ui.Component#attach()
-     */
-    @Override
-    public void attach() {
-        // First call super attach to notify all children (none if content has
-        // not yet been created)
-        super.attach();
-
-        // If the content has not yet been created, create and attach it at
-        // this point by calling getContent()
-        getContent();
-    }
-
-    /**
-     * Returns the content (UI) of the custom component.
-     *
-     * @return Component
-     */
-    protected Component getContent() {
-        if (null == root) {
-            root = initContent();
-            root.setParent(this);
-        }
-        return root;
-    }
-
-    /**
-     * Create the content component or layout for the field. Subclasses of
-     * {@link CustomField} should implement this method.
-     *
-     * Note that this method is called when the CustomField is attached to a
-     * layout or when {@link #getContent()} is called explicitly for the first
-     * time. It is only called once for a {@link CustomField}.
-     *
-     * @return {@link Component} representing the UI of the CustomField
-     */
-    protected abstract Component initContent();
-
-    // Size related methods
-    // TODO might not be necessary to override but following the pattern from
-    // AbstractComponentContainer
-
-    @Override
-    public void setHeight(float height, Unit unit) {
-        super.setHeight(height, unit);
-        markAsDirtyRecursive();
-    }
-
-    @Override
-    public void setWidth(float width, Unit unit) {
-        super.setWidth(width, unit);
-        markAsDirtyRecursive();
-    }
-
-    // ComponentContainer methods
-
-    private class ComponentIterator
-            implements Iterator<Component>, Serializable {
-        boolean first = (root != null);
-
-        @Override
-        public boolean hasNext() {
-            return first;
-        }
-
-        @Override
-        public Component next() {
-            first = false;
-            return getContent();
-        }
-
-        @Override
-        public void remove() {
-            throw new UnsupportedOperationException();
-        }
-    }
-
-    @Override
-    public Iterator<Component> iterator() {
-        return new ComponentIterator();
-    }
-}