From 2659496849031137cbd4f0c279a168a5d9fe837e Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 17 Feb 2022 08:39:41 +0100 Subject: [PATCH] Introduce JCR Row column provider --- .../src/org/argeo/jcr/Jcr.java | 23 ++-- .../ui/jcr/RowColumnLabelProvider.java | 111 ++++++++++++++++++ 2 files changed, 127 insertions(+), 7 deletions(-) create mode 100644 jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/RowColumnLabelProvider.java diff --git a/jcr/org.argeo.cms.jcr/src/org/argeo/jcr/Jcr.java b/jcr/org.argeo.cms.jcr/src/org/argeo/jcr/Jcr.java index bf5de1260..1936f2398 100644 --- a/jcr/org.argeo.cms.jcr/src/org/argeo/jcr/Jcr.java +++ b/jcr/org.argeo.cms.jcr/src/org/argeo/jcr/Jcr.java @@ -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 getAs(Node node, String property, Class 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 index 000000000..70c71efea --- /dev/null +++ b/jcr/org.argeo.cms.ui/src/org/argeo/eclipse/ui/jcr/RowColumnLabelProvider.java @@ -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); + } + } + +} -- 2.30.2