[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