Mega Code Archive

 
Categories / Java / SWT Jface Eclipse
 

Bug Tracker JFace

/*******************************************************************************  * All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie  *   * Created on Mar 5, 2004 7:38:59 PM by JACK $Id$  *    ******************************************************************************/ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Vector; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.CheckboxCellEditor; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Item; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.ToolBar; public class BugTrackerJFace {      /**    * Represents a bug report.     *    */   public static class Bug {     // For the sake of simplicity, all variables are public.     public String id;     public String summary;     public String assignedTo;     public boolean isSolved;          public Bug(String id, String summary, String assignedTo, boolean isSolved) {       this.id = id;       this.summary = summary;       this.assignedTo = assignedTo;       this.isSolved = isSolved;     }     public static Vector loadBugs(File file) {       Vector v = new Vector();       // Load bugs from a file.       DataInputStream in = null;       try {         if (!file.exists())           return v;         in = new DataInputStream(new FileInputStream(file));         while (true) {           String id = in.readUTF();           String summary = in.readUTF();           String assignedTo = in.readUTF();           boolean solved = in.readBoolean();           v.add(new Bug(id, summary, assignedTo, solved));         }                } catch (IOException ioe) {         // Ignore.       } finally {         try {           if (in != null)             in.close();         } catch (IOException e) {           e.printStackTrace();         }       }              return v;     }   }      Display display = new Display();   Shell shell = new Shell(display);      Table table;   TableViewer tableViewer;      Vector bugs;      Image bugIcon = new Image(shell.getDisplay(), "rntsoft.gif");      String[] colNames = new String[]{"ID", "Summary", "Assigned to", "Solved"};   // Sorter.    class BugSorter extends ViewerSorter {     private String property;     private int propertyIndex;          public BugSorter(String sortByProperty) {       for(int i=0; i<colNames.length; i++) {         if(colNames[i].equals(sortByProperty)) {           this.property = sortByProperty;           this.propertyIndex = i;           return;         }       }              throw new IllegalArgumentException("Unrecognized property: " + sortByProperty);     }          /* (non-Javadoc)      * @see org.eclipse.jface.viewers.ViewerSorter#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)      */     public int compare(Viewer viewer, Object e1, Object e2) {       Bug bug1 = (Bug)e1;       Bug bug2 = (Bug)e2;              switch(propertyIndex) {         case 0:           return bug1.id.compareTo(bug2.id);         case 1:           return bug1.summary.compareTo(bug2.summary);         case 2:           return bug1.assignedTo.compareTo(bug2.assignedTo);         case 3:           if(bug1.isSolved == bug2.isSolved)             return 0;                      if(bug1.isSolved)             return 1;           else             return -1;         default:           return 0;       }            }   }           public BugTrackerJFace() {     // Action.     Action actionAddNew = new Action("New bug") {       public void run() {           // Append.         Bug bug = new Bug("", "", "", false);         bugs.add(bug);         tableViewer.refresh(false);       }     };     Action actionDelete = new Action("Delete selected") {       public void run() {         IStructuredSelection selection = (IStructuredSelection)tableViewer.getSelection();         Bug bug = (Bug)selection.getFirstElement();         if (bug == null) {           System.out.println("Please select an item first. ");           return;         }         MessageBox messageBox = new MessageBox(shell, SWT.YES | SWT.NO);         messageBox.setText("Confirmation");         messageBox.setMessage(           "Are you sure to remove the bug with id #"             + bug.id);         if (messageBox.open() == SWT.YES) {           bugs.remove(bug);           tableViewer.refresh(false);         }       }     };     Action actionSave = new Action("Save") {       public void run() {         saveBugs(bugs);       }     };          final ViewerFilter filter = new ViewerFilter() {       public boolean select(         Viewer viewer,         Object parentElement,         Object element) {         if(! ((Bug)element).isSolved)           return true;         return false;       }     };          Action actionShowUnsolvedOnly = new Action("Show unsolved only") {       public void run() {         if(! isChecked())           tableViewer.removeFilter(filter);         else           tableViewer.addFilter(filter);       }     };     actionShowUnsolvedOnly.setChecked(false);     ToolBar toolBar = new ToolBar(shell, SWT.RIGHT | SWT.FLAT);     ToolBarManager manager = new ToolBarManager(toolBar);     manager.add(actionAddNew);     manager.add(actionDelete);     manager.add(new Separator());     manager.add(actionSave);     manager.add(new Separator());     manager.add(actionShowUnsolvedOnly);          manager.update(true);               shell.setLayout(new GridLayout());          table = new Table(shell, SWT.BORDER | SWT.FULL_SELECTION);     TableColumn tcID = new TableColumn(table, SWT.LEFT);     tcID.setText(colNames[0]);     TableColumn tcSummary = new TableColumn(table, SWT.NULL);     tcSummary.setText(colNames[1]);     TableColumn tcAssignedTo = new TableColumn(table, SWT.NULL);     tcAssignedTo.setText(colNames[2]);     TableColumn tcSolved = new TableColumn(table, SWT.NULL);     tcSolved.setText(colNames[3]);     tcID.setWidth(60);     tcSummary.setWidth(200);     tcAssignedTo.setWidth(80);     tcSolved.setWidth(50);               tableViewer = new TableViewer(table);          tableViewer.getTable().setLinesVisible(true);     tableViewer.getTable().setHeaderVisible(true);     tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));          // Sets the content provider.      tableViewer.setContentProvider(new IStructuredContentProvider() {       public Object[] getElements(Object inputElement) {         Vector v = (Vector)inputElement;         return v.toArray();       }       public void dispose() {         System.out.println("Disposing ...");       }       public void inputChanged(         Viewer viewer,         Object oldInput,         Object newInput) {           System.out.println("Input changed: old=" +              oldInput + ", new=" + newInput);       }     });          // Sets the label provider.      tableViewer.setLabelProvider(new ITableLabelProvider() {       public Image getColumnImage(Object element, int columnIndex) {         if(columnIndex == 0)           return bugIcon;         return null;       }       public String getColumnText(Object element, int columnIndex) {         Bug bug = (Bug)element;         switch(columnIndex) {           case 0:             return bug.id;           case 1:             return bug.summary;           case 2:             return bug.assignedTo;           case 3:             return bug.isSolved ? "YES" : "NO";         }         return null;       }       public void addListener(ILabelProviderListener listener) {       }       public void dispose() {       }       public boolean isLabelProperty(Object element, String property) {         return false;       }       public void removeListener(ILabelProviderListener listener) {       }     });               // Sets cell editors.      tableViewer.setColumnProperties(colNames);          CellEditor[] cellEditors = new CellEditor[4];          cellEditors[0] = new TextCellEditor(table);     cellEditors[1] = cellEditors[0];     cellEditors[2] = cellEditors[0];     cellEditors[3] = new CheckboxCellEditor(table);          tableViewer.setCellEditors(cellEditors);          tableViewer.setCellModifier(new ICellModifier() {       public boolean canModify(Object element, String property) {         return true;       }       public Object getValue(Object element, String property) {         // Get the index first.          int index = -1;         for(int i=0; i<colNames.length; i++) {           if(colNames[i].equals(property)) {             index = i;             break;           }         }         Bug bug = (Bug)element;                  switch(index) {           case 0:             return bug.id;           case 1:             return bug.summary;           case 2:             return bug.assignedTo;           case 3:             return new Boolean(bug.isSolved);         }                  return null;       }       public void modify(Object element, String property, Object value) {         System.out.println("Modify: " + element + ", " + property + ", " + value);         // Get the index first.          int index = -1;         for(int i=0; i<colNames.length; i++) {           if(colNames[i].equals(property)) {             index = i;             break;           }         }                  Bug bug = null;         if(element instanceof Item) {           TableItem item = (TableItem)element;           bug = (Bug)item.getData();         }else{           bug = (Bug)element;         }                  switch(index) {           case 0:             bug.id = (String)value;             break;           case 1:             bug.summary = (String)value;             break;           case 2:             bug.assignedTo = (String)value;             break;           case 3:             bug.isSolved = ((Boolean)value).booleanValue();             break;         }                  tableViewer.update(bug, null);       }     });          // Setting sorters.      tcID.addListener(SWT.Selection, new Listener() {       public void handleEvent(Event event) {         tableViewer.setSorter(new BugSorter(colNames[0]));       }     });          tcSummary.addListener(SWT.Selection, new Listener() {       public void handleEvent(Event event) {         tableViewer.setSorter(new BugSorter(colNames[1]));       }     });          tcAssignedTo.addListener(SWT.Selection, new Listener() {       public void handleEvent(Event event) {         tableViewer.setSorter(new BugSorter(colNames[2]));       }     });              tcSolved.addListener(SWT.Selection, new Listener() {       public void handleEvent(Event event) {         tableViewer.setSorter(new BugSorter(colNames[3]));       }     });          bugs = Bug.loadBugs(new File("bugs.dat"));          tableViewer.setInput(bugs);     shell.pack();     shell.open();     //textUser.forceFocus();     // Set up the event loop.     while (!shell.isDisposed()) {       if (!display.readAndDispatch()) {         // If no more entries in event queue         display.sleep();       }     }     display.dispose();   }         private void saveBugs(Vector v) {     // Save bugs to a file.     DataOutputStream out = null;     try {       File file = new File("bugs.dat");       out = new DataOutputStream(new FileOutputStream(file));       for (int i = 0; i < v.size(); i++) {         Bug bug = (Bug)v.elementAt(i);         out.writeUTF(bug.id);         out.writeUTF(bug.summary);         out.writeUTF(bug.assignedTo);         out.writeBoolean(bug.isSolved);       }     } catch (IOException ioe) {       // Ignore.     } finally {       try {         if (out != null)           out.close();       } catch (IOException e) {         e.printStackTrace();       }     }   }   public static void main(String[] args) {     new BugTrackerJFace();   } }