Clean JCR Ui Explorer editor
authorBruno Sinou <bsinou@argeo.org>
Thu, 6 Oct 2011 14:28:43 +0000 (14:28 +0000)
committerBruno Sinou <bsinou@argeo.org>
Thu, 6 Oct 2011 14:28:43 +0000 (14:28 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@4808 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

15 files changed:
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/commands/Refresh.java
eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/views/AbstractJcrBrowser.java
server/plugins/org.argeo.jcr.ui.explorer/META-INF/spring/commands.xml
server/plugins/org.argeo.jcr.ui.explorer/plugin.xml
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/Refresh.java [new file with mode: 0644]
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/editors/ChildNodesPage.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/editors/GenericNodeEditor.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/editors/GenericPropertyPage.java [new file with mode: 0644]
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/editors/NodeRightsManagementPage.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/editors/NodeVersionHistoryPage.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/model/RepositoriesNode.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/providers/PropertyLabelProvider.java [new file with mode: 0644]
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrUiUtils.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/resources/org/argeo/jcr/ui/explorer/messages.properties

index af3fd53c9de8700e95a4d388488a0e99d12f0d59..5550b4075973b9f3ecf7b66967132961cde7d4c3 100644 (file)
@@ -10,7 +10,13 @@ import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.ui.handlers.HandlerUtil;
 
-/** Refresh one of the view */
+/**
+ * Call the refresh method of the active AbstractJcrBrowser instance.
+ * 
+ * Warning: this method only refreshes the viewer, if the model is "stale", e.g.
+ * if some changes in the underlying data have not yet been propagated to the
+ * model, the view will not display up-to-date information.
+ */
 public class Refresh extends AbstractHandler {
 
        public Object execute(ExecutionEvent event) throws ExecutionException {
index db19ab3428937920eea2371f7e8bbc1d0d76746c..7bbbacdf2d9e8e2e5233f5f42ddc0790dbbd6199 100644 (file)
@@ -39,7 +39,9 @@ public abstract class AbstractJcrBrowser extends ViewPart {
        }
 
        public void refresh(Object obj) {
+               // getNodeViewer().update(obj, null);
                getNodeViewer().refresh(obj);
+               // getNodeViewer().expandToLevel(obj, 1);
        }
 
        public void nodeAdded(Node parentNode, Node newNode) {
index f77487f1d92481b4c0f3d5a984409c83608fcbb0..1e58d33e5afd62a3a0bfd5c28ae1316752220f95 100644 (file)
                class="org.argeo.jcr.ui.explorer.commands.OpenGenericNodeEditor"
                scope="prototype">
        </bean>
+
        <bean id="getNodeSize" class="org.argeo.jcr.ui.explorer.commands.GetNodeSize"
                scope="prototype">
        </bean>
 
-
        <bean id="addRemoteRepository" class="org.argeo.jcr.ui.explorer.commands.AddRemoteRepository">
                <property name="repositoryFactory" ref="repositoryRegister" />
                <property name="bundleContext" ref="bundleContext" />
@@ -29,6 +29,8 @@
        <bean id="addFolderNode" class="org.argeo.jcr.ui.explorer.commands.AddFolderNode"
                scope="prototype" />
 
+       <!-- <bean id="refresh" class="org.argeo.jcr.ui.explorer.commands.Refresh" 
+               scope="prototype" /> -->
        <bean id="refresh" class="org.argeo.eclipse.ui.jcr.commands.Refresh"
                scope="prototype" />
 
index 358d5590d3dbd88bc7745eae73fc8b1ddd6e432a..7d220a04fe0cac3f5508bd2fe6795815e4b459e7 100644 (file)
                        defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
                        id="org.argeo.jcr.ui.explorer.getNodeSize"
                        name="Get node size">
-                       <commandParameter
-                               id="org.argeo.jcr.ui.explorer.nodePath"
-                               name="Node path">
-                       </commandParameter>
                </command>    
-               
        <command
                        defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
                        id="org.argeo.jcr.ui.explorer.addRemoteRepository"
                 icon="icons/query.png"
                 style="push">
             </command>
-        </menuContribution>
-               <menuContribution
-                       locationURI="menu:org.argeo.jcr.ui.explorer.browserView">
             <command
                commandId="org.argeo.jcr.ui.explorer.addRemoteRepository"
                 icon="icons/addRepo.gif"
diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/Refresh.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/Refresh.java
new file mode 100644 (file)
index 0000000..db83daf
--- /dev/null
@@ -0,0 +1,44 @@
+package org.argeo.jcr.ui.explorer.commands;
+
+import java.util.Iterator;
+
+import org.argeo.eclipse.ui.TreeParent;
+import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser;
+import org.argeo.jcr.ui.explorer.utils.JcrUiUtils;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Force the selected objects of the active view to be refreshed doing the
+ * following:
+ * <ol>
+ * <li>The model objects are recomputed</li>
+ * <li>the view is refreshed</li>
+ * </ol>
+ */
+public class Refresh extends AbstractHandler {
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+               ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event)
+                               .getActivePage().getSelection();
+               AbstractJcrBrowser view = (AbstractJcrBrowser) HandlerUtil
+                               .getActiveWorkbenchWindow(event).getActivePage()
+                               .findView(HandlerUtil.getActivePartId(event));
+               if (selection != null && selection instanceof IStructuredSelection) {
+                       Iterator<?> it = ((IStructuredSelection) selection).iterator();
+                       while (it.hasNext()) {
+                               Object obj = it.next();
+                               if (obj instanceof TreeParent) {
+                                       TreeParent tp = (TreeParent) obj;
+                                       JcrUiUtils.forceRefreshIfNeeded(tp);
+                                       view.refresh(obj);
+                               }
+                       }
+               }
+               return null;
+       }
+}
index 6f4a2347e64ec4452492b2f9aed692bba79f6d87..0a6b561ff0022137c64da8bd40db8f729a1adc1b 100644 (file)
@@ -40,9 +40,10 @@ public class ChildNodesPage extends FormPage {
        protected void createFormContent(IManagedForm managedForm) {
                try {
                        ScrolledForm form = managedForm.getForm();
+                       form.setText(JcrExplorerPlugin.getMessage("childNodesPageTitle"));
                        Composite body = form.getBody();
                        GridLayout twt = new GridLayout(1, false);
-                       twt.marginWidth = twt.marginHeight = 0;
+                       twt.marginWidth = twt.marginHeight = 5;
                        body.setLayout(twt);
                        if (!currentNode.hasNodes()) {
                                managedForm.getToolkit().createLabel(body,
index 422c6881e4136ad961092200df5d64b3145d774a..fe13a8091ea1ee3789a5d49a0f9919ab52e20840 100644 (file)
@@ -25,7 +25,8 @@ public class GenericNodeEditor extends FormEditor {
 
        private Node currentNode;
 
-       private GenericNodePage networkDetailsPage;
+       private GenericNodePage genericNodePage;
+       private GenericPropertyPage genericPropertyPage;
        private ChildNodesPage childNodesPage;
        private NodeRightsManagementPage nodeRightsManagementPage;
        private NodeVersionHistoryPage nodeVersionHistoryPage;
@@ -41,10 +42,15 @@ public class GenericNodeEditor extends FormEditor {
        @Override
        protected void addPages() {
                try {
-                       networkDetailsPage = new GenericNodePage(this,
+                       // genericNodePage = new GenericNodePage(this,
+                       // JcrExplorerPlugin.getMessage("genericNodePageTitle"),
+                       // currentNode);
+                       // addPage(genericNodePage);
+
+                       genericPropertyPage = new GenericPropertyPage(this,
                                        JcrExplorerPlugin.getMessage("genericNodePageTitle"),
                                        currentNode);
-                       addPage(networkDetailsPage);
+                       addPage(genericPropertyPage);
 
                        childNodesPage = new ChildNodesPage(this,
                                        JcrExplorerPlugin.getMessage("childNodesPageTitle"),
diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/editors/GenericPropertyPage.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/editors/GenericPropertyPage.java
new file mode 100644 (file)
index 0000000..176d7f6
--- /dev/null
@@ -0,0 +1,302 @@
+package org.argeo.jcr.ui.explorer.editors;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.Node;
+import javax.jcr.Property;
+import javax.jcr.PropertyIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoException;
+import org.argeo.jcr.ui.explorer.JcrExplorerConstants;
+import org.argeo.jcr.ui.explorer.JcrExplorerPlugin;
+import org.argeo.jcr.ui.explorer.providers.PropertyLabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+
+/**
+ * Generic editor property page. Lists all properties of current node as a
+ * complex tree. TODO: enable editing
+ */
+
+public class GenericPropertyPage extends FormPage implements
+               JcrExplorerConstants {
+       private final static Log log = LogFactory.getLog(GenericPropertyPage.class);
+
+       // local constants
+       private final static String JCR_PROPERTY_NAME = "jcr:name";
+
+       // Main business Objects
+       private Node currentNode;
+
+       // This page widgets
+       private FormToolkit tk;
+       private TreeViewer complexTree;
+
+       public GenericPropertyPage(FormEditor editor, String title, Node currentNode) {
+               super(editor, "id", title);
+               this.currentNode = currentNode;
+       }
+
+       protected void createFormContent(IManagedForm managedForm) {
+               tk = managedForm.getToolkit();
+               ScrolledForm form = managedForm.getForm();
+               form.setText(JcrExplorerPlugin
+                               .getMessage("genericNodePageTitle"));
+               FillLayout layout = new FillLayout();
+               layout.marginHeight = 5;
+               layout.marginWidth = 5;
+               form.getBody().setLayout(layout);
+
+               complexTree = createComplexTree(form.getBody());
+
+               // TODO remove following
+               // createPropertiesPart(form.getBody());
+       }
+
+       private TreeViewer createComplexTree(Composite parent) {
+               int style = SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION;
+               Tree tree = new Tree(parent, style);
+               createColumn(tree, "Property", SWT.LEFT, 200);
+               createColumn(tree, "Value(s)", SWT.LEFT, 300);
+               createColumn(tree, "Attributes", SWT.LEFT, 65);
+               tree.setLinesVisible(true);
+               tree.setHeaderVisible(true);
+
+               TreeViewer result = new TreeViewer(tree);
+               result.setContentProvider(new TreeContentProvider());
+               result.setLabelProvider(new PropertyLabelProvider());
+               result.setInput(currentNode);
+               result.expandAll();
+               return result;
+       }
+
+       private static TreeColumn createColumn(Tree parent, String name, int style,
+                       int width) {
+               TreeColumn result = new TreeColumn(parent, style);
+               result.setText(name);
+               result.setWidth(width);
+               result.setMoveable(true);
+               result.setResizable(true);
+               return result;
+       }
+
+       //
+       // 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 ArgeoException(
+       // "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 ArgeoException(
+       // "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 ArgeoException("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 ArgeoException(
+       // "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 ArgeoException(
+       // "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 {
+               public Object[] getElements(Object parent) {
+                       Object[] props = null;
+                       try {
+
+                               if (parent instanceof Node) {
+                                       Node node = (Node) parent;
+                                       PropertyIterator pi;
+                                       pi = node.getProperties();
+                                       List<Property> propList = new ArrayList<Property>();
+                                       while (pi.hasNext()) {
+                                               propList.add(pi.nextProperty());
+                                       }
+                                       props = propList.toArray();
+                               }
+                       } catch (RepositoryException e) {
+                               throw new ArgeoException(
+                                               "Unexpected exception while listing node properties", e);
+                       }
+                       return props;
+               }
+
+               public Object getParent(Object child) {
+                       return null;
+               }
+
+               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;
+                                       }
+                               } catch (RepositoryException e) {
+                                       throw new ArgeoException(
+                                                       "Unexpected error getting multiple values property.",
+                                                       e);
+                               }
+                       }
+                       return result;
+               }
+
+               public boolean hasChildren(Object parent) {
+                       try {
+                               if (parent instanceof Property
+                                               && ((Property) parent).isMultiple()) {
+                                       return true;
+                               }
+                       } catch (RepositoryException e) {
+                               throw new ArgeoException(
+                                               "Unexpected exception while checking if property is multiple",
+                                               e);
+                       }
+                       return false;
+               }
+
+               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+               }
+
+               public void dispose() {
+               }
+       }
+}
index d941cff192595dff41cb779e671850c1c78e4b17..6c5bbb15946e85466b5b3ad4e66eff2f33bbfe01 100644 (file)
@@ -5,6 +5,7 @@ import javax.jcr.security.AccessControlManager;
 import javax.jcr.security.Privilege;
 
 import org.argeo.ArgeoException;
+import org.argeo.jcr.ui.explorer.JcrExplorerPlugin;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.TableViewer;
@@ -40,13 +41,16 @@ public class NodeRightsManagementPage extends FormPage {
 
        protected void createFormContent(IManagedForm managedForm) {
                ScrolledForm form = managedForm.getForm();
-               form.setText("Rights");
-               FillLayout mainLayout = new FillLayout();
-               form.getBody().setLayout(mainLayout);
+               form.setText(JcrExplorerPlugin
+                               .getMessage("nodeRightsManagementPageTitle"));
+               FillLayout layout = new FillLayout();
+               layout.marginHeight = 5;
+               layout.marginWidth = 5;
+               form.getBody().setLayout(layout);
                createRightsPart(form.getBody());
        }
 
-       /** Creates the rights section */
+       /** Creates the rights part */
        protected void createRightsPart(Composite parent) {
                Table table = new Table(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
                table.setLinesVisible(true);
index 5b5e6ff1edec335e790f8d22e93f3e93516f8b89..dc2c2eaca8978abcb8946fcae859610a3588c49c 100644 (file)
@@ -73,6 +73,8 @@ public class NodeVersionHistoryPage extends FormPage implements
 
        protected void createFormContent(IManagedForm managedForm) {
                ScrolledForm form = managedForm.getForm();
+               form.setText(JcrExplorerPlugin
+                               .getMessage("nodeVersionHistoryPageTitle"));
                tk = managedForm.getToolkit();
                GridLayout twt = new GridLayout(1, false);
                twt.marginWidth = twt.marginHeight = 5;
index 6634603aa18fe4bf28a033ba51b2db644efe0aa4..a645809a100051e67a0324039bbdf9eaacab3dec 100644 (file)
@@ -107,7 +107,7 @@ public class RepositoriesNode extends TreeParent implements ArgeoNames {
                // super.addChild(new RepositoriesNode(...));
        }
 
-       /** Returns the {@link RepositoryRegister} wrapped by thgis object. */
+       /** Returns the {@link RepositoryRegister} wrapped by this object. */
        public RepositoryRegister getRepositoryRegister() {
                return repositoryRegister;
        }
diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/providers/PropertyLabelProvider.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/providers/PropertyLabelProvider.java
new file mode 100644 (file)
index 0000000..b151a65
--- /dev/null
@@ -0,0 +1,101 @@
+package org.argeo.jcr.ui.explorer.providers;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+
+import javax.jcr.Property;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+
+import org.argeo.ArgeoException;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.jcr.ui.explorer.JcrExplorerConstants;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+import org.eclipse.jface.viewers.ViewerCell;
+
+public class PropertyLabelProvider extends ColumnLabelProvider implements
+               JcrExplorerConstants {
+
+       // 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;
+
+       // Utils
+       protected DateFormat timeFormatter = new SimpleDateFormat(DATE_TIME_FORMAT);
+
+       public void update(ViewerCell cell) {
+               Object element = cell.getElement();
+               cell.setText(getColumnText(element, cell.getColumnIndex()));
+               // Image image = getImage(element);
+               // cell.setImage(image);
+               // cell.setBackground(getBackground(element));
+               // cell.setForeground(getForeground(element));
+               // cell.setFont(getFont(element));
+       }
+
+       public String getColumnText(Object element, int columnIndex) {
+               try {
+                       if (element instanceof Property) {
+                               Property prop = (Property) element;
+                               if (prop.isMultiple()) {
+                                       switch (columnIndex) {
+                                       case COLUMN_PROPERTY:
+                                               return prop.getName();
+                                       case COLUMN_VALUE:
+                                               // Corresponding values are listed on children
+                                               return "";
+                                       case COLUMN_ATTRIBUTES:
+                                               return JcrUtils.getPropertyDefinitionAsString(prop);
+                                       }
+                               } else {
+                                       switch (columnIndex) {
+                                       case COLUMN_PROPERTY:
+                                               return prop.getName();
+                                       case COLUMN_VALUE:
+                                               return formatValueAsString(prop.getValue());
+                                       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_ATTRIBUTES:
+                                       // Corresponding attributes are listed on the parent
+                                       return "";
+                               }
+                       }
+
+               } catch (RepositoryException re) {
+                       throw new ArgeoException(
+                                       "Unexepected error while getting property values", re);
+               }
+               return null;
+       }
+
+       private String formatValueAsString(Value value) {
+               // TODO enhance this method
+               try {
+                       String strValue;
+
+                       if (value.getType() == PropertyType.BINARY)
+                               strValue = "<binary>";
+                       else if (value.getType() == PropertyType.DATE)
+                               strValue = timeFormatter.format(value.getDate().getTime());
+                       else
+                               strValue = value.getString();
+                       return strValue;
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("unexpected error while formatting value",
+                                       e);
+               }
+       }
+}
index c7287cf85b3f3ae60278e195115cb8c53af8f737..2b76f04b8ba7a74e5a807d98218f646ede088982 100644 (file)
@@ -38,6 +38,14 @@ public class JcrUiUtils {
                                        re);
                }
        }
+
+       /**
+        * Insure that a model element is inline with the underlying data by
+        * cleaning the corresponding subtree and building it again.
+        */
+       public static void forceRebuild(TreeParent element) {
+               // TODO implement this method if needed.
+       }
        /**
         * Workaround to get the alias of the repository that contains the given
         * element. As we cannot browse the UI tree upward we recursively browse it
index da015010f9e0fe1d32c7d3a66371b96c017d7ce6..2274644d9d9d9b2fc4eb2c922250e9966219317c 100644 (file)
@@ -64,7 +64,6 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
 
        // Manage documents
        // private JcrFileProvider jcrFileProvider;
-
        // private FileHandler fileHandler;
 
        @Override
index 9fd9db10da73664d14171581840ab52892ce6dfa..3023c523f69fc942edcdb2ffb39d273f091243ed 100644 (file)
@@ -6,8 +6,8 @@
 errorUnvalidNtFolderNodeType= Error: folder can only be created on a Jcr Node
 warningInvalidNodeToImport=Can only import to a node
 warningInvalidMultipleSelection=This functionality is implemented only on a single node for the time being.
-warningUnversionableNode= Warning: Current node is not versionable.
-warningNoChildNode= Warning: current node has no children.
+warningUnversionableNode= Current node is not versionable.
+warningNoChildNode= Current node has no child.
 
 ## Commands 
 getNodeSizeCmdLbl= Get approx. size
@@ -17,7 +17,7 @@ addFolderNodeCmdLbl= Add Folder
 nodeEditorLbl=Generic node editor
 genericNodePageTitle=Properties
 childNodesPageTitle=Children
-nodeRightsManagementPageTitle=Permissions
+nodeRightsManagementPageTitle=Rights
 nodeVersionHistoryPageTitle=History
 
 # History