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 2010/09/26 16:10:17 UTC

svn commit: r1001432 - in /incubator/chemistry/opencmis-swingclient/trunk: ./ src/main/java/org/apache/chemistry/opencmis/swingclient/ src/main/java/org/apache/chemistry/opencmis/swingclient/model/ src/main/jnlp/ src/main/resources/scripts/

Author: fmui
Date: Sun Sep 26 14:10:16 2010
New Revision: 1001432

URL: http://svn.apache.org/viewvc?rev=1001432&view=rev
Log:
- added NTLM authentication
- improved Web Start build
- added build timestamp
- added more Groovy scripts

Added:
    incubator/chemistry/opencmis-swingclient/trunk/src/main/jnlp/
    incubator/chemistry/opencmis-swingclient/trunk/src/main/jnlp/template.vm   (with props)
    incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/counttypes.groovy
    incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/query.groovy
Modified:
    incubator/chemistry/opencmis-swingclient/trunk/pom.xml
    incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/InfoDialog.java
    incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/LoginDialog.java
    incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/model/ClientSession.java
    incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/script-library.properties

Modified: incubator/chemistry/opencmis-swingclient/trunk/pom.xml
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-swingclient/trunk/pom.xml?rev=1001432&r1=1001431&r2=1001432&view=diff
==============================================================================
--- incubator/chemistry/opencmis-swingclient/trunk/pom.xml (original)
+++ incubator/chemistry/opencmis-swingclient/trunk/pom.xml Sun Sep 26 14:10:16 2010
@@ -148,6 +148,26 @@
                 </configuration>
             </plugin>
             <plugin>
+                 <artifactId>maven-antrun-plugin</artifactId>
+                 <version>1.5</version>
+                 <executions>
+                     <execution>
+                         <phase>generate-resources</phase>
+                         <configuration>
+                             <target>
+                                 <property name="version" value="${maven.version}"/>
+                                 <property name="timestamp" value="${maven.build.timestamp}"/>
+                                 <property name="basedir" value="${maven.basedir} "/>
+                                 <echo file="${basedir}/src/main/resources/META-INF/build-timestamp.txt">Version: ${version} / Build: ${timestamp}</echo>
+                             </target>
+                         </configuration>
+                         <goals>
+                             <goal>run</goal>
+                         </goals>
+                     </execution>
+                 </executions>
+            </plugin>                  
+            <plugin>
                 <artifactId>maven-eclipse-plugin</artifactId>
                 <configuration>
                     <downloadSources>true</downloadSources>

Modified: incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/InfoDialog.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/InfoDialog.java?rev=1001432&r1=1001431&r2=1001432&view=diff
==============================================================================
--- incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/InfoDialog.java (original)
+++ incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/InfoDialog.java Sun Sep 26 14:10:16 2010
@@ -66,23 +66,9 @@ public class InfoDialog extends JDialog 
 
         StringBuilder readme = new StringBuilder();
 
-        InputStream stream = getClass().getResourceAsStream("/META-INF/README");
-        if (stream != null) {
-            try {
-                BufferedReader br = new BufferedReader(new InputStreamReader(stream));
-
-                String s = null;
-                while ((s = br.readLine()) != null) {
-                    readme.append(s);
-                    readme.append('\n');
-                }
-
-                br.close();
-            } catch (Exception e) {
-            }
-        } else {
-            readme.append("CMIS Swing Client");
-        }
+        readme.append(loadText("/META-INF/README", "OpenCMIS Swing Client"));
+        readme.append("\n\n");
+        readme.append(loadText("/META-INF/build-timestamp.txt", ""));
 
         TextArea ta = new TextArea(readme.toString());
         ta.setEditable(false);
@@ -100,4 +86,28 @@ public class InfoDialog extends JDialog 
     public void hideDialog() {
         setVisible(false);
     }
+
+    private String loadText(String file, String defaultText) {
+        StringBuilder result = new StringBuilder();
+
+        InputStream stream = getClass().getResourceAsStream(file);
+        if (stream != null) {
+            try {
+                BufferedReader br = new BufferedReader(new InputStreamReader(stream));
+
+                String s = null;
+                while ((s = br.readLine()) != null) {
+                    result.append(s);
+                    result.append('\n');
+                }
+
+                br.close();
+            } catch (Exception e) {
+            }
+        } else {
+            result.append(defaultText);
+        }
+
+        return result.toString();
+    }
 }

Modified: incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/LoginDialog.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/LoginDialog.java?rev=1001432&r1=1001431&r2=1001432&view=diff
==============================================================================
--- incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/LoginDialog.java (original)
+++ incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/LoginDialog.java Sun Sep 26 14:10:16 2010
@@ -47,6 +47,7 @@ public class LoginDialog extends JDialog
 
     public static final String SYSPROP_URL = "swingclient.url";
     public static final String SYSPROP_BINDING = "swingclient.binding";
+    public static final String SYSPROP_AUTHENTICATION = "swingclient.authentication";
     public static final String SYSPROP_USER = "swingclient.user";
     public static final String SYSPROP_PASSWORD = "swingclient.password";
 
@@ -57,6 +58,9 @@ public class LoginDialog extends JDialog
     private JRadioButton bindingWebServicesButton;
     private JTextField usernameField;
     private JPasswordField passwordField;
+    private JRadioButton authenticationNoneButton;
+    private JRadioButton authenticationStandardButton;
+    private JRadioButton authenticationNTLMButton;
     private JButton connectButton;
     private JButton loginButton;
     private JComboBox repositoryBox;
@@ -71,7 +75,7 @@ public class LoginDialog extends JDialog
     }
 
     private void createGUI() {
-        setPreferredSize(new Dimension(500, 250));
+        setPreferredSize(new Dimension(520, 280));
 
         Container pane = getContentPane();
 
@@ -88,11 +92,13 @@ public class LoginDialog extends JDialog
         passwordField = createPasswordField(pane, "Password:", 4);
         passwordField.setText(System.getProperty(SYSPROP_PASSWORD, ""));
 
-        connectButton = createButton(pane, "Connect", 5);
+        createAuthenticationButtons(pane, 5);
 
-        createRepositoryBox(pane, 6);
+        connectButton = createButton(pane, "Connect", 6);
 
-        loginButton = createButton(pane, "Login", 7);
+        createRepositoryBox(pane, 7);
+
+        loginButton = createButton(pane, "Login", 8);
         loginButton.setEnabled(false);
 
         connectButton.addActionListener(new ActionListener() {
@@ -203,6 +209,32 @@ public class LoginDialog extends JDialog
         pane.add(bindingContainer, c);
     }
 
+    private void createAuthenticationButtons(Container pane, int row) {
+        JPanel authenticationContainer = new JPanel();
+        boolean standard = (System.getProperty(SYSPROP_BINDING, "standard").toLowerCase().equals("standard"));
+        boolean ntlm = (System.getProperty(SYSPROP_BINDING, "").toLowerCase().equals("ntlm"));
+        boolean none = !standard && !ntlm;
+        authenticationNoneButton = new JRadioButton("None", none);
+        authenticationStandardButton = new JRadioButton("Standard", standard);
+        authenticationNTLMButton = new JRadioButton("NTLM", ntlm);
+        ButtonGroup authenticationGroup = new ButtonGroup();
+        authenticationGroup.add(authenticationNoneButton);
+        authenticationGroup.add(authenticationStandardButton);
+        authenticationGroup.add(authenticationNTLMButton);
+        authenticationContainer.add(authenticationNoneButton);
+        authenticationContainer.add(authenticationStandardButton);
+        authenticationContainer.add(authenticationNTLMButton);
+        JLabel authenticatioLabel = new JLabel("Authentication:");
+
+        GridBagConstraints c = new GridBagConstraints();
+        c.anchor = GridBagConstraints.LINE_START;
+        c.gridx = 0;
+        c.gridy = row;
+        pane.add(authenticatioLabel, c);
+        c.gridx = 1;
+        pane.add(authenticationContainer, c);
+    }
+
     private JButton createButton(Container pane, String label, int row) {
         JButton button = new JButton(label);
 
@@ -238,7 +270,14 @@ public class LoginDialog extends JDialog
         String username = usernameField.getText();
         String password = new String(passwordField.getPassword());
 
-        clientSession = new ClientSession(url, binding, username, password);
+        ClientSession.Authentication authentication = ClientSession.Authentication.NONE;
+        if (authenticationStandardButton.isSelected()) {
+            authentication = ClientSession.Authentication.STANDARD;
+        } else if (authenticationNTLMButton.isSelected()) {
+            authentication = ClientSession.Authentication.NTLM;
+        }
+
+        clientSession = new ClientSession(url, binding, username, password, authentication);
     }
 
     public void showDialog() {

Modified: incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/model/ClientSession.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/model/ClientSession.java?rev=1001432&r1=1001431&r2=1001432&view=diff
==============================================================================
--- incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/model/ClientSession.java (original)
+++ incubator/chemistry/opencmis-swingclient/trunk/src/main/java/org/apache/chemistry/opencmis/swingclient/model/ClientSession.java Sun Sep 26 14:10:16 2010
@@ -18,22 +18,28 @@
  */
 package org.apache.chemistry.opencmis.swingclient.model;
 
+import java.net.Authenticator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.chemistry.opencmis.client.api.Repository;
 import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;
 import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
 import org.apache.chemistry.opencmis.commons.SessionParameter;
 import org.apache.chemistry.opencmis.commons.enums.BindingType;
 
 public class ClientSession {
 
+    public enum Authentication {
+        NONE, STANDARD, NTLM
+    }
+
     private List<Repository> repositories;
     private Session session;
 
-    public ClientSession(String url, BindingType binding, String username, String password) {
+    public ClientSession(String url, BindingType binding, String username, String password, Authentication authenticaion) {
         Map<String, String> parameters = new HashMap<String, String>();
 
         if (binding == BindingType.WEBSERVICES) {
@@ -51,8 +57,19 @@ public class ClientSession {
             parameters.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
             parameters.put(SessionParameter.ATOMPUB_URL, url);
         }
-        parameters.put(SessionParameter.USER, username);
-        parameters.put(SessionParameter.PASSWORD, password);
+
+        switch (authenticaion) {
+        case STANDARD:
+            parameters.put(SessionParameter.USER, username);
+            parameters.put(SessionParameter.PASSWORD, password);
+            break;
+        case NTLM:
+            parameters.put(SessionParameter.USER, username);
+            parameters.put(SessionParameter.PASSWORD, password);
+            parameters.put(SessionParameter.AUTHENTICATION_PROVIDER_CLASS,
+                    CmisBindingFactory.NTLM_AUTHENTICATION_PROVIDER);
+            break;
+        }
 
         connect(parameters);
     }
@@ -66,6 +83,11 @@ public class ClientSession {
     }
 
     private void connect(Map<String, String> sessionParameters) {
+        // set a new dummy authenticator
+        // don't send previous credentials to another server
+        Authenticator.setDefault(new Authenticator() {
+        });
+
         repositories = SessionFactoryImpl.newInstance().getRepositories(sessionParameters);
     }
 

Added: incubator/chemistry/opencmis-swingclient/trunk/src/main/jnlp/template.vm
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-swingclient/trunk/src/main/jnlp/template.vm?rev=1001432&view=auto
==============================================================================
--- incubator/chemistry/opencmis-swingclient/trunk/src/main/jnlp/template.vm (added)
+++ incubator/chemistry/opencmis-swingclient/trunk/src/main/jnlp/template.vm Sun Sep 26 14:10:16 2010
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<jnlp spec="1.5+" codebase="!server!">
+  <information>
+    <title>$project.Name</title>
+    <vendor>$project.Organization.Name</vendor>
+    <homepage href="$project.Url"/>
+    <description>$project.Description</description>
+    <offline-allowed/>
+    <update check="timeout" policy="prompt-update"/>
+  </information>
+  <security>
+     <all-permissions/>
+  </security>
+  <resources>
+    <j2se version="1.6+" initial-heap-size="64m" max-heap-size="256m"/>
+     $dependencies
+    <property name="swingclient.url" value="!repository!"/>  
+    <property name="swingclient.user" value="!user!"/>  
+    <property name="swingclient.password" value="!password!"/>
+    <property name="swingclient.binding" value="!binding!"/>
+  </resources>
+  <application-desc main-class="$mainClass"/>
+</jnlp>
+

Propchange: incubator/chemistry/opencmis-swingclient/trunk/src/main/jnlp/template.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/counttypes.groovy
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/counttypes.groovy?rev=1001432&view=auto
==============================================================================
--- incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/counttypes.groovy (added)
+++ incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/counttypes.groovy Sun Sep 26 14:10:16 2010
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+import org.apache.chemistry.opencmis.commons.*
+import org.apache.chemistry.opencmis.commons.data.*
+import org.apache.chemistry.opencmis.commons.enums.*
+import org.apache.chemistry.opencmis.commons.exceptions.*
+import org.apache.chemistry.opencmis.client.api.*
+
+println "'cmis:document' and subtypes:     " + countTypes("cmis:document")
+println "'cmis:folder' and subtypes:       " + countTypes("cmis:folder")
+println "'cmis:relationship' and subtypes: " + countTypes("cmis:relationship")
+println "'cmis:policy' and subtypes:       " + countTypes("cmis:policy")
+
+
+
+int countTypes(String typeId) {
+    def counter = 0
+
+    try {
+        session.getTypeDescendants(typeId, -1, false).each { counter += 1 + count(it) }
+    }
+    catch(CmisBaseException e) { }
+    
+    return counter
+}
+
+int count(Tree tree) {
+    def counter = 0
+    tree.children.each { counter += 1 + count(it) }
+    
+    return counter
+}
\ No newline at end of file

Added: incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/query.groovy
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/query.groovy?rev=1001432&view=auto
==============================================================================
--- incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/query.groovy (added)
+++ incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/query.groovy Sun Sep 26 14:10:16 2010
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+import org.apache.chemistry.opencmis.commons.*
+import org.apache.chemistry.opencmis.commons.data.*
+import org.apache.chemistry.opencmis.commons.enums.*
+import org.apache.chemistry.opencmis.client.api.*
+
+String cql = "SELECT cmis:objectId, cmis:name, cmis:contentStreamLength FROM cmis:document"
+
+ItemIterable<QueryResult> results = session.query(cql, false)
+
+//ItemIterable<QueryResult> results = session.query(cql, false).getPage(10)
+//ItemIterable<QueryResult> results = session.query(cql, false).skipTo(10).getPage(10)
+
+results.each { hit ->  
+    hit.properties.each { println "${it.queryName}: ${it.firstValue}" }
+    println "--------------------------------------"
+}
+
+println "--------------------------------------"    
+println "Total number: ${results.totalNumItems}"
+println "Has more: ${results.hasMoreItems}" 
+println "--------------------------------------"
\ No newline at end of file

Modified: incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/script-library.properties
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/script-library.properties?rev=1001432&r1=1001431&r2=1001432&view=diff
==============================================================================
--- incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/script-library.properties (original)
+++ incubator/chemistry/opencmis-swingclient/trunk/src/main/resources/scripts/script-library.properties Sun Sep 26 14:10:16 2010
@@ -26,4 +26,7 @@
 
 startup.groovy = - Demo -
 template.groovy = - Basic template -
+
 getdescendants.groovy = Print descendants tree
+query.groovy = Execute a query
+counttypes.groovy = Count types and sub types