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/24 20:42:06 UTC

svn commit: r1096359 - 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: Sun Apr 24 18:42:05 2011
New Revision: 1096359

URL: http://svn.apache.org/viewvc?rev=1096359&view=rev
Log:
CMIS Workbench improvements (asynchronous retrieval of the version history, fewer scrollbars)

Modified:
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientFrame.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/DetailsTabs.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/VersionTable.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientSession.java
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientFrame.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientFrame.java?rev=1096359&r1=1096358&r2=1096359&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientFrame.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientFrame.java Sun Apr 24 18:42:05 2011
@@ -43,7 +43,6 @@ import javax.swing.JFrame;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
 import javax.swing.JSplitPane;
 import javax.swing.JToolBar;
 
@@ -256,7 +255,7 @@ public class ClientFrame extends JFrame 
         folderPanel = new FolderPanel(model);
         detailsTabs = new DetailsTabs(model);
 
-        split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, folderPanel, new JScrollPane(detailsTabs));
+        split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, folderPanel, detailsTabs);
 
         pane.add(split, BorderLayout.CENTER);
 
@@ -336,8 +335,8 @@ public class ClientFrame extends JFrame 
 
             addConsoleMenu(cmisMenu, "CMIS 1.0 Specification", new URI(
                     "http://docs.oasis-open.org/cmis/CMIS/v1.0/os/cmis-spec-v1.0.html"));
-            addConsoleMenu(cmisMenu, "OpenCMIS Documentation", new URI(
-                    "http://chemistry.apache.org/java/opencmis.html"));
+            addConsoleMenu(cmisMenu, "OpenCMIS Documentation",
+                    new URI("http://chemistry.apache.org/java/opencmis.html"));
             addConsoleMenu(
                     cmisMenu,
                     "OpenCMIS Client API JavaDoc",

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/DetailsTabs.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/DetailsTabs.java?rev=1096359&r1=1096358&r2=1096359&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/DetailsTabs.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/DetailsTabs.java Sun Apr 24 18:42:05 2011
@@ -59,7 +59,7 @@ public class DetailsTabs extends JTabbed
         typesPanel = new TypesPanel(model);
         extensionsPanel = new ExtensionsPanel(model);
 
-        addTab("Object", objectPanel);
+        addTab("Object", new JScrollPane(objectPanel));
         addTab("Actions", new JScrollPane(actionsPanel));
         addTab("Properties", new JScrollPane(propertyTable));
         addTab("Relationships", new JScrollPane(relationshipTable));

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=1096359&r1=1096358&r2=1096359&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 Sun Apr 24 18:42:05 2011
@@ -92,7 +92,7 @@ public class ObjectPanel extends InfoPan
                             @Override
                             public void run() {
                                 try {
-                                    List<String> pathsList = (pathObject).getPaths();
+                                    List<String> pathsList = pathObject.getPaths();
                                     if ((pathsList == null) || (pathsList.size() == 0)) {
                                         paths.setList(Collections.singletonList("(unfiled)"));
                                     } else {
@@ -100,6 +100,7 @@ public class ObjectPanel extends InfoPan
                                     }
                                 } catch (Exception e) {
                                     paths.setList(Collections.singletonList("(???)"));
+                                    // ClientHelper.showError(null, e);
                                 }
                                 ObjectPanel.this.revalidate();
                             }

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=1096359&r1=1096358&r2=1096359&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 Sun Apr 24 18:42:05 2011
@@ -22,40 +22,86 @@ import java.awt.Cursor;
 import java.awt.event.MouseEvent;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import javax.swing.SwingUtilities;
 
 import org.apache.chemistry.opencmis.client.api.Document;
 import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
 import org.apache.chemistry.opencmis.workbench.ClientHelper;
 import org.apache.chemistry.opencmis.workbench.model.ClientModel;
+import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
 
 public class VersionTable extends AbstractDetailsTable {
 
     private static final long serialVersionUID = 1L;
 
-    private static final String[] COLUMN_NAMES = { "Name", "Label", "Latest", "Major", "Latest Major", "Id", "Filename", "MIME Type", "Length" };
+    private static final String[] COLUMN_NAMES = { "Name", "Label", "Latest", "Major", "Latest Major", "Id",
+            "Filename", "MIME Type", "Length" };
     private static final int[] COLUMN_WIDTHS = { 200, 200, 50, 50, 50, 400, 200, 100, 100 };
 
-    private static final int OLD = 60 * 1000;
-
     private List<Document> versions;
-    private String lastId;
-    private long lastTimestamp;
+    private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
 
     public VersionTable(ClientModel model) {
         super();
 
         versions = Collections.emptyList();
-        lastId = null;
-        lastTimestamp = System.currentTimeMillis();
         init(model, COLUMN_NAMES, COLUMN_WIDTHS);
     }
 
     @Override
+    public void objectLoaded(ClientModelEvent event) {
+        lock.writeLock().lock();
+        try {
+            versions = Collections.emptyList();
+        } finally {
+            lock.writeLock().unlock();
+        }
+
+        if (getObject() instanceof Document) {
+            final Document doc = (Document) getObject();
+
+            SwingUtilities.invokeLater(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+                        List<Document> newVersions = doc.getAllVersions(getClientModel().getClientSession()
+                                .geVersionOperationContext());
+
+                        lock.writeLock().lock();
+                        try {
+                            versions = newVersions;
+                        } finally {
+                            lock.writeLock().unlock();
+                        }
+                    } catch (Exception ex) {
+                        if (!(ex instanceof CmisNotSupportedException)) {
+                            ClientHelper.showError(null, ex);
+                        }
+                    } finally {
+                        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+                    }
+                    ((DetailsTableModel) getModel()).fireTableDataChanged();
+                }
+            });
+        }
+
+        super.objectLoaded(event);
+    }
+
+    @Override
     public void doubleClickAction(MouseEvent e, int rowIndex) {
-        if (e.isShiftDown()) {
-            ClientHelper.download(this.getParent(), getVersions().get(rowIndex), null);
-        } else {
-            ClientHelper.open(this.getParent(), getVersions().get(rowIndex), null);
+        lock.readLock().lock();
+        try {
+            if (e.isShiftDown()) {
+                ClientHelper.download(this.getParent(), versions.get(rowIndex), null);
+            } else {
+                ClientHelper.open(this.getParent(), versions.get(rowIndex), null);
+            }
+        } finally {
+            lock.readLock().unlock();
         }
     }
 
@@ -65,12 +111,24 @@ public class VersionTable extends Abstra
             return 0;
         }
 
-        return getVersions().size();
+        lock.readLock().lock();
+        try {
+            return versions.size();
+        } finally {
+            lock.readLock().unlock();
+        }
     }
 
     @Override
     public Object getDetailValueAt(int rowIndex, int columnIndex) {
-        Document version = getVersions().get(rowIndex);
+        Document version = null;
+
+        lock.readLock().lock();
+        try {
+            version = versions.get(rowIndex);
+        } finally {
+            lock.readLock().unlock();
+        }
 
         switch (columnIndex) {
         case 0:
@@ -98,50 +156,12 @@ public class VersionTable extends Abstra
 
     @Override
     public Class<?> getDetailColumClass(int columnIndex) {
-        if((columnIndex == 2) || (columnIndex == 3) || (columnIndex == 4)) {
-            return Boolean.class;            
-        }
-        else if (columnIndex == 8) {
+        if ((columnIndex == 2) || (columnIndex == 3) || (columnIndex == 4)) {
+            return Boolean.class;
+        } else if (columnIndex == 8) {
             return Long.class;
         }
 
         return super.getDetailColumClass(columnIndex);
     }
-
-    private List<Document> getVersions() {
-        // not a document -> no versions
-        if (!(getObject() instanceof Document)) {
-            versions = Collections.emptyList();
-            lastId = null;
-
-            return versions;
-        }
-
-        // if the versions have been fetched recently, don't reload
-        Document doc = (Document) getObject();
-        if (doc.getId().equals(lastId)) {
-            if (lastTimestamp + OLD > System.currentTimeMillis()) {
-                return versions;
-            }
-        }
-
-        // reset everything
-        lastId = doc.getId();
-        lastTimestamp = System.currentTimeMillis();
-        versions = Collections.emptyList();
-
-        // get versions
-        try {
-            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-            versions = doc.getAllVersions();
-        } catch (Exception ex) {
-            if (!(ex instanceof CmisNotSupportedException)) {
-                ClientHelper.showError(null, ex);
-            }
-        } finally {
-            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-        }
-
-        return versions;
-    }
 }

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientSession.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/ClientSession.java?rev=1096359&r1=1096358&r2=1096359&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientSession.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientSession.java Sun Apr 24 18:42:05 2011
@@ -51,24 +51,39 @@ public class ClientSession {
     public static final String WORKBENCH_PREFIX = "cmis.workbench.";
     public static final String OBJECT_PREFIX = WORKBENCH_PREFIX + "object.";
     public static final String FOLDER_PREFIX = WORKBENCH_PREFIX + "folder.";
+    public static final String VERSION_PREFIX = WORKBENCH_PREFIX + "version.";
     public static final String ACCEPT_SELF_SIGNED_CERTIFICATES = WORKBENCH_PREFIX + "acceptSelfSignedCertificates";
 
     public enum Authentication {
         NONE, STANDARD, NTLM
     }
 
-    private static final Set<String> PROPERTY_SET = new HashSet<String>();
+    private static final Set<String> FOLDER_PROPERTY_SET = new HashSet<String>();
     static {
-        PROPERTY_SET.add(PropertyIds.OBJECT_ID);
-        PROPERTY_SET.add(PropertyIds.OBJECT_TYPE_ID);
-        PROPERTY_SET.add(PropertyIds.NAME);
-        PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_MIME_TYPE);
-        PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_LENGTH);
-        PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_FILE_NAME);
-        PROPERTY_SET.add(PropertyIds.CREATED_BY);
-        PROPERTY_SET.add(PropertyIds.CREATION_DATE);
-        PROPERTY_SET.add(PropertyIds.LAST_MODIFIED_BY);
-        PROPERTY_SET.add(PropertyIds.LAST_MODIFICATION_DATE);
+        FOLDER_PROPERTY_SET.add(PropertyIds.OBJECT_ID);
+        FOLDER_PROPERTY_SET.add(PropertyIds.OBJECT_TYPE_ID);
+        FOLDER_PROPERTY_SET.add(PropertyIds.NAME);
+        FOLDER_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_MIME_TYPE);
+        FOLDER_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_LENGTH);
+        FOLDER_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_FILE_NAME);
+        FOLDER_PROPERTY_SET.add(PropertyIds.CREATED_BY);
+        FOLDER_PROPERTY_SET.add(PropertyIds.CREATION_DATE);
+        FOLDER_PROPERTY_SET.add(PropertyIds.LAST_MODIFIED_BY);
+        FOLDER_PROPERTY_SET.add(PropertyIds.LAST_MODIFICATION_DATE);
+    }
+
+    private static final Set<String> VERSION_PROPERTY_SET = new HashSet<String>();
+    static {
+        VERSION_PROPERTY_SET.add(PropertyIds.OBJECT_ID);
+        VERSION_PROPERTY_SET.add(PropertyIds.OBJECT_TYPE_ID);
+        VERSION_PROPERTY_SET.add(PropertyIds.NAME);
+        VERSION_PROPERTY_SET.add(PropertyIds.VERSION_LABEL);
+        VERSION_PROPERTY_SET.add(PropertyIds.IS_LATEST_VERSION);
+        VERSION_PROPERTY_SET.add(PropertyIds.IS_MAJOR_VERSION);
+        VERSION_PROPERTY_SET.add(PropertyIds.IS_LATEST_MAJOR_VERSION);
+        VERSION_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_MIME_TYPE);
+        VERSION_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_LENGTH);
+        VERSION_PROPERTY_SET.add(PropertyIds.CONTENT_STREAM_FILE_NAME);
     }
 
     private Map<String, String> sessionParameters;
@@ -76,6 +91,7 @@ public class ClientSession {
     private Session session;
     private OperationContext objectOperationContext;
     private OperationContext folderOperationContext;
+    private OperationContext versionOperationContext;
 
     public ClientSession(Map<String, String> sessionParameters) {
         if (sessionParameters == null) {
@@ -174,6 +190,10 @@ public class ClientSession {
         return folderOperationContext;
     }
 
+    public OperationContext geVersionOperationContext() {
+        return versionOperationContext;
+    }
+
     private void createOperationContexts() {
         // object operation context
         setDefault(OBJECT_PREFIX, sessionParameters, ClientOperationContext.FILTER, "*");
@@ -193,7 +213,7 @@ public class ClientSession {
             ObjectType type = session.getTypeDefinition(BaseTypeId.CMIS_DOCUMENT.value());
 
             StringBuilder filter = new StringBuilder();
-            for (String propId : PROPERTY_SET) {
+            for (String propId : FOLDER_PROPERTY_SET) {
                 PropertyDefinition<?> propDef = type.getPropertyDefinitions().get(propId);
                 if (propDef != null) {
                     if (filter.length() > 0) {
@@ -213,9 +233,36 @@ public class ClientSession {
                 IncludeRelationships.NONE.value());
         setDefault(FOLDER_PREFIX, sessionParameters, ClientOperationContext.RENDITION_FILTER, "cmis:none");
         setDefault(FOLDER_PREFIX, sessionParameters, ClientOperationContext.ORDER_BY, null);
-        setDefault(FOLDER_PREFIX, sessionParameters, ClientOperationContext.MAX_ITEMS_PER_PAGE, "1000");
+        setDefault(FOLDER_PREFIX, sessionParameters, ClientOperationContext.MAX_ITEMS_PER_PAGE, "10000");
 
         folderOperationContext = new ClientOperationContext(FOLDER_PREFIX, sessionParameters);
+
+        if (!sessionParameters.containsKey(VERSION_PREFIX + ClientOperationContext.FILTER)) {
+            ObjectType type = session.getTypeDefinition(BaseTypeId.CMIS_DOCUMENT.value());
+
+            StringBuilder filter = new StringBuilder();
+            for (String propId : VERSION_PROPERTY_SET) {
+                PropertyDefinition<?> propDef = type.getPropertyDefinitions().get(propId);
+                if (propDef != null) {
+                    if (filter.length() > 0) {
+                        filter.append(",");
+                    }
+                    filter.append(propDef.getQueryName());
+                }
+            }
+
+            sessionParameters.put(VERSION_PREFIX + ClientOperationContext.FILTER, filter.toString());
+        }
+
+        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_ACLS, "false");
+        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_ALLOWABLE_ACTIONS, "false");
+        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_POLICIES, "false");
+        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.INCLUDE_RELATIONSHIPS,
+                IncludeRelationships.NONE.value());
+        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.RENDITION_FILTER, "cmis:none");
+        setDefault(VERSION_PREFIX, sessionParameters, ClientOperationContext.MAX_ITEMS_PER_PAGE, "10000");
+
+        versionOperationContext = new ClientOperationContext(VERSION_PREFIX, sessionParameters);
     }
 
     private void setDefault(String prefix, Map<String, String> map, String key, String value) {

Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README?rev=1096359&r1=1096358&r2=1096359&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README Sun Apr 24 18:42:05 2011
@@ -43,6 +43,16 @@ cmis.workbench.object.includeRelationshi
 cmis.workbench.object.renditionFilter
 
 
+Version operation context:
+
+cmis.workbench.version.filter
+cmis.workbench.version.includeAcls
+cmis.workbench.version.includeAllowableActions
+cmis.workbench.version.includePolicies
+cmis.workbench.version.includeRelationships
+cmis.workbench.version.renditionFilter
+cmis.workbench.version.maxItemsPerPage
+
 Others:
 
 cmis.workbench.acceptSelfSignedCertificates - disable SSL certificate check (true/false)
\ No newline at end of file