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<String>("First Name"), 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