+ Finalization of history request
authorBruno Sinou <bsinou@argeo.org>
Sat, 29 Jan 2011 20:20:16 +0000 (20:20 +0000)
committerBruno Sinou <bsinou@argeo.org>
Sat, 29 Jan 2011 20:20:16 +0000 (20:20 +0000)
+ clean of the code
+ introduce internationnalization

git-svn-id: https://svn.argeo.org/commons/trunk@4090 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

eclipse/plugins/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java
eclipse/plugins/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/GenericTableComparator.java [new file with mode: 0644]
server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/JcrUtils.java

index edcae870f617b859979b2d4d4f6f559a44c1481a..76ea5508e06e429d15ca73680984a58946b77a75 100644 (file)
@@ -10,6 +10,7 @@ import javax.jcr.query.Row;
 import javax.jcr.query.RowIterator;
 
 import org.argeo.ArgeoException;
+import org.argeo.eclipse.ui.GenericTableComparator;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -22,11 +23,14 @@ import org.eclipse.jface.viewers.TableViewerColumn;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.PartInitException;
@@ -34,13 +38,16 @@ import org.eclipse.ui.part.EditorPart;
 
 /** Executes any JCR query. */
 public abstract class AbstractJcrQueryEditor extends EditorPart {
+
        protected String initialQuery;
        protected String initialQueryType;
 
+       // IoC
        private Session session;
 
        private TableViewer viewer;
        private List<TableViewerColumn> tableViewerColumns = new ArrayList<TableViewerColumn>();
+       private GenericTableComparator comparator;
 
        protected abstract void createQueryForm(Composite parent);
 
@@ -66,9 +73,6 @@ public abstract class AbstractJcrQueryEditor extends EditorPart {
                GridLayout gl = new GridLayout(1, false);
                top.setLayout(gl);
 
-               // Device device = Display.getCurrent();
-               // Color red = new Color(device, 255, 0, 0);
-               // top.setBackground(red);
                createQueryForm(top);
 
                Composite bottom = new Composite(sashForm, SWT.NONE);
@@ -79,34 +83,18 @@ public abstract class AbstractJcrQueryEditor extends EditorPart {
                viewer.getTable().setLayoutData(
                                new GridData(SWT.FILL, SWT.FILL, true, true));
                viewer.getTable().setHeaderVisible(true);
-               viewer.setContentProvider(new QueryResultContentProvider());
-               // viewer.setLabelProvider(new QueryResultLabelProvider());
+               viewer.setContentProvider(getQueryResultContentProvider());
                viewer.setInput(getEditorSite());
 
+               if (getComparator() != null) {
+                       comparator = getComparator();
+                       viewer.setComparator(comparator);
+               }
                if (getTableDoubleClickListener() != null)
                        viewer.addDoubleClickListener(getTableDoubleClickListener());
 
        }
 
-       /**
-        * To be overidden to adapt size of form and result frames.
-        * 
-        * @return
-        */
-       protected int[] getWeights() {
-               return new int[] { 30, 70 };
-       }
-
-       /**
-        * To be overidden to implement a doubleclick Listener on one of the rows of
-        * the table.
-        * 
-        * @return
-        */
-       protected IDoubleClickListener getTableDoubleClickListener() {
-               return null;
-       }
-
        protected void executeQuery(String statement) {
                try {
                        QueryResult qr = session.getWorkspace().getQueryManager()
@@ -133,6 +121,47 @@ public abstract class AbstractJcrQueryEditor extends EditorPart {
                }
        }
 
+       /**
+        * To be overidden to adapt size of form and result frames.
+        * 
+        * @return
+        */
+       protected int[] getWeights() {
+               return new int[] { 30, 70 };
+       }
+
+       /**
+        * To be overidden to implement a doubleclick Listener on one of the rows of
+        * the table.
+        * 
+        * @return
+        */
+       protected IDoubleClickListener getTableDoubleClickListener() {
+               return null;
+       }
+
+       /**
+        * To be overiden in order to implement a specific
+        * QueryResultContentProvider
+        */
+       protected IStructuredContentProvider getQueryResultContentProvider() {
+               return new QueryResultContentProvider();
+       }
+
+       /**
+        * Enable specific implementation for columns
+        */
+       protected List<TableViewerColumn> getTableViewerColumns() {
+               return tableViewerColumns;
+       }
+
+       /**
+        * Enable specific implementation for columns
+        */
+       protected TableViewer getTableViewer() {
+               return viewer;
+       }
+
        /**
         * To be overridden in order to configure column label providers .
         */
@@ -194,22 +223,52 @@ public abstract class AbstractJcrQueryEditor extends EditorPart {
 
        }
 
-       // private class QueryResultLabelProvider extends LabelProvider implements
-       // ITableLabelProvider {
-       // public String getColumnText(Object element, int columnIndex) {
-       // Row row = (Row) element;
-       // try {
-       // return row.getValues()[columnIndex].toString();
-       // } catch (RepositoryException e) {
-       // throw new ArgeoException("Cannot display row " + row, e);
-       // }
-       // }
-       //
-       // public Image getColumnImage(Object element, int columnIndex) {
-       // return null;
-       // }
-       //
-       // }
+       /**
+        * Might be used by children classes to sort columns.
+        * 
+        * @param column
+        * @param index
+        * @return
+        */
+       protected SelectionAdapter getSelectionAdapter(final TableColumn column,
+                       final int index) {
+
+               SelectionAdapter selectionAdapter = new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+
+                               if (true)
+                                       return;
+                               try {
+
+                                       comparator.setColumn(index);
+                                       int dir = viewer.getTable().getSortDirection();
+                                       if (viewer.getTable().getSortColumn() == column) {
+                                               dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
+                                       } else {
+
+                                               dir = SWT.DOWN;
+                                       }
+                                       viewer.getTable().setSortDirection(dir);
+                                       viewer.getTable().setSortColumn(column);
+                                       viewer.refresh();
+                               } catch (Exception exc) {
+                                       exc.printStackTrace();
+                               }
+                       }
+               };
+               return selectionAdapter;
+       }
+
+       /**
+        * To be overriden to enable sorting.
+        * 
+        * @author bsinou
+        * 
+        */
+       protected GenericTableComparator getComparator() {
+               return null;
+       }
 
        @Override
        public boolean isDirty() {
@@ -235,5 +294,4 @@ public abstract class AbstractJcrQueryEditor extends EditorPart {
        public void setSession(Session session) {
                this.session = session;
        }
-
 }
diff --git a/eclipse/plugins/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/GenericTableComparator.java b/eclipse/plugins/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/GenericTableComparator.java
new file mode 100644 (file)
index 0000000..4c3ee69
--- /dev/null
@@ -0,0 +1,39 @@
+package org.argeo.eclipse.ui;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+
+public abstract class GenericTableComparator extends ViewerComparator {
+
+       protected int propertyIndex;
+       public static final int ASCENDING = 0, DESCENDING = 1;
+       protected int direction = DESCENDING;
+
+       /**
+        * Creates an instance of a sorter for TableViewer.
+        * 
+        * @param defaultColumn
+        *            the default sorter column
+        */
+
+       public GenericTableComparator(int defaultColumnIndex, int direction) {
+               propertyIndex = defaultColumnIndex;
+               this.direction = direction;
+       }
+
+       public void setColumn(int column) {
+               if (column == this.propertyIndex) {
+                       // Same column as last sort; toggle the direction
+                       direction = 1 - direction;
+               } else {
+                       // New column; do a descending sort
+                       this.propertyIndex = column;
+                       direction = DESCENDING;
+               }
+       }
+
+       /**
+        * Must be Overriden in each view.
+        */
+       public abstract int compare(Viewer viewer, Object e1, Object e2);
+}
index a579392dd50e97c7d13d06382f0c3904daf36978..b862e8fc4da2fec04be3bb76a25b6e015cdb37a5 100644 (file)
@@ -438,16 +438,26 @@ public class JcrUtils {
                try {
                        Iterator<String> pit = properties.iterator();
 
-                       while (pit.hasNext()) {
+                       props: while (pit.hasNext()) {
                                String name = pit.next();
-                               if (!observed.hasProperty(name)) {
+                               if (!reference.hasProperty(name)) {
+                                       if (!observed.hasProperty(name))
+                                               continue props;
+                                       Value val = observed.getProperty(name).getValue();
+                                       try {
+                                               // empty String but not null
+                                               if ("".equals(val.getString()))
+                                                       continue props;
+                                       } catch (Exception e) {
+                                               // not parseable as String, silent
+                                       }
+                                       PropertyDiff pDiff = new PropertyDiff(PropertyDiff.ADDED,
+                                                       name, null, val);
+                                       diffs.put(name, pDiff);
+                               } else if (!observed.hasProperty(name)) {
                                        PropertyDiff pDiff = new PropertyDiff(PropertyDiff.REMOVED,
                                                        name, reference.getProperty(name).getValue(), null);
                                        diffs.put(name, pDiff);
-                               } else if (!reference.hasProperty(name)) {
-                                       PropertyDiff pDiff = new PropertyDiff(PropertyDiff.ADDED,
-                                                       name, null, observed.getProperty(name).getValue());
-                                       diffs.put(name, pDiff);
                                } else {
                                        Value referenceValue = reference.getProperty(name)
                                                        .getValue();