Minor enhancements on the data explorer perspective
authorBruno Sinou <bsinou@argeo.org>
Wed, 7 Dec 2016 14:48:11 +0000 (14:48 +0000)
committerBruno Sinou <bsinou@argeo.org>
Wed, 7 Dec 2016 14:48:11 +0000 (14:48 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@9348 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/JcrBrowserUtils.java
org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/PropertyLabelProvider.java
org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/parts/GenericPropertyPage.java
org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/jcr/JcrBrowserView.java

index 94066218662a5d2d7b549be215c78917e4753a13..9755d95747f11351ddb72a9e951803c4fdf91c8f 100644 (file)
@@ -16,6 +16,8 @@
 package org.argeo.cms.ui.workbench.internal.jcr;
 
 import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 
 import org.argeo.cms.ui.workbench.internal.jcr.model.RepositoriesElem;
@@ -28,6 +30,14 @@ import org.argeo.eclipse.ui.TreeParent;
 /** Useful methods to manage the JCR Browser */
 public class JcrBrowserUtils {
 
+       public static String getPropertyTypeAsString(Property prop) {
+               try {
+                       return PropertyType.nameFromValue(prop.getType());
+               } catch (RepositoryException e) {
+                       throw new EclipseUiException("Cannot check type for " + prop, e);
+               }
+       }
+
        /** Insure that the UI component is not stale, refresh if needed */
        public static void forceRefreshIfNeeded(TreeParent element) {
                Node curNode = null;
@@ -41,9 +51,7 @@ public class JcrBrowserUtils {
                                curNode = ((WorkspaceElem) element).getRootNode();
                        }
 
-                       if (curNode != null
-                                       && element.getChildren().length != curNode.getNodes()
-                                                       .getSize())
+                       if (curNode != null && element.getChildren().length != curNode.getNodes().getSize())
                                doRefresh = true;
                        else if (element instanceof RepositoryElem) {
                                RepositoryElem rn = (RepositoryElem) element;
@@ -69,9 +77,7 @@ public class JcrBrowserUtils {
                                element.getChildren();
                        }
                } catch (RepositoryException re) {
-                       throw new EclipseUiException(
-                                       "Unexpected error while synchronising the UI with the JCR repository",
-                                       re);
+                       throw new EclipseUiException("Unexpected error while synchronising the UI with the JCR repository", re);
                }
        }
 }
index 3014bb6a649cdc0035550f73fd53db6bedfbe81c..629368c38b688a5857908eec53de8fe2e70e73a2 100644 (file)
@@ -30,14 +30,14 @@ import org.eclipse.jface.viewers.ColumnLabelProvider;
 import org.eclipse.jface.viewers.ViewerCell;
 
 /** Default basic label provider for a given JCR Node's properties */
-public class PropertyLabelProvider extends ColumnLabelProvider implements
-               WorkbenchConstants {
+public class PropertyLabelProvider extends ColumnLabelProvider implements WorkbenchConstants {
        private static final long serialVersionUID = -5405794508731390147L;
 
        // To be able to change column order easily
        public static final int COLUMN_PROPERTY = 0;
        public static final int COLUMN_VALUE = 1;
-       public static final int COLUMN_ATTRIBUTES = 2;
+       public static final int COLUMN_TYPE = 2;
+       public static final int COLUMN_ATTRIBUTES = 3;
 
        // Utils
        protected DateFormat timeFormatter = new SimpleDateFormat(DATE_TIME_FORMAT);
@@ -58,6 +58,8 @@ public class PropertyLabelProvider extends ColumnLabelProvider implements
                                        case COLUMN_VALUE:
                                                // Corresponding values are listed on children
                                                return "";
+                                       case COLUMN_TYPE:
+                                               return JcrBrowserUtils.getPropertyTypeAsString(prop);
                                        case COLUMN_ATTRIBUTES:
                                                return JcrUtils.getPropertyDefinitionAsString(prop);
                                        }
@@ -67,28 +69,30 @@ public class PropertyLabelProvider extends ColumnLabelProvider implements
                                                return prop.getName();
                                        case COLUMN_VALUE:
                                                return formatValueAsString(prop.getValue());
+                                       case COLUMN_TYPE:
+                                               return JcrBrowserUtils.getPropertyTypeAsString(prop);
                                        case COLUMN_ATTRIBUTES:
                                                return JcrUtils.getPropertyDefinitionAsString(prop);
                                        }
                                }
                        } else if (element instanceof Value) {
                                Value val = (Value) element;
-
                                switch (columnIndex) {
                                case COLUMN_PROPERTY:
                                        // Nothing to show
                                        return "";
                                case COLUMN_VALUE:
                                        return formatValueAsString(val);
+                               case COLUMN_TYPE:
+                                       // listed on the parent
+                                       return "";
                                case COLUMN_ATTRIBUTES:
                                        // Corresponding attributes are listed on the parent
                                        return "";
                                }
                        }
-
                } catch (RepositoryException re) {
-                       throw new EclipseUiException(
-                                       "Unexepected error while getting property values", re);
+                       throw new EclipseUiException("Cannot retrieve prop value on "+element, re);
                }
                return null;
        }
@@ -106,8 +110,7 @@ public class PropertyLabelProvider extends ColumnLabelProvider implements
                                strValue = value.getString();
                        return strValue;
                } catch (RepositoryException e) {
-                       throw new EclipseUiException("unexpected error while formatting value",
-                                       e);
+                       throw new EclipseUiException("unexpected error while formatting value", e);
                }
        }
 }
index 9e236524e3ff62f44edce3f6cf21436343cfee55..a38e30cd14b54d28be19d6ddda741ccddc3ac8cd 100644 (file)
@@ -22,7 +22,6 @@ import javax.jcr.Node;
 import javax.jcr.Property;
 import javax.jcr.PropertyIterator;
 import javax.jcr.RepositoryException;
-import javax.jcr.Value;
 
 import org.argeo.cms.ui.workbench.WorkbenchUiPlugin;
 import org.argeo.cms.ui.workbench.internal.WorkbenchConstants;
@@ -82,6 +81,7 @@ public class GenericPropertyPage extends FormPage implements WorkbenchConstants
 
                createColumn(tree, tableColumnLayout, "Property", SWT.LEFT, 200, 30);
                createColumn(tree, tableColumnLayout, "Value(s)", SWT.LEFT, 300, 60);
+               createColumn(tree, tableColumnLayout, "Type", SWT.LEFT, 75, 10);
                createColumn(tree, tableColumnLayout, "Attributes", SWT.LEFT, 75, 0);
                // Do not apply the treeColumnLayout it does not work yet
                // parent.setLayout(tableColumnLayout);
@@ -97,149 +97,17 @@ public class GenericPropertyPage extends FormPage implements WorkbenchConstants
                return treeViewer;
        }
 
-       private static TreeColumn createColumn(Tree parent,
-                       TreeColumnLayout tableColumnLayout, String name, int style,
+       private static TreeColumn createColumn(Tree parent, TreeColumnLayout tableColumnLayout, String name, int style,
                        int width, int weight) {
                TreeColumn column = new TreeColumn(parent, style);
                column.setText(name);
                column.setWidth(width);
                column.setMoveable(true);
                column.setResizable(true);
-               tableColumnLayout.setColumnData(column, new ColumnWeightData(weight,
-                               width, true));
+               tableColumnLayout.setColumnData(column, new ColumnWeightData(weight, width, true));
                return column;
        }
 
-       //
-       // private void createPropertiesPart(Composite parent) {
-       // try {
-       //
-       // PropertyIterator pi = currentNode.getProperties();
-       //
-       // // Initializes form part
-       // AbstractFormPart part = new AbstractFormPart() {
-       // public void commit(boolean onSave) {
-       // try {
-       // if (onSave) {
-       // ListIterator<Control> it = modifyableProperties
-       // .listIterator();
-       // while (it.hasNext()) {
-       // // we only support Text controls for the time
-       // // being
-       // Text curControl = (Text) it.next();
-       // String value = curControl.getText();
-       // currentNode.setProperty((String) curControl
-       // .getData(JCR_PROPERTY_NAME), value);
-       // }
-       //
-       // // We only commit when onSave = true,
-       // // thus it is still possible to save after a tab
-       // // change.
-       // super.commit(onSave);
-       // }
-       // } catch (RepositoryException re) {
-       // throw new EclipseUiException(
-       // "Unexpected error while saving properties", re);
-       // }
-       // }
-       // };
-       //
-       // while (pi.hasNext()) {
-       // Property prop = pi.nextProperty();
-       // addPropertyLine(parent, part, prop);
-       // }
-       //
-       // getManagedForm().addPart(part);
-       // } catch (RepositoryException re) {
-       // throw new EclipseUiException(
-       // "Error during creation of network details section", re);
-       // }
-       //
-       // }
-       //
-       // private void addPropertyLine(Composite parent, AbstractFormPart part,
-       // Property prop) {
-       // try {
-       // tk.createLabel(parent, prop.getName());
-       // tk.createLabel(parent,
-       // "[" + JcrUtils.getPropertyDefinitionAsString(prop) + "]");
-       //
-       // if (prop.getDefinition().isProtected()) {
-       // tk.createLabel(parent, formatReadOnlyPropertyValue(prop));
-       // } else
-       // addModifyableValueWidget(parent, part, prop);
-       // } catch (RepositoryException re) {
-       // throw new EclipseUiException("Cannot get property " + prop, re);
-       // }
-       // }
-       //
-       // private String formatReadOnlyPropertyValue(Property prop) {
-       // try {
-       // String strValue;
-       //
-       // if (prop.getType() == PropertyType.BINARY)
-       // strValue = "<binary>";
-       // else if (prop.isMultiple())
-       // strValue = Arrays.asList(prop.getValues()).toString();
-       // else if (prop.getType() == PropertyType.DATE)
-       // strValue = timeFormatter.format(prop.getValue().getDate()
-       // .getTime());
-       // else
-       // strValue = prop.getValue().getString();
-       //
-       // return strValue;
-       // } catch (RepositoryException re) {
-       // throw new EclipseUiException(
-       // "Unexpected error while formatting read only property value",
-       // re);
-       // }
-       // }
-       //
-       // private Control addModifyableValueWidget(Composite parent,
-       // AbstractFormPart part, Property prop) {
-       // GridData gd;
-       // try {
-       // if (prop.getType() == PropertyType.STRING) {
-       // Text txt = tk.createText(parent, prop.getString());
-       // gd = new GridData(GridData.FILL_HORIZONTAL);
-       // txt.setLayoutData(gd);
-       // txt.addModifyListener(new ModifiedFieldListener(part));
-       // txt.setData(JCR_PROPERTY_NAME, prop.getName());
-       // modifyableProperties.add(txt);
-       // } else {
-       // // unsupported property type for editing, we create a read only
-       // // label.
-       // return tk
-       // .createLabel(parent, formatReadOnlyPropertyValue(prop));
-       // }
-       // return null;
-       // } catch (RepositoryException re) {
-       // throw new EclipseUiException(
-       // "Unexpected error while formatting read only property value",
-       // re);
-       // }
-       //
-       // }
-
-       // Multiple Value Model
-       // protected class MultipleValueItem {
-       // private int index;
-       // private Value value;
-       //
-       // public MultipleValueItem(int index, Value value) {
-       // this.index = index;
-       // this.value = value;
-       // }
-       //
-       // public int getIndex() {
-       // return index;
-       // }
-       //
-       // public Object getValue() {
-       // return value;
-       // }
-       // }
-
        private class TreeContentProvider implements ITreeContentProvider {
                private static final long serialVersionUID = -6162736530019406214L;
 
@@ -258,8 +126,7 @@ public class GenericPropertyPage extends FormPage implements WorkbenchConstants
                                        props = propList.toArray();
                                }
                        } catch (RepositoryException e) {
-                               throw new EclipseUiException(
-                                               "Unexpected exception while listing node properties", e);
+                               throw new EclipseUiException("Unexpected exception while listing node properties", e);
                        }
                        return props;
                }
@@ -269,44 +136,24 @@ public class GenericPropertyPage extends FormPage implements WorkbenchConstants
                }
 
                public Object[] getChildren(Object parent) {
-                       Object[] result = null;
                        if (parent instanceof Property) {
                                Property prop = (Property) parent;
                                try {
-
-                                       if (prop.isMultiple()) {
-                                               Value[] values = prop.getValues();
-                                               // List<MultipleValueItem> list = new
-                                               // ArrayList<MultipleValueItem>();
-                                               // for (int i = 0; i < values.length; i++) {
-                                               // MultipleValueItem mvi = new MultipleValueItem(i,
-                                               // values[i]);
-                                               // list.add(mvi);
-                                               // }
-
-                                               return values;
-                                       }
+                                       if (prop.isMultiple())
+                                               return prop.getValues();
                                } catch (RepositoryException e) {
-                                       throw new EclipseUiException(
-                                                       "Unexpected error getting multiple values property.",
-                                                       e);
+                                       throw new EclipseUiException("Cannot get multi-prop values on " + prop, e);
                                }
                        }
-                       return result;
+                       return null;
                }
 
                public boolean hasChildren(Object parent) {
                        try {
-                               if (parent instanceof Property
-                                               && ((Property) parent).isMultiple()) {
-                                       return true;
-                               }
+                               return (parent instanceof Property && ((Property) parent).isMultiple());
                        } catch (RepositoryException e) {
-                               throw new EclipseUiException(
-                                               "Unexpected exception while checking if property is multiple",
-                                               e);
+                               throw new EclipseUiException("Cannot check if property is multiple for " + parent, e);
                        }
-                       return false;
                }
 
                public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
index e25512dd7a3c36554ba8d2d6a2a35b9ff55a4034..35586453b8235dbca048948067a4f667d1da7c74 100644 (file)
@@ -29,8 +29,8 @@ import javax.jcr.observation.EventListener;
 import javax.jcr.observation.ObservationManager;
 
 import org.argeo.cms.ui.workbench.WorkbenchUiPlugin;
-import org.argeo.cms.ui.workbench.internal.jcr.JcrDClickListener;
 import org.argeo.cms.ui.workbench.internal.jcr.JcrBrowserUtils;
+import org.argeo.cms.ui.workbench.internal.jcr.JcrDClickListener;
 import org.argeo.cms.ui.workbench.internal.jcr.NodeContentProvider;
 import org.argeo.cms.ui.workbench.internal.jcr.NodeLabelProvider;
 import org.argeo.cms.ui.workbench.internal.jcr.PropertiesContentProvider;
@@ -66,8 +66,7 @@ import org.eclipse.ui.part.ViewPart;
  * repository environment
  */
 public class JcrBrowserView extends ViewPart {
-       public final static String ID = WorkbenchUiPlugin.PLUGIN_ID
-                       + ".jcrBrowserView";
+       public final static String ID = WorkbenchUiPlugin.PLUGIN_ID + ".jcrBrowserView";
        private boolean sortChildNodes = true;
 
        /* DEPENDENCY INJECTION */
@@ -103,8 +102,8 @@ public class JcrBrowserView extends ViewPart {
                        throw new EclipseUiException("Cannot open user session", e);
                }
 
-               nodeContentProvider = new NodeContentProvider(userSession, keyring,
-                               repositoryRegister, repositoryFactory, sortChildNodes);
+               nodeContentProvider = new NodeContentProvider(userSession, keyring, repositoryRegister, repositoryFactory,
+                               sortChildNodes);
 
                // nodes viewer
                nodesViewer = createNodeViewer(top, nodeContentProvider);
@@ -149,59 +148,47 @@ public class JcrBrowserView extends ViewPart {
                return new int[] { 70, 30 };
        }
 
-       protected TreeViewer createNodeViewer(Composite parent,
-                       final ITreeContentProvider nodeContentProvider) {
+       protected TreeViewer createNodeViewer(Composite parent, final ITreeContentProvider nodeContentProvider) {
 
                final TreeViewer tmpNodeViewer = new TreeViewer(parent, SWT.MULTI);
 
-               tmpNodeViewer.getTree().setLayoutData(
-                               new GridData(SWT.FILL, SWT.FILL, true, true));
+               tmpNodeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 
                tmpNodeViewer.setContentProvider(nodeContentProvider);
                tmpNodeViewer.setLabelProvider(new NodeLabelProvider());
-               tmpNodeViewer
-                               .addSelectionChangedListener(new ISelectionChangedListener() {
-                                       public void selectionChanged(SelectionChangedEvent event) {
-                                               if (!event.getSelection().isEmpty()) {
-                                                       IStructuredSelection sel = (IStructuredSelection) event
-                                                                       .getSelection();
-                                                       Object firstItem = sel.getFirstElement();
-                                                       if (firstItem instanceof SingleJcrNodeElem)
-                                                               propertiesViewer
-                                                                               .setInput(((SingleJcrNodeElem) firstItem)
-                                                                                               .getNode());
-                                               } else {
-                                                       propertiesViewer.setInput(getViewSite());
-                                               }
-                                       }
-                               });
+               tmpNodeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+                       public void selectionChanged(SelectionChangedEvent event) {
+                               if (!event.getSelection().isEmpty()) {
+                                       IStructuredSelection sel = (IStructuredSelection) event.getSelection();
+                                       Object firstItem = sel.getFirstElement();
+                                       if (firstItem instanceof SingleJcrNodeElem)
+                                               propertiesViewer.setInput(((SingleJcrNodeElem) firstItem).getNode());
+                               } else {
+                                       propertiesViewer.setInput(getViewSite());
+                               }
+                       }
+               });
 
                resultsObserver = new TreeObserver(tmpNodeViewer.getTree().getDisplay());
                if (keyring != null)
                        try {
-                               ObservationManager observationManager = userSession
-                                               .getWorkspace().getObservationManager();
-                               observationManager.addEventListener(resultsObserver,
-                                               Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED, "/",
+                               ObservationManager observationManager = userSession.getWorkspace().getObservationManager();
+                               observationManager.addEventListener(resultsObserver, Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED, "/",
                                                true, null, null, false);
                        } catch (RepositoryException e) {
                                throw new EclipseUiException("Cannot register listeners", e);
                        }
 
-               tmpNodeViewer
-                               .addDoubleClickListener(new JcrDClickListener(
-                                               tmpNodeViewer));
+               tmpNodeViewer.addDoubleClickListener(new JcrDClickListener(tmpNodeViewer));
                return tmpNodeViewer;
        }
 
        protected TableViewer createPropertiesViewer(Composite parent) {
                propertiesViewer = new TableViewer(parent);
-               propertiesViewer.getTable().setLayoutData(
-                               new GridData(SWT.FILL, SWT.FILL, true, true));
+               propertiesViewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
                propertiesViewer.getTable().setHeaderVisible(true);
                propertiesViewer.setContentProvider(new PropertiesContentProvider());
-               TableViewerColumn col = new TableViewerColumn(propertiesViewer,
-                               SWT.NONE);
+               TableViewerColumn col = new TableViewerColumn(propertiesViewer, SWT.NONE);
                col.getColumn().setText("Name");
                col.getColumn().setWidth(200);
                col.setLabelProvider(new ColumnLabelProvider() {
@@ -211,8 +198,7 @@ public class JcrBrowserView extends ViewPart {
                                try {
                                        return ((Property) element).getName();
                                } catch (RepositoryException e) {
-                                       throw new EclipseUiException(
-                                                       "Unexpected exception in label provider", e);
+                                       throw new EclipseUiException("Unexpected exception in label provider", e);
                                }
                        }
                });
@@ -240,8 +226,7 @@ public class JcrBrowserView extends ViewPart {
                                        } else
                                                return property.getValue().getString();
                                } catch (RepositoryException e) {
-                                       throw new EclipseUiException(
-                                                       "Unexpected exception in label provider", e);
+                                       throw new EclipseUiException("Unexpected exception in label provider", e);
                                }
                        }
                });
@@ -252,13 +237,7 @@ public class JcrBrowserView extends ViewPart {
                        private static final long serialVersionUID = -6009599998150286070L;
 
                        public String getText(Object element) {
-                               try {
-                                       return PropertyType.nameFromValue(((Property) element)
-                                                       .getType());
-                               } catch (RepositoryException e) {
-                                       throw new EclipseUiException(
-                                                       "Unexpected exception in label provider", e);
-                               }
+                               return JcrBrowserUtils.getPropertyTypeAsString((Property) element);
                        }
                });
                propertiesViewer.setInput(getViewSite());
@@ -280,11 +259,10 @@ public class JcrBrowserView extends ViewPart {
         * @param sortChildNodes
         *            if true the content provider will use a comparer to sort nodes
         *            that might slow down the display
-        * */
+        */
        public void setSortChildNodes(boolean sortChildNodes) {
                this.sortChildNodes = sortChildNodes;
-               ((NodeContentProvider) nodesViewer.getContentProvider())
-                               .setSortChildren(sortChildNodes);
+               ((NodeContentProvider) nodesViewer.getContentProvider()).setSortChildren(sortChildNodes);
                nodesViewer.setInput(getViewSite());
        }
 
@@ -301,8 +279,7 @@ public class JcrBrowserView extends ViewPart {
                IStructuredSelection newSel = new StructuredSelection(parentNode);
                getNodeViewer().setSelection(newSel, true);
                // Force refresh
-               IStructuredSelection tmpSel = (IStructuredSelection) getNodeViewer()
-                               .getSelection();
+               IStructuredSelection tmpSel = (IStructuredSelection) getNodeViewer().getSelection();
                getNodeViewer().refresh(tmpSel.getFirstElement());
        }
 
@@ -313,8 +290,7 @@ public class JcrBrowserView extends ViewPart {
                }
 
                @Override
-               protected Boolean willProcessInUiThread(List<Event> events)
-                               throws RepositoryException {
+               protected Boolean willProcessInUiThread(List<Event> events) throws RepositoryException {
                        for (Event event : events) {
                                if (getLog().isTraceEnabled())
                                        getLog().debug("Received event " + event);
@@ -327,8 +303,7 @@ public class JcrBrowserView extends ViewPart {
                        return false;
                }
 
-               protected void onEventInUiThread(List<Event> events)
-                               throws RepositoryException {
+               protected void onEventInUiThread(List<Event> events) throws RepositoryException {
                        if (getLog().isTraceEnabled())
                                getLog().trace("Refresh result list");
                        nodesViewer.refresh();