You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by sk...@apache.org on 2010/04/22 15:27:22 UTC

svn commit: r936836 [1/2] - in /incubator/chemistry/opencmis/trunk: chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/o...

Author: sklevenz
Date: Thu Apr 22 13:27:21 2010
New Revision: 936836

URL: http://svn.apache.org/viewvc?rev=936836&view=rev
Log:
Implementation of PagingIterable Interface
JUnit Test implementations

Removed:
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/PagingList.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractPagingList.java
Modified:
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectType.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractPersistentCmisObject.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentFolderImpl.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentSessionImpl.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/DocumentTypeImpl.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/FolderTypeImpl.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/ObjectTypeHelper.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/PolicyTypeImpl.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/RelationshipTypeImpl.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractPageFetch.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/DefaultPagingIterator.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/test/java/org/apache/chemistry/opencmis/client/runtime/PagingListTest.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/ReadOnlyDiscoverIT.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/ReadOnlyNavigationIT.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/ReadOnlyTypeIT.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/runtime/WriteObjectIT.java
    incubator/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-fit/src/test/java/org/apache/chemistry/opencmis/fit/sample/AbstractSampleIT.java

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/CmisObject.java Thu Apr 22 13:27:21 2010
@@ -123,7 +123,7 @@ public interface CmisObject extends Obje
 
 	// relationship service
 
-	PagingList<Relationship> getRelationships(boolean includeSubRelationshipTypes,
+	PagingIterable<Relationship> getRelationships(boolean includeSubRelationshipTypes,
 			RelationshipDirection relationshipDirection, ObjectType type, OperationContext context, int itemsPerPage);
 
 	// renditions

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Folder.java Thu Apr 22 13:27:21 2010
@@ -59,9 +59,9 @@ public interface Folder extends Fileable
 
 	List<Tree<FileableCmisObject>> getDescendants(int depth, OperationContext context);
 
-	PagingList<CmisObject> getChildren(int itemsPerPage);
+	PagingIterable<CmisObject> getChildren(int itemsPerPage);
 
-	PagingList<CmisObject> getChildren(OperationContext context, int itemsPerPage);
+	PagingIterable<CmisObject> getChildren(OperationContext context, int itemsPerPage);
 
 	boolean isRootFolder();
 
@@ -72,9 +72,9 @@ public interface Folder extends Fileable
 	/**
 	 * Returns all checked out documents of this folder.
 	 */
-	PagingList<Document> getCheckedOutDocs(int itemsPerPage);
+	PagingIterable<Document> getCheckedOutDocs(int itemsPerPage);
 
-	PagingList<Document> getCheckedOutDocs(OperationContext context, int itemsPerPage);
+	PagingIterable<Document> getCheckedOutDocs(OperationContext context, int itemsPerPage);
 
 	// folder specific properties
 

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectType.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectType.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectType.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ObjectType.java Thu Apr 22 13:27:21 2010
@@ -72,7 +72,7 @@ public interface ObjectType extends Type
 	 * @return a {@code List} of types which are directly derived from this
 	 *         type. @
 	 */
-	PagingList<ObjectType> getChildren(int itemsPerPage);
+	PagingIterable<ObjectType> getChildren(int itemsPerPage);
 
 	/**
 	 * Get the list of all types somehow derived from this type.

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/Session.java Thu Apr 22 13:27:21 2010
@@ -123,7 +123,7 @@ public interface Session {
 	/**
 	 * Returns the type children of the given type id.
 	 */
-	PagingList<ObjectType> getTypeChildren(String typeId, boolean includePropertyDefinitions, int itemsPerPage);
+	PagingIterable<ObjectType> getTypeChildren(String typeId, boolean includePropertyDefinitions, int itemsPerPage);
 
 	/**
 	 * Returns the type descendants of the given type id.
@@ -144,9 +144,9 @@ public interface Session {
 	 * 
 	 * @see Folder#getCheckedOutDocs(int)
 	 */
-	PagingList<Document> getCheckedOutDocs(int itemsPerPage);
+	PagingIterable<Document> getCheckedOutDocs(int itemsPerPage);
 
-	PagingList<Document> getCheckedOutDocs(OperationContext context, int itemsPerPage);
+	PagingIterable<Document> getCheckedOutDocs(OperationContext context, int itemsPerPage);
 
 	/**
 	 * Object service <code>getObject</code>.
@@ -167,15 +167,15 @@ public interface Session {
 	/**
 	 * Discovery service <code>query</code>.
 	 */
-	PagingList<QueryResult> query(String statement, boolean searchAllVersions, int itemsPerPage);
+	PagingIterable<QueryResult> query(String statement, boolean searchAllVersions, int itemsPerPage);
 
-	PagingList<QueryResult> query(String statement, boolean searchAllVersions, OperationContext context,
+	PagingIterable<QueryResult> query(String statement, boolean searchAllVersions, OperationContext context,
 			int itemsPerPage);
 
 	/**
 	 * Discovery service <code>getContentChanges</code>.
 	 */
-	PagingList<ChangeEvent> getContentChanges(String changeLogToken, int itemsPerPage);
+	PagingIterable<ChangeEvent> getContentChanges(String changeLogToken, int itemsPerPage);
 
 	// create
 

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractPersistentCmisObject.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractPersistentCmisObject.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractPersistentCmisObject.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/AbstractPersistentCmisObject.java Thu Apr 22 13:27:21 2010
@@ -34,12 +34,11 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.api.ObjectId;
 import org.apache.chemistry.opencmis.client.api.ObjectType;
 import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.PagingList;
+import org.apache.chemistry.opencmis.client.api.PagingIterable;
 import org.apache.chemistry.opencmis.client.api.Policy;
 import org.apache.chemistry.opencmis.client.api.Property;
 import org.apache.chemistry.opencmis.client.api.Relationship;
 import org.apache.chemistry.opencmis.client.api.Rendition;
-import org.apache.chemistry.opencmis.client.runtime.util.AbstractPagingList;
 import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.api.Ace;
 import org.apache.chemistry.opencmis.commons.api.Acl;
@@ -47,9 +46,7 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.api.CmisBinding;
 import org.apache.chemistry.opencmis.commons.api.Holder;
 import org.apache.chemistry.opencmis.commons.api.ObjectData;
-import org.apache.chemistry.opencmis.commons.api.ObjectList;
 import org.apache.chemistry.opencmis.commons.api.PropertyDefinition;
-import org.apache.chemistry.opencmis.commons.api.RelationshipService;
 import org.apache.chemistry.opencmis.commons.api.RenditionData;
 import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
 import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
@@ -725,51 +722,52 @@ public abstract class AbstractPersistent
 	 * org.apache.opencmis.client.api.objecttype.ObjectType,
 	 * org.apache.opencmis.client.api.OperationContext, int)
 	 */
-	public PagingList<Relationship> getRelationships(final boolean includeSubRelationshipTypes,
+	public PagingIterable<Relationship> getRelationships(final boolean includeSubRelationshipTypes,
 			final RelationshipDirection relationshipDirection, ObjectType type, OperationContext context,
 			final int itemsPerPage) {
-		if (itemsPerPage < 1) {
-			throw new IllegalArgumentException("itemsPerPage must be > 0!");
-		}
-
-		final String objectId = getObjectId();
-		final String typeId = (type == null ? null : type.getId());
-		final RelationshipService relationshipService = getBinding().getRelationshipService();
-		final OperationContext ctxt = (context != null ? context : new OperationContextImpl(getSession()
-				.getDefaultContext()));
-
-		return new AbstractPagingList<Relationship>() {
-
-			@Override
-			protected FetchResult fetchPage(int pageNumber) {
-				int skipCount = pageNumber * getMaxItemsPerPage();
-
-				// fetch the relationships
-				ObjectList relList = relationshipService.getObjectRelationships(getRepositoryId(), objectId,
-						includeSubRelationshipTypes, relationshipDirection, typeId, ctxt.getFilterString(), ctxt
-								.isIncludeAllowableActions(), BigInteger.valueOf(getMaxItemsPerPage()), BigInteger
-								.valueOf(skipCount), null);
-
-				// convert relationship objects
-				List<Relationship> page = new ArrayList<Relationship>();
-				if (relList.getObjects() != null) {
-					for (ObjectData rod : relList.getObjects()) {
-						Relationship relationship = new PersistentRelationshipImpl(getSession(), getObjectFactory()
-								.getTypeFromObjectData(rod), rod, ctxt);
-
-						page.add(relationship);
-					}
-				}
-
-				return new FetchResult(page, relList.getNumItems(), relList.hasMoreItems());
-			}
-
-			@Override
-			public int getMaxItemsPerPage() {
-				return itemsPerPage;
-			}
-		};
-	}
+//		if (itemsPerPage < 1) {
+//			throw new IllegalArgumentException("itemsPerPage must be > 0!");
+//		}
+//
+//		final String objectId = getObjectId();
+//		final String typeId = (type == null ? null : type.getId());
+//		final RelationshipService relationshipService = getBinding().getRelationshipService();
+//		final OperationContext ctxt = (context != null ? context : new OperationContextImpl(getSession()
+//				.getDefaultContext()));
+//
+//		return new AbstractPagingList<Relationship>() {
+//
+//			@Override
+//			protected FetchResult fetchPage(int pageNumber) {
+//				int skipCount = pageNumber * getMaxItemsPerPage();
+//
+//				// fetch the relationships
+//				ObjectList relList = relationshipService.getObjectRelationships(getRepositoryId(), objectId,
+//						includeSubRelationshipTypes, relationshipDirection, typeId, ctxt.getFilterString(), ctxt
+//								.isIncludeAllowableActions(), BigInteger.valueOf(getMaxItemsPerPage()), BigInteger
+//								.valueOf(skipCount), null);
+//
+//				// convert relationship objects
+//				List<Relationship> page = new ArrayList<Relationship>();
+//				if (relList.getObjects() != null) {
+//					for (ObjectData rod : relList.getObjects()) {
+//						Relationship relationship = new PersistentRelationshipImpl(getSession(), getObjectFactory()
+//								.getTypeFromObjectData(rod), rod, ctxt);
+//
+//						page.add(relationship);
+//					}
+//				}
+//
+//				return new FetchResult(page, relList.getNumItems(), relList.hasMoreItems());
+//			}
+//
+//			@Override
+//			public int getMaxItemsPerPage() {
+//				return itemsPerPage;
+//			}
+//		};
+			return null;
+}
 
 	// --- other ---
 

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentFolderImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentFolderImpl.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentFolderImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentFolderImpl.java Thu Apr 22 13:27:21 2010
@@ -34,11 +34,12 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.api.ObjectId;
 import org.apache.chemistry.opencmis.client.api.ObjectType;
 import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.PagingList;
+import org.apache.chemistry.opencmis.client.api.PagingIterable;
 import org.apache.chemistry.opencmis.client.api.Policy;
 import org.apache.chemistry.opencmis.client.api.Tree;
-import org.apache.chemistry.opencmis.client.runtime.util.AbstractPagingList;
+import org.apache.chemistry.opencmis.client.runtime.util.AbstractPageFetch;
 import org.apache.chemistry.opencmis.client.runtime.util.ContainerImpl;
+import org.apache.chemistry.opencmis.client.runtime.util.DefaultPagingIterable;
 import org.apache.chemistry.opencmis.commons.PropertyIds;
 import org.apache.chemistry.opencmis.commons.api.Ace;
 import org.apache.chemistry.opencmis.commons.api.ContentStream;
@@ -48,7 +49,6 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.api.ObjectInFolderContainer;
 import org.apache.chemistry.opencmis.commons.api.ObjectInFolderData;
 import org.apache.chemistry.opencmis.commons.api.ObjectInFolderList;
-import org.apache.chemistry.opencmis.commons.api.ObjectList;
 import org.apache.chemistry.opencmis.commons.api.PropertyData;
 import org.apache.chemistry.opencmis.commons.api.PropertyString;
 import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
@@ -58,7 +58,8 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.enums.VersioningState;
 import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
 
-public class PersistentFolderImpl extends AbstractPersistentFilableCmisObject implements Folder {
+public class PersistentFolderImpl extends AbstractPersistentFilableCmisObject
+		implements Folder {
 
 	private static final Set<Updatability> CREATE_UPDATABILITY = new HashSet<Updatability>();
 	static {
@@ -69,7 +70,8 @@ public class PersistentFolderImpl extend
 	/**
 	 * Constructor.
 	 */
-	public PersistentFolderImpl(PersistentSessionImpl session, ObjectType objectType, ObjectData objectData,
+	public PersistentFolderImpl(PersistentSessionImpl session,
+			ObjectType objectType, ObjectData objectData,
 			OperationContext context) {
 		initialize(session, objectType, objectData, context);
 	}
@@ -83,16 +85,19 @@ public class PersistentFolderImpl extend
 	 * java.util.List, java.util.List,
 	 * org.apache.opencmis.client.api.OperationContext)
 	 */
-	public Document createDocument(Map<String, ?> properties, ContentStream contentStream,
-			VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
+	public Document createDocument(Map<String, ?> properties,
+			ContentStream contentStream, VersioningState versioningState,
+			List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
 			OperationContext context) {
 		String objectId = getObjectId();
 
 		ObjectFactory of = getObjectFactory();
 
-		String newId = getBinding().getObjectService().createDocument(getRepositoryId(),
-				of.convertProperties(properties, null, CREATE_UPDATABILITY), objectId,
-				of.convertContentStream(contentStream), versioningState, of.convertPolicies(policies),
+		String newId = getBinding().getObjectService().createDocument(
+				getRepositoryId(),
+				of.convertProperties(properties, null, CREATE_UPDATABILITY),
+				objectId, of.convertContentStream(contentStream),
+				versioningState, of.convertPolicies(policies),
 				of.convertAces(addAces), of.convertAces(removeAces), null);
 
 		// if no context is provided the object will not be fetched
@@ -101,9 +106,11 @@ public class PersistentFolderImpl extend
 		}
 
 		// get the new object
-		CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
+		CmisObject object = getSession().getObject(
+				getSession().createObjectId(newId), context);
 		if (!(object instanceof Document)) {
-			throw new CmisRuntimeException("Newly created object is not a document! New id: " + newId);
+			throw new CmisRuntimeException(
+					"Newly created object is not a document! New id: " + newId);
 		}
 
 		return (Document) object;
@@ -119,8 +126,9 @@ public class PersistentFolderImpl extend
 	 * java.util.List, java.util.List,
 	 * org.apache.opencmis.client.api.OperationContext)
 	 */
-	public Document createDocumentFromSource(ObjectId source, Map<String, ?> properties,
-			VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
+	public Document createDocumentFromSource(ObjectId source,
+			Map<String, ?> properties, VersioningState versioningState,
+			List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
 			OperationContext context) {
 		if ((source == null) || (source.getId() == null)) {
 			throw new IllegalArgumentException("Source must be set!");
@@ -138,7 +146,8 @@ public class PersistentFolderImpl extend
 		}
 
 		if (type.getBaseTypeId() != BaseTypeId.CMIS_DOCUMENT) {
-			throw new IllegalArgumentException("Source object must be a document!");
+			throw new IllegalArgumentException(
+					"Source object must be a document!");
 		}
 
 		ObjectFactory of = getObjectFactory();
@@ -146,9 +155,12 @@ public class PersistentFolderImpl extend
 		Set<Updatability> updatebility = new HashSet<Updatability>();
 		updatebility.add(Updatability.READWRITE);
 
-		String newId = getBinding().getObjectService().createDocumentFromSource(getRepositoryId(), source.getId(),
-				of.convertProperties(properties, type, updatebility), objectId, versioningState,
-				of.convertPolicies(policies), of.convertAces(addAces), of.convertAces(removeAces), null);
+		String newId = getBinding().getObjectService()
+				.createDocumentFromSource(getRepositoryId(), source.getId(),
+						of.convertProperties(properties, type, updatebility),
+						objectId, versioningState,
+						of.convertPolicies(policies), of.convertAces(addAces),
+						of.convertAces(removeAces), null);
 
 		// if no context is provided the object will not be fetched
 		if ((context == null) || (newId == null)) {
@@ -156,9 +168,11 @@ public class PersistentFolderImpl extend
 		}
 
 		// get the new object
-		CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
+		CmisObject object = getSession().getObject(
+				getSession().createObjectId(newId), context);
 		if (!(object instanceof Document)) {
-			throw new CmisRuntimeException("Newly created object is not a document! New id: " + newId);
+			throw new CmisRuntimeException(
+					"Newly created object is not a document! New id: " + newId);
 		}
 
 		return (Document) object;
@@ -171,14 +185,17 @@ public class PersistentFolderImpl extend
 	 * java.util.List, java.util.List, java.util.List,
 	 * org.apache.opencmis.client.api.OperationContext)
 	 */
-	public Folder createFolder(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces,
-			List<Ace> removeAces, OperationContext context) {
+	public Folder createFolder(Map<String, ?> properties,
+			List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
+			OperationContext context) {
 		String objectId = getObjectId();
 
 		ObjectFactory of = getObjectFactory();
 
-		String newId = getBinding().getObjectService().createFolder(getRepositoryId(),
-				of.convertProperties(properties, null, CREATE_UPDATABILITY), objectId, of.convertPolicies(policies),
+		String newId = getBinding().getObjectService().createFolder(
+				getRepositoryId(),
+				of.convertProperties(properties, null, CREATE_UPDATABILITY),
+				objectId, of.convertPolicies(policies),
 				of.convertAces(addAces), of.convertAces(removeAces), null);
 
 		// if no context is provided the object will not be fetched
@@ -187,9 +204,11 @@ public class PersistentFolderImpl extend
 		}
 
 		// get the new object
-		CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
+		CmisObject object = getSession().getObject(
+				getSession().createObjectId(newId), context);
 		if (!(object instanceof Folder)) {
-			throw new CmisRuntimeException("Newly created object is not a folder! New id: " + newId);
+			throw new CmisRuntimeException(
+					"Newly created object is not a folder! New id: " + newId);
 		}
 
 		return (Folder) object;
@@ -202,14 +221,17 @@ public class PersistentFolderImpl extend
 	 * java.util.List, java.util.List, java.util.List,
 	 * org.apache.opencmis.client.api.OperationContext)
 	 */
-	public Policy createPolicy(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces,
-			List<Ace> removeAces, OperationContext context) {
+	public Policy createPolicy(Map<String, ?> properties,
+			List<Policy> policies, List<Ace> addAces, List<Ace> removeAces,
+			OperationContext context) {
 		String objectId = getObjectId();
 
 		ObjectFactory of = getObjectFactory();
 
-		String newId = getBinding().getObjectService().createPolicy(getRepositoryId(),
-				of.convertProperties(properties, null, CREATE_UPDATABILITY), objectId, of.convertPolicies(policies),
+		String newId = getBinding().getObjectService().createPolicy(
+				getRepositoryId(),
+				of.convertProperties(properties, null, CREATE_UPDATABILITY),
+				objectId, of.convertPolicies(policies),
 				of.convertAces(addAces), of.convertAces(removeAces), null);
 
 		// if no context is provided the object will not be fetched
@@ -218,9 +240,11 @@ public class PersistentFolderImpl extend
 		}
 
 		// get the new object
-		CmisObject object = getSession().getObject(getSession().createObjectId(newId), context);
+		CmisObject object = getSession().getObject(
+				getSession().createObjectId(newId), context);
 		if (!(object instanceof Policy)) {
-			throw new CmisRuntimeException("Newly created object is not a policy! New id: " + newId);
+			throw new CmisRuntimeException(
+					"Newly created object is not a policy! New id: " + newId);
 		}
 
 		return (Policy) object;
@@ -232,12 +256,14 @@ public class PersistentFolderImpl extend
 	 * @see org.apache.opencmis.client.api.Folder#deleteTree(boolean,
 	 * org.apache.opencmis.commons.enums.UnfileObjects, boolean)
 	 */
-	public List<String> deleteTree(boolean allVersions, UnfileObject unfile, boolean continueOnFailure) {
+	public List<String> deleteTree(boolean allVersions, UnfileObject unfile,
+			boolean continueOnFailure) {
 		String repositoryId = getRepositoryId();
 		String objectId = getObjectId();
 
-		FailedToDeleteData failed = getBinding().getObjectService().deleteTree(repositoryId, objectId, allVersions,
-				unfile, continueOnFailure, null);
+		FailedToDeleteData failed = getBinding().getObjectService().deleteTree(
+				repositoryId, objectId, allVersions, unfile, continueOnFailure,
+				null);
 
 		return failed.getIds();
 	}
@@ -272,7 +298,7 @@ public class PersistentFolderImpl extend
 	 * 
 	 * @see org.apache.opencmis.client.api.Folder#getCheckedOutDocs(int)
 	 */
-	public PagingList<Document> getCheckedOutDocs(int itemsPerPage) {
+	public PagingIterable<Document> getCheckedOutDocs(int itemsPerPage) {
 		return getCheckedOutDocs(getSession().getDefaultContext(), itemsPerPage);
 	}
 
@@ -282,50 +308,57 @@ public class PersistentFolderImpl extend
 	 * @seeorg.apache.opencmis.client.api.Folder#getCheckedOutDocs(org.apache.
 	 * opencmis.client.api. OperationContext, int)
 	 */
-	public PagingList<Document> getCheckedOutDocs(OperationContext context, final int itemsPerPage) {
-		if (itemsPerPage < 1) {
-			throw new IllegalArgumentException("itemsPerPage must be > 0!");
-		}
-
-		final String objectId = getObjectId();
-		final NavigationService nagivationService = getBinding().getNavigationService();
-		final ObjectFactory objectFactory = getSession().getObjectFactory();
-		final OperationContext ctxt = new OperationContextImpl(context);
-
-		return new AbstractPagingList<Document>() {
-
-			@Override
-			protected FetchResult fetchPage(int pageNumber) {
-				int skipCount = pageNumber * getMaxItemsPerPage();
-
-				// get checked out documents for this folder
-				ObjectList checkedOutDocs = nagivationService.getCheckedOutDocs(getRepositoryId(), objectId, ctxt
-						.getFilterString(), ctxt.getOrderBy(), ctxt.isIncludeAllowableActions(), ctxt
-						.getIncludeRelationships(), ctxt.getRenditionFilterString(), BigInteger
-						.valueOf(getMaxItemsPerPage()), BigInteger.valueOf(skipCount), null);
-
-				// convert objects
-				List<Document> page = new ArrayList<Document>();
-				if (checkedOutDocs.getObjects() != null) {
-					for (ObjectData objectData : checkedOutDocs.getObjects()) {
-						CmisObject doc = objectFactory.convertObject(objectData, ctxt);
-						if (!(doc instanceof Document)) {
-							// should not happen...
-							continue;
-						}
-
-						page.add((Document) doc);
-					}
-				}
-
-				return new FetchResult(page, checkedOutDocs.getNumItems(), checkedOutDocs.hasMoreItems());
-			}
-
-			@Override
-			public int getMaxItemsPerPage() {
-				return itemsPerPage;
-			}
-		};
+	public PagingIterable<Document> getCheckedOutDocs(OperationContext context,
+			final int itemsPerPage) {
+		// if (itemsPerPage < 1) {
+		// throw new IllegalArgumentException("itemsPerPage must be > 0!");
+		// }
+		//
+		// final String objectId = getObjectId();
+		// final NavigationService nagivationService =
+		// getBinding().getNavigationService();
+		// final ObjectFactory objectFactory = getSession().getObjectFactory();
+		// final OperationContext ctxt = new OperationContextImpl(context);
+		//
+		// return new AbstractPagingList<Document>() {
+		//
+		// @Override
+		// protected FetchResult fetchPage(int pageNumber) {
+		// int skipCount = pageNumber * getMaxItemsPerPage();
+		//
+		// // get checked out documents for this folder
+		// ObjectList checkedOutDocs =
+		// nagivationService.getCheckedOutDocs(getRepositoryId(), objectId, ctxt
+		// .getFilterString(), ctxt.getOrderBy(),
+		// ctxt.isIncludeAllowableActions(), ctxt
+		// .getIncludeRelationships(), ctxt.getRenditionFilterString(),
+		// BigInteger
+		// .valueOf(getMaxItemsPerPage()), BigInteger.valueOf(skipCount), null);
+		//
+		// // convert objects
+		// List<Document> page = new ArrayList<Document>();
+		// if (checkedOutDocs.getObjects() != null) {
+		// for (ObjectData objectData : checkedOutDocs.getObjects()) {
+		// CmisObject doc = objectFactory.convertObject(objectData, ctxt);
+		// if (!(doc instanceof Document)) {
+		// // should not happen...
+		// continue;
+		// }
+		//
+		// page.add((Document) doc);
+		// }
+		// }
+		//
+		// return new FetchResult(page, checkedOutDocs.getNumItems(),
+		// checkedOutDocs.hasMoreItems());
+		// }
+		//
+		// @Override
+		// public int getMaxItemsPerPage() {
+		// return itemsPerPage;
+		// }
+		// };
+		return null;
 	}
 
 	/*
@@ -333,7 +366,7 @@ public class PersistentFolderImpl extend
 	 * 
 	 * @see org.apache.opencmis.client.api.Folder#getChildren(int)
 	 */
-	public PagingList<CmisObject> getChildren(int itemsPerPage) {
+	public PagingIterable<CmisObject> getChildren(int itemsPerPage) {
 		return getChildren(getSession().getDefaultContext(), itemsPerPage);
 	}
 
@@ -344,47 +377,55 @@ public class PersistentFolderImpl extend
 	 * org.apache.opencmis.client.api.Folder#getChildren(org.apache.opencmis
 	 * .client.api.OperationContext , int)
 	 */
-	public PagingList<CmisObject> getChildren(OperationContext context, final int itemsPerPage) {
+	public PagingIterable<CmisObject> getChildren(OperationContext context,
+			final int itemsPerPage) {
+
 		if (itemsPerPage < 1) {
 			throw new IllegalArgumentException("itemsPerPage must be > 0!");
 		}
 
 		final String objectId = getObjectId();
-		final NavigationService navigationService = getBinding().getNavigationService();
+		final NavigationService navigationService = getBinding()
+				.getNavigationService();
 		final ObjectFactory objectFactory = getSession().getObjectFactory();
 		final OperationContext ctxt = new OperationContextImpl(context);
 
-		return new AbstractPagingList<CmisObject>() {
+		return new DefaultPagingIterable<CmisObject>(
+				new AbstractPageFetch<CmisObject>() {
 
-			@Override
-			protected FetchResult fetchPage(int pageNumber) {
-				int skipCount = pageNumber * getMaxItemsPerPage();
-
-				// get the children
-				ObjectInFolderList children = navigationService.getChildren(getRepositoryId(), objectId, ctxt
-						.getFilterString(), ctxt.getOrderBy(), ctxt.isIncludeAllowableActions(), ctxt
-						.getIncludeRelationships(), ctxt.getRenditionFilterString(), ctxt.isIncludePathSegments(),
-						BigInteger.valueOf(getMaxItemsPerPage()), BigInteger.valueOf(skipCount), null);
-
-				// convert objects
-				List<CmisObject> page = new ArrayList<CmisObject>();
-				List<ObjectInFolderData> childObjects = children.getObjects();
-				if (childObjects != null) {
-					for (ObjectInFolderData objectData : childObjects) {
-						if (objectData.getObject() != null) {
-							page.add(objectFactory.convertObject(objectData.getObject(), ctxt));
+					@Override
+					protected AbstractPageFetch.PageFetchResult<CmisObject> fetchPage(
+							long skipCount) {
+
+						// get the children
+						ObjectInFolderList children = navigationService
+								.getChildren(getRepositoryId(), objectId, ctxt
+										.getFilterString(), ctxt.getOrderBy(),
+										ctxt.isIncludeAllowableActions(), ctxt
+												.getIncludeRelationships(),
+										ctxt.getRenditionFilterString(), ctxt
+												.isIncludePathSegments(),
+										BigInteger.valueOf(itemsPerPage),
+										BigInteger.valueOf(skipCount), null);
+
+						// convert objects
+						List<CmisObject> page = new ArrayList<CmisObject>();
+						List<ObjectInFolderData> childObjects = children
+								.getObjects();
+						if (childObjects != null) {
+							for (ObjectInFolderData objectData : childObjects) {
+								if (objectData.getObject() != null) {
+									page.add(objectFactory.convertObject(
+											objectData.getObject(), ctxt));
+								}
+							}
 						}
-					}
-				}
 
-				return new FetchResult(page, children.getNumItems(), children.hasMoreItems());
-			}
-
-			@Override
-			public int getMaxItemsPerPage() {
-				return itemsPerPage;
-			}
-		};
+						return new AbstractPageFetch.PageFetchResult<CmisObject>(
+								page, children.getNumItems(), children.hasMoreItems()) {
+						};
+					}
+				});
 	}
 
 	/*
@@ -402,14 +443,19 @@ public class PersistentFolderImpl extend
 	 * @see org.apache.opencmis.client.api.Folder#getDescendants(int,
 	 * org.apache.opencmis.client.api.OperationContext)
 	 */
-	public List<Tree<FileableCmisObject>> getDescendants(int depth, OperationContext context) {
+	public List<Tree<FileableCmisObject>> getDescendants(int depth,
+			OperationContext context) {
 		String objectId = getObjectId();
 
 		// get the descendants
-		List<ObjectInFolderContainer> providerContainerList = getBinding().getNavigationService().getDescendants(
-				getRepositoryId(), objectId, BigInteger.valueOf(depth), context.getFilterString(),
-				context.isIncludeAllowableActions(), context.getIncludeRelationships(),
-				context.getRenditionFilterString(), context.isIncludePathSegments(), null);
+		List<ObjectInFolderContainer> providerContainerList = getBinding()
+				.getNavigationService().getDescendants(getRepositoryId(),
+						objectId, BigInteger.valueOf(depth),
+						context.getFilterString(),
+						context.isIncludeAllowableActions(),
+						context.getIncludeRelationships(),
+						context.getRenditionFilterString(),
+						context.isIncludePathSegments(), null);
 
 		return convertProviderContainer(providerContainerList, context);
 	}
@@ -429,14 +475,19 @@ public class PersistentFolderImpl extend
 	 * @see org.apache.opencmis.client.api.Folder#getFolderTree(int,
 	 * org.apache.opencmis.client.api.OperationContext)
 	 */
-	public List<Tree<FileableCmisObject>> getFolderTree(int depth, OperationContext context) {
+	public List<Tree<FileableCmisObject>> getFolderTree(int depth,
+			OperationContext context) {
 		String objectId = getObjectId();
 
 		// get the folder tree
-		List<ObjectInFolderContainer> providerContainerList = getBinding().getNavigationService().getFolderTree(
-				getRepositoryId(), objectId, BigInteger.valueOf(depth), context.getFilterString(),
-				context.isIncludeAllowableActions(), context.getIncludeRelationships(),
-				context.getRenditionFilterString(), context.isIncludePathSegments(), null);
+		List<ObjectInFolderContainer> providerContainerList = getBinding()
+				.getNavigationService().getFolderTree(getRepositoryId(),
+						objectId, BigInteger.valueOf(depth),
+						context.getFilterString(),
+						context.isIncludeAllowableActions(),
+						context.getIncludeRelationships(),
+						context.getRenditionFilterString(),
+						context.isIncludePathSegments(), null);
 
 		return convertProviderContainer(providerContainerList, context);
 	}
@@ -445,7 +496,8 @@ public class PersistentFolderImpl extend
 	 * Converts a provider container into an API container.
 	 */
 	private List<Tree<FileableCmisObject>> convertProviderContainer(
-			List<ObjectInFolderContainer> providerContainerList, OperationContext context) {
+			List<ObjectInFolderContainer> providerContainerList,
+			OperationContext context) {
 		if (providerContainerList == null) {
 			return null;
 		}
@@ -454,13 +506,15 @@ public class PersistentFolderImpl extend
 
 		List<Tree<FileableCmisObject>> result = new ArrayList<Tree<FileableCmisObject>>();
 		for (ObjectInFolderContainer oifc : providerContainerList) {
-			if ((oifc.getObject() == null) || (oifc.getObject().getObject() == null)) {
+			if ((oifc.getObject() == null)
+					|| (oifc.getObject().getObject() == null)) {
 				// shouldn't happen ...
 				continue;
 			}
 
 			// convert the object
-			CmisObject object = of.convertObject(oifc.getObject().getObject(), context);
+			CmisObject object = of.convertObject(oifc.getObject().getObject(),
+					context);
 			if (!(object instanceof FileableCmisObject)) {
 				// the repository must not return objects that are not fileable,
 				// but you never know...
@@ -468,10 +522,12 @@ public class PersistentFolderImpl extend
 			}
 
 			// convert the children
-			List<Tree<FileableCmisObject>> children = convertProviderContainer(oifc.getChildren(), context);
+			List<Tree<FileableCmisObject>> children = convertProviderContainer(
+					oifc.getChildren(), context);
 
 			// add both to current container
-			result.add(new ContainerImpl<FileableCmisObject>((FileableCmisObject) object, children));
+			result.add(new ContainerImpl<FileableCmisObject>(
+					(FileableCmisObject) object, children));
 		}
 
 		return result;
@@ -484,7 +540,8 @@ public class PersistentFolderImpl extend
 	 */
 	public boolean isRootFolder() {
 		String objectId = getObjectId();
-		String rootFolderId = getSession().getRepositoryInfo().getRootFolderId();
+		String rootFolderId = getSession().getRepositoryInfo()
+				.getRootFolderId();
 
 		return objectId.equals(rootFolderId);
 	}
@@ -523,11 +580,16 @@ public class PersistentFolderImpl extend
 			// if the path property isn't set, get it
 			if (path == null) {
 				String objectId = getObjectId();
-				ObjectData objectData = getBinding().getObjectService().getObject(getRepositoryId(), objectId,
-						PropertyIds.PATH, false, IncludeRelationships.NONE, "cmis:none", false, false, null);
-
-				if ((objectData.getProperties() != null) && (objectData.getProperties().getProperties() != null)) {
-					PropertyData<?> pathProperty = objectData.getProperties().getProperties().get(PropertyIds.PATH);
+				ObjectData objectData = getBinding().getObjectService()
+						.getObject(getRepositoryId(), objectId,
+								PropertyIds.PATH, false,
+								IncludeRelationships.NONE, "cmis:none", false,
+								false, null);
+
+				if ((objectData.getProperties() != null)
+						&& (objectData.getProperties().getProperties() != null)) {
+					PropertyData<?> pathProperty = objectData.getProperties()
+							.getProperties().get(PropertyIds.PATH);
 
 					if (pathProperty instanceof PropertyString) {
 						path = ((PropertyString) pathProperty).getFirstValue();
@@ -540,7 +602,8 @@ public class PersistentFolderImpl extend
 
 		// we still don't know the path ... it's not a CMIS compliant repository
 		if (path == null) {
-			throw new CmisRuntimeException("Repository didn't return " + PropertyIds.PATH + "!");
+			throw new CmisRuntimeException("Repository didn't return "
+					+ PropertyIds.PATH + "!");
 		}
 
 		return path;

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentSessionImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentSessionImpl.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentSessionImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/PersistentSessionImpl.java Thu Apr 22 13:27:21 2010
@@ -37,7 +37,7 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.api.ObjectId;
 import org.apache.chemistry.opencmis.client.api.ObjectType;
 import org.apache.chemistry.opencmis.client.api.OperationContext;
-import org.apache.chemistry.opencmis.client.api.PagingList;
+import org.apache.chemistry.opencmis.client.api.PagingIterable;
 import org.apache.chemistry.opencmis.client.api.Policy;
 import org.apache.chemistry.opencmis.client.api.QueryResult;
 import org.apache.chemistry.opencmis.client.api.Session;
@@ -45,8 +45,9 @@ import org.apache.chemistry.opencmis.cli
 import org.apache.chemistry.opencmis.client.runtime.cache.Cache;
 import org.apache.chemistry.opencmis.client.runtime.cache.CacheImpl;
 import org.apache.chemistry.opencmis.client.runtime.repository.PersistentObjectFactoryImpl;
-import org.apache.chemistry.opencmis.client.runtime.util.AbstractPagingList;
+import org.apache.chemistry.opencmis.client.runtime.util.AbstractPageFetch;
 import org.apache.chemistry.opencmis.client.runtime.util.ContainerImpl;
+import org.apache.chemistry.opencmis.client.runtime.util.DefaultPagingIterable;
 import org.apache.chemistry.opencmis.commons.SessionParameter;
 import org.apache.chemistry.opencmis.commons.api.Ace;
 import org.apache.chemistry.opencmis.commons.api.CmisBinding;
@@ -54,6 +55,8 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.api.DiscoveryService;
 import org.apache.chemistry.opencmis.commons.api.NavigationService;
 import org.apache.chemistry.opencmis.commons.api.ObjectData;
+import org.apache.chemistry.opencmis.commons.api.ObjectInFolderData;
+import org.apache.chemistry.opencmis.commons.api.ObjectInFolderList;
 import org.apache.chemistry.opencmis.commons.api.ObjectList;
 import org.apache.chemistry.opencmis.commons.api.RepositoryInfo;
 import org.apache.chemistry.opencmis.commons.api.RepositoryService;
@@ -73,8 +76,9 @@ import org.apache.commons.logging.LogFac
  */
 public class PersistentSessionImpl implements Session, Serializable {
 
-	private static final OperationContext DEFAULT_CONTEXT = new OperationContextImpl(null, false, true, false,
-			IncludeRelationships.NONE, null, true, null, true);
+	private static final OperationContext DEFAULT_CONTEXT = new OperationContextImpl(
+			null, false, true, false, IncludeRelationships.NONE, null, true,
+			null, true);
 
 	private static final Set<Updatability> CREATE_UPDATABILITY = new HashSet<Updatability>();
 	static {
@@ -120,7 +124,8 @@ public class PersistentSessionImpl imple
 	/*
 	 * helper factory (non serializable)
 	 */
-	private final ObjectFactory objectFactory = PersistentObjectFactoryImpl.newInstance(this);
+	private final ObjectFactory objectFactory = PersistentObjectFactoryImpl
+			.newInstance(this);
 
 	/**
 	 * required for serialization
@@ -135,7 +140,8 @@ public class PersistentSessionImpl imple
 		PersistentSessionImpl.log.info("Session Parameters: " + parameters);
 
 		this.locale = this.determineLocale(parameters);
-		PersistentSessionImpl.log.info("Session Locale: " + this.locale.toString());
+		PersistentSessionImpl.log.info("Session Locale: "
+				+ this.locale.toString());
 
 		int cacheSize = this.determineCacheSize(parameters);
 
@@ -144,7 +150,8 @@ public class PersistentSessionImpl imple
 		} else {
 			this.cache = CacheImpl.newInstance(cacheSize);
 		}
-		PersistentSessionImpl.log.info("Session Cache Size: " + this.cache.getCacheSize());
+		PersistentSessionImpl.log.info("Session Cache Size: "
+				+ this.cache.getCacheSize());
 	}
 
 	private int determineCacheSize(Map<String, String> parameters) {
@@ -162,8 +169,10 @@ public class PersistentSessionImpl imple
 	private Locale determineLocale(Map<String, String> parameters) {
 		Locale locale = null;
 
-		String language = parameters.get(SessionParameter.LOCALE_ISO639_LANGUAGE);
-		String country = parameters.get(SessionParameter.LOCALE_ISO3166_COUNTRY);
+		String language = parameters
+				.get(SessionParameter.LOCALE_ISO639_LANGUAGE);
+		String country = parameters
+				.get(SessionParameter.LOCALE_ISO3166_COUNTRY);
 		String variant = parameters.get(SessionParameter.LOCALE_VARIANT);
 
 		if (variant != null) {
@@ -200,7 +209,8 @@ public class PersistentSessionImpl imple
 			} else {
 				this.cache = CacheImpl.newInstance(cacheSize);
 			}
-			PersistentSessionImpl.log.info("Session Cache Size: " + this.cache.getCacheSize());
+			PersistentSessionImpl.log.info("Session Cache Size: "
+					+ this.cache.getCacheSize());
 
 			/*
 			 * clear provider cache
@@ -233,7 +243,7 @@ public class PersistentSessionImpl imple
 	 * 
 	 * @see org.apache.opencmis.client.api.Session#getCheckedOutDocs(int)
 	 */
-	public PagingList<Document> getCheckedOutDocs(int itemsPerPage) {
+	public PagingIterable<Document> getCheckedOutDocs(int itemsPerPage) {
 		return getCheckedOutDocs(getDefaultContext(), itemsPerPage);
 	}
 
@@ -243,49 +253,57 @@ public class PersistentSessionImpl imple
 	 * @seeorg.apache.opencmis.client.api.Session#getCheckedOutDocs(org.apache.
 	 * opencmis.client.api. OperationContext, int)
 	 */
-	public PagingList<Document> getCheckedOutDocs(OperationContext context, final int itemsPerPage) {
+	public PagingIterable<Document> getCheckedOutDocs(OperationContext context,
+			final int itemsPerPage) {
 		if (itemsPerPage < 1) {
 			throw new IllegalArgumentException("itemsPerPage must be > 0!");
 		}
 
-		final NavigationService nagivationService = getBinding().getNavigationService();
+		final NavigationService navigationService = getBinding()
+				.getNavigationService();
 		final ObjectFactory objectFactory = getObjectFactory();
 		final OperationContext ctxt = new OperationContextImpl(context);
 
-		return new AbstractPagingList<Document>() {
+		return new DefaultPagingIterable<Document>(
+				new AbstractPageFetch<Document>() {
+
+					@Override
+					protected AbstractPageFetch.PageFetchResult<Document> fetchPage(
+							long skipCount) {
+
+						// get all checked out documents
+						ObjectList checkedOutDocs = navigationService
+								.getCheckedOutDocs(getRepositoryId(), null,
+										ctxt.getFilterString(), ctxt
+												.getOrderBy(), ctxt
+												.isIncludeAllowableActions(),
+										ctxt.getIncludeRelationships(), ctxt
+												.getRenditionFilterString(),
+										BigInteger.valueOf(itemsPerPage),
+										BigInteger.valueOf(skipCount), null);
+
+						// convert objects
+						List<Document> page = new ArrayList<Document>();
+						if (checkedOutDocs.getObjects() != null) {
+							for (ObjectData objectData : checkedOutDocs
+									.getObjects()) {
+								CmisObject doc = objectFactory.convertObject(
+										objectData, ctxt);
+								if (!(doc instanceof Document)) {
+									// should not happen...
+									continue;
+								}
 
-			@Override
-			protected FetchResult fetchPage(int pageNumber) {
-				int skipCount = pageNumber * getMaxItemsPerPage();
-
-				// get all checked out documents
-				ObjectList checkedOutDocs = nagivationService.getCheckedOutDocs(getRepositoryId(), null, ctxt
-						.getFilterString(), ctxt.getOrderBy(), ctxt.isIncludeAllowableActions(), ctxt
-						.getIncludeRelationships(), ctxt.getRenditionFilterString(), BigInteger
-						.valueOf(getMaxItemsPerPage()), BigInteger.valueOf(skipCount), null);
-
-				// convert objects
-				List<Document> page = new ArrayList<Document>();
-				if (checkedOutDocs.getObjects() != null) {
-					for (ObjectData objectData : checkedOutDocs.getObjects()) {
-						CmisObject doc = objectFactory.convertObject(objectData, ctxt);
-						if (!(doc instanceof Document)) {
-							// should not happen...
-							continue;
+								page.add((Document) doc);
+							}
 						}
 
-						page.add((Document) doc);
+						return new AbstractPageFetch.PageFetchResult<Document>(
+								page, checkedOutDocs.getNumItems(),
+								checkedOutDocs.hasMoreItems()) {
+						};
 					}
-				}
-
-				return new FetchResult(page, checkedOutDocs.getNumItems(), checkedOutDocs.hasMoreItems());
-			}
-
-			@Override
-			public int getMaxItemsPerPage() {
-				return itemsPerPage;
-			}
-		};
+				});
 	}
 
 	/*
@@ -295,7 +313,8 @@ public class PersistentSessionImpl imple
 	 * org.apache.opencmis.client.api.Session#getContentChanges(java.lang.String
 	 * , int)
 	 */
-	public PagingList<ChangeEvent> getContentChanges(String changeLogToken, int itemsPerPage) {
+	public PagingIterable<ChangeEvent> getContentChanges(String changeLogToken,
+			int itemsPerPage) {
 		throw new CmisRuntimeException("not implemented");
 	}
 
@@ -337,11 +356,14 @@ public class PersistentSessionImpl imple
 	 * org.apache.opencmis.commons.enums.IncludeRelationships, java.util.Set,
 	 * boolean, java.lang.String, boolean)
 	 */
-	public OperationContext createOperationContext(Set<String> filter, boolean includeAcls,
-			boolean includeAllowableActions, boolean includePolicies, IncludeRelationships includeRelationships,
-			Set<String> renditionFilter, boolean includePathSegments, String orderBy, boolean cacheEnabled) {
-		return new OperationContextImpl(filter, includeAcls, includeAllowableActions, includePolicies,
-				includeRelationships, renditionFilter, includePathSegments, orderBy, cacheEnabled);
+	public OperationContext createOperationContext(Set<String> filter,
+			boolean includeAcls, boolean includeAllowableActions,
+			boolean includePolicies, IncludeRelationships includeRelationships,
+			Set<String> renditionFilter, boolean includePathSegments,
+			String orderBy, boolean cacheEnabled) {
+		return new OperationContextImpl(filter, includeAcls,
+				includeAllowableActions, includePolicies, includeRelationships,
+				renditionFilter, includePathSegments, orderBy, cacheEnabled);
 	}
 
 	/*
@@ -385,16 +407,20 @@ public class PersistentSessionImpl imple
 
 		// ask the cache first
 		if (context.isCacheEnabled()) {
-			result = this.cache.getById(objectId.getId(), context.getCacheKey());
+			result = this.cache
+					.getById(objectId.getId(), context.getCacheKey());
 			if (result != null) {
 				return result;
 			}
 		}
 
 		// get the object
-		ObjectData objectData = this.binding.getObjectService().getObject(getRepositoryId(), objectId.getId(),
-				context.getFilterString(), context.isIncludeAllowableActions(), context.getIncludeRelationships(),
-				context.getRenditionFilterString(), context.isIncludePolicies(), context.isIncludeAcls(), null);
+		ObjectData objectData = this.binding.getObjectService().getObject(
+				getRepositoryId(), objectId.getId(), context.getFilterString(),
+				context.isIncludeAllowableActions(),
+				context.getIncludeRelationships(),
+				context.getRenditionFilterString(),
+				context.isIncludePolicies(), context.isIncludeAcls(), null);
 
 		result = getObjectFactory().convertObject(objectData, context);
 
@@ -442,9 +468,14 @@ public class PersistentSessionImpl imple
 		}
 
 		// get the object
-		ObjectData objectData = this.binding.getObjectService().getObjectByPath(getRepositoryId(), path,
-				context.getFilterString(), context.isIncludeAllowableActions(), context.getIncludeRelationships(),
-				context.getRenditionFilterString(), context.isIncludePolicies(), context.isIncludeAcls(), null);
+		ObjectData objectData = this.binding.getObjectService()
+				.getObjectByPath(getRepositoryId(), path,
+						context.getFilterString(),
+						context.isIncludeAllowableActions(),
+						context.getIncludeRelationships(),
+						context.getRenditionFilterString(),
+						context.isIncludePolicies(), context.isIncludeAcls(),
+						null);
 
 		result = getObjectFactory().convertObject(objectData, context);
 
@@ -483,6 +514,11 @@ public class PersistentSessionImpl imple
 	 * (non-Javadoc)
 	 * 
 	 * 
+	 * 
+	 * 
+	 * 
+	 * 
+	 * 
 	 * @seeorg.apache.opencmis.client.api.Session#getRootFolder(org.apache.opencmis
 	 * .client.api. OperationContext)
 	 */
@@ -491,7 +527,8 @@ public class PersistentSessionImpl imple
 
 		CmisObject rootFolder = getObject(createObjectId(rootFolderId), context);
 		if (!(rootFolder instanceof Folder)) {
-			throw new CmisRuntimeException("Root folder object is not a folder!");
+			throw new CmisRuntimeException(
+					"Root folder object is not a folder!");
 		}
 
 		return (Folder) rootFolder;
@@ -504,41 +541,45 @@ public class PersistentSessionImpl imple
 	 * org.apache.opencmis.client.api.Session#getTypeChildren(java.lang.String,
 	 * boolean, int)
 	 */
-	public PagingList<ObjectType> getTypeChildren(final String typeId, final boolean includePropertyDefinitions,
-			final int itemsPerPage) {
+	public PagingIterable<ObjectType> getTypeChildren(final String typeId,
+			final boolean includePropertyDefinitions, final int itemsPerPage) {
 		if (itemsPerPage < 1) {
 			throw new IllegalArgumentException("itemsPerPage must be > 0!");
 		}
 
-		final String repositoryId = getRepositoryId();
-		final RepositoryService repositoryService = getBinding().getRepositoryService();
-
-		// set up PagingList object
-		return new AbstractPagingList<ObjectType>() {
+		final RepositoryService repositoryService = getBinding()
+				.getRepositoryService();
+		final ObjectFactory objectFactory = this.getObjectFactory();
+		final OperationContext ctxt = new OperationContextImpl(context);
 
-			@Override
-			protected FetchResult fetchPage(int pageNumber) {
-				int skipCount = pageNumber * getMaxItemsPerPage();
-
-				// fetch the data
-				TypeDefinitionList tdl = repositoryService.getTypeChildren(repositoryId, typeId,
-						includePropertyDefinitions, BigInteger.valueOf(getMaxItemsPerPage()), BigInteger
-								.valueOf(skipCount), null);
-
-				// convert type definitions
-				List<ObjectType> page = new ArrayList<ObjectType>(tdl.getList().size());
-				for (TypeDefinition typeDefinition : tdl.getList()) {
-					page.add(objectFactory.convertTypeDefinition(typeDefinition));
-				}
+		return new DefaultPagingIterable<ObjectType>(
+				new AbstractPageFetch<ObjectType>() {
 
-				return new FetchResult(page, tdl.getNumItems(), tdl.hasMoreItems());
-			}
+					@Override
+					protected AbstractPageFetch.PageFetchResult<ObjectType> fetchPage(
+							long skipCount) {
+
+						// fetch the data
+						TypeDefinitionList tdl = repositoryService
+								.getTypeChildren(PersistentSessionImpl.this
+										.getRepositoryId(), typeId,
+										includePropertyDefinitions, BigInteger
+												.valueOf(itemsPerPage),
+										BigInteger.valueOf(skipCount), null);
+
+						// convert type definitions
+						List<ObjectType> page = new ArrayList<ObjectType>(tdl
+								.getList().size());
+						for (TypeDefinition typeDefinition : tdl.getList()) {
+							page.add(objectFactory
+									.convertTypeDefinition(typeDefinition));
+						}
 
-			@Override
-			public int getMaxItemsPerPage() {
-				return itemsPerPage;
-			}
-		};
+						return new AbstractPageFetch.PageFetchResult<ObjectType>(
+								page, tdl.getNumItems(), tdl.hasMoreItems()) {
+						};
+					}
+				});
 	}
 
 	/*
@@ -549,8 +590,8 @@ public class PersistentSessionImpl imple
 	 * )
 	 */
 	public ObjectType getTypeDefinition(String typeId) {
-		TypeDefinition typeDefinition = getBinding().getRepositoryService().getTypeDefinition(getRepositoryId(),
-				typeId, null);
+		TypeDefinition typeDefinition = getBinding().getRepositoryService()
+				.getTypeDefinition(getRepositoryId(), typeId, null);
 		return objectFactory.convertTypeDefinition(typeDefinition);
 	}
 
@@ -561,9 +602,12 @@ public class PersistentSessionImpl imple
 	 * org.apache.opencmis.client.api.Session#getTypeDescendants(java.lang.String
 	 * , int, boolean)
 	 */
-	public List<Tree<ObjectType>> getTypeDescendants(String typeId, int depth, boolean includePropertyDefinitions) {
-		List<TypeDefinitionContainer> descendants = getBinding().getRepositoryService().getTypeDescendants(
-				getRepositoryId(), typeId, BigInteger.valueOf(depth), includePropertyDefinitions, null);
+	public List<Tree<ObjectType>> getTypeDescendants(String typeId, int depth,
+			boolean includePropertyDefinitions) {
+		List<TypeDefinitionContainer> descendants = getBinding()
+				.getRepositoryService().getTypeDescendants(getRepositoryId(),
+						typeId, BigInteger.valueOf(depth),
+						includePropertyDefinitions, null);
 
 		return convertTypeDescendants(descendants);
 	}
@@ -572,12 +616,15 @@ public class PersistentSessionImpl imple
 	 * Converts provider <code>TypeDefinitionContainer</code> to API
 	 * <code>Container</code>.
 	 */
-	private List<Tree<ObjectType>> convertTypeDescendants(List<TypeDefinitionContainer> descendantsList) {
+	private List<Tree<ObjectType>> convertTypeDescendants(
+			List<TypeDefinitionContainer> descendantsList) {
 		List<Tree<ObjectType>> result = new ArrayList<Tree<ObjectType>>();
 
 		for (TypeDefinitionContainer container : descendantsList) {
-			ObjectType objectType = objectFactory.convertTypeDefinition(container.getTypeDefinition());
-			List<Tree<ObjectType>> children = convertTypeDescendants(container.getChildren());
+			ObjectType objectType = objectFactory
+					.convertTypeDefinition(container.getTypeDefinition());
+			List<Tree<ObjectType>> children = convertTypeDescendants(container
+					.getChildren());
 
 			result.add(new ContainerImpl<ObjectType>(objectType, children));
 		}
@@ -591,8 +638,10 @@ public class PersistentSessionImpl imple
 	 * @see org.apache.opencmis.client.api.Session#query(java.lang.String,
 	 * boolean, int)
 	 */
-	public PagingList<QueryResult> query(final String statement, final boolean searchAllVersions, final int itemsPerPage) {
-		return query(statement, searchAllVersions, getDefaultContext(), itemsPerPage);
+	public PagingIterable<QueryResult> query(final String statement,
+			final boolean searchAllVersions, final int itemsPerPage) {
+		return query(statement, searchAllVersions, getDefaultContext(),
+				itemsPerPage);
 	}
 
 	/*
@@ -601,52 +650,64 @@ public class PersistentSessionImpl imple
 	 * @see org.apache.opencmis.client.api.Session#query(java.lang.String,
 	 * boolean, org.apache.opencmis.client.api.OperationContext, int)
 	 */
-	public PagingList<QueryResult> query(final String statement, final boolean searchAllVersions,
-			OperationContext context, final int itemsPerPage) {
+	public PagingIterable<QueryResult> query(final String statement,
+			final boolean searchAllVersions, OperationContext context,
+			final int itemsPerPage) {
 
-		final DiscoveryService discoveryService = getBinding().getDiscoveryService();
-		final ObjectFactory of = getObjectFactory();
+		if (itemsPerPage < 1) {
+			throw new IllegalArgumentException("itemsPerPage must be > 0!");
+		}
+
+		final DiscoveryService discoveryService = getBinding()
+				.getDiscoveryService();
+		final ObjectFactory objectFactory = this.getObjectFactory();
 		final OperationContext ctxt = new OperationContextImpl(context);
 
-		// set up PagingList object
-		return new AbstractPagingList<QueryResult>() {
+		return new DefaultPagingIterable<QueryResult>(
+				new AbstractPageFetch<QueryResult>() {
 
-			@Override
-			protected FetchResult fetchPage(int pageNumber) {
-				int skipCount = pageNumber * getMaxItemsPerPage();
-
-				// fetch the data
-				ObjectList resultList = discoveryService.query(getRepositoryId(), statement, searchAllVersions, ctxt
-						.isIncludeAllowableActions(), ctxt.getIncludeRelationships(), ctxt.getRenditionFilterString(),
-						BigInteger.valueOf(getMaxItemsPerPage()), BigInteger.valueOf(skipCount), null);
-
-				// convert type definitions
-				List<QueryResult> page = new ArrayList<QueryResult>();
-				if (resultList.getObjects() != null) {
-					for (ObjectData objectData : resultList.getObjects()) {
-						if (objectData == null) {
-							continue;
+					@Override
+					protected AbstractPageFetch.PageFetchResult<QueryResult> fetchPage(
+							long skipCount) {
+
+						// fetch the data
+						ObjectList resultList = discoveryService.query(
+								getRepositoryId(), statement,
+								searchAllVersions, ctxt
+										.isIncludeAllowableActions(), ctxt
+										.getIncludeRelationships(), ctxt
+										.getRenditionFilterString(), BigInteger
+										.valueOf(itemsPerPage), BigInteger
+										.valueOf(skipCount), null);
+
+						// convert type definitions
+						List<QueryResult> page = new ArrayList<QueryResult>();
+						if (resultList.getObjects() != null) {
+							for (ObjectData objectData : resultList
+									.getObjects()) {
+								if (objectData == null) {
+									continue;
+								}
+
+								page.add(objectFactory
+										.convertQueryResult(objectData));
+							}
 						}
 
-						page.add(of.convertQueryResult(objectData));
+						return new AbstractPageFetch.PageFetchResult<QueryResult>(
+								page, resultList.getNumItems(), resultList.hasMoreItems()) {
+						};
 					}
-				}
+				});
 
-				return new FetchResult(page, resultList.getNumItems(), resultList.hasMoreItems());
-			}
-
-			@Override
-			public int getMaxItemsPerPage() {
-				return itemsPerPage;
-			}
-		};
 	}
 
 	public String setExtensionContext(String context) {
 		throw new CmisRuntimeException("not implemented");
 	}
 
-	public ExtensionHandler setExtensionHandler(String context, ExtensionHandler extensionHandler) {
+	public ExtensionHandler setExtensionHandler(String context,
+			ExtensionHandler extensionHandler) {
 		throw new CmisRuntimeException("not implemented");
 	}
 
@@ -668,7 +729,8 @@ public class PersistentSessionImpl imple
 				throw new IllegalStateException("Repository Id is not set!");
 			}
 
-			repositoryInfo = getBinding().getRepositoryService().getRepositoryInfo(repositoryId, null);
+			repositoryInfo = getBinding().getRepositoryService()
+					.getRepositoryInfo(repositoryId, null);
 		} finally {
 			fLock.writeLock().unlock();
 		}
@@ -715,16 +777,22 @@ public class PersistentSessionImpl imple
 	 * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
 	 * java.util.List, java.util.List)
 	 */
-	public ObjectId createDocument(Map<String, ?> properties, ObjectId folderId, ContentStream contentStream,
-			VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
+	public ObjectId createDocument(Map<String, ?> properties,
+			ObjectId folderId, ContentStream contentStream,
+			VersioningState versioningState, List<Policy> policies,
+			List<Ace> addAces, List<Ace> removeAces) {
 		if ((folderId != null) && (folderId.getId() == null)) {
 			throw new IllegalArgumentException("Folder Id must be set!");
 		}
 
-		String newId = getBinding().getObjectService().createDocument(getRepositoryId(),
-				objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
-				(folderId == null ? null : folderId.getId()), objectFactory.convertContentStream(contentStream),
-				versioningState, objectFactory.convertPolicies(policies), objectFactory.convertAces(addAces),
+		String newId = getBinding().getObjectService().createDocument(
+				getRepositoryId(),
+				objectFactory.convertProperties(properties, null,
+						CREATE_UPDATABILITY),
+				(folderId == null ? null : folderId.getId()),
+				objectFactory.convertContentStream(contentStream),
+				versioningState, objectFactory.convertPolicies(policies),
+				objectFactory.convertAces(addAces),
 				objectFactory.convertAces(removeAces), null);
 
 		if (newId == null) {
@@ -744,8 +812,10 @@ public class PersistentSessionImpl imple
 	 * org.apache.opencmis.commons.enums.VersioningState, java.util.List,
 	 * java.util.List, java.util.List)
 	 */
-	public ObjectId createDocumentFromSource(ObjectId source, Map<String, ?> properties, ObjectId folderId,
-			VersioningState versioningState, List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
+	public ObjectId createDocumentFromSource(ObjectId source,
+			Map<String, ?> properties, ObjectId folderId,
+			VersioningState versioningState, List<Policy> policies,
+			List<Ace> addAces, List<Ace> removeAces) {
 		if ((folderId != null) && (folderId.getId() == null)) {
 			throw new IllegalArgumentException("Folder Id must be set!");
 		}
@@ -760,13 +830,21 @@ public class PersistentSessionImpl imple
 		}
 
 		if (type.getBaseTypeId() != BaseTypeId.CMIS_DOCUMENT) {
-			throw new IllegalArgumentException("Source object must be a document!");
+			throw new IllegalArgumentException(
+					"Source object must be a document!");
 		}
 
-		String newId = getBinding().getObjectService().createDocumentFromSource(getRepositoryId(), source.getId(),
-				objectFactory.convertProperties(properties, type, CREATE_UPDATABILITY),
-				(folderId == null ? null : folderId.getId()), versioningState, objectFactory.convertPolicies(policies),
-				objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
+		String newId = getBinding().getObjectService()
+				.createDocumentFromSource(
+						getRepositoryId(),
+						source.getId(),
+						objectFactory.convertProperties(properties, type,
+								CREATE_UPDATABILITY),
+						(folderId == null ? null : folderId.getId()),
+						versioningState,
+						objectFactory.convertPolicies(policies),
+						objectFactory.convertAces(addAces),
+						objectFactory.convertAces(removeAces), null);
 
 		if (newId == null) {
 			return null;
@@ -782,16 +860,20 @@ public class PersistentSessionImpl imple
 	 * org.apache.opencmis.client.api.ObjectId, java.util.List, java.util.List,
 	 * java.util.List)
 	 */
-	public ObjectId createFolder(Map<String, ?> properties, ObjectId folderId, List<Policy> policies,
-			List<Ace> addAces, List<Ace> removeAces) {
+	public ObjectId createFolder(Map<String, ?> properties, ObjectId folderId,
+			List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
 		if ((folderId != null) && (folderId.getId() == null)) {
 			throw new IllegalArgumentException("Folder Id must be set!");
 		}
 
-		String newId = getBinding().getObjectService().createFolder(getRepositoryId(),
-				objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
-				(folderId == null ? null : folderId.getId()), objectFactory.convertPolicies(policies),
-				objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
+		String newId = getBinding().getObjectService().createFolder(
+				getRepositoryId(),
+				objectFactory.convertProperties(properties, null,
+						CREATE_UPDATABILITY),
+				(folderId == null ? null : folderId.getId()),
+				objectFactory.convertPolicies(policies),
+				objectFactory.convertAces(addAces),
+				objectFactory.convertAces(removeAces), null);
 
 		if (newId == null) {
 			return null;
@@ -807,16 +889,20 @@ public class PersistentSessionImpl imple
 	 * org.apache.opencmis.client.api.ObjectId, java.util.List, java.util.List,
 	 * java.util.List)
 	 */
-	public ObjectId createPolicy(Map<String, ?> properties, ObjectId folderId, List<Policy> policies,
-			List<Ace> addAces, List<Ace> removeAces) {
+	public ObjectId createPolicy(Map<String, ?> properties, ObjectId folderId,
+			List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
 		if ((folderId != null) && (folderId.getId() == null)) {
 			throw new IllegalArgumentException("Folder Id must be set!");
 		}
 
-		String newId = getBinding().getObjectService().createPolicy(getRepositoryId(),
-				objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
-				(folderId == null ? null : folderId.getId()), objectFactory.convertPolicies(policies),
-				objectFactory.convertAces(addAces), objectFactory.convertAces(removeAces), null);
+		String newId = getBinding().getObjectService().createPolicy(
+				getRepositoryId(),
+				objectFactory.convertProperties(properties, null,
+						CREATE_UPDATABILITY),
+				(folderId == null ? null : folderId.getId()),
+				objectFactory.convertPolicies(policies),
+				objectFactory.convertAces(addAces),
+				objectFactory.convertAces(removeAces), null);
 
 		if (newId == null) {
 			return null;
@@ -832,11 +918,14 @@ public class PersistentSessionImpl imple
 	 * org.apache.opencmis.client.api.Session#createRelationship(java.util.Map,
 	 * java.util.List, java.util.List, java.util.List)
 	 */
-	public ObjectId createRelationship(Map<String, ?> properties, List<Policy> policies, List<Ace> addAces,
-			List<Ace> removeAces) {
-		String newId = getBinding().getObjectService().createRelationship(getRepositoryId(),
-				objectFactory.convertProperties(properties, null, CREATE_UPDATABILITY),
-				objectFactory.convertPolicies(policies), objectFactory.convertAces(addAces),
+	public ObjectId createRelationship(Map<String, ?> properties,
+			List<Policy> policies, List<Ace> addAces, List<Ace> removeAces) {
+		String newId = getBinding().getObjectService().createRelationship(
+				getRepositoryId(),
+				objectFactory.convertProperties(properties, null,
+						CREATE_UPDATABILITY),
+				objectFactory.convertPolicies(policies),
+				objectFactory.convertAces(addAces),
 				objectFactory.convertAces(removeAces), null);
 
 		if (newId == null) {

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/DocumentTypeImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/DocumentTypeImpl.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/DocumentTypeImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/DocumentTypeImpl.java Thu Apr 22 13:27:21 2010
@@ -22,7 +22,7 @@ import java.util.List;
 
 import org.apache.chemistry.opencmis.client.api.DocumentType;
 import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.PagingList;
+import org.apache.chemistry.opencmis.client.api.PagingIterable;
 import org.apache.chemistry.opencmis.client.api.Session;
 import org.apache.chemistry.opencmis.client.api.Tree;
 import org.apache.chemistry.opencmis.commons.api.DocumentTypeDefinition;
@@ -46,7 +46,7 @@ public class DocumentTypeImpl extends Do
 		return helper.getBaseType();
 	}
 
-	public PagingList<ObjectType> getChildren(int itemsPerPage) {
+	public PagingIterable<ObjectType> getChildren(int itemsPerPage) {
 		return helper.getChildren(itemsPerPage);
 	}
 

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/FolderTypeImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/FolderTypeImpl.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/FolderTypeImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/FolderTypeImpl.java Thu Apr 22 13:27:21 2010
@@ -22,7 +22,7 @@ import java.util.List;
 
 import org.apache.chemistry.opencmis.client.api.FolderType;
 import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.PagingList;
+import org.apache.chemistry.opencmis.client.api.PagingIterable;
 import org.apache.chemistry.opencmis.client.api.Session;
 import org.apache.chemistry.opencmis.client.api.Tree;
 import org.apache.chemistry.opencmis.commons.api.FolderTypeDefinition;
@@ -46,7 +46,7 @@ public class FolderTypeImpl extends Fold
 		return helper.getBaseType();
 	}
 
-	public PagingList<ObjectType> getChildren(int itemsPerPage) {
+	public PagingIterable<ObjectType> getChildren(int itemsPerPage) {
 		return helper.getChildren(itemsPerPage);
 	}
 

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/ObjectTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/ObjectTypeHelper.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/ObjectTypeHelper.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/ObjectTypeHelper.java Thu Apr 22 13:27:21 2010
@@ -21,7 +21,7 @@ package org.apache.chemistry.opencmis.cl
 import java.util.List;
 
 import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.PagingList;
+import org.apache.chemistry.opencmis.client.api.PagingIterable;
 import org.apache.chemistry.opencmis.client.api.Session;
 import org.apache.chemistry.opencmis.client.api.Tree;
 
@@ -75,7 +75,7 @@ public class ObjectTypeHelper {
 		return parentType;
 	}
 
-	public PagingList<ObjectType> getChildren(int itemsPerPage) {
+	public PagingIterable<ObjectType> getChildren(int itemsPerPage) {
 		return session.getTypeChildren(objectType.getId(), true, itemsPerPage);
 	}
 

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/PolicyTypeImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/PolicyTypeImpl.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/PolicyTypeImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/PolicyTypeImpl.java Thu Apr 22 13:27:21 2010
@@ -21,7 +21,7 @@ package org.apache.chemistry.opencmis.cl
 import java.util.List;
 
 import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.PagingList;
+import org.apache.chemistry.opencmis.client.api.PagingIterable;
 import org.apache.chemistry.opencmis.client.api.PolicyType;
 import org.apache.chemistry.opencmis.client.api.Session;
 import org.apache.chemistry.opencmis.client.api.Tree;
@@ -46,7 +46,7 @@ public class PolicyTypeImpl extends Poli
 		return helper.getBaseType();
 	}
 
-	public PagingList<ObjectType> getChildren(int itemsPerPage) {
+	public PagingIterable<ObjectType> getChildren(int itemsPerPage) {
 		return helper.getChildren(itemsPerPage);
 	}
 

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/RelationshipTypeImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/RelationshipTypeImpl.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/RelationshipTypeImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/objecttype/RelationshipTypeImpl.java Thu Apr 22 13:27:21 2010
@@ -22,7 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.chemistry.opencmis.client.api.ObjectType;
-import org.apache.chemistry.opencmis.client.api.PagingList;
+import org.apache.chemistry.opencmis.client.api.PagingIterable;
 import org.apache.chemistry.opencmis.client.api.RelationshipType;
 import org.apache.chemistry.opencmis.client.api.Session;
 import org.apache.chemistry.opencmis.client.api.Tree;
@@ -49,7 +49,7 @@ public class RelationshipTypeImpl extend
 		return helper.getBaseType();
 	}
 
-	public PagingList<ObjectType> getChildren(int itemsPerPage) {
+	public PagingIterable<ObjectType> getChildren(int itemsPerPage) {
 		return helper.getChildren(itemsPerPage);
 	}
 

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractPageFetch.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractPageFetch.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractPageFetch.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/AbstractPageFetch.java Thu Apr 22 13:27:21 2010
@@ -43,7 +43,8 @@ public abstract class AbstractPageFetch<
 		private BigInteger totalItems;
 		private Boolean hasMoreItems;
 
-		public PageFetchResult(List<T> page, BigInteger totalItems, Boolean hasMoreItems) {
+		public PageFetchResult(List<T> page, BigInteger totalItems,
+				Boolean hasMoreItems) {
 			this.page = page;
 			this.totalItems = totalItems;
 			this.hasMoreItems = hasMoreItems;

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/DefaultPagingIterator.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/DefaultPagingIterator.java?rev=936836&r1=936835&r2=936836&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/DefaultPagingIterator.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/util/DefaultPagingIterator.java Thu Apr 22 13:27:21 2010
@@ -98,7 +98,7 @@ public class DefaultPagingIterator<T> im
 			return true;
 		}
 
-		return (skipCount + skipOffset) < totalItems - 1;
+		return (skipCount + skipOffset) < totalItems;
 	}
 
 	/*
@@ -108,7 +108,7 @@ public class DefaultPagingIterator<T> im
 	 */
 	public T next() {
 		PageFetchResult<T> currentPage = getPage();
-		skipOffset++;
+//		skipOffset++;
 
 		List<T> items = currentPage.getPage();
 		if (items == null || items.isEmpty()) {
@@ -129,7 +129,7 @@ public class DefaultPagingIterator<T> im
 			return null;
 		}
 
-		return items.get(skipOffset);
+		return items.get(skipOffset++);
 	}
 
 	/*
@@ -146,6 +146,9 @@ public class DefaultPagingIterator<T> im
 		if (page == null) {
 			return false;
 		}
+		if (skipOffset < page.getPage().size()) {
+			return true;
+		}
 		if (page.getHasMoreItems() != null) {
 			return page.getHasMoreItems().booleanValue();
 		}