From f69161c50922bc65fe94f79828a4df1565266f66 Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Fri, 28 Jan 2011 21:44:49 +0000 Subject: [PATCH] draft implementation of the history request. git-svn-id: https://svn.argeo.org/commons/trunk@4089 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../plugins/org.argeo.eclipse.ui.jcr/pom.xml | 11 ++++- .../jcr/editors/AbstractJcrQueryEditor.java | 37 +++++++++------- .../src/main/java/org/argeo/jcr/JcrUtils.java | 42 +++++++++++++++++++ .../main/java/org/argeo/jcr/VersionDiff.java | 30 +++++++++++++ 4 files changed, 103 insertions(+), 17 deletions(-) create mode 100644 server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/VersionDiff.java diff --git a/eclipse/plugins/org.argeo.eclipse.ui.jcr/pom.xml b/eclipse/plugins/org.argeo.eclipse.ui.jcr/pom.xml index 4f041eeaa..ec57b3104 100644 --- a/eclipse/plugins/org.argeo.eclipse.ui.jcr/pom.xml +++ b/eclipse/plugins/org.argeo.eclipse.ui.jcr/pom.xml @@ -70,11 +70,20 @@ 0.2.2-SNAPSHOT - + + + org.apache.commons + com.springsource.org.apache.commons.io + org.slf4j com.springsource.slf4j.org.apache.commons.logging + + org.apache.log4j + com.springsource.org.apache.log4j + + 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 986d4b829..edcae870f 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 @@ -119,22 +119,7 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { for (final String columnName : qr.getColumnNames()) { TableViewerColumn tvc = new TableViewerColumn(viewer, SWT.NONE); configureColumn(columnName, tvc); - tvc.setLabelProvider(new ColumnLabelProvider() { - - public String getText(Object element) { - Row row = (Row) element; - try { - return row.getValue(columnName).getString(); - } catch (RepositoryException e) { - throw new ArgeoException("Cannot display row " - + row, e); - } - } - - public Image getImage(Object element) { - return null; - } - }); + tvc.setLabelProvider(getLabelProvider(columnName)); tableViewerColumns.add(tvc); } @@ -148,6 +133,26 @@ public abstract class AbstractJcrQueryEditor extends EditorPart { } } + /** + * To be overridden in order to configure column label providers . + */ + protected ColumnLabelProvider getLabelProvider(final String columnName) { + return new ColumnLabelProvider() { + public String getText(Object element) { + Row row = (Row) element; + try { + return row.getValue(columnName).getString(); + } catch (RepositoryException e) { + throw new ArgeoException("Cannot display row " + row, e); + } + } + + public Image getImage(Object element) { + return null; + } + }; + } + /** To be overridden in order to configure the columns. */ protected void configureColumn(String jcrColumnName, TableViewerColumn column) { 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 d70a51669..a579392dd 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 @@ -21,6 +21,8 @@ import java.text.ParseException; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; +import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.StringTokenizer; import java.util.TreeMap; @@ -425,6 +427,46 @@ public class JcrUtils { } } + /** + * Compare only a restricted list of properties of two nodes. No + * recursivity. + * + */ + public static Map diffProperties(Node reference, + Node observed, List properties) { + Map diffs = new TreeMap(); + try { + Iterator pit = properties.iterator(); + + while (pit.hasNext()) { + String name = pit.next(); + 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(); + Value newValue = observed.getProperty(name).getValue(); + if (!referenceValue.equals(newValue)) { + PropertyDiff pDiff = new PropertyDiff( + PropertyDiff.MODIFIED, name, referenceValue, + newValue); + diffs.put(name, pDiff); + } + } + } + } catch (RepositoryException e) { + throw new ArgeoException("Cannot diff " + reference + " and " + + observed, e); + } + return diffs; + } + /** Builds a property relPath to be used in the diff. */ private static String propertyRelPath(String baseRelPath, String propertyName) { diff --git a/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/VersionDiff.java b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/VersionDiff.java new file mode 100644 index 000000000..fc120d184 --- /dev/null +++ b/server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/VersionDiff.java @@ -0,0 +1,30 @@ +package org.argeo.jcr; + +import java.util.Calendar; +import java.util.Map; + +public class VersionDiff { + + private String userId; + private Map diffs; + private Calendar updateTime; + + public VersionDiff(String userId, Calendar updateTime, + Map diffs) { + this.userId = userId; + this.updateTime = updateTime; + this.diffs = diffs; + } + + public String getUserId() { + return userId; + } + + public Map getDiffs() { + return diffs; + } + + public Calendar getUpdateTime() { + return updateTime; + } +} -- 2.30.2