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;
/** 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;
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;
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);
}
}
}
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);
case COLUMN_VALUE:
// Corresponding values are listed on children
return "";
+ case COLUMN_TYPE:
+ return JcrBrowserUtils.getPropertyTypeAsString(prop);
case COLUMN_ATTRIBUTES:
return JcrUtils.getPropertyDefinitionAsString(prop);
}
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;
}
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);
}
}
}
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;
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);
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;
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;
}
}
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) {
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;
* 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 */
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);
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() {
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);
}
}
});
} 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);
}
}
});
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());
* @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());
}
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());
}
}
@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);
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();