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/03/10 14:09:55 UTC

svn commit: r921337 - in /incubator/chemistry/trunk/opencmis/opencmis-client: opencmis-client-api/src/main/java/org/apache/opencmis/client/api/ opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/ opencmis-client-impl/src/main/j...

Author: fmui
Date: Wed Mar 10 13:09:55 2010
New Revision: 921337

URL: http://svn.apache.org/viewvc?rev=921337&view=rev
Log:
added repository discovery to SessionFactory

Added:
    incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/Repository.java   (with props)
    incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/CmisProviderHelper.java   (with props)
    incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryImpl.java   (with props)
    incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryInfoImpl.java   (with props)
Removed:
    incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/RepositoryInfoImpl.java
Modified:
    incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/SessionFactory.java
    incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentSessionImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/SessionFactoryImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryCapabilitiesImpl.java
    incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/test/java/org/apache/opencmis/client/runtime/mock/MockSessionFactory.java

Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/SessionFactory.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/SessionFactory.java?rev=921337&r1=921336&r2=921337&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/SessionFactory.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/SessionFactory.java Wed Mar 10 13:09:55 2010
@@ -18,22 +18,23 @@
  */
 package org.apache.opencmis.client.api;
 
+import java.util.List;
 import java.util.Map;
 
+import org.apache.opencmis.client.api.repository.Repository;
+
 /**
- * Entry point into the OpenCMIS Client API. The <code>SessionFactory</code>
- * class implementation needs to be retrieved by any runtime lookup call. This
- * can for instance be a J2EE JNDI lookup or an OSGi service lookup.
+ * Entry point into the OpenCMIS Client API. The <code>SessionFactory</code> class implementation
+ * needs to be retrieved by any runtime lookup call. This can for instance be a J2EE JNDI lookup or
+ * an OSGi service lookup.
  * <p>
- * The entries of parameter map are defined by <code>SessionParameter</code>
- * class which is part of the commons package. Parameters specify connection
- * settings (user name, authentication, connection url, binding type (soap or
- * atom pub) ...).
+ * The entries of parameter map are defined by <code>SessionParameter</code> class which is part of
+ * the commons package. Parameters specify connection settings (user name, authentication,
+ * connection url, binding type (soap or atom pub) ...).
  * <p>
- * The <code>Session</code> class which is constructed is either the
- * <code>session</code> base class which is the default implementation or it can
- * be derived from that implementing special behavior for the session. Which
- * session finally is returned can be controlled by the
+ * The <code>Session</code> class which is constructed is either the <code>session</code> base class
+ * which is the default implementation or it can be derived from that implementing special behavior
+ * for the session. Which session finally is returned can be controlled by the
  * <code>SessionParameter.SESSION_TYPE</code> parameter.
  * <p>
  * Example Coding:
@@ -50,21 +51,27 @@ import java.util.Map;
  * <br>TransientSession s = factory.createSession(parameters);
  * </code>
  *<p>
- * If the <code>SessionType</code> parameter is not specified then the default
- * persistent session is returned.
+ * If the <code>SessionType</code> parameter is not specified then the default persistent session is
+ * returned.
  * 
  */
 public interface SessionFactory {
 
-	/**
-	 * Obtain a new session using parameter configuration.
-	 * 
-	 * @param T A from the {@code Session} interface derived sub type 
-	 * @param parameters
-	 *            a {@code Map} of name/value pairs with parameters for the
-	 *            session. See class {@code SessionParameter}.
-	 * @return a {@code session} to the CMIS repository specified by the {@code
-	 *         parameters}. 
-	 */
-	<T extends Session> T createSession(Map<String, String> parameters);
+  /**
+   * Obtain a new session using parameter configuration.
+   * 
+   * @param T
+   *          A from the {@code Session} interface derived sub type
+   * @param parameters
+   *          a {@code Map} of name/value pairs with parameters for the session. See class {@code
+   *          SessionParameter}.
+   * @return a {@code session} to the CMIS repository specified by the {@code parameters}.
+   */
+  <T extends Session> T createSession(Map<String, String> parameters);
+
+  /**
+   * Returns all repositories that are available at the endpoint. See {@link #createSession(Map)}
+   * for parameter details. The parameter {@code SessionParameter.REPOSITORY_ID} should not be set.
+   */
+  List<Repository> getRepositories(Map<String, String> parameters);
 }

Added: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/Repository.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/Repository.java?rev=921337&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/Repository.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/Repository.java Wed Mar 10 13:09:55 2010
@@ -0,0 +1,32 @@
+/*
+ * 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.opencmis.client.api.repository;
+
+import org.apache.opencmis.client.api.Session;
+
+/**
+ * Represents a repository.
+ */
+public interface Repository extends RepositoryInfo {
+
+  /**
+   * Creates a session for this repository.
+   */
+  <T extends Session> T createSession();
+}

Propchange: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-api/src/main/java/org/apache/opencmis/client/api/repository/Repository.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/CmisProviderHelper.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/CmisProviderHelper.java?rev=921337&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/CmisProviderHelper.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/CmisProviderHelper.java Wed Mar 10 13:09:55 2010
@@ -0,0 +1,88 @@
+/*
+ * 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.opencmis.client.runtime;
+
+import java.util.Map;
+
+import org.apache.opencmis.client.provider.factory.CmisProviderFactory;
+import org.apache.opencmis.commons.SessionParameter;
+import org.apache.opencmis.commons.enums.BindingType;
+import org.apache.opencmis.commons.exceptions.CmisRuntimeException;
+import org.apache.opencmis.commons.provider.CmisProvider;
+
+/**
+ * Helper methods for provider handling.
+ */
+public class CmisProviderHelper {
+  /**
+   * Creates a {@link CmisProvider} object.
+   */
+  public static CmisProvider createProvider(Map<String, String> parameters) {
+    if (parameters == null || parameters.isEmpty()) {
+      throw new CmisRuntimeException("Session parameter not set!");
+    }
+
+    if (!parameters.containsKey(SessionParameter.BINDING_TYPE)) {
+      parameters.put(SessionParameter.BINDING_TYPE, BindingType.CUSTOM.value());
+    }
+
+    BindingType bt = BindingType.fromValue(parameters.get(SessionParameter.BINDING_TYPE));
+
+    switch (bt) {
+    case ATOMPUB:
+      return createAtomPubProvider(parameters);
+    case WEBSERVICES:
+      return createWebServiceProvider(parameters);
+    case CUSTOM:
+      return createCustomProvider(parameters);
+    default:
+      throw new CmisRuntimeException("Ambiguous session parameter: " + parameters);
+    }
+  }
+
+  /**
+   * Creates a provider with custom parameters.
+   */
+  private static CmisProvider createCustomProvider(Map<String, String> parameters) {
+    CmisProviderFactory factory = CmisProviderFactory.newInstance();
+    CmisProvider provider = factory.createCmisProvider(parameters);
+
+    return provider;
+  }
+
+  /**
+   * Creates a Web Services provider.
+   */
+  private static CmisProvider createWebServiceProvider(Map<String, String> parameters) {
+    CmisProviderFactory factory = CmisProviderFactory.newInstance();
+    CmisProvider provider = factory.createCmisWebServicesProvider(parameters);
+
+    return provider;
+  }
+
+  /**
+   * Creates an AtomPub provider.
+   */
+  private static CmisProvider createAtomPubProvider(Map<String, String> parameters) {
+    CmisProviderFactory factory = CmisProviderFactory.newInstance();
+    CmisProvider provider = factory.createCmisAtomPubProvider(parameters);
+
+    return provider;
+  }
+}

Propchange: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/CmisProviderHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentSessionImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentSessionImpl.java?rev=921337&r1=921336&r2=921337&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentSessionImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/PersistentSessionImpl.java Wed Mar 10 13:09:55 2010
@@ -46,17 +46,16 @@ import org.apache.opencmis.client.api.re
 import org.apache.opencmis.client.api.repository.RepositoryInfo;
 import org.apache.opencmis.client.api.util.Container;
 import org.apache.opencmis.client.api.util.PagingList;
-import org.apache.opencmis.client.provider.factory.CmisProviderFactory;
 import org.apache.opencmis.client.runtime.cache.Cache;
 import org.apache.opencmis.client.runtime.cache.CacheImpl;
 import org.apache.opencmis.client.runtime.repository.PersistentObjectFactoryImpl;
+import org.apache.opencmis.client.runtime.repository.RepositoryInfoImpl;
 import org.apache.opencmis.client.runtime.util.AbstractPagingList;
 import org.apache.opencmis.client.runtime.util.ContainerImpl;
 import org.apache.opencmis.commons.SessionParameter;
 import org.apache.opencmis.commons.api.TypeDefinition;
 import org.apache.opencmis.commons.api.TypeDefinitionContainer;
 import org.apache.opencmis.commons.api.TypeDefinitionList;
-import org.apache.opencmis.commons.enums.BindingType;
 import org.apache.opencmis.commons.enums.IncludeRelationships;
 import org.apache.opencmis.commons.enums.VersioningState;
 import org.apache.opencmis.commons.exceptions.CmisRuntimeException;
@@ -65,6 +64,7 @@ import org.apache.opencmis.commons.provi
 import org.apache.opencmis.commons.provider.NavigationService;
 import org.apache.opencmis.commons.provider.ObjectData;
 import org.apache.opencmis.commons.provider.ObjectList;
+import org.apache.opencmis.commons.provider.RepositoryInfoData;
 import org.apache.opencmis.commons.provider.RepositoryService;
 
 /**
@@ -437,9 +437,16 @@ public class PersistentSessionImpl imple
     if (this.repositoryInfo == null) {
       /* get initial repository id from session parameter */
       String repositoryId = this.determineRepositoryId(this.parameters);
-      RepositoryInfoImpl rii = new RepositoryInfoImpl(this, repositoryId);
-      this.repositoryInfo = rii;
+      if (repositoryId == null) {
+        throw new IllegalStateException("Repository Id is not set!");
+      }
+
+      RepositoryInfoData data = getProvider().getRepositoryService().getRepositoryInfo(
+          repositoryId, null);
+
+      this.repositoryInfo = new RepositoryInfoImpl(data);
     }
+
     return this.repositoryInfo;
   }
 
@@ -626,59 +633,7 @@ public class PersistentSessionImpl imple
    * InMemory} provider is selected.
    */
   public void connect() {
-    if (this.parameters == null || this.parameters.isEmpty()) {
-      throw new CmisRuntimeException("Session parameter not set!");
-    }
-
-    if (!this.parameters.containsKey(SessionParameter.BINDING_TYPE)) {
-      this.parameters.put(SessionParameter.BINDING_TYPE, BindingType.CUSTOM.value());
-    }
-
-    BindingType bt = BindingType.fromValue(this.parameters.get(SessionParameter.BINDING_TYPE));
-
-    switch (bt) {
-    case ATOMPUB:
-      this.provider = this.createAtomPubProvider(this.parameters);
-      break;
-    case WEBSERVICES:
-      this.provider = this.createWebServiceProvider(this.parameters);
-      break;
-    case CUSTOM:
-      this.provider = this.createCustomProvider(this.parameters);
-      break;
-    default:
-      throw new CmisRuntimeException("Ambiguous session parameter: " + this.parameters);
-    }
-  }
-
-  /**
-   * Creates a provider with custom parameters.
-   */
-  private CmisProvider createCustomProvider(Map<String, String> parameters) {
-    CmisProviderFactory factory = CmisProviderFactory.newInstance();
-    CmisProvider provider = factory.createCmisProvider(parameters);
-
-    return provider;
-  }
-
-  /**
-   * Creates a Web Services provider.
-   */
-  private CmisProvider createWebServiceProvider(Map<String, String> parameters) {
-    CmisProviderFactory factory = CmisProviderFactory.newInstance();
-    CmisProvider provider = factory.createCmisWebServicesProvider(parameters);
-
-    return provider;
-  }
-
-  /**
-   * Creates an AtomPub provider.
-   */
-  private CmisProvider createAtomPubProvider(Map<String, String> parameters) {
-    CmisProviderFactory factory = CmisProviderFactory.newInstance();
-    CmisProvider provider = factory.createCmisAtomPubProvider(parameters);
-
-    return provider;
+    this.provider = CmisProviderHelper.createProvider(this.parameters);
   }
 
   public CmisProvider getProvider() {

Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/SessionFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/SessionFactoryImpl.java?rev=921337&r1=921336&r2=921337&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/SessionFactoryImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/SessionFactoryImpl.java Wed Mar 10 13:09:55 2010
@@ -18,18 +18,24 @@
  */
 package org.apache.opencmis.client.runtime;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.opencmis.client.api.Session;
 import org.apache.opencmis.client.api.SessionFactory;
+import org.apache.opencmis.client.api.repository.Repository;
+import org.apache.opencmis.client.runtime.repository.RepositoryImpl;
 import org.apache.opencmis.commons.SessionParameter;
 import org.apache.opencmis.commons.enums.SessionType;
 import org.apache.opencmis.commons.exceptions.CmisNotSupportedException;
 import org.apache.opencmis.commons.exceptions.CmisRuntimeException;
+import org.apache.opencmis.commons.provider.CmisProvider;
+import org.apache.opencmis.commons.provider.RepositoryInfoData;
 
 /**
- * Default implementation of a session factory. Used by unit tests or
- * applications that depend directly on runtime implementation.
+ * Default implementation of a session factory. Used by unit tests or applications that depend
+ * directly on runtime implementation.
  * <p>
  * <code>
  * SessionFactory sf = new SessionFactoryImpl();<br>
@@ -46,42 +52,65 @@ import org.apache.opencmis.commons.excep
  */
 public class SessionFactoryImpl implements SessionFactory {
 
-	protected SessionFactoryImpl() {
+  protected SessionFactoryImpl() {
 
-	}
+  }
 
-	public static SessionFactory newInstance() {
-		return new SessionFactoryImpl();
-	}
-
-	@SuppressWarnings("unchecked")
-	public <T extends Session> T createSession(Map<String, String> parameters) {
-		Session s = null;
-		SessionType t = null;
-
-		// determine session type
-		if (parameters.containsKey(SessionParameter.SESSION_TYPE)) {
-			t = SessionType.fromValue(parameters
-					.get(SessionParameter.SESSION_TYPE));
-		} else {
-			// default session type if type is not set
-			t = SessionType.PERSISTENT;
-		}
-
-		switch (t) {
-		case PERSISTENT:
-			PersistentSessionImpl ps = new PersistentSessionImpl(parameters);
-			ps.connect(); // connect session with provider
-			s = ps;
-			break;
-		case TRANSIENT:
-			throw new CmisNotSupportedException("SessionType " + t
-					+ "not implemented!");
-		default:
-			throw new CmisRuntimeException("SessionType " + t + "not known!");
-		}
+  public static SessionFactory newInstance() {
+    return new SessionFactoryImpl();
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.apache.opencmis.client.api.SessionFactory#createSession(java.util.Map)
+   */
+  @SuppressWarnings("unchecked")
+  public <T extends Session> T createSession(Map<String, String> parameters) {
+    Session s = null;
+    SessionType t = null;
+
+    // determine session type
+    if (parameters.containsKey(SessionParameter.SESSION_TYPE)) {
+      t = SessionType.fromValue(parameters.get(SessionParameter.SESSION_TYPE));
+    }
+    else {
+      // default session type if type is not set
+      t = SessionType.PERSISTENT;
+    }
+
+    switch (t) {
+    case PERSISTENT:
+      PersistentSessionImpl ps = new PersistentSessionImpl(parameters);
+      ps.connect(); // connect session with provider
+      s = ps;
+      break;
+    case TRANSIENT:
+      throw new CmisNotSupportedException("SessionType " + t + "not implemented!");
+    default:
+      throw new CmisRuntimeException("SessionType " + t + "not known!");
+    }
+
+    return (T) s;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.apache.opencmis.client.api.SessionFactory#getRepositories(java.util.Map)
+   */
+  public List<Repository> getRepositories(Map<String, String> parameters) {
+    CmisProvider provider = CmisProviderHelper.createProvider(parameters);
+
+    List<RepositoryInfoData> repositoryInfos = provider.getRepositoryService().getRepositoryInfos(
+        null);
+
+    List<Repository> result = new ArrayList<Repository>();
+    for (RepositoryInfoData data : repositoryInfos) {
+      result.add(new RepositoryImpl(data, parameters, this));
+    }
 
-		return (T) s;
-	}
+    return result;
+  }
 
 }

Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryCapabilitiesImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryCapabilitiesImpl.java?rev=921337&r1=921336&r2=921337&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryCapabilitiesImpl.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryCapabilitiesImpl.java Wed Mar 10 13:09:55 2010
@@ -18,6 +18,8 @@
  */
 package org.apache.opencmis.client.runtime.repository;
 
+import java.io.Serializable;
+
 import org.apache.opencmis.client.api.repository.RepositoryCapabilities;
 import org.apache.opencmis.commons.enums.CapabilityAcl;
 import org.apache.opencmis.commons.enums.CapabilityChanges;
@@ -27,68 +29,70 @@ import org.apache.opencmis.commons.enums
 import org.apache.opencmis.commons.enums.CapabilityRendition;
 import org.apache.opencmis.commons.provider.RepositoryCapabilitiesData;
 
-public class RepositoryCapabilitiesImpl implements RepositoryCapabilities {
+public class RepositoryCapabilitiesImpl implements RepositoryCapabilities, Serializable {
+
+  private static final long serialVersionUID = 1L;
+
+  private RepositoryCapabilitiesData capabilities = null;
+
+  public RepositoryCapabilitiesImpl(RepositoryCapabilitiesData rcd) {
+    this.capabilities = rcd;
+  }
+
+  public CapabilityAcl getAclSupport() {
+    return this.capabilities.getCapabilityAcl();
+  }
+
+  public CapabilityChanges getChangesSupport() {
+    return this.capabilities.getCapabilityChanges();
+  }
+
+  public CapabilityContentStreamUpdates getContentStreamUpdatabilitySupport() {
+    return this.capabilities.getCapabilityContentStreamUpdatability();
+  }
+
+  public CapabilityJoin getJoinSupport() {
+    return this.capabilities.getCapabilityJoin();
+  }
+
+  public CapabilityQuery getQuerySupport() {
+    return this.capabilities.getCapabilityQuery();
+  }
+
+  public CapabilityRendition getRenditionsSupport() {
+    return this.capabilities.getCapabilityRenditions();
+  }
+
+  public boolean isAllVersionsSearchableSupported() {
+    return this.capabilities.allVersionsSearchable();
+  }
+
+  public boolean isGetDescendantsSupported() {
+    return this.capabilities.supportsGetDescendants();
+  }
+
+  public boolean isGetFolderTreeSupported() {
+    return this.capabilities.supportsGetFolderTree();
+  }
+
+  public boolean isMultifilingSupported() {
+    return this.capabilities.supportsMultifiling();
+  }
+
+  public boolean isPwcSearchableSupported() {
+    return this.capabilities.isPwcSearchable();
+  }
+
+  public boolean isPwcUpdatableSupported() {
+    return this.capabilities.isPwcUpdatable();
+  }
+
+  public boolean isUnfilingSupported() {
+    return this.capabilities.supportsUnfiling();
+  }
 
-	private RepositoryCapabilitiesData capabilities = null;
-	
-	public RepositoryCapabilitiesImpl(RepositoryCapabilitiesData rcd) {
-		this.capabilities = rcd;
-	}
-
-	public CapabilityAcl getAclSupport() {
-		return this.capabilities.getCapabilityAcl();
-	}
-
-	public CapabilityChanges getChangesSupport() {
-		return this.capabilities.getCapabilityChanges();
-	}
-
-	public CapabilityContentStreamUpdates getContentStreamUpdatabilitySupport() {
-		return this.capabilities.getCapabilityContentStreamUpdatability();
-	}
-
-	public CapabilityJoin getJoinSupport() {
-		return this.capabilities.getCapabilityJoin();
-	}
-
-	public CapabilityQuery getQuerySupport() {
-		return this.capabilities.getCapabilityQuery();
-	}
-
-	public CapabilityRendition getRenditionsSupport() {
-		return this.capabilities.getCapabilityRenditions();
-	}
-
-	public boolean isAllVersionsSearchableSupported() {
-		return this.capabilities.allVersionsSearchable();
-	}
-
-	public boolean isGetDescendantsSupported() {
-		return this.capabilities.supportsGetDescendants();
-	}
-
-	public boolean isGetFolderTreeSupported() {
-		return this.capabilities.supportsGetFolderTree();
-	}
-
-	public boolean isMultifilingSupported() {
-		return this.capabilities.supportsMultifiling();
-	}
-
-	public boolean isPwcSearchableSupported() {
-		return this.capabilities.isPwcSearchable();
-	}
-
-	public boolean isPwcUpdatableSupported() {
-		return this.capabilities.isPwcUpdatable();
-	}
-
-	public boolean isUnfilingSupported() {
-		return this.capabilities.supportsUnfiling();
-	}
-
-	public boolean isVersionSpecificFilingSupported() {
-		return this.capabilities.supportsVersionSpecificFiling();
-	}
+  public boolean isVersionSpecificFilingSupported() {
+    return this.capabilities.supportsVersionSpecificFiling();
+  }
 
 }

Added: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryImpl.java?rev=921337&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryImpl.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryImpl.java Wed Mar 10 13:09:55 2010
@@ -0,0 +1,59 @@
+/*
+ * 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.opencmis.client.runtime.repository;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.opencmis.client.api.Session;
+import org.apache.opencmis.client.api.SessionFactory;
+import org.apache.opencmis.client.api.repository.Repository;
+import org.apache.opencmis.commons.SessionParameter;
+import org.apache.opencmis.commons.provider.RepositoryInfoData;
+
+public class RepositoryImpl extends RepositoryInfoImpl implements Repository {
+
+  private static final long serialVersionUID = 1L;
+
+  private final Map<String, String> parameters;
+  private final SessionFactory sessionFactory;
+
+  /**
+   * Constructor.
+   */
+  public RepositoryImpl(RepositoryInfoData data, Map<String, String> parameters,
+      SessionFactory sessionFactory) {
+    super(data);
+
+    this.parameters = new HashMap<String, String>(parameters);
+    this.parameters.put(SessionParameter.REPOSITORY_ID, getId());
+
+    this.sessionFactory = sessionFactory;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see org.apache.opencmis.client.api.repository.Repository#createSession()
+   */
+  @SuppressWarnings("unchecked")
+  public <T extends Session> T createSession() {
+    return (T) sessionFactory.createSession(parameters);
+  }
+}

Propchange: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryInfoImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryInfoImpl.java?rev=921337&view=auto
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryInfoImpl.java (added)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryInfoImpl.java Wed Mar 10 13:09:55 2010
@@ -0,0 +1,137 @@
+/*
+ * 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.opencmis.client.runtime.repository;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.apache.opencmis.client.api.repository.RepositoryAclCapabilities;
+import org.apache.opencmis.client.api.repository.RepositoryCapabilities;
+import org.apache.opencmis.client.api.repository.RepositoryInfo;
+import org.apache.opencmis.commons.enums.BaseObjectTypeIds;
+import org.apache.opencmis.commons.provider.RepositoryInfoData;
+
+public class RepositoryInfoImpl implements RepositoryInfo, Serializable {
+
+  /**
+   * serialization
+   */
+  private static final long serialVersionUID = -1297274972722405445L;
+
+  /*
+   * provider data (serializable)
+   */
+  private RepositoryInfoData riData;
+
+  /*
+   * Capabilities (serializable)
+   */
+  private RepositoryCapabilities capabilites = null;
+
+  /*
+   * ACL capabilities (serializable)
+   */
+  private RepositoryAclCapabilities aclCapabilites = null;
+
+  /**
+   * Constructor.
+   */
+  public RepositoryInfoImpl(RepositoryInfoData data) {
+    setRepositoryInfoData(data);
+  }
+
+  /**
+   * Sets the data object.
+   */
+  protected void setRepositoryInfoData(RepositoryInfoData data) {
+    this.riData = data;
+  }
+
+  public boolean changesIncomplete() {
+    return this.riData.changesIncomplete();
+  }
+
+  public RepositoryAclCapabilities getAclCapabilities() {
+    if (this.aclCapabilites == null) {
+      this.aclCapabilites = new RepositoryAclCapabilitiesImpl(this.riData.getAclCapabilities());
+    }
+    return this.aclCapabilites;
+  }
+
+  public RepositoryCapabilities getCapabilities() {
+    if (this.capabilites == null) {
+      capabilites = new RepositoryCapabilitiesImpl(this.riData.getRepositoryCapabilities());
+    }
+
+    return this.capabilites;
+  }
+
+  public List<BaseObjectTypeIds> getChangesOnType() {
+    return this.riData.getChangesOnType();
+  }
+
+  public String getCmisVersionSupported() {
+    return this.riData.getCmisVersionSupported();
+  }
+
+  public String getDescription() {
+    return this.riData.getRepositoryDescription();
+  }
+
+  public String getId() {
+    return this.riData.getRepositoryId();
+  }
+
+  public String getLatestChangeLogToken() {
+    return this.riData.getLatestChangeLogToken();
+  }
+
+  public String getName() {
+    return this.riData.getRepositoryName();
+  }
+
+  public String getPrincipalIdAnonymous() {
+    return this.riData.getPrincipalAnonymous();
+  }
+
+  public String getPrincipalIdAnyone() {
+    return this.riData.getPrincipalAnyone();
+  }
+
+  public String getProductName() {
+    return this.riData.getProductName();
+  }
+
+  public String getProductVersion() {
+    return this.riData.getProductVersion();
+  }
+
+  public String getRootFolderId() {
+    return this.riData.getRootFolderId();
+  }
+
+  public String getThinClientUri() {
+    return this.riData.getThinClientUri();
+  }
+
+  public String getVendorName() {
+    return this.riData.getVendorName();
+  }
+
+}

Propchange: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/main/java/org/apache/opencmis/client/runtime/repository/RepositoryInfoImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/test/java/org/apache/opencmis/client/runtime/mock/MockSessionFactory.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/test/java/org/apache/opencmis/client/runtime/mock/MockSessionFactory.java?rev=921337&r1=921336&r2=921337&view=diff
==============================================================================
--- incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/test/java/org/apache/opencmis/client/runtime/mock/MockSessionFactory.java (original)
+++ incubator/chemistry/trunk/opencmis/opencmis-client/opencmis-client-impl/src/test/java/org/apache/opencmis/client/runtime/mock/MockSessionFactory.java Wed Mar 10 13:09:55 2010
@@ -26,6 +26,7 @@ import java.io.ByteArrayInputStream;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.GregorianCalendar;
@@ -54,6 +55,7 @@ import org.apache.opencmis.client.api.ob
 import org.apache.opencmis.client.api.objecttype.PolicyType;
 import org.apache.opencmis.client.api.objecttype.RelationshipType;
 import org.apache.opencmis.client.api.repository.ObjectFactory;
+import org.apache.opencmis.client.api.repository.Repository;
 import org.apache.opencmis.client.api.repository.RepositoryCapabilities;
 import org.apache.opencmis.client.api.repository.RepositoryInfo;
 import org.apache.opencmis.client.api.util.Container;
@@ -737,4 +739,8 @@ public class MockSessionFactory implemen
 	private interface BooleanProperty extends Property<Boolean> {
 	}
 
+  public List<Repository> getRepositories(Map<String, String> parameters) {
+    return null;
+  }
+
 }