From 6b7df0013fd823e932300f1747710018db9aed8c Mon Sep 17 00:00:00 2001 From: Aron Roberts Date: Thu, 15 Apr 2010 23:07:09 +0000 Subject: [PATCH] CSPACE-1494,CSPACE-873: Lists of Acquisitions records, for now, return a list of acquisition sources, along with the acquisition reference number, CSID, and URL. Utility method, etc. now used in AcquisitionDocumentModelHandler to split 'qualified' repeatable field names from values, copied from private code in DocumentUtils, might be made public in a common package elsewhere. --- .../client/test/AcquisitionServiceTest.java | 18 ++++--- .../AcquisitionDocumentModelHandler.java | 54 ++++++++++++++----- 2 files changed, 53 insertions(+), 19 deletions(-) diff --git a/services/acquisition/client/src/test/java/org/collectionspace/services/client/test/AcquisitionServiceTest.java b/services/acquisition/client/src/test/java/org/collectionspace/services/client/test/AcquisitionServiceTest.java index cda330726..2d98c9c65 100644 --- a/services/acquisition/client/src/test/java/org/collectionspace/services/client/test/AcquisitionServiceTest.java +++ b/services/acquisition/client/src/test/java/org/collectionspace/services/client/test/AcquisitionServiceTest.java @@ -278,11 +278,16 @@ public class AcquisitionServiceTest extends AbstractServiceTestImpl { int i = 0; for(AcquisitionsCommonList.AcquisitionListItem item : items){ logger.debug(testName + ": list-item[" + i + "] csid=" + - item.getCsid()); + item.getCsid()); logger.debug(testName + ": list-item[" + i + "] objectNumber=" + - item.getAcquisitionReferenceNumber()); + item.getAcquisitionReferenceNumber()); + logger.debug(testName + ": list-item[" + i + "] acquisitionSources:"); + AcquisitionSourceList acqSource = item.getAcquisitionSources(); + for (String acquisitionSource : acqSource.getAcquisitionSource()) { + logger.debug("acquisitionSource=" + acquisitionSource); + } logger.debug(testName + ": list-item[" + i + "] URI=" + - item.getUri()); + item.getUri()); i++; } } @@ -591,7 +596,7 @@ public class AcquisitionServiceTest extends AbstractServiceTestImpl { * at any point during testing, even if some of those resources * may be expected to be deleted by certain tests. */ - @AfterClass(alwaysRun=true) + // @AfterClass(alwaysRun=true) public void cleanUp() { if (logger.isDebugEnabled()) { logger.debug("Cleaning up temporary resources created for testing ..."); @@ -619,8 +624,9 @@ public class AcquisitionServiceTest extends AbstractServiceTestImpl { List sources = acqSourcesList.getAcquisitionSource(); // @TODO Use properly formatted refNames for representative acquisition // sources in this example test record. The following are mere placeholders. - sources.add("Donor Acquisition Source " + identifier); - sources.add("Museum Acquisition Source" + identifier); + sources.add("Donor Acquisition Source-" + identifier); + sources.add("Museum Acquisition Source-" + identifier); + acquisition.setAcquisitionSources(acqSourcesList); MultipartOutput multipart = new MultipartOutput(); OutputPart commonPart = multipart.addPart(acquisition, MediaType.APPLICATION_XML_TYPE); diff --git a/services/acquisition/service/src/main/java/org/collectionspace/services/acquisition/nuxeo/AcquisitionDocumentModelHandler.java b/services/acquisition/service/src/main/java/org/collectionspace/services/acquisition/nuxeo/AcquisitionDocumentModelHandler.java index 3b1e3d4f7..a361bcb42 100644 --- a/services/acquisition/service/src/main/java/org/collectionspace/services/acquisition/nuxeo/AcquisitionDocumentModelHandler.java +++ b/services/acquisition/service/src/main/java/org/collectionspace/services/acquisition/nuxeo/AcquisitionDocumentModelHandler.java @@ -25,15 +25,14 @@ package org.collectionspace.services.acquisition.nuxeo; import java.util.Iterator; import java.util.List; +import java.util.StringTokenizer; -import org.collectionspace.services.AcquisitionJAXBSchema; import org.collectionspace.services.AcquisitionListItemJAXBSchema; import org.collectionspace.services.common.document.DocumentWrapper; import org.collectionspace.services.acquisition.AcquisitionsCommon; import org.collectionspace.services.acquisition.AcquisitionsCommonList; import org.collectionspace.services.acquisition.AcquisitionsCommonList.AcquisitionListItem; import org.collectionspace.services.acquisition.AcquisitionSourceList; - import org.collectionspace.services.common.document.DocumentHandler.Action; import org.collectionspace.services.nuxeo.client.java.RemoteDocumentModelHandlerImpl; import org.collectionspace.services.nuxeo.util.NuxeoUtils; @@ -121,18 +120,21 @@ public class AcquisitionDocumentModelHandler AcquisitionListItem listItem = new AcquisitionListItem(); listItem.setAcquisitionReferenceNumber((String) docModel.getProperty(getServiceContext().getCommonPartLabel(), AcquisitionListItemJAXBSchema.ACQUISITION_REFERENCE_NUMBER)); - // logger.warn("Before getting acquisitionSources ..."); - // Investigate what is returned here by Nuxeo's DocumentModel.getProperty ... List or? - // AcquisitionSourceList acquisitionSources = - // (AcquisitionSourceList) docModel.getProperty(qetServiceContext().getCommonPartLabel(), - // AcquisitionListItemJAXBSchema.ACQUISITION_SOURCES); - // logger.warn("acquisitionSources size = " + acquisitionSources.getAcquisitionSource().size()); - if (logger.isDebugEnabled()) { - logger.debug("Before setting acquisition sources ..."); + // docModel.getProperty returns an ArrayList here. + List acquisitionSources = + (List) docModel.getProperty(getServiceContext().getCommonPartLabel(), + AcquisitionListItemJAXBSchema.ACQUISITION_SOURCES); + AcquisitionSourceList acquisitionSourceList = new AcquisitionSourceList(); + NameValue nv = new NameValue(); + for (String acquisitionSource : acquisitionSources) { + try { + nv = unqualify(acquisitionSource); + acquisitionSourceList.getAcquisitionSource().add(nv.value); + } catch (IllegalStateException ise) { + logger.warn("acquisition source=" + acquisitionSource, ise); + } } - AcquisitionSourceList acquisitionSources = new AcquisitionSourceList(); - acquisitionSources.getAcquisitionSource().add("Currently stubbed - see CSPACE-1494."); - listItem.setAcquisitionSources(acquisitionSources); + listItem.setAcquisitionSources(acquisitionSourceList); //need fully qualified context for URI String id = NuxeoUtils.extractId(docModel.getPathAsString()); listItem.setUri(getServiceContextPath() + id); @@ -168,5 +170,31 @@ public class AcquisitionDocumentModelHandler public String getQProperty(String prop) { return AcquisitionConstants.NUXEO_SCHEMA_NAME + ":" + prop; } + + // The following are all private in DocumentUtils; + // might be moved to a common class. + private static String NAME_VALUE_SEPARATOR = "|"; + + private static class NameValue { + String name; + String value; + }; + + private static NameValue unqualify(String input) { + NameValue nv = new NameValue(); + StringTokenizer stz = new StringTokenizer(input, NAME_VALUE_SEPARATOR); + int tokens = stz.countTokens(); + if (tokens == 2) { + nv.name = stz.nextToken(); + nv.value = stz.nextToken(); + // Allow null or empty values + } else if (tokens == 1) { + nv.name = stz.nextToken(); + nv.value = ""; + } else { + throw new IllegalStateException("Unexpected format for multi valued element: " + input); + } + return nv; + } } -- 2.47.3