From 971f0fc96c51cefcc11ba9c93ac378eddd36a81c Mon Sep 17 00:00:00 2001 From: Patrick Schmitz Date: Tue, 16 Feb 2010 06:01:55 +0000 Subject: [PATCH] CSPACE-735 Added support for getFiltered to fetch totalItem count when pagination is in use. 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. --- .../nuxeo/client/java/RepositoryJavaClientImpl.java | 4 +++- .../jaxb/src/main/resources/organization_common.xsd | 5 ++++- .../jaxb/src/main/resources/orgauthority_common.xsd | 5 ++++- .../nuxeo/OrgAuthorityDocumentModelHandler.java | 13 +++++++++++++ .../nuxeo/OrganizationDocumentModelHandler.java | 13 +++++++++++++ .../jaxb/src/main/resources/person_common.xsd | 5 ++++- .../src/main/resources/personauthority_common.xsd | 5 ++++- .../nuxeo/PersonAuthorityDocumentModelHandler.java | 13 +++++++++++++ .../person/nuxeo/PersonDocumentModelHandler.java | 13 +++++++++++++ .../jaxb/src/main/resources/vocabulary_common.xsd | 3 +++ .../src/main/resources/vocabularyitem_common.xsd | 5 ++++- .../nuxeo/VocabularyDocumentModelHandler.java | 13 +++++++++++++ .../nuxeo/VocabularyItemDocumentModelHandler.java | 13 +++++++++++++ 13 files changed, 104 insertions(+), 6 deletions(-) diff --git a/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/RepositoryJavaClientImpl.java b/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/RepositoryJavaClientImpl.java index aca19680b..22b49af62 100644 --- a/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/RepositoryJavaClientImpl.java +++ b/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/RepositoryJavaClientImpl.java @@ -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()); } diff --git a/services/organization/jaxb/src/main/resources/organization_common.xsd b/services/organization/jaxb/src/main/resources/organization_common.xsd index ca80816c5..51398b24d 100644 --- a/services/organization/jaxb/src/main/resources/organization_common.xsd +++ b/services/organization/jaxb/src/main/resources/organization_common.xsd @@ -38,7 +38,10 @@ - + + + + - + + + + 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 iter = docList.iterator(); diff --git a/services/organization/service/src/main/java/org/collectionspace/services/organization/nuxeo/OrganizationDocumentModelHandler.java b/services/organization/service/src/main/java/org/collectionspace/services/organization/nuxeo/OrganizationDocumentModelHandler.java index 2f07e2e63..c5c399b3c 100644 --- a/services/organization/service/src/main/java/org/collectionspace/services/organization/nuxeo/OrganizationDocumentModelHandler.java +++ b/services/organization/service/src/main/java/org/collectionspace/services/organization/nuxeo/OrganizationDocumentModelHandler.java @@ -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 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 iter = docList.iterator(); diff --git a/services/person/jaxb/src/main/resources/person_common.xsd b/services/person/jaxb/src/main/resources/person_common.xsd index c4980a942..a877d8ac9 100644 --- a/services/person/jaxb/src/main/resources/person_common.xsd +++ b/services/person/jaxb/src/main/resources/person_common.xsd @@ -49,7 +49,10 @@ - + + + + - + + + + 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 iter = docList.iterator(); diff --git a/services/person/service/src/main/java/org/collectionspace/services/person/nuxeo/PersonDocumentModelHandler.java b/services/person/service/src/main/java/org/collectionspace/services/person/nuxeo/PersonDocumentModelHandler.java index 5e59d2dd1..2bf96742d 100644 --- a/services/person/service/src/main/java/org/collectionspace/services/person/nuxeo/PersonDocumentModelHandler.java +++ b/services/person/service/src/main/java/org/collectionspace/services/person/nuxeo/PersonDocumentModelHandler.java @@ -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 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 iter = docList.iterator(); diff --git a/services/vocabulary/jaxb/src/main/resources/vocabulary_common.xsd b/services/vocabulary/jaxb/src/main/resources/vocabulary_common.xsd index 0b3cf6470..b165863ee 100644 --- a/services/vocabulary/jaxb/src/main/resources/vocabulary_common.xsd +++ b/services/vocabulary/jaxb/src/main/resources/vocabulary_common.xsd @@ -45,6 +45,9 @@ + + + diff --git a/services/vocabulary/jaxb/src/main/resources/vocabularyitem_common.xsd b/services/vocabulary/jaxb/src/main/resources/vocabularyitem_common.xsd index 83c083baf..4e6cd124a 100644 --- a/services/vocabulary/jaxb/src/main/resources/vocabularyitem_common.xsd +++ b/services/vocabulary/jaxb/src/main/resources/vocabularyitem_common.xsd @@ -30,7 +30,10 @@ - + + + + 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 iter = docList.iterator(); diff --git a/services/vocabulary/service/src/main/java/org/collectionspace/services/vocabulary/nuxeo/VocabularyItemDocumentModelHandler.java b/services/vocabulary/service/src/main/java/org/collectionspace/services/vocabulary/nuxeo/VocabularyItemDocumentModelHandler.java index e10ba0300..f163ac4be 100644 --- a/services/vocabulary/service/src/main/java/org/collectionspace/services/vocabulary/nuxeo/VocabularyItemDocumentModelHandler.java +++ b/services/vocabulary/service/src/main/java/org/collectionspace/services/vocabulary/nuxeo/VocabularyItemDocumentModelHandler.java @@ -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 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 iter = docList.iterator(); -- 2.47.3