]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-735 Added support for getFiltered to fetch totalItem count when pagination...
authorPatrick Schmitz <pschmitz@berkeley.edu>
Tue, 16 Feb 2010 06:01:55 +0000 (06:01 +0000)
committerPatrick Schmitz <pschmitz@berkeley.edu>
Tue, 16 Feb 2010 06:01:55 +0000 (06:01 +0000)
Added support in vocabulary, personAuthority, and orgAuthority to make lists (of authorities as well as items) return pagination information in payload. This is not part of the individual item payloads, and so does not impact the nuxeo schemas.

13 files changed:
services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/RepositoryJavaClientImpl.java
services/organization/jaxb/src/main/resources/organization_common.xsd
services/organization/jaxb/src/main/resources/orgauthority_common.xsd
services/organization/service/src/main/java/org/collectionspace/services/organization/nuxeo/OrgAuthorityDocumentModelHandler.java
services/organization/service/src/main/java/org/collectionspace/services/organization/nuxeo/OrganizationDocumentModelHandler.java
services/person/jaxb/src/main/resources/person_common.xsd
services/person/jaxb/src/main/resources/personauthority_common.xsd
services/person/service/src/main/java/org/collectionspace/services/person/nuxeo/PersonAuthorityDocumentModelHandler.java
services/person/service/src/main/java/org/collectionspace/services/person/nuxeo/PersonDocumentModelHandler.java
services/vocabulary/jaxb/src/main/resources/vocabulary_common.xsd
services/vocabulary/jaxb/src/main/resources/vocabularyitem_common.xsd
services/vocabulary/service/src/main/java/org/collectionspace/services/vocabulary/nuxeo/VocabularyDocumentModelHandler.java
services/vocabulary/service/src/main/java/org/collectionspace/services/vocabulary/nuxeo/VocabularyItemDocumentModelHandler.java

index aca19680b3c57f4336fcee78660cd0d1d143a573..22b49af62b39d29305855c97a33c24a1b3f1ec6c 100644 (file)
@@ -311,9 +311,11 @@ public class RepositoryJavaClientImpl implements RepositoryClient {
                 query.append(" AND " + where + "AND ecm:isProxy = 0");
             }
             DocumentModelList docList = null;
+            // If we have limit and/or offset, then pass true to get totalSize
+            // in returned DocumentModelList.
             if ((docFilter.getOffset() > 0) || (docFilter.getPageSize() > 0)) {
                 docList = repoSession.query(query.toString(), null,
-                        docFilter.getPageSize(), docFilter.getOffset(), false);
+                        docFilter.getPageSize(), docFilter.getOffset(), true);
             } else {
                 docList = repoSession.query(query.toString());
             }
index ca80816c54527f0038aa2d210b58a8f6cd9394f5..51398b24d89438f5a997054f91b671484946c344 100644 (file)
     <xs:element name="organizations-common-list">
         <xs:complexType>
             <xs:sequence>
-                <xs:element name="organization_list_item" maxOccurs="unbounded">
+                                                               <xs:element name="pageNum" type="xs:unsignedInt" />
+                                                               <xs:element name="pageSize" type="xs:unsignedInt" />
+                                                               <xs:element name="totalItems" type="xs:unsignedInt" />
+                 <xs:element name="organization_list_item" maxOccurs="unbounded">
                     <xs:complexType>
                         <xs:sequence>
                             <xs:element name="displayName" type="xs:string"
index 8859e2617b096d1177a15e87ea5c067ce5626c4a..42e179aa9dd15db11bfae19484bfaf3eef5901cc 100644 (file)
     <xs:element name="orgauthorities-common-list">
         <xs:complexType>
             <xs:sequence>
-                <xs:element name="orgauthority-list-item" maxOccurs="unbounded">
+                                                               <xs:element name="pageNum" type="xs:unsignedInt" />
+                                                               <xs:element name="pageSize" type="xs:unsignedInt" />
+                                                               <xs:element name="totalItems" type="xs:unsignedInt" />
+                 <xs:element name="orgauthority-list-item" maxOccurs="unbounded">
                     <xs:complexType>
                         <xs:sequence>
                             <xs:element name="displayName" type="xs:string"
index 53eb29e290d544a8982f99950a95c68cf4a44cc1..c4a4f346af8a120d43f478bcc0d4ea91709df084 100644 (file)
@@ -28,6 +28,7 @@ import java.util.List;
 
 import org.collectionspace.services.OrgAuthorityJAXBSchema;
 import org.collectionspace.services.common.document.DocumentHandler.Action;
+import org.collectionspace.services.common.document.DocumentFilter;
 import org.collectionspace.services.common.document.DocumentWrapper;
 import org.collectionspace.services.organization.OrgauthoritiesCommon;
 import org.collectionspace.services.organization.OrgauthoritiesCommonList;
@@ -112,6 +113,18 @@ public class OrgAuthorityDocumentModelHandler
         OrgauthoritiesCommonList coList = new OrgauthoritiesCommonList();
         List<OrgauthoritiesCommonList.OrgauthorityListItem> list = coList.getOrgauthorityListItem();
 
+        DocumentFilter filter = getDocumentFilter();
+        long pageNum, pageSize;
+        if(filter==null) {
+               pageNum = 0;
+               pageSize = 0;
+        } else {
+               pageSize = filter.getPageSize();
+               pageNum = filter.getOffset()/pageSize;
+        }
+        coList.setPageNum(pageNum);
+        coList.setPageSize(pageSize);
+       coList.setTotalItems(docList.totalSize());
         //FIXME: iterating over a long list of documents is not a long term
         //strategy...need to change to more efficient iterating in future
         Iterator<DocumentModel> iter = docList.iterator();
index 2f07e2e637a597d5ec243b723566bbb820ac63ac..c5c399b3cdc21b81ce7d5a61c2e40ac74c30305d 100644 (file)
@@ -28,6 +28,7 @@ import java.util.List;
 
 import org.collectionspace.services.OrganizationJAXBSchema;
 import org.collectionspace.services.common.context.MultipartServiceContext;
+import org.collectionspace.services.common.document.DocumentFilter;
 import org.collectionspace.services.common.document.DocumentWrapper;
 import org.collectionspace.services.nuxeo.client.java.RemoteDocumentModelHandlerImpl;
 import org.collectionspace.services.nuxeo.util.NuxeoUtils;
@@ -189,6 +190,18 @@ public class OrganizationDocumentModelHandler
                List<OrganizationsCommonList.OrganizationListItem> list = 
                        coList.getOrganizationListItem();
        
+               DocumentFilter filter = getDocumentFilter();
+               long pageNum, pageSize;
+               if(filter==null) {
+                       pageNum = 0;
+                       pageSize = 0;
+               } else {
+                       pageSize = filter.getPageSize();
+                       pageNum = filter.getOffset()/pageSize;
+               }
+               coList.setPageNum(pageNum);
+               coList.setPageSize(pageSize);
+               coList.setTotalItems(docList.totalSize());
                //FIXME: iterating over a long list of documents is not a long term
                //strategy...need to change to more efficient iterating in future
                Iterator<DocumentModel> iter = docList.iterator();
index c4980a9421d32e2e3785aee1ad2745ddafb45342..a877d8ac92e635622a5437089382868e8f6a7621 100644 (file)
     <xs:element name="persons-common-list">
         <xs:complexType>
             <xs:sequence>
-                <xs:element name="person_list_item" maxOccurs="unbounded">
+                                                               <xs:element name="pageNum" type="xs:unsignedInt" />
+                                                               <xs:element name="pageSize" type="xs:unsignedInt" />
+                                                               <xs:element name="totalItems" type="xs:unsignedInt" />
+                 <xs:element name="person_list_item" maxOccurs="unbounded">
                     <xs:complexType>
                         <xs:sequence>
                             <xs:element name="displayName" type="xs:string"
index ea863ee9769c0bf84f143bda286f920894ba2147..69751b37e1546c6c92264626bded270cc67edc7b 100644 (file)
     <xs:element name="personauthorities-common-list">
         <xs:complexType>
             <xs:sequence>
-                <xs:element name="personauthority-list-item" maxOccurs="unbounded">
+                                                               <xs:element name="pageNum" type="xs:unsignedInt" />
+                                                               <xs:element name="pageSize" type="xs:unsignedInt" />
+                                                               <xs:element name="totalItems" type="xs:unsignedInt" />
+                 <xs:element name="personauthority-list-item" maxOccurs="unbounded">
                     <xs:complexType>
                         <xs:sequence>
                             <xs:element name="displayName" type="xs:string"
index e86aef3a2ff627809e8cdf891ab3285edff06ef3..09fb34fd1ade2abb506932de20d43b685ff2dba2 100644 (file)
@@ -28,6 +28,7 @@ import java.util.List;
 
 import org.collectionspace.services.PersonAuthorityJAXBSchema;
 import org.collectionspace.services.common.document.DocumentHandler.Action;
+import org.collectionspace.services.common.document.DocumentFilter;
 import org.collectionspace.services.common.document.DocumentWrapper;
 import org.collectionspace.services.person.PersonauthoritiesCommon;
 import org.collectionspace.services.person.PersonauthoritiesCommonList;
@@ -112,6 +113,18 @@ public class PersonAuthorityDocumentModelHandler
         PersonauthoritiesCommonList coList = new PersonauthoritiesCommonList();
         List<PersonauthoritiesCommonList.PersonauthorityListItem> list = coList.getPersonauthorityListItem();
 
+        DocumentFilter filter = getDocumentFilter();
+        long pageNum, pageSize;
+        if(filter==null) {
+               pageNum = 0;
+               pageSize = 0;
+        } else {
+               pageSize = filter.getPageSize();
+               pageNum = filter.getOffset()/pageSize;
+        }
+        coList.setPageNum(pageNum);
+        coList.setPageSize(pageSize);
+       coList.setTotalItems(docList.totalSize());
         //FIXME: iterating over a long list of documents is not a long term
         //strategy...need to change to more efficient iterating in future
         Iterator<DocumentModel> iter = docList.iterator();
index 5e59d2dd19794715979906e2ebf15c329ac1b701..2bf96742d2c4de8daa70448448c6a45833de4129 100644 (file)
@@ -29,6 +29,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.collectionspace.services.PersonJAXBSchema;
+import org.collectionspace.services.common.document.DocumentFilter;
 import org.collectionspace.services.common.document.DocumentWrapper;
 import org.collectionspace.services.nuxeo.client.java.RemoteDocumentModelHandlerImpl;
 import org.collectionspace.services.nuxeo.util.NuxeoUtils;
@@ -215,6 +216,18 @@ public class PersonDocumentModelHandler
                List<PersonsCommonList.PersonListItem> list = 
                        coList.getPersonListItem();
        
+               DocumentFilter filter = getDocumentFilter();
+               long pageNum, pageSize;
+               if(filter==null) {
+                       pageNum = 0;
+                       pageSize = 0;
+               } else {
+                       pageSize = filter.getPageSize();
+                       pageNum = filter.getOffset()/pageSize;
+               }
+               coList.setPageNum(pageNum);
+               coList.setPageSize(pageSize);
+               coList.setTotalItems(docList.totalSize());
                //FIXME: iterating over a long list of documents is not a long term
                //strategy...need to change to more efficient iterating in future
                Iterator<DocumentModel> iter = docList.iterator();
index 0b3cf6470f01edf5ec12bf7ecfbe74f5a5b841f1..b165863ee386c91650ebe1558b24a77de3ddc532 100644 (file)
@@ -45,6 +45,9 @@
     <xs:element name="vocabularies-common-list">
         <xs:complexType>
             <xs:sequence>
+                                                               <xs:element name="pageNum" type="xs:unsignedInt" />
+                                                               <xs:element name="pageSize" type="xs:unsignedInt" />
+                                                               <xs:element name="totalItems" type="xs:unsignedInt" />
                 <xs:element name="vocabulary-list-item" maxOccurs="unbounded">
                     <xs:complexType>
                         <xs:sequence>
index 83c083baf86e046377f2e19462b155e305e17489..4e6cd124a318a898c145d88faf205ca8739e9919 100644 (file)
     <xs:element name="vocabularyitems-common-list">
         <xs:complexType>
             <xs:sequence>
-                <xs:element name="vocabularyitem_list_item" maxOccurs="unbounded">
+                                                               <xs:element name="pageNum" type="xs:unsignedInt" />
+                                                               <xs:element name="pageSize" type="xs:unsignedInt" />
+                                                               <xs:element name="totalItems" type="xs:unsignedInt" />
+                 <xs:element name="vocabularyitem_list_item" maxOccurs="unbounded">
                     <xs:complexType>
                         <xs:sequence>
                             <xs:element name="displayName" type="xs:string"
index b6de61c66b4781a7ca1cdbd4c97ffd909bec4a82..9aa292ba1116868e5537a327aa7c427b2c2966fe 100644 (file)
@@ -28,6 +28,7 @@ import java.util.List;
 
 import org.collectionspace.services.VocabularyJAXBSchema;
 import org.collectionspace.services.common.document.DocumentHandler.Action;
+import org.collectionspace.services.common.document.DocumentFilter;
 import org.collectionspace.services.common.document.DocumentWrapper;
 import org.collectionspace.services.vocabulary.VocabulariesCommon;
 import org.collectionspace.services.vocabulary.VocabulariesCommonList;
@@ -112,6 +113,18 @@ public class VocabularyDocumentModelHandler
         VocabulariesCommonList coList = new VocabulariesCommonList();
         List<VocabulariesCommonList.VocabularyListItem> list = coList.getVocabularyListItem();
 
+        DocumentFilter filter = getDocumentFilter();
+        long pageNum, pageSize;
+        if(filter==null) {
+               pageNum = 0;
+               pageSize = 0;
+        } else {
+               pageSize = filter.getPageSize();
+               pageNum = filter.getOffset()/pageSize;
+        }
+        coList.setPageNum(pageNum);
+        coList.setPageSize(pageSize);
+       coList.setTotalItems(docList.totalSize());
         //FIXME: iterating over a long list of documents is not a long term
         //strategy...need to change to more efficient iterating in future
         Iterator<DocumentModel> iter = docList.iterator();
index e10ba0300bf337e28f1e78a5321fe582205a11a7..f163ac4be40bfff2132389a394bbf8f87ccfd576 100644 (file)
@@ -27,6 +27,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.collectionspace.services.VocabularyItemJAXBSchema;
+import org.collectionspace.services.common.document.DocumentFilter;
 import org.collectionspace.services.common.document.DocumentWrapper;
 import org.collectionspace.services.nuxeo.client.java.RemoteDocumentModelHandlerImpl;
 import org.collectionspace.services.nuxeo.util.NuxeoUtils;
@@ -126,6 +127,18 @@ public class VocabularyItemDocumentModelHandler
                List<VocabularyitemsCommonList.VocabularyitemListItem> list = 
                        coList.getVocabularyitemListItem();
        
+               DocumentFilter filter = getDocumentFilter();
+               long pageNum, pageSize;
+               if(filter==null) {
+                       pageNum = 0;
+                       pageSize = 0;
+               } else {
+                       pageSize = filter.getPageSize();
+                       pageNum = filter.getOffset()/pageSize;
+               }
+               coList.setPageNum(pageNum);
+               coList.setPageSize(pageSize);
+               coList.setTotalItems(docList.totalSize());
                //FIXME: iterating over a long list of documents is not a long term
                //strategy...need to change to more efficient iterating in future
                Iterator<DocumentModel> iter = docList.iterator();