Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.pentaho.ui.xul.swt.tags.treeutil;
  
  
  import  org.eclipse.jface.viewers.Viewer;
  import  org.eclipse.jface.viewers.ViewerComparator;
  import  org.eclipse.swt.events.SelectionAdapter;
  import  org.eclipse.swt.events.SelectionEvent;
 import  org.eclipse.swt.events.SelectionListener;
 import  org.eclipse.swt.widgets.Item;
Its unfortunate due to the lack of a base class or common interface between a tree and a table in SWT that we must resort to this random separation of code in an abstract class. The pieces that have been abstracted are those that require us to talk directly to the table or tree to set necessary variables.

Author(s):
GMoran
 
 public abstract class XulColumnSorter extends ViewerComparator {
   
   
   Item column = null;
   
   int columnIndex = 0;
   
   int compareIndex = 0;
   
   Comparator comparable = null;
 
 
   final protected SelectionListener selectionHandler = new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       Item selectedColumn = (Item) e.widget;
       setColumn(selectedColumn);
     }
   };
 
   public  XulColumnSorter(Viewer viewerXulSortProperties properties) {
     this. = properties;
 
     // set comparator on viewer and add selection listeners to viewer's columns
     try{
       initializeViewer(viewer);
     }catch(Exception e){
       e.printStackTrace();
     }
 
     if (properties.getSortColumn()!=null){
       setColumn(properties.getSortColumn());
     }
     
   }
 
   public abstract void initializeViewer(Viewer viewerthrows Exception;
 
   public void setColumn(Item selectedColumn) {
     if ( == selectedColumn) {
       switch () {
       case :
          = .;
         break;
       case :
          = .;
         break;
       default:
          = .;
         break;
       }
     } else {
       this. = selectedColumn;
       this. = .getSortDirection();
        = null;
     }
 
     // set the sort direction and column on the viewer
     setViewerColumns();
     
     switch () { 
     case :
        = 1;
       break;
     case :
        = -1;
       break;
     default:
        = 0;
       break;
     }
     Item[] columns = getViewerColumns();
     for (int i = 0; i < columns.length; i++) {
       Item theColumn = columns[i];
       if (theColumn == this. = i;
     }
  }
  public int compare(Viewer viewerObject e1Object e2) {
    SwtTreeItem item = (SwtTreeItem)e1;
    Object o1 = item.getBoundObject();
    item = (SwtTreeItem)e2;
    Object o2 = item.getBoundObject();
    
    // cache the comparable for future use...
    if ((.getSortMethod()!=null) && ( == null)) {
      Method method;
      try {
        method = o1.getClass().getMethod(.getSortMethod());
         = (Comparatormethod.invoke(o1);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    
    if ( != null){
      return  * .compare(o1o2);
    }
    return  * doCompare(viewere1e2);
  }
  public abstract void setViewerColumns();
  
  public abstract Item[] getViewerColumns();
  protected abstract int doCompare(Viewer vObject e1Object e2);  
New to GrepCode? Check out our FAQ X