From c31045fc95c6fe53e58a6d15f1166e3c9a4213a9 Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Wed, 7 Dec 2016 14:48:11 +0000 Subject: [PATCH] Minor enhancements on the data explorer perspective git-svn-id: https://svn.argeo.org/commons/trunk@9348 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../internal/jcr/JcrBrowserUtils.java | 18 +- .../internal/jcr/PropertyLabelProvider.java | 21 ++- .../jcr/parts/GenericPropertyPage.java | 173 +----------------- .../cms/ui/workbench/jcr/JcrBrowserView.java | 87 ++++----- 4 files changed, 65 insertions(+), 234 deletions(-) diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/JcrBrowserUtils.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/JcrBrowserUtils.java index 940662186..9755d9574 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/JcrBrowserUtils.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/JcrBrowserUtils.java @@ -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); } } } diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/PropertyLabelProvider.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/PropertyLabelProvider.java index 3014bb6a6..629368c38 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/PropertyLabelProvider.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/PropertyLabelProvider.java @@ -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); } } } diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/parts/GenericPropertyPage.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/parts/GenericPropertyPage.java index 9e236524e..a38e30cd1 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/parts/GenericPropertyPage.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/jcr/parts/GenericPropertyPage.java @@ -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 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 = ""; - // 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 list = new - // ArrayList(); - // 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) { diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/jcr/JcrBrowserView.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/jcr/JcrBrowserView.java index e25512dd7..35586453b 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/jcr/JcrBrowserView.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/jcr/JcrBrowserView.java @@ -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 events) - throws RepositoryException { + protected Boolean willProcessInUiThread(List 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 events) - throws RepositoryException { + protected void onEventInUiThread(List events) throws RepositoryException { if (getLog().isTraceEnabled()) getLog().trace("Refresh result list"); nodesViewer.refresh(); -- 2.30.2