You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2011/04/25 21:17:32 UTC

svn commit: r1096566 - in /chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main: java/org/apache/chemistry/opencmis/workbench/ java/org/apache/chemistry/opencmis/workbench/details/ java/org/apache/chemistry/opencm...

Author: fmui
Date: Mon Apr 25 19:17:31 2011
New Revision: 1096566

URL: http://svn.apache.org/viewvc?rev=1096566&view=rev
Log:
CMIS Workbench: added clickable ids

Added:
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/IdRenderer.java   (with props)
Modified:
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PolicyTable.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/RelationshipTable.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/VersionTable.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/CMIS.groovy

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java?rev=1096566&r1=1096565&r2=1096566&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java Mon Apr 25 19:17:31 2011
@@ -18,6 +18,7 @@
  */
 package org.apache.chemistry.opencmis.workbench;
 
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.Desktop;
 import java.io.BufferedOutputStream;
@@ -57,6 +58,9 @@ import org.apache.commons.logging.LogFac
 
 public class ClientHelper {
 
+    public static final Color LINK_COLOR = new Color(105, 29, 21);
+    public static final Color LINK_SELECTED_COLOR = new Color(255, 255, 255);
+
     private static final Log log = LogFactory.getLog(ClientHelper.class);
     private static final int BUFFER_SIZE = 64 * 1024;
 

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java?rev=1096566&r1=1096565&r2=1096566&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java Mon Apr 25 19:17:31 2011
@@ -18,6 +18,7 @@
  */
 package org.apache.chemistry.opencmis.workbench.details;
 
+import java.awt.Cursor;
 import java.awt.Toolkit;
 import java.awt.datatransfer.Clipboard;
 import java.awt.datatransfer.StringSelection;
@@ -26,24 +27,32 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
+import java.awt.event.MouseMotionListener;
 import java.util.Collection;
 
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
+import javax.swing.JTabbedPane;
 import javax.swing.JTable;
+import javax.swing.SwingUtilities;
 import javax.swing.table.AbstractTableModel;
 import javax.swing.table.TableColumn;
 
 import org.apache.chemistry.opencmis.client.api.CmisObject;
+import org.apache.chemistry.opencmis.client.api.ObjectId;
 import org.apache.chemistry.opencmis.workbench.model.ClientModel;
 import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
 import org.apache.chemistry.opencmis.workbench.model.ObjectListener;
 import org.apache.chemistry.opencmis.workbench.swing.CollectionRenderer;
+import org.apache.chemistry.opencmis.workbench.swing.IdRenderer;
 
 public abstract class AbstractDetailsTable extends JTable implements ObjectListener {
 
     private static final long serialVersionUID = 1L;
 
+    private static final Cursor HAND_CURSOR = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
+    private static final Cursor DEFAULT_CURSOR = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
+
     private ClientModel model;
     private String[] columnNames;
 
@@ -56,6 +65,7 @@ public abstract class AbstractDetailsTab
         setModel(new DetailsTableModel(this));
 
         setDefaultRenderer(Collection.class, new CollectionRenderer());
+        setDefaultRenderer(ObjectId.class, new IdRenderer());
         setAutoResizeMode(AUTO_RESIZE_OFF);
         setAutoCreateRowSorter(true);
 
@@ -97,10 +107,15 @@ public abstract class AbstractDetailsTab
             }
 
             public void mouseClicked(MouseEvent e) {
-                if (e.getClickCount() == 2) {
-                    int row = getSelectedRow();
-                    if ((row > -1) && (row < getModel().getRowCount())) {
-                        doubleClickAction(e, row);
+                if (SwingUtilities.isLeftMouseButton(e)) {
+                    int row = rowAtPoint(e.getPoint());
+                    int column = columnAtPoint(e.getPoint());
+                    if (row > -1 && column > -1) {
+                        if (e.getClickCount() == 1) {
+                            singleClickAction(e, row, column);
+                        } else if (e.getClickCount() == 2) {
+                            doubleClickAction(e, row);
+                        }
                     }
                 }
             }
@@ -119,6 +134,22 @@ public abstract class AbstractDetailsTab
                 }
             }
         });
+
+        addMouseMotionListener(new MouseMotionListener() {
+            public void mouseMoved(MouseEvent e) {
+                int row = rowAtPoint(e.getPoint());
+                int column = columnAtPoint(e.getPoint());
+                if (row > -1 && getDetailColumClass(column) == ObjectId.class) {
+                    setCursor(HAND_CURSOR);
+                } else {
+                    setCursor(DEFAULT_CURSOR);
+                }
+
+            }
+
+            public void mouseDragged(MouseEvent e) {
+            }
+        });
     }
 
     public void objectLoaded(ClientModelEvent event) {
@@ -145,9 +176,16 @@ public abstract class AbstractDetailsTab
         return String.class;
     }
 
+    public void singleClickAction(MouseEvent e, int rowIndex, int colIndex) {
+    }
+
     public void doubleClickAction(MouseEvent e, int rowIndex) {
     }
 
+    public void setTab(int tab) {
+        ((JTabbedPane) getParent().getParent().getParent()).setSelectedIndex(tab);
+    }
+
     static class DetailsTableModel extends AbstractTableModel {
 
         private final AbstractDetailsTable table;

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java?rev=1096566&r1=1096565&r2=1096566&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java Mon Apr 25 19:17:31 2011
@@ -29,6 +29,7 @@ import javax.swing.JTextField;
 import javax.swing.SwingUtilities;
 
 import org.apache.chemistry.opencmis.client.api.CmisObject;
+import org.apache.chemistry.opencmis.client.api.Document;
 import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
 import org.apache.chemistry.opencmis.client.api.Folder;
 import org.apache.chemistry.opencmis.client.api.Session;
@@ -49,6 +50,7 @@ public class ObjectPanel extends InfoPan
     private JTextField idField;
     private JTextField typeField;
     private JTextField basetypeField;
+    private JTextField versionLabelField;
     private JTextField contentUrlField;
     private InfoList paths;
     private InfoList allowableActionsList;
@@ -71,6 +73,7 @@ public class ObjectPanel extends InfoPan
             idField.setText("");
             typeField.setText("");
             basetypeField.setText("");
+            versionLabelField.setText("");
             paths.removeAll();
             contentUrlField.setText("");
             allowableActionsList.removeAll();
@@ -81,6 +84,15 @@ public class ObjectPanel extends InfoPan
                 idField.setText(object.getId());
                 typeField.setText(object.getType().getId());
                 basetypeField.setText(object.getBaseTypeId().toString());
+                if (object instanceof Document) {
+                    try {
+                        versionLabelField.setText(((Document) object).getVersionLabel());
+                    } catch (Exception e) {
+                        versionLabelField.setText("???");
+                    }
+                } else {
+                    versionLabelField.setText("");
+                }
 
                 if (object instanceof FileableCmisObject) {
                     if (object instanceof Folder) {
@@ -139,6 +151,7 @@ public class ObjectPanel extends InfoPan
         idField = addLine("Id:");
         typeField = addLine("Type:");
         basetypeField = addLine("Base Type:");
+        versionLabelField = addLine("Version Label:");
         paths = addComponent("Paths:", new InfoList());
         contentUrlField = addLink("Content URL:");
         allowableActionsList = addComponent("Allowable Actions:", new InfoList());

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PolicyTable.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PolicyTable.java?rev=1096566&r1=1096565&r2=1096566&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PolicyTable.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PolicyTable.java Mon Apr 25 19:17:31 2011
@@ -18,39 +18,66 @@
  */
 package org.apache.chemistry.opencmis.workbench.details;
 
+import java.awt.event.MouseEvent;
+
+import org.apache.chemistry.opencmis.client.api.ObjectId;
 import org.apache.chemistry.opencmis.client.api.Policy;
+import org.apache.chemistry.opencmis.workbench.ClientHelper;
 import org.apache.chemistry.opencmis.workbench.model.ClientModel;
 
 public class PolicyTable extends AbstractDetailsTable {
 
-	private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
-	private static final String[] COLUMN_NAMES = { "Name", "Id" };
-	private static final int[] COLUMN_WIDTHS = { 200, 400 };
+    private static final String[] COLUMN_NAMES = { "Name", "Id" };
+    private static final int[] COLUMN_WIDTHS = { 200, 400 };
 
-	public PolicyTable(ClientModel model) {
-		super();
-		init(model, COLUMN_NAMES, COLUMN_WIDTHS);
-	}
-
-	public int getDetailRowCount() {
-		if (getObject().getPolicies() == null) {
-			return 0;
-		}
-
-		return getObject().getPolicies().size();
-	}
-
-	public Object getDetailValueAt(int rowIndex, int columnIndex) {
-		Policy policy = getObject().getPolicies().get(rowIndex);
-
-		switch (columnIndex) {
-		case 0:
-			return policy.getName();
-		case 1:
-			return policy.getId();
-		}
+    public PolicyTable(ClientModel model) {
+        super();
+        init(model, COLUMN_NAMES, COLUMN_WIDTHS);
+    }
+
+    @Override
+    public void singleClickAction(MouseEvent e, int rowIndex, int colIndex) {
+        if (colIndex != 1) {
+            return;
+        }
+
+        try {
+            getClientModel().loadObject(getObject().getPolicies().get(rowIndex).getId());
+            setTab(0);
+        } catch (Exception ex) {
+            ClientHelper.showError(this, ex);
+        }
+    }
+
+    public int getDetailRowCount() {
+        if (getObject().getPolicies() == null) {
+            return 0;
+        }
+
+        return getObject().getPolicies().size();
+    }
+
+    public Object getDetailValueAt(int rowIndex, int columnIndex) {
+        Policy policy = getObject().getPolicies().get(rowIndex);
+
+        switch (columnIndex) {
+        case 0:
+            return policy.getName();
+        case 1:
+            return policy;
+        }
+
+        return null;
+    }
+
+    @Override
+    public Class<?> getDetailColumClass(int columnIndex) {
+        if (columnIndex == 1) {
+            return ObjectId.class;
+        }
 
-		return null;
-	}
+        return super.getDetailColumClass(columnIndex);
+    }
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/RelationshipTable.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/RelationshipTable.java?rev=1096566&r1=1096565&r2=1096566&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/RelationshipTable.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/RelationshipTable.java Mon Apr 25 19:17:31 2011
@@ -18,15 +18,19 @@
  */
 package org.apache.chemistry.opencmis.workbench.details;
 
+import java.awt.event.MouseEvent;
+
+import org.apache.chemistry.opencmis.client.api.ObjectId;
 import org.apache.chemistry.opencmis.client.api.Relationship;
+import org.apache.chemistry.opencmis.workbench.ClientHelper;
 import org.apache.chemistry.opencmis.workbench.model.ClientModel;
 
 public class RelationshipTable extends AbstractDetailsTable {
 
     private static final long serialVersionUID = 1L;
 
-    private static final String[] COLUMN_NAMES = { "Name", "Type", "Source", "Target" };
-    private static final int[] COLUMN_WIDTHS = { 200, 200, 200, 200 };
+    private static final String[] COLUMN_NAMES = { "Name", "Type", "Relationship Id", "Source", "Target" };
+    private static final int[] COLUMN_WIDTHS = { 200, 200, 200, 200, 200 };
 
     public RelationshipTable(ClientModel model) {
         super();
@@ -34,6 +38,31 @@ public class RelationshipTable extends A
     }
 
     @Override
+    public void singleClickAction(MouseEvent e, int rowIndex, int colIndex) {
+        Relationship relationship = getObject().getRelationships().get(rowIndex);
+        ObjectId id = null;
+
+        if (colIndex == 2) {
+            id = relationship;
+        } else if (colIndex == 3) {
+            id = relationship.getSourceId();
+        } else if (colIndex == 4) {
+            id = relationship.getTargetId();
+        }
+
+        if ((id == null) || (id.getId() == null)) {
+            return;
+        }
+
+        try {
+            getClientModel().loadObject(id.getId());
+            setTab(0);
+        } catch (Exception ex) {
+            ClientHelper.showError(this, ex);
+        }
+    }
+
+    @Override
     public int getDetailRowCount() {
         if (getObject().getRelationships() == null) {
             return 0;
@@ -52,11 +81,22 @@ public class RelationshipTable extends A
         case 1:
             return relationship.getType().getId();
         case 2:
-            return (relationship.getSourceId() == null ? "?" : relationship.getSourceId().getId());
+            return relationship;
         case 3:
-            return (relationship.getTarget() == null ? "?" : relationship.getTarget().getId());
+            return relationship.getSourceId();
+        case 4:
+            return relationship.getTarget();
         }
 
         return null;
     }
+
+    @Override
+    public Class<?> getDetailColumClass(int columnIndex) {
+        if ((columnIndex == 2) || (columnIndex == 3) || (columnIndex == 4)) {
+            return ObjectId.class;
+        }
+
+        return super.getDetailColumClass(columnIndex);
+    }
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/VersionTable.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/VersionTable.java?rev=1096566&r1=1096565&r2=1096566&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/VersionTable.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/VersionTable.java Mon Apr 25 19:17:31 2011
@@ -27,6 +27,7 @@ import java.util.concurrent.locks.Reentr
 import javax.swing.SwingUtilities;
 
 import org.apache.chemistry.opencmis.client.api.Document;
+import org.apache.chemistry.opencmis.client.api.ObjectId;
 import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
 import org.apache.chemistry.opencmis.workbench.ClientHelper;
 import org.apache.chemistry.opencmis.workbench.model.ClientModel;
@@ -92,6 +93,28 @@ public class VersionTable extends Abstra
     }
 
     @Override
+    public void singleClickAction(MouseEvent e, int rowIndex, int colIndex) {
+        if (colIndex != 5) {
+            return;
+        }
+
+        String versionId = null;
+        lock.readLock().lock();
+        try {
+            versionId = versions.get(rowIndex).getId();
+        } finally {
+            lock.readLock().unlock();
+        }
+
+        try {
+            getClientModel().loadObject(versionId);
+            setTab(0);
+        } catch (Exception ex) {
+            ClientHelper.showError(this, ex);
+        }
+    }
+
+    @Override
     public void doubleClickAction(MouseEvent e, int rowIndex) {
         lock.readLock().lock();
         try {
@@ -142,7 +165,7 @@ public class VersionTable extends Abstra
         case 4:
             return version.isLatestMajorVersion();
         case 5:
-            return version.getId();
+            return version;
         case 6:
             return version.getContentStreamFileName();
         case 7:
@@ -158,6 +181,8 @@ public class VersionTable extends Abstra
     public Class<?> getDetailColumClass(int columnIndex) {
         if ((columnIndex == 2) || (columnIndex == 3) || (columnIndex == 4)) {
             return Boolean.class;
+        } else if (columnIndex == 5) {
+            return ObjectId.class;
         } else if (columnIndex == 8) {
             return Long.class;
         }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java?rev=1096566&r1=1096565&r2=1096566&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java Mon Apr 25 19:17:31 2011
@@ -174,8 +174,7 @@ public class ClientModel {
     public synchronized void loadObject(String objectId) throws Exception {
         try {
             Session session = clientSession.getSession();
-            CmisObject object = session.getObject(session.createObjectId(objectId),
-                    clientSession.getObjectOperationContext());
+            CmisObject object = session.getObject(objectId, clientSession.getObjectOperationContext());
             object.refreshIfOld(OLD);
 
             setCurrentObject(object);

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java?rev=1096566&r1=1096565&r2=1096566&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java Mon Apr 25 19:17:31 2011
@@ -31,6 +31,10 @@ import org.apache.chemistry.opencmis.wor
 public class CollectionRenderer extends DefaultTableCellRenderer {
     private static final long serialVersionUID = 1L;
 
+    public CollectionRenderer() {
+        super();
+    }
+
     @Override
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
             int row, int column) {

Added: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/IdRenderer.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/IdRenderer.java?rev=1096566&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/IdRenderer.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/IdRenderer.java Mon Apr 25 19:17:31 2011
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.workbench.swing;
+
+import java.awt.Component;
+
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.apache.chemistry.opencmis.client.api.ObjectId;
+import org.apache.chemistry.opencmis.workbench.ClientHelper;
+
+public class IdRenderer extends DefaultTableCellRenderer {
+    private static final long serialVersionUID = 1L;
+
+    public IdRenderer() {
+        super();
+    }
+
+    @Override
+    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
+            int row, int column) {
+        Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+        comp.setForeground(isSelected ? ClientHelper.LINK_SELECTED_COLOR : ClientHelper.LINK_COLOR);
+
+        return comp;
+    }
+
+    public void setValue(Object value) {
+        String text = "";
+        if (value instanceof ObjectId) {
+            if (((ObjectId) value).getId() != null) {
+                text = ((ObjectId) value).getId();
+            }
+        }
+
+        setText(text);
+    }
+}

Propchange: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/IdRenderer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/CMIS.groovy
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/CMIS.groovy?rev=1096566&r1=1096565&r2=1096566&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/CMIS.groovy (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/scripts/CMIS.groovy Mon Apr 25 19:17:31 2011
@@ -97,8 +97,8 @@ class CMIS {
         CmisObject object = getObject(id)
         
         if(object.getAllowableActions() == null || 
-            object.getAllowableActions().getAllowableActions() == null || 
-            object.getAllowableActions().getAllowableActions().isEmpty()) {
+        object.getAllowableActions().getAllowableActions() == null || 
+        object.getAllowableActions().getAllowableActions().isEmpty()) {
             println "- no allowable actions -"
             return
         }
@@ -109,23 +109,23 @@ class CMIS {
     }
     
     void printVersions(id) {
-         Document doc = getDocument(id)
+        Document doc = getDocument(id)
+        
+        List<Document> versions = doc.getAllVersions()
+        
+        if(versions == null || versions.isEmpty()) {
+            println "- no versions -"
+            return
+        }
         
-         List<Document> versions = doc.getAllVersions()
-         
-         if(versions == null || versions.isEmpty()) {
-             println "- no versions -"
-             return
-         }
-         
-         for(Document version: doc.getAllVersions()) {
-             println(version.getVersionLabel() + " (" + version.getId() +") [" + version.getType().getId() + "]")
-         }
+        for(Document version: doc.getAllVersions()) {
+            println(version.getVersionLabel() + " (" + version.getId() +") [" + version.getType().getId() + "]")
+        }
     }
     
     void printChildren(id) {
         Folder folder = getFolder(id)
-       
+        
         boolean hasChildren = false
         for(CmisObject child: folder.getChildren()) {
             println(child.getName() + " (" + child.getId() +") [" + child.getType().getId() + "]")
@@ -139,7 +139,7 @@ class CMIS {
     
     void printRelationships(id) {
         CmisObject object = getObject(id)
-           
+        
         boolean hasRelationships = false
         for(CmisObject rel: object.getRelationships()) {
             println(rel.getName() + " (" + rel.getId() +") [" + rel.getType().getId() + "]")
@@ -152,18 +152,18 @@ class CMIS {
     }
     
     void printRenditions(id) {
-         Document doc = getDocument(id)
+        Document doc = getDocument(id)
         
-         List<Rendition> renditons = doc.getRenditions()
-         
-         if(renditons == null || renditons.isEmpty()) {
-             println "- no renditions -"
-             return
-         }
-         
-         for(Rendition rendition: renditons) {
-             println(rendition.getTitle() + " (MIME type: " + rendition.getMimeType() + ", length: "  + rendition.getLength() + " bytes)")
-         }
+        List<Rendition> renditons = doc.getRenditions()
+        
+        if(renditons == null || renditons.isEmpty()) {
+            println "- no renditions -"
+            return
+        }
+        
+        for(Rendition rendition: renditons) {
+            println(rendition.getTitle() + " (MIME type: " + rendition.getMimeType() + ", length: "  + rendition.getLength() + " bytes)")
+        }
     }
     
     void printObjectSummary(id) {
@@ -262,6 +262,20 @@ class CMIS {
         return parentFolder.createDocument(properties, contentStream, versioningState)
     }
     
+    Relationship createRelationship(source, target, name, type) {
+        CmisObject sourceObject = getObject(source)
+        CmisObject targetObject = getObject(target)
+        
+        def properties = [
+                    (PropertyIds.OBJECT_TYPE_ID): type,
+                    (PropertyIds.NAME): name,
+                    (PropertyIds.SOURCE_ID): sourceObject.id,
+                    (PropertyIds.TARGET_ID): targetObject.id
+                ]
+        
+        return getObject(session.createRelationship(properties));
+    }
+    
     void delete(id) {
         getObject(id).delete(true)
     }