You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/06/10 14:38:06 UTC
git commit: ISIS-432: table columns now sortable.
Updated Branches:
refs/heads/master 734950d72 -> 5a85a303b
ISIS-432: table columns now sortable.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/5a85a303
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/5a85a303
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/5a85a303
Branch: refs/heads/master
Commit: 5a85a303b09e0e10582f6902d982b7554505f199
Parents: 734950d
Author: Dan Haywood <da...@apache.org>
Authored: Mon Jun 10 13:23:39 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Mon Jun 10 13:23:39 2013 +0100
----------------------------------------------------------------------
.../CollectionContentsAsAjaxTablePanel.css | 29 +++++++--
.../CollectionContentsSortableDataProvider.java | 65 +++++++++++++++++--
.../MyAjaxFallbackDefaultDataTable.java | 1 -
.../ajaxtable/columns/ColumnAbstract.java | 6 +-
.../columns/ObjectAdapterPropertyColumn.java | 5 +-
.../ajaxtable/images/arrow_down.png | Bin 0 -> 189 bytes
.../ajaxtable/images/arrow_off.png | Bin 0 -> 178 bytes
.../ajaxtable/images/arrow_up.png | Bin 0 -> 189 bytes
8 files changed, 88 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/5a85a303/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
index 81ef5d9..4be92ad 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.css
@@ -41,7 +41,8 @@
padding-left: 4px;
padding-right: 4px;
}
-.collectionContentsAsAjaxTablePanel table.contents tr th {
+.collectionContentsAsAjaxTablePanel table.contents tr th,
+.collectionContentsAsAjaxTablePanel table.contents tr th a {
color: #FFFFFF;
background-color: #46423C;
text-align: left;
@@ -50,16 +51,32 @@
font-weight:bold;
}
+.collectionContentsAsAjaxTablePanel table.contents tr th.wicket_orderUp a,
+.collectionContentsAsAjaxTablePanel table.contents tr th.wicket_orderDown a {
+ background-color: #20B5C2;
+}
+
+.collectionContentsAsAjaxTablePanel table.contents tr th.wicket_orderUp a:hover,
+.collectionContentsAsAjaxTablePanel table.contents tr th.wicket_orderDown a:hover {
+ color: #46423C;
+}
+
.collectionContentsAsAjaxTablePanel table.contents tr th.wicket_orderDown {
- background-color: #87cbff;
- background-image: url(displaytag/img/arrow_down.png);
+ background-color: #20B5C2;
+ background-image: url(images/arrow_down.png);
+ background-position: right;
+ background-repeat: no-repeat;
}
.collectionContentsAsAjaxTablePanel table.contents tr th.wicket_orderUp {
- background-color: #87cbff;
- background-image: url(displaytag/img/arrow_up.png);
+ background-color: #20B5C2;
+ background-image: url(images/arrow_up.png);
+ background-position: right;
+ background-repeat: no-repeat;
}
.collectionContentsAsAjaxTablePanel table.contents tr th.wicket_orderNone {
- background-image: url(displaytag/img/arrow_off.png);
+ background-image: url(images/arrow_off.png);
+ background-position: right;
+ background-repeat: no-repeat;
}
.collectionContentsAsAjaxTablePanel table.contents tr th a {
font-weight: normal;
http://git-wip-us.apache.org/repos/asf/isis/blob/5a85a303/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
index 843476e..cc6f35e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
@@ -20,20 +20,23 @@
package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable;
import java.util.Iterator;
+import java.util.List;
+
+import com.google.common.collect.Ordering;
import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
/**
* Part of the {@link AjaxFallbackDefaultDataTable} API.
- *
- * <p>
- * TODO: not yet fully supported.
*/
public class CollectionContentsSortableDataProvider extends SortableDataProvider<ObjectAdapter,String> {
@@ -47,7 +50,9 @@ public class CollectionContentsSortableDataProvider extends SortableDataProvider
@Override
public Iterator<ObjectAdapter> iterator(final long first, final long count) {
- return model.getObject().subList((int)first, (int)(first + count)).iterator();
+ List<ObjectAdapter> adapters = sortedIfRequired(model.getObject(), this.getSort());
+
+ return adapters.subList((int)first, (int)(first + count)).iterator();
}
@Override
@@ -67,4 +72,56 @@ public class CollectionContentsSortableDataProvider extends SortableDataProvider
}
+ private List<ObjectAdapter> sortedIfRequired(List<ObjectAdapter> adapters, final SortParam<String> sort) {
+ if(sort == null) {
+ return adapters;
+ }
+
+ final ObjectSpecification elementSpec = model.getTypeOfSpecification();
+
+ final String sortPropertyId = sort.getProperty();
+ final ObjectAssociation sortProperty = elementSpec.getAssociation(sortPropertyId);
+ if(sortProperty == null) {
+ return adapters;
+ }
+
+ Ordering<ObjectAdapter> ordering = orderingBy(sortProperty, sort.isAscending());
+ return ordering.sortedCopy(adapters);
+ }
+
+ public static Ordering<ObjectAdapter> orderingBy(final ObjectAssociation sortProperty, final boolean ascending) {
+ final Ordering<ObjectAdapter> ordering = new Ordering<ObjectAdapter>(){
+
+ @Override
+ public int compare(final ObjectAdapter p, final ObjectAdapter q) {
+ final ObjectAdapter pSort = sortProperty.get(p);
+ final ObjectAdapter qSort = sortProperty.get(q);
+ Ordering<ObjectAdapter> naturalOrdering =
+ ascending
+ ? ORDERING_BY_NATURAL.nullsFirst()
+ : ORDERING_BY_NATURAL.nullsLast();
+ return naturalOrdering.compare(pSort, qSort);
+ }
+ };
+ return ascending?ordering:ordering.reverse();
+ }
+
+ public static Ordering<ObjectAdapter> ORDERING_BY_NATURAL = new Ordering<ObjectAdapter>(){
+ @Override
+ public int compare(final ObjectAdapter p, final ObjectAdapter q) {
+ final Object pPojo = p.getObject();
+ final Object qPojo = q.getObject();
+ if(!(pPojo instanceof Comparable) || !(qPojo instanceof Comparable)) {
+ return 0;
+ }
+ return naturalOrdering(pPojo, qPojo);
+ }
+ @SuppressWarnings("rawtypes")
+ private int naturalOrdering(final Object pPojo, final Object qPojo) {
+ Comparable pComparable = (Comparable) pPojo;
+ Comparable qComparable = (Comparable) qPojo;
+ return Ordering.natural().compare(pComparable, qComparable);
+ }
+ };
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/5a85a303/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/MyAjaxFallbackDefaultDataTable.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/MyAjaxFallbackDefaultDataTable.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/MyAjaxFallbackDefaultDataTable.java
index dd11ffe..91ca852 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/MyAjaxFallbackDefaultDataTable.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/MyAjaxFallbackDefaultDataTable.java
@@ -20,7 +20,6 @@ package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable
import java.util.List;
-import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackHeadersToolbar;
import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxNavigationToolbar;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
http://git-wip-us.apache.org/repos/asf/isis/blob/5a85a303/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ColumnAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ColumnAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ColumnAbstract.java
index 9ca0202..c6d9dbe 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ColumnAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ColumnAbstract.java
@@ -43,11 +43,11 @@ public abstract class ColumnAbstract<T> extends AbstractColumn<T,String> {
private static final long serialVersionUID = 1L;
public ColumnAbstract(final String columnName) {
- this(Model.of(columnName));
+ this(Model.of(columnName), null);
}
- public ColumnAbstract(final IModel<String> columnNameModel) {
- super(columnNameModel);
+ public ColumnAbstract(final IModel<String> columnNameModel, final String sortColumn) {
+ super(columnNameModel, sortColumn);
}
protected ComponentFactory findComponentFactory(final ComponentType componentType, final IModel<?> model) {
http://git-wip-us.apache.org/repos/asf/isis/blob/5a85a303/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java
index 74a8c3d..05adc9c 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java
@@ -48,13 +48,10 @@ public final class ObjectAdapterPropertyColumn extends ColumnAbstract<ObjectAdap
private static final long serialVersionUID = 1L;
- @SuppressWarnings("unused")
- private final String sortProperty;
private final String propertyExpression;
public ObjectAdapterPropertyColumn(final IModel<String> columnNameModel, final String sortProperty, final String propertyName) {
- super(columnNameModel);
- this.sortProperty = sortProperty;
+ super(columnNameModel, sortProperty);
this.propertyExpression = propertyName;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/5a85a303/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_down.png
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_down.png b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_down.png
new file mode 100644
index 0000000..f31cc81
Binary files /dev/null and b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_down.png differ
http://git-wip-us.apache.org/repos/asf/isis/blob/5a85a303/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_off.png
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_off.png b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_off.png
new file mode 100644
index 0000000..f9b1ced
Binary files /dev/null and b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_off.png differ
http://git-wip-us.apache.org/repos/asf/isis/blob/5a85a303/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_up.png
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_up.png b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_up.png
new file mode 100644
index 0000000..63031c3
Binary files /dev/null and b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/images/arrow_up.png differ