You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2012/07/06 13:45:38 UTC
svn commit: r1358140 - in
/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src:
main/java/org/apache/chemistry/opencmis/inmemory/server/
main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/
main/java/org...
Author: jens
Date: Fri Jul 6 11:45:38 2012
New Revision: 1358140
URL: http://svn.apache.org/viewvc?rev=1358140&view=rev
Log:
fix bug wrong numItems returned in getChildren when paging is used [CMIS-539]
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Children.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java?rev=1358140&r1=1358139&r2=1358140&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryNavigationServiceImpl.java Fri Jul 6 11:45:38 2012
@@ -49,6 +49,7 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler;
import org.apache.chemistry.opencmis.inmemory.DataObjectCreator;
import org.apache.chemistry.opencmis.inmemory.FilterParser;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Children;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
@@ -293,10 +294,10 @@ public class InMemoryNavigationServiceIm
return null; // it is a document and has no children
}
- List<? extends StoredObject> children = folderOnly ? folder.getFolderChildren(maxItems, skipCount, user) : folder
+ Children.ChildrenResult children = folderOnly ? folder.getFolderChildren(maxItems, skipCount, user) : folder
.getChildren(maxItems, skipCount, user);
- for (StoredObject spo : children) {
+ for (StoredObject spo : children.getChildren()) {
ObjectInFolderDataImpl oifd = new ObjectInFolderDataImpl();
if (includePathSegments != null && includePathSegments) {
oifd.setPathSegment(spo.getName());
@@ -317,7 +318,7 @@ public class InMemoryNavigationServiceIm
}
result.setObjects(folderList);
- result.setNumItems(BigInteger.valueOf(folderList.size()));
+ result.setNumItems(BigInteger.valueOf(children.getNoItems()));
if (objectInfos != null) {
ObjectInfoImpl objectInfo = new ObjectInfoImpl();
fAtomLinkProvider.fillInformationForAtomLinks(repositoryId, so, objectInfo);
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java?rev=1358140&r1=1358139&r2=1358140&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/server/InMemoryObjectServiceImpl.java Fri Jul 6 11:45:38 2012
@@ -63,6 +63,7 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.spi.Holder;
import org.apache.chemistry.opencmis.inmemory.FilterParser;
import org.apache.chemistry.opencmis.inmemory.NameValidator;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Children.ChildrenResult;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Content;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Document;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
@@ -961,7 +962,8 @@ public class InMemoryObjectServiceImpl e
*/
private boolean deleteRecursive(ObjectStore folderStore, Folder parentFolder, boolean continueOnFailure,
boolean allVersions, List<String> failedToDeleteIds, String user) {
- List<StoredObject> children = parentFolder.getChildren(-1, -1, "Admin");
+ ChildrenResult childrenResult = parentFolder.getChildren(-1, -1, "Admin");
+ List<? extends StoredObject> children = childrenResult.getChildren();
if (null == children) {
return true;
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Children.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Children.java?rev=1358140&r1=1358139&r2=1358140&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Children.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Children.java Fri Jul 6 11:45:38 2012
@@ -27,6 +27,24 @@ import java.util.List;
* @author Jens
*/
public interface Children {
+
+ public class ChildrenResult {
+ private int noItems;
+ private List<? extends StoredObject> children;
+
+ public ChildrenResult(List<? extends StoredObject> children, int noItems) {
+ this.children = children;
+ this.noItems = noItems;
+ }
+
+ public int getNoItems() {
+ return noItems;
+ }
+
+ public List<? extends StoredObject> getChildren() {
+ return children;
+ }
+ }
/**
* get all the children of this folder. To support paging an initial offset
@@ -39,7 +57,7 @@ public interface Children {
* @param user
* @return list of children objects
*/
- List<StoredObject> getChildren(int maxItems, int skipCount, String user );
+ ChildrenResult getChildren(int maxItems, int skipCount, String user );
/**
* get all the children of this folder which are folders. To support paging
@@ -53,7 +71,7 @@ public interface Children {
* @param user
* @return list of children folders
*/
- List<Folder> getFolderChildren(int maxItems, int skipCount, String user);
+ ChildrenResult getFolderChildren(int maxItems, int skipCount, String user);
/**
* indicate if a child with the given name exists in this folder
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java?rev=1358140&r1=1358139&r2=1358140&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java Fri Jul 6 11:45:38 2012
@@ -112,7 +112,7 @@ public class FolderImpl extends Abstract
}
}
- public List<StoredObject> getChildren(int maxItems, int skipCount, String user) {
+ public ChildrenResult getChildren(int maxItems, int skipCount, String user) {
List<StoredObject> result = new ArrayList<StoredObject>();
for (String id : fObjStore.getIds()) {
StoredObject obj = fObjStore.getObject(id);
@@ -136,13 +136,16 @@ public class FolderImpl extends Abstract
if (skipCount < 0) {
skipCount = 0;
}
+
int from = Math.min(skipCount, result.size());
int to = Math.min(maxItems + from, result.size());
+ int noItems = result.size();
+
result = result.subList(from, to);
- return result;
+ return new ChildrenResult(result, noItems);
}
- public List<Folder> getFolderChildren(int maxItems, int skipCount, String user) {
+ public ChildrenResult getFolderChildren(int maxItems, int skipCount, String user) {
List<Folder> result = new ArrayList<Folder>();
for (String id : fObjStore.getIds()) {
StoredObject obj = fObjStore.getObject(id);
@@ -156,8 +159,10 @@ public class FolderImpl extends Abstract
sortFolderList(result);
int from = Math.min(skipCount, result.size());
int to = Math.min(maxItems + from, result.size());
+ int noItems = result.size();
+
result = result.subList(from, to);
- return result;
+ return new ChildrenResult(result, noItems);
}
public boolean hasChild(String name) {
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java?rev=1358140&r1=1358139&r2=1358140&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java Fri Jul 6 11:45:38 2012
@@ -430,7 +430,7 @@ public class ObjectStoreImpl implements
}
// check if children exist
- List<StoredObject> children = ((Folder) folder).getChildren(-1, -1, user);
+ List<? extends StoredObject> children = ((Folder) folder).getChildren(-1, -1, user).getChildren();
if (children != null && !children.isEmpty()) {
throw new CmisConstraintException("Cannot delete folder with id: " + folderId + ". Folder is not empty.");
}
@@ -545,7 +545,7 @@ public class ObjectStoreImpl implements
}
private Acl applyAclRecursive(Folder folder, Acl addAces, Acl removeAces, String principalId) {
- List<StoredObject> children = folder.getChildren(-1, -1, ADMIN_PRINCIPAL_ID);
+ List<? extends StoredObject> children = folder.getChildren(-1, -1, ADMIN_PRINCIPAL_ID).getChildren();
Acl result = applyAcl(folder, addAces, removeAces);
@@ -567,7 +567,7 @@ public class ObjectStoreImpl implements
}
private Acl applyAclRecursive(Folder folder, Acl acl, String principalId) {
- List<StoredObject> children = folder.getChildren(-1, -1, ADMIN_PRINCIPAL_ID);
+ List<? extends StoredObject> children = folder.getChildren(-1, -1, ADMIN_PRINCIPAL_ID).getChildren();
Acl result = applyAcl(folder, acl);
Modified: chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java?rev=1358140&r1=1358139&r2=1358140&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/FolderTest.java Fri Jul 6 11:45:38 2012
@@ -79,11 +79,11 @@ public class FolderTest extends TestCase
assertEquals(f1, fTest);
fTest = fStore.getObjectByPath("/Folder 1/Folder 1.1", USER);
assertEquals(f11, fTest);
- List<StoredObject> subFolders = fRoot.getChildren(-1, -1, "user");
+ List<? extends StoredObject> subFolders = fRoot.getChildren(-1, -1, "user").getChildren();
assertEquals(4, subFolders.size());
- subFolders = f2.getChildren(-1, -1, "user");
+ subFolders = f2.getChildren(-1, -1, "user").getChildren();
assertEquals(0, subFolders.size());
- subFolders = f1.getChildren(-1, -1, "user");
+ subFolders = f1.getChildren(-1, -1, "user").getChildren();
assertEquals(1, subFolders.size());
}