You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2016/03/14 21:24:13 UTC

wicket git commit: WICKET-6121 use lambdas for columns

Repository: wicket
Updated Branches:
  refs/heads/master e0db53852 -> f004dd4bd


WICKET-6121 use lambdas for columns


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f004dd4b
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f004dd4b
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f004dd4b

Branch: refs/heads/master
Commit: f004dd4bd967e201912bb65c9397a6b7c1a803ab
Parents: e0db538
Author: Sven Meier <sv...@apache.org>
Authored: Mon Mar 14 21:23:33 2016 +0100
Committer: Sven Meier <sv...@apache.org>
Committed: Mon Mar 14 21:23:33 2016 +0100

----------------------------------------------------------------------
 .../wicket/examples/repeater/DataTablePage.java |   5 +-
 wicket-examples/src/main/webapp/WEB-INF/web.xml |  20 ----
 .../html/repeater/data/table/LambdaColumn.java  | 117 +++++++++++++++++++
 3 files changed, 120 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/f004dd4b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
index e0a75a0..8da2d39 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
@@ -27,6 +27,7 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.LambdaColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.export.CSVDataExporter;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.export.ExportToolbar;
@@ -70,9 +71,9 @@ public class DataTablePage extends BasePage
 			}
 		});
 
-		columns.add(new PropertyColumn<Contact, String>(new Model<>("First Name"), "firstName", "firstName"));
+		columns.add(new LambdaColumn<>(Model.of("First Name"), "firstName", Contact::getFirstName));
 
-		columns.add(new PropertyColumn<Contact, String>(new Model<>("Last Name"), "lastName", "lastName")
+		columns.add(new LambdaColumn<Contact, String>(new Model<>("Last Name"), "lastName", Contact::getLastName)
 		{
 			@Override
 			public String getCssClass()

http://git-wip-us.apache.org/repos/asf/wicket/blob/f004dd4b/wicket-examples/src/main/webapp/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/webapp/WEB-INF/web.xml b/wicket-examples/src/main/webapp/WEB-INF/web.xml
index fb326f9..e73ec90 100644
--- a/wicket-examples/src/main/webapp/WEB-INF/web.xml
+++ b/wicket-examples/src/main/webapp/WEB-INF/web.xml
@@ -784,26 +784,6 @@
 	</filter-mapping>
 
 
-	<!-- CDI EXAMPLE APPLICATION -->
-	<filter>
-		<filter-name>CdiApplication</filter-name>
-		<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
-		<init-param>
-		  <param-name>applicationClassName</param-name>
-		  <param-value>org.apache.wicket.examples.cdi.CdiApplication</param-value>
-		</init-param>
-	</filter>
-	<filter-mapping>
-		<filter-name>CdiApplication</filter-name>
-		<url-pattern>/cdi/*</url-pattern>
-	</filter-mapping>
-
-	<listener>
-		<!-- initialize Weld in servlet environment -->
-		<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
-	</listener>
-    <!-- END CDI EXAMPLE APPLICATION -->
-
     <!-- Bean Validation EXAMPLE APPLICATION -->
     <filter>
         <filter-name>BeanValidation</filter-name>

http://git-wip-us.apache.org/repos/asf/wicket/blob/f004dd4b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/LambdaColumn.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/LambdaColumn.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/LambdaColumn.java
new file mode 100644
index 0000000..bc94194
--- /dev/null
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/LambdaColumn.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.wicket.extensions.markup.html.repeater.data.table;
+
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.export.IExportableColumn;
+import org.apache.wicket.lambda.WicketFunction;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.IModel;
+
+/**
+ * An implementation of column that adds a label to the cell whose model is determined by
+ * the provided {@link WicketFunction} that is evaluated against the current row's model object
+ * <p>
+ * Example
+ * 
+ * <pre>
+ * columns[0] = new LambdaColumn(new Model&lt;String&gt;(&quot;First Name&quot;), this::getFirstName);
+ * </pre>
+ * 
+ * The above will attach a label to the cell which calls {@code #getFirstName()} for each displayed
+ * row.
+ * 
+ * @param <T>
+ *            The Model object type
+ * @param <S>
+ *            the type of the sort property
+ */
+public class LambdaColumn<T, S> extends AbstractColumn<T, S> implements IExportableColumn<T, S>
+{
+	private static final long serialVersionUID = 1L;
+	
+	private WicketFunction<T, ?> function;
+
+	/**
+	 * Creates a column that is not sortable.
+	 * 
+	 * @param displayModel
+	 *            display model
+	 * @param function
+	 *            Wicket function to be applied to each row
+	 */
+	public LambdaColumn(final IModel<String> displayModel, final WicketFunction<T, ?> function)
+	{
+		this(displayModel, null, function);
+	}
+	
+	/**
+	 * Creates a property column that is also sortable.
+	 * 
+	 * @param displayModel
+	 *            display model
+	 * @param sortProperty
+	 *            sort property
+	 * @param function
+	 *            Wicket function to be applied to each row
+	 */
+	public LambdaColumn(final IModel<String> displayModel, final S sortProperty, final WicketFunction<T, ?> function)
+	{
+		super(displayModel, sortProperty);
+		
+		this.function = function;
+	}
+	
+	@Override
+	public void populateItem(Item<ICellPopulator<T>> item, String componentId, IModel<T> rowModel)
+	{
+		item.add(new Label(componentId, getDataModel(rowModel)));
+	}
+	
+	/**
+	 * Factory method for generating a model that will generated the displayed value.
+	 *
+	 * @param rowModel
+	 * @return model
+	 */
+	@Override
+	public IModel<?> getDataModel(IModel<T> rowModel)
+	{
+		IModel<Object> dataModel = new IModel<Object>()
+		{
+			@Override
+			public Object getObject()
+			{
+				T before = rowModel.getObject();
+				
+				if (before == null) {
+					return null;
+				} else {
+					return function.apply(before);
+				}
+			}
+			
+			@Override
+			public void detach()
+			{
+				rowModel.detach();
+			}
+		};
+		return dataModel;
+	}
+}
\ No newline at end of file