]> source.dussan.org Git - vaadin-framework.git/commitdiff
Add EditorComponentGenerator interface (#7990)
authorAleksi Hietanen <aleksi@vaadin.com>
Thu, 15 Dec 2016 09:00:24 +0000 (11:00 +0200)
committerPekka Hyvönen <pekka@vaadin.com>
Thu, 15 Dec 2016 09:00:24 +0000 (11:00 +0200)
* Add EditorComponentGenerator interface

Closes vaadin/framework8-issues#565

* Add missing @FunctionalInterface

* Rebase onto current master

* Fix imports

* Restore old import order

server/src/main/java/com/vaadin/ui/Grid.java
server/src/main/java/com/vaadin/ui/components/grid/EditorComponentGenerator.java [new file with mode: 0644]

index e8c621d8775f2715331dea16170c578e8de70bcd..6136b54f42624ab95e3a84a9bed01d44a54d7d51 100644 (file)
@@ -15,6 +15,7 @@
  */
 package com.vaadin.ui;
 
+
 import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
@@ -79,6 +80,7 @@ import com.vaadin.shared.ui.grid.HeightMode;
 import com.vaadin.shared.ui.grid.SectionState;
 import com.vaadin.shared.util.SharedUtil;
 import com.vaadin.ui.components.grid.AbstractSelectionModel;
+import com.vaadin.ui.components.grid.EditorComponentGenerator;
 import com.vaadin.ui.components.grid.EditorImpl;
 import com.vaadin.ui.components.grid.Footer;
 import com.vaadin.ui.components.grid.Header;
@@ -992,7 +994,7 @@ public class Grid<T> extends AbstractListing<T>
         private StyleGenerator<T> styleGenerator = item -> null;
         private DescriptionGenerator<T> descriptionGenerator;
 
-        private SerializableFunction<T, Component> componentGenerator;
+        private EditorComponentGenerator<T> componentGenerator;
 
         /**
          * Constructs a new Column configuration with given header caption,
@@ -1703,7 +1705,7 @@ public class Grid<T> extends AbstractListing<T>
          * @return this column
          *
          * @see #setEditorComponent(Component)
-         * @see #setEditorComponentGenerator(SerializableFunction)
+         * @see #setEditorComponentGenerator(EditorComponentGenerator)
          */
         public Column<T, V> setEditable(boolean editable) {
             Objects.requireNonNull(componentGenerator,
@@ -1734,7 +1736,7 @@ public class Grid<T> extends AbstractListing<T>
          *
          * @see Editor#getBinder()
          * @see Editor#setBinder(Binder)
-         * @see #setEditorComponentGenerator(SerializableFunction)
+         * @see #setEditorComponentGenerator(EditorComponentGenerator)
          */
         public Column<T, V> setEditorComponent(Component component) {
             Objects.requireNonNull(component,
@@ -1743,7 +1745,7 @@ public class Grid<T> extends AbstractListing<T>
         }
 
         /**
-         * Sets a component generator to provide editor component for this
+         * Sets a component generator to provide an editor component for this
          * Column. This method can be used to generate any dynamic component to
          * be displayed in the editor row.
          * <p>
@@ -1754,10 +1756,11 @@ public class Grid<T> extends AbstractListing<T>
          *            the editor component generator
          * @return this column
          *
+         * @see EditorComponentGenerator
          * @see #setEditorComponent(Component)
          */
         public Column<T, V> setEditorComponentGenerator(
-                SerializableFunction<T, Component> componentGenerator) {
+                EditorComponentGenerator<T> componentGenerator) {
             Objects.requireNonNull(componentGenerator);
             this.componentGenerator = componentGenerator;
             return setEditable(true);
@@ -1767,8 +1770,10 @@ public class Grid<T> extends AbstractListing<T>
          * Gets the editor component generator for this Column.
          *
          * @return editor component generator
+         *
+         * @see EditorComponentGenerator
          */
-        public SerializableFunction<T, Component> getEditorComponentGenerator() {
+        public EditorComponentGenerator<T> getEditorComponentGenerator() {
             return componentGenerator;
         }
 
diff --git a/server/src/main/java/com/vaadin/ui/components/grid/EditorComponentGenerator.java b/server/src/main/java/com/vaadin/ui/components/grid/EditorComponentGenerator.java
new file mode 100644 (file)
index 0000000..c21142f
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * 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.ui.components.grid;
+
+import com.vaadin.server.SerializableFunction;
+import com.vaadin.ui.Component;
+
+/**
+ * A callback interface for generating an editor component corresponding to an
+ * editable column of a grid. The generated component will be used in the grid
+ * editor to edit the value of the column for the selected grid row.
+ * 
+ * @author Vaadin Ltd.
+ * @since 8.0
+ *
+ * @param <BEAN>
+ *            the bean type this generator is compatible with
+ */
+@FunctionalInterface
+public interface EditorComponentGenerator<BEAN>
+        extends SerializableFunction<BEAN, Component> {
+
+    /**
+     * Gets a component for a given {@code bean}.
+     * 
+     * @param bean
+     *            the bean this component will be used to edit
+     * @return the generated component
+     */
+    @Override
+    public Component apply(BEAN bean);
+}