From ebfaa7c9c6c8e93d2a524656878f86d29dbf3d58 Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Sat, 29 Jan 2011 20:20:16 +0000 Subject: [PATCH] + Finalization of history request + clean of the code + introduce internationnalization git-svn-id: https://svn.argeo.org/commons/trunk@4090 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../jcr/editors/AbstractJcrQueryEditor.java | 140 +++++++++++++----- .../eclipse/ui/GenericTableComparator.java | 39 +++++ .../src/main/java/org/argeo/jcr/JcrUtils.java | 22 ++- 3 files changed, 154 insertions(+), 47 deletions(-) create mode 100644 eclipse/plugins/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/GenericTableComparator.java diff --git a/eclipse/plugins/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java b/eclipse/plugins/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java index edcae870f..76ea5508e 100644 --- a/eclipse/plugins/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java +++ b/eclipse/plugins/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/editors/AbstractJcrQueryEditor.java @@ -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 tableViewerColumns = new ArrayList(); + 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 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 index 000000000..4c3ee69cc --- /dev/null +++ b/eclipse/plugins/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/ui/GenericTableComparator.java @@ -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); +} diff --git a/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/JcrUtils.java b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/JcrUtils.java index a579392dd..b862e8fc4 100644 --- a/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/JcrUtils.java +++ b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/JcrUtils.java @@ -438,16 +438,26 @@ public class JcrUtils { try { Iterator 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(); -- 2.30.2