[jboss-svn-commits] JBL Code SVN: r35671 - in labs/jbossrules/trunk: drools-guvnor/src/main/java/org/drools/guvnor/client/table and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Oct 22 11:34:02 EDT 2010
Author: ge0ffrey
Date: 2010-10-22 11:34:02 -0400 (Fri, 22 Oct 2010)
New Revision: 35671
Added:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortDirection.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeader.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderGroup.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderResources.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/downArrow.png
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/smallDownArrow.png
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/smallUpArrow.png
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/upArrow.png
Modified:
labs/jbossrules/trunk/pom.xml
Log:
upgrade to GWT 2.1.0.RC1 + SortableHeader support for CellTable prototype
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortDirection.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortDirection.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortDirection.java 2010-10-22 15:34:02 UTC (rev 35671)
@@ -0,0 +1,11 @@
+package org.drools.guvnor.client.table;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public enum SortDirection {
+
+ NONE,
+ ASCENDING,
+ DESCENDING;
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeader.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeader.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeader.java 2010-10-22 15:34:02 UTC (rev 35671)
@@ -0,0 +1,95 @@
+package org.drools.guvnor.client.table;
+
+import com.google.gwt.cell.client.ClickableTextCell;
+import com.google.gwt.cell.client.ValueUpdater;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.user.cellview.client.Column;
+import com.google.gwt.user.cellview.client.Header;
+import com.google.gwt.user.client.ui.AbstractImagePrototype;
+
+/**
+ * Based on GWT bikeshed example.
+ * @author Geoffrey De Smet
+ */
+public class SortableHeader<T, C extends Comparable> extends Header<String> {
+
+ private static final SortableHeaderResources SORTABLE_HEADER_RESOURCES = GWT.create(SortableHeaderResources.class);
+ private static final String DOWN_ARROW = makeImage(SORTABLE_HEADER_RESOURCES.downArrow());
+ private static final String SMALL_DOWN_ARROW = makeImage(SORTABLE_HEADER_RESOURCES.smallDownArrow());
+ private static final String UP_ARROW = makeImage(SORTABLE_HEADER_RESOURCES.upArrow());
+ private static final String SMALL_UP_ARROW = makeImage(SORTABLE_HEADER_RESOURCES.smallUpArrow());
+
+ private static String makeImage(ImageResource resource) {
+ AbstractImagePrototype prototype = AbstractImagePrototype.create(resource);
+ return prototype.getHTML().replace("style='", "style='position:absolute;right:0px;top:0px;");
+ }
+
+ private final SortableHeaderGroup sortableHeaderGroup;
+ private String text;
+ private final Column<T, C> column;
+ private SortDirection sortDirection = SortDirection.NONE;
+ private int sortIndex = -1;
+
+ public SortableHeader(SortableHeaderGroup sortableHeaderGroup, String text, Column<T, C> column) {
+ super(new ClickableTextCell());
+ this.sortableHeaderGroup = sortableHeaderGroup;
+ this.text = text;
+ this.column = column;
+ setUpdater(new ValueUpdater<String>() {
+ public void update(String s) {
+ SortableHeader.this.sortableHeaderGroup.headerClicked(SortableHeader.this);
+ }
+ });
+ }
+
+ /**
+ * @return the header label
+ */
+ public String getValue() {
+ return text;
+ }
+
+ public Column<T, C> getColumn() {
+ return column;
+ }
+
+ public SortDirection getSortDirection() {
+ return sortDirection;
+ }
+
+ public void setSortDirection(SortDirection sortDirection) {
+ this.sortDirection = sortDirection;
+ }
+
+ public int getSortIndex() {
+ return sortIndex;
+ }
+
+ public void setSortIndex(int sortIndex) {
+ this.sortIndex = sortIndex;
+ }
+
+ @Override
+ public void render(SafeHtmlBuilder sb) {
+ sb.appendHtmlConstant("<div style='position:relative;cursor:hand;cursor:pointer;padding-right:16px;'>");
+ switch (sortDirection) {
+ case NONE:
+ sb.appendHtmlConstant("<div style='position:absolute;display:none;'></div>");
+ break;
+ case ASCENDING:
+ sb.appendHtmlConstant(sortIndex == 0 ? UP_ARROW : SMALL_UP_ARROW);
+ break;
+ case DESCENDING:
+ sb.appendHtmlConstant(sortIndex == 0 ? DOWN_ARROW : SMALL_DOWN_ARROW);
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown sortDirection (" + sortDirection + ").");
+ }
+ sb.appendHtmlConstant("<div>");
+ sb.appendEscaped(text);
+ sb.appendHtmlConstant("</div></div>");
+ }
+
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderGroup.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderGroup.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderGroup.java 2010-10-22 15:34:02 UTC (rev 35671)
@@ -0,0 +1,88 @@
+package org.drools.guvnor.client.table;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.List;
+
+import com.google.gwt.user.cellview.client.CellTable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class SortableHeaderGroup<R extends Comparable> {
+
+ private final CellTable<R> cellTable;
+ // TODO change List into Deque after upgrade to java 6
+ private List<SortableHeader<R, ?>> sortOrderList = new LinkedList<SortableHeader<R, ?>>();
+
+ public SortableHeaderGroup(CellTable<R> cellTable) {
+
+ this.cellTable = cellTable;
+ }
+
+ public void headerClicked(SortableHeader<R, ?> header) {
+ updateSortOrder(header);
+ cellTable.redrawHeaders();
+ updateData();
+ }
+
+ private void updateSortOrder(SortableHeader<R, ?> header) {
+ int index = sortOrderList.indexOf(header);
+ if (index == 0) {
+ if (header.getSortDirection() != SortDirection.ASCENDING) {
+ header.setSortDirection(SortDirection.ASCENDING);
+ } else {
+ header.setSortDirection(SortDirection.DESCENDING);
+ }
+ } else {
+ // Remove it if it's already sorted on this header later
+ if (index > 0) {
+ sortOrderList.remove(index);
+ }
+ header.setSortDirection(SortDirection.ASCENDING);
+ // Bring this header to front // Deque.addFirst(sortableHeader)
+ sortOrderList.add(0, header);
+ // Update sortIndexes
+ int sortIndex = 0;
+ for (SortableHeader<R, ?> sortableHeader : sortOrderList) {
+ sortableHeader.setSortIndex(sortIndex);
+ sortIndex++;
+ }
+ }
+ }
+
+ private void updateData() {
+ // TODO If paging is used, this should be a back-end call with a sorting meta data parameter
+ List<R> displayedItems = new ArrayList(cellTable.getDisplayedItems());
+ Collections.sort(displayedItems, new Comparator<R>() {
+ public int compare(R left, R right) {
+ for (SortableHeader<R, ?> sortableHeader : sortOrderList) {
+ Comparable leftValue = sortableHeader.getColumn().getValue(left);
+ Comparable rightValue = sortableHeader.getColumn().getValue(left);
+ int comparison = (leftValue == rightValue) ? 0
+ : (leftValue == null) ? -1
+ : (rightValue == null) ? 1
+ : leftValue.compareTo(rightValue);
+ if (comparison != 0) {
+ switch (sortableHeader.getSortDirection()) {
+ case ASCENDING:
+ break;
+ case DESCENDING:
+ comparison = -comparison;
+ default:
+ throw new IllegalStateException("Sorting can only be enabled for ASCENDING or" +
+ " DESCENDING, not sortDirection (" + sortableHeader.getSortDirection() + ") .");
+ }
+ return comparison;
+ }
+ }
+ return left.compareTo(right);
+ }
+ });
+ cellTable.setRowData(0, displayedItems);
+ cellTable.redraw();
+ }
+
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderResources.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderResources.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/SortableHeaderResources.java 2010-10-22 15:34:02 UTC (rev 35671)
@@ -0,0 +1,23 @@
+package org.drools.guvnor.client.table;
+
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public interface SortableHeaderResources extends ClientBundle {
+
+ @Source("downArrow.png")
+ ImageResource downArrow();
+
+ @Source("smallDownArrow.png")
+ ImageResource smallDownArrow();
+
+ @Source("upArrow.png")
+ ImageResource upArrow();
+
+ @Source("smallUpArrow.png")
+ ImageResource smallUpArrow();
+
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/downArrow.png
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/downArrow.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/smallDownArrow.png
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/smallDownArrow.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/smallUpArrow.png
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/smallUpArrow.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/upArrow.png
===================================================================
(Binary files differ)
Property changes on: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/table/upArrow.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: labs/jbossrules/trunk/pom.xml
===================================================================
--- labs/jbossrules/trunk/pom.xml 2010-10-22 13:52:51 UTC (rev 35670)
+++ labs/jbossrules/trunk/pom.xml 2010-10-22 15:34:02 UTC (rev 35671)
@@ -16,7 +16,7 @@
<camel-version>2.4.0</camel-version>
<cxf-version>2.2.9</cxf-version>
<springframework-version>2.5.6</springframework-version>
- <gwt.version>2.0.4</gwt.version>
+ <gwt.version>2.1.0.RC1</gwt.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<prerequisites>
@@ -224,6 +224,10 @@
<name>Open Health (eclipse)</name>
<url>http://repo.openehealth.org/maven2/releases</url>
</repository>
+ <repository><!-- TODO remove me on upgrade to gwt 2.1.0, temporarily added to use gwt-user 2.1.0.RC1 -->
+ <id>tmp-gwt-rc</id>
+ <url>http://google-web-toolkit.googlecode.com/svn/2.1.0/gwt/maven</url>
+ </repository>
</repositories>
<pluginRepositories>
<pluginRepository>
@@ -1361,6 +1365,7 @@
<artifactId>gwt-user</artifactId>
<version>${gwt.version}</version>
</dependency>
+
<dependency><!-- Only use for a plugin dependency, not as a normal dependency -->
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
More information about the jboss-svn-commits
mailing list