Introduce JCR Row column provider
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 17 Feb 2022 07:39:41 +0000 (08:39 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 17 Feb 2022 07:39:41 +0000 (08:39 +0100)
jcr/org.argeo.cms.jcr/src/org/argeo/jcr/Jcr.java
jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/RowColumnLabelProvider.java [new file with mode: 0644]

index bf5de1260f93e11bb2b7d47baa31ea3e3eb8460b..1936f2398b8e26a56a217ff4e89e64d96b7fd908 100644 (file)
@@ -29,6 +29,7 @@ import javax.jcr.Workspace;
 import javax.jcr.nodetype.NodeType;
 import javax.jcr.query.Query;
 import javax.jcr.query.QueryManager;
+import javax.jcr.query.Row;
 import javax.jcr.security.Privilege;
 import javax.jcr.version.Version;
 import javax.jcr.version.VersionHistory;
@@ -598,14 +599,14 @@ public class Jcr {
                        throw new JcrException("Cannot retrieve property " + property + " from " + node, e);
                }
        }
-       
+
        public static <T> T getAs(Node node, String property, Class<T> clss) {
-               if(String.class.isAssignableFrom(clss)) {
-                       return (T)get(node,property);
-               }       else    if(Long.class.isAssignableFrom(clss)) {
-                       return (T)get(node,property);
-               }else {
-                       throw new IllegalArgumentException("Unsupported format "+clss);
+               if (String.class.isAssignableFrom(clss)) {
+                       return (T) get(node, property);
+               } else if (Long.class.isAssignableFrom(clss)) {
+                       return (T) get(node, property);
+               } else {
+                       throw new IllegalArgumentException("Unsupported format " + clss);
                }
        }
 
@@ -978,6 +979,14 @@ public class Jcr {
                return getNode(queryManager, sql, args);
        }
 
+       public static Node getRowNode(Row row, String selectorName) {
+               try {
+                       return row.getNode(selectorName);
+               } catch (RepositoryException e) {
+                       throw new JcrException("Cannot get node " + selectorName + " from row", e);
+               }
+       }
+
        /** Singleton. */
        private Jcr() {
 
diff --git a/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/RowColumnLabelProvider.java b/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/RowColumnLabelProvider.java
new file mode 100644 (file)
index 0000000..70c71ef
--- /dev/null
@@ -0,0 +1,111 @@
+package org.argeo.eclipse.ui.jcr;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.query.Row;
+
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+
+/** Simplifies writing JCR-based column label provider. */
+public class RowColumnLabelProvider extends ColumnLabelProvider {
+       private static final long serialVersionUID = -6586692836928505358L;
+
+       protected String getRowText(Row row) throws RepositoryException {
+               return super.getText(row);
+       }
+
+       protected String getRowToolTipText(Row row) throws RepositoryException {
+               return super.getToolTipText(row);
+       }
+
+       protected Image getRowImage(Row row) throws RepositoryException {
+               return super.getImage(row);
+       }
+
+       protected Font getRowFont(Row row) throws RepositoryException {
+               return super.getFont(row);
+       }
+
+       public Color getRowBackground(Row row) throws RepositoryException {
+               return super.getBackground(row);
+       }
+
+       public Color getRowForeground(Row row) throws RepositoryException {
+               return super.getForeground(row);
+       }
+
+       @Override
+       public String getText(Object element) {
+               try {
+                       if (element instanceof Row)
+                               return getRowText((Row) element);
+                       else
+                               throw new IllegalArgumentException("Unsupported element type " + element.getClass());
+               } catch (RepositoryException e) {
+                       throw new IllegalStateException("Repository exception when accessing " + element, e);
+               }
+       }
+
+       @Override
+       public Image getImage(Object element) {
+               try {
+                       if (element instanceof Row)
+                               return getRowImage((Row) element);
+                       else
+                               throw new IllegalArgumentException("Unsupported element type " + element.getClass());
+               } catch (RepositoryException e) {
+                       throw new IllegalStateException("Repository exception when accessing " + element, e);
+               }
+       }
+
+       @Override
+       public String getToolTipText(Object element) {
+               try {
+                       if (element instanceof Row)
+                               return getRowToolTipText((Row) element);
+                       else
+                               throw new IllegalArgumentException("Unsupported element type " + element.getClass());
+               } catch (RepositoryException e) {
+                       throw new IllegalStateException("Repository exception when accessing " + element, e);
+               }
+       }
+
+       @Override
+       public Font getFont(Object element) {
+               try {
+                       if (element instanceof Row)
+                               return getRowFont((Row) element);
+                       else
+                               throw new IllegalArgumentException("Unsupported element type " + element.getClass());
+               } catch (RepositoryException e) {
+                       throw new IllegalStateException("Repository exception when accessing " + element, e);
+               }
+       }
+
+       @Override
+       public Color getBackground(Object element) {
+               try {
+                       if (element instanceof Row)
+                               return getRowBackground((Row) element);
+                       else
+                               throw new IllegalArgumentException("Unsupported element type " + element.getClass());
+               } catch (RepositoryException e) {
+                       throw new IllegalStateException("Repository exception when accessing " + element, e);
+               }
+       }
+
+       @Override
+       public Color getForeground(Object element) {
+               try {
+                       if (element instanceof Row)
+                               return getRowForeground((Row) element);
+                       else
+                               throw new IllegalArgumentException("Unsupported element type " + element.getClass());
+               } catch (RepositoryException e) {
+                       throw new IllegalStateException("Repository exception when accessing " + element, e);
+               }
+       }
+
+}