From 8945ddb66ec075d0dc29c65d521db1e7219c2c7d Mon Sep 17 00:00:00 2001 From: Aron Roberts Date: Thu, 10 Nov 2011 03:28:03 +0000 Subject: [PATCH] CSPACE-3686: In Cataloging / CollectionObject, Media and Blob services, Dimensions are now a subordinate, repeatable sub-group within groups of Measured Parts. --- .../main/resources/schemas/blobs_common.xsd | 29 +++- .../schemas/collectionobjects_common.xsd | 36 +++-- .../test/CollectionObjectServiceTest.java | 148 ++++++++++++------ .../resources/collectionobjects_common.xsd | 36 +++-- .../common/imaging/nuxeo/NuxeoImageUtils.java | 61 +++++--- .../jaxb/src/main/resources/blobs_common.xsd | 29 +++- .../main/resources/schemas/media_common.xsd | 27 +++- .../jaxb/src/main/resources/media_common.xsd | 28 +++- 8 files changed, 264 insertions(+), 130 deletions(-) diff --git a/services/blob/3rdparty/nuxeo-platform-cs-blob/src/main/resources/schemas/blobs_common.xsd b/services/blob/3rdparty/nuxeo-platform-cs-blob/src/main/resources/schemas/blobs_common.xsd index eb029c315..fa00fd0e4 100644 --- a/services/blob/3rdparty/nuxeo-platform-cs-blob/src/main/resources/schemas/blobs_common.xsd +++ b/services/blob/3rdparty/nuxeo-platform-cs-blob/src/main/resources/schemas/blobs_common.xsd @@ -27,27 +27,42 @@ - + + - + + - + - + + + + + + + + + + + + + + - + - + diff --git a/services/collectionobject/3rdparty/nuxeo-platform-cs-collectionobject/src/main/resources/schemas/collectionobjects_common.xsd b/services/collectionobject/3rdparty/nuxeo-platform-cs-collectionobject/src/main/resources/schemas/collectionobjects_common.xsd index 2a37ed571..5c332c9cc 100644 --- a/services/collectionobject/3rdparty/nuxeo-platform-cs-collectionobject/src/main/resources/schemas/collectionobjects_common.xsd +++ b/services/collectionobject/3rdparty/nuxeo-platform-cs-collectionobject/src/main/resources/schemas/collectionobjects_common.xsd @@ -144,18 +144,8 @@ - - - - - - - - - - - - + + @@ -474,21 +464,35 @@ - + + - - + + + + + + + + + + + + + + - + diff --git a/services/collectionobject/client/src/test/java/org/collectionspace/services/client/test/CollectionObjectServiceTest.java b/services/collectionobject/client/src/test/java/org/collectionspace/services/client/test/CollectionObjectServiceTest.java index f6317738a..3d6729025 100644 --- a/services/collectionobject/client/src/test/java/org/collectionspace/services/client/test/CollectionObjectServiceTest.java +++ b/services/collectionobject/client/src/test/java/org/collectionspace/services/client/test/CollectionObjectServiceTest.java @@ -39,15 +39,19 @@ import org.collectionspace.services.client.PoxPayloadOut; import org.collectionspace.services.collectionobject.BriefDescriptionList; import org.collectionspace.services.collectionobject.CollectionobjectsCommon; import org.collectionspace.services.collectionobject.domain.naturalhistory.CollectionobjectsNaturalhistory; -import org.collectionspace.services.collectionobject.ResponsibleDepartmentList; -import org.collectionspace.services.collectionobject.DimensionGroup; -import org.collectionspace.services.collectionobject.DimensionList; +import org.collectionspace.services.collectionobject.DimensionSubGroup; +import org.collectionspace.services.collectionobject.DimensionSubGroupList; +import org.collectionspace.services.collectionobject.MeasuredPartGroup; +import org.collectionspace.services.collectionobject.MeasuredPartGroupList; import org.collectionspace.services.collectionobject.ObjectNameGroup; import org.collectionspace.services.collectionobject.ObjectNameList; import org.collectionspace.services.collectionobject.OtherNumber; import org.collectionspace.services.collectionobject.OtherNumberList; +import org.collectionspace.services.collectionobject.ResponsibleDepartmentList; import org.collectionspace.services.collectionobject.TitleGroup; import org.collectionspace.services.collectionobject.TitleGroupList; +import org.collectionspace.services.collectionobject.TitleTranslationSubGroup; +import org.collectionspace.services.collectionobject.TitleTranslationSubGroupList; import org.collectionspace.services.common.AbstractCommonListUtils; import org.collectionspace.services.jaxb.AbstractCommonList; @@ -77,9 +81,10 @@ public class CollectionObjectServiceTest extends AbstractServiceTestImpl { private final String OBJECT_NAME_VALUE = "an object name"; private final BigInteger AGE_VALUE = new BigInteger("55"); + private final String MEASURED_PART = "light box frame"; private final BigDecimal DIMENSION_VALUE_LENGTH = new BigDecimal("0.009"); private final BigDecimal DIMENSION_VALUE_WIDTH = new BigDecimal("3087.56"); - private final String UPDATED_MEASURED_PART_VALUE = "updated measured part value"; + private final String UPDATED_MEASUREMENT_UNIT = "Angstroms"; private final String UTF8_DATA_SAMPLE = "Audiorecording album cover signed by Lech " + "Wa" + '\u0142' + '\u0119' + "sa"; @@ -628,14 +633,26 @@ public class CollectionObjectServiceTest extends AbstractServiceTestImpl { // Verify the number and contents of values in repeatable fields, // as created in the instance record used for testing. - DimensionList dimensionList = collectionobjectCommon.getDimensions(); - Assert.assertNotNull(dimensionList); - List dimensionsGroups = dimensionList.getDimensionGroup(); - Assert.assertNotNull(dimensionsGroups); - Assert.assertTrue(dimensionsGroups.size() > 0); - Assert.assertNotNull(dimensionsGroups.get(0)); - Assert.assertNotNull(dimensionsGroups.get(0).getMeasuredPart()); - + MeasuredPartGroupList measuredPartGroupList = collectionobjectCommon.getMeasuredPartGroupList(); + Assert.assertNotNull(measuredPartGroupList, "Measured part group list was null"); + List measuredPartGroups = measuredPartGroupList.getMeasuredPartGroup(); + Assert.assertNotNull(measuredPartGroups, "Measured part groups were null"); + Assert.assertTrue(measuredPartGroups.size() > 0, "No measured part groups were returned"); + MeasuredPartGroup mpGroup = measuredPartGroups.get(0); + Assert.assertNotNull(mpGroup.getMeasuredPart(), "Measured part was null"); + Assert.assertEquals(mpGroup.getMeasuredPart(), MEASURED_PART, + "Measured part value returned didn't match expected value"); + + DimensionSubGroupList dimensionSubGroupList = mpGroup.getDimensionSubGroupList(); + Assert.assertNotNull(dimensionSubGroupList, "Dimension subgroup list was null"); + List dimensionSubGroups = dimensionSubGroupList.getDimensionSubGroup(); + Assert.assertNotNull(dimensionSubGroups, "Dimension subgroups were null"); + Assert.assertTrue(dimensionSubGroups.size() > 0, "No dimension subgroups were returned"); + DimensionSubGroup lengthDimension = dimensionSubGroups.get(0); + Assert.assertNotNull(lengthDimension, "Length dimension was null"); + Assert.assertEquals(lengthDimension.getValue(), DIMENSION_VALUE_LENGTH, + "Dimension length value returned didn't match expected value"); + /* No longer part of the "default" domain service tests for the CollectionObject record. if (logger.isDebugEnabled()) { logger.debug(testName + ": Reading Natural History part ..."); @@ -762,21 +779,32 @@ public class CollectionObjectServiceTest extends AbstractServiceTestImpl { // Replace the existing value instances in the dimensions repeatable group // with entirely new value instances, also changing the number of such instances. - DimensionList dimensionList = collectionObjectCommon.getDimensions(); - Assert.assertNotNull(dimensionList); - List dimensionGroups = dimensionList.getDimensionGroup(); - Assert.assertNotNull(dimensionGroups); - int originalDimensionGroupSize = dimensionGroups.size(); - Assert.assertTrue(originalDimensionGroupSize >= 1); - - DimensionGroup updatedDimensionGroup = new DimensionGroup(); - updatedDimensionGroup.setMeasuredPart(UPDATED_MEASURED_PART_VALUE); - dimensionGroups.clear(); - dimensionGroups.add(updatedDimensionGroup); - int updatedDimensionGroupSize = dimensionGroups.size(); - Assert.assertTrue(updatedDimensionGroupSize >= 1); - Assert.assertTrue(updatedDimensionGroupSize != originalDimensionGroupSize); - collectionObjectCommon.setDimensions(dimensionList); + MeasuredPartGroupList measuredPartGroupList = collectionObjectCommon.getMeasuredPartGroupList(); + Assert.assertNotNull(measuredPartGroupList); + List measuredPartGroups = measuredPartGroupList.getMeasuredPartGroup(); + Assert.assertNotNull(measuredPartGroups); + Assert.assertTrue(measuredPartGroups.size() > 0); + MeasuredPartGroup mpGroup = measuredPartGroups.get(0); + Assert.assertNotNull(mpGroup.getMeasuredPart()); + + DimensionSubGroupList dimensionSubGroupList = mpGroup.getDimensionSubGroupList(); + Assert.assertNotNull(dimensionSubGroupList); + List dimensionSubGroups = dimensionSubGroupList.getDimensionSubGroup(); + Assert.assertNotNull(dimensionSubGroups); + int originalDimensionSubGroupSize = dimensionSubGroups.size(); + Assert.assertTrue(dimensionSubGroups.size() > 0); + dimensionSubGroups.clear(); + + DimensionSubGroup heightDimension = new DimensionSubGroup(); + heightDimension.setDimension("height"); + heightDimension.setMeasurementUnit(UPDATED_MEASUREMENT_UNIT); + dimensionSubGroups.add(heightDimension); + + int updatedDimensionGroupSize = dimensionSubGroups.size(); + Assert.assertTrue(updatedDimensionGroupSize > 0); + Assert.assertTrue(updatedDimensionGroupSize != originalDimensionSubGroupSize); + + collectionObjectCommon.setMeasuredPartGroupList(measuredPartGroupList); if (logger.isDebugEnabled()) { logger.debug("sparse update that will be sent in update request:"); @@ -801,13 +829,22 @@ public class CollectionObjectServiceTest extends AbstractServiceTestImpl { objNameGroups.get(0).getObjectName(), "Data in updated object did not match submitted data."); - dimensionList = updatedCollectionobjectCommon.getDimensions(); - Assert.assertNotNull(dimensionList); - dimensionGroups = dimensionList.getDimensionGroup(); - Assert.assertNotNull(dimensionGroups); - Assert.assertTrue(dimensionGroups.size() == updatedDimensionGroupSize); - Assert.assertEquals(UPDATED_MEASURED_PART_VALUE, - dimensionGroups.get(0).getMeasuredPart(), + measuredPartGroupList = collectionObjectCommon.getMeasuredPartGroupList(); + Assert.assertNotNull(measuredPartGroupList); + measuredPartGroups = measuredPartGroupList.getMeasuredPartGroup(); + Assert.assertNotNull(measuredPartGroups); + Assert.assertTrue(measuredPartGroups.size() > 0); + mpGroup = measuredPartGroups.get(0); + Assert.assertNotNull(mpGroup.getMeasuredPart()); + + dimensionSubGroupList = mpGroup.getDimensionSubGroupList(); + Assert.assertNotNull(dimensionSubGroupList); + dimensionSubGroups = dimensionSubGroupList.getDimensionSubGroup(); + Assert.assertNotNull(dimensionSubGroups); + Assert.assertTrue(dimensionSubGroups.size() > 0); + Assert.assertTrue(dimensionSubGroups.size() == updatedDimensionGroupSize); + Assert.assertEquals(UPDATED_MEASUREMENT_UNIT, + dimensionSubGroups.get(0).getMeasurementUnit(), "Data in updated object did not match submitted data."); } @@ -1237,6 +1274,7 @@ public class CollectionObjectServiceTest extends AbstractServiceTestImpl { TitleGroupList titleGroupList = new TitleGroupList(); List titleGroups = titleGroupList.getTitleGroup(); + Assert.assertNotNull(titleGroups); TitleGroup titleGroup = new TitleGroup(); titleGroup.setTitle("a title"); titleGroups.add(titleGroup); @@ -1249,22 +1287,32 @@ public class CollectionObjectServiceTest extends AbstractServiceTestImpl { objNameGroups.add(objectNameGroup); collectionObject.setObjectNameList(objNameList); - DimensionList dimensionList = new DimensionList(); - List dimensionGroups = dimensionList.getDimensionGroup(); - DimensionGroup dimensionGroup1 = new DimensionGroup(); - dimensionGroup1.setMeasuredPart("head"); - dimensionGroup1.setDimension("length"); - dimensionGroup1.setValue(DIMENSION_VALUE_LENGTH); - dimensionGroup1.setMeasurementUnit("cm"); - DimensionGroup dimensionGroup2 = new DimensionGroup(); - dimensionGroup2.setMeasuredPart("leg"); - dimensionGroup2.setDimension("width"); - dimensionGroup2.setValue(DIMENSION_VALUE_WIDTH); - dimensionGroup2.setMeasurementUnit("m"); - dimensionGroup2.setValueQualifier(""); // test null string - dimensionGroups.add(dimensionGroup1); - dimensionGroups.add(dimensionGroup2); - collectionObject.setDimensions(dimensionList); + MeasuredPartGroupList measuredPartGroupList = new MeasuredPartGroupList(); + List measuredPartGroups = measuredPartGroupList.getMeasuredPartGroup(); + Assert.assertNotNull(measuredPartGroups, "Measured part groups are null"); + MeasuredPartGroup measuredPartGroup = new MeasuredPartGroup(); + measuredPartGroup.setMeasuredPart(MEASURED_PART); + + DimensionSubGroupList dimensionSubGroupList = new DimensionSubGroupList(); + List dimensionSubGroups = dimensionSubGroupList.getDimensionSubGroup(); + Assert.assertNotNull(dimensionSubGroups, "Dimension subgroups are null"); + + DimensionSubGroup lengthDimension = new DimensionSubGroup(); + lengthDimension.setDimension("length"); + lengthDimension.setValue(DIMENSION_VALUE_LENGTH); + lengthDimension.setMeasurementUnit("cm"); + dimensionSubGroups.add(lengthDimension); + + DimensionSubGroup widthDimension = new DimensionSubGroup(); + widthDimension.setDimension("width"); + widthDimension.setValue(DIMENSION_VALUE_WIDTH); + widthDimension.setMeasurementUnit("m"); + widthDimension.setValueQualifier(""); // test empty string + dimensionSubGroups.add(widthDimension); + + measuredPartGroup.setDimensionSubGroupList(dimensionSubGroupList); + measuredPartGroups.add(measuredPartGroup); + collectionObject.setMeasuredPartGroupList(measuredPartGroupList); // Repeatable scalar fields diff --git a/services/collectionobject/jaxb/src/main/resources/collectionobjects_common.xsd b/services/collectionobject/jaxb/src/main/resources/collectionobjects_common.xsd index 1101a1a4a..e9f8bdd34 100644 --- a/services/collectionobject/jaxb/src/main/resources/collectionobjects_common.xsd +++ b/services/collectionobject/jaxb/src/main/resources/collectionobjects_common.xsd @@ -77,18 +77,8 @@ - - - - - - - - - - - - + + @@ -388,16 +378,30 @@ - - + + + - - + + + + + + + + + + + + + + diff --git a/services/common/src/main/java/org/collectionspace/services/common/imaging/nuxeo/NuxeoImageUtils.java b/services/common/src/main/java/org/collectionspace/services/common/imaging/nuxeo/NuxeoImageUtils.java index 77d4d2c69..e1c07a6f8 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/imaging/nuxeo/NuxeoImageUtils.java +++ b/services/common/src/main/java/org/collectionspace/services/common/imaging/nuxeo/NuxeoImageUtils.java @@ -32,8 +32,9 @@ import java.io.InputStream; import java.io.FileInputStream; import java.io.BufferedInputStream; import java.io.IOException; - import java.io.Serializable; +import java.math.BigDecimal; +import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -111,12 +112,15 @@ import org.slf4j.LoggerFactory; import org.collectionspace.services.common.ServiceMain; import org.collectionspace.services.common.blob.BlobInput; import org.collectionspace.services.common.context.ServiceContext; +import org.collectionspace.services.common.datetime.GregorianCalendarDateTimeUtils; import org.collectionspace.services.common.document.DocumentUtils; import org.collectionspace.services.common.service.ListResultField; import org.collectionspace.services.common.FileUtils; import org.collectionspace.services.blob.BlobsCommon; -import org.collectionspace.services.blob.DimensionGroup; -import org.collectionspace.services.blob.DimensionGroupList; +import org.collectionspace.services.blob.DimensionSubGroup; +import org.collectionspace.services.blob.DimensionSubGroupList; +import org.collectionspace.services.blob.MeasuredPartGroup; +import org.collectionspace.services.blob.MeasuredPartGroupList; //import org.collectionspace.services.blob.BlobsCommonList; //import org.collectionspace.services.blob.BlobsCommonList.BlobListItem; import org.collectionspace.services.jaxb.AbstractCommonList; @@ -289,47 +293,57 @@ public class NuxeoImageUtils { return metadataMap; } - static private DimensionGroupList getDimensions(DocumentModel documentModel, Blob nuxeoBlob) { - DimensionGroupList result = null; + static private MeasuredPartGroupList getDimensions(DocumentModel documentModel, Blob nuxeoBlob) { + MeasuredPartGroupList result = null; try { ImagingService service = Framework.getService(ImagingService.class); ImageInfo imageInfo = service.getImageInfo(nuxeoBlob); Map metadataMap = getMetadata(nuxeoBlob); if (imageInfo != null) { - DimensionGroupList dimensionGroupList = new DimensionGroupList(); - List dgList = dimensionGroupList.getDimensionGroup(); + MeasuredPartGroupList measuredPartGroupList = new MeasuredPartGroupList(); + List measuredPartList = measuredPartGroupList.getMeasuredPartGroup(); + + MeasuredPartGroup mpGroup = new MeasuredPartGroup(); + mpGroup.setMeasuredPart(PART_IMAGE); + + DimensionSubGroupList dimensionSubGroupList = mpGroup.getDimensionSubGroupList(); + List dgList = dimensionSubGroupList.getDimensionSubGroup(); + + String valueDate = GregorianCalendarDateTimeUtils.timestampUTC(); + // // Set the width // - DimensionGroup widthDimension = new DimensionGroup(); - widthDimension.setMeasuredPart(PART_IMAGE); + DimensionSubGroup widthDimension = new DimensionSubGroup(); widthDimension.setDimension(WIDTH); widthDimension.setMeasurementUnit(UNIT_PIXELS); - widthDimension.setValue(Integer.toString(imageInfo.getWidth())); + widthDimension.setValue(intToBigDecimal(imageInfo.getWidth())); + widthDimension.setValueDate(valueDate); dgList.add(widthDimension); // // Set the height // - DimensionGroup heightDimension = new DimensionGroup(); - heightDimension.setMeasuredPart(PART_IMAGE); + DimensionSubGroup heightDimension = new DimensionSubGroup(); heightDimension.setDimension(HEIGHT); heightDimension.setMeasurementUnit(UNIT_PIXELS); - heightDimension.setValue(Integer.toString(imageInfo.getHeight())); + heightDimension.setValue(intToBigDecimal(imageInfo.getHeight())); + heightDimension.setValueDate(valueDate); dgList.add(heightDimension); // // Set the depth // - DimensionGroup depthDimension = new DimensionGroup(); - depthDimension.setMeasuredPart(PART_IMAGE); + DimensionSubGroup depthDimension = new DimensionSubGroup(); depthDimension.setDimension(DEPTH); depthDimension.setMeasurementUnit(UNIT_BITS); - depthDimension.setValue(Integer.toString(imageInfo.getDepth())); + depthDimension.setValue(intToBigDecimal(imageInfo.getDepth())); + depthDimension.setValueDate(valueDate); dgList.add(depthDimension); // // Now set out result // - result = dimensionGroupList; + measuredPartList.add(mpGroup); + result = measuredPartGroupList; } else { if (logger.isWarnEnabled() == true) { logger.warn("Could not synthesize a dimension list of the blob: " + documentModel.getName()); @@ -341,6 +355,13 @@ public class NuxeoImageUtils { return result; } + + // FIXME: Add error checking here, as none of these calls return an Exception + static private BigDecimal intToBigDecimal(int i) { + BigInteger bigint = BigInteger.valueOf(i); + BigDecimal bigdec = new BigDecimal(bigint); + return bigdec; + } static private BlobsCommon createBlobsCommon(DocumentModel documentModel, Blob nuxeoBlob) { BlobsCommon result = new BlobsCommon(); @@ -350,9 +371,9 @@ public class NuxeoImageUtils { result.setName(nuxeoBlob.getFilename()); result.setLength(Long.toString(nuxeoBlob.getLength())); result.setRepositoryId(documentModel.getId()); - DimensionGroupList dimensionGroupList = getDimensions(documentModel, nuxeoBlob); - if (dimensionGroupList != null) { - result.setDimensionGroupList(dimensionGroupList); + MeasuredPartGroupList measuredPartGroupList = getDimensions(documentModel, nuxeoBlob); + if (measuredPartGroupList != null) { + result.setMeasuredPartGroupList(measuredPartGroupList); } } diff --git a/services/jaxb/src/main/resources/blobs_common.xsd b/services/jaxb/src/main/resources/blobs_common.xsd index 1ac4adc5b..252865557 100644 --- a/services/jaxb/src/main/resources/blobs_common.xsd +++ b/services/jaxb/src/main/resources/blobs_common.xsd @@ -37,28 +37,41 @@ - + - + - + - + - - + + + + + + + + + + + + + + + - + diff --git a/services/media/3rdparty/nuxeo-platform-cs-media/src/main/resources/schemas/media_common.xsd b/services/media/3rdparty/nuxeo-platform-cs-media/src/main/resources/schemas/media_common.xsd index 74e1265db..c8834267a 100644 --- a/services/media/3rdparty/nuxeo-platform-cs-media/src/main/resources/schemas/media_common.xsd +++ b/services/media/3rdparty/nuxeo-platform-cs-media/src/main/resources/schemas/media_common.xsd @@ -36,8 +36,9 @@ - - + + + @@ -78,21 +79,35 @@ - + + - - + + + + + + + + + + + + + + - + diff --git a/services/media/jaxb/src/main/resources/media_common.xsd b/services/media/jaxb/src/main/resources/media_common.xsd index 8150912dc..2040536da 100644 --- a/services/media/jaxb/src/main/resources/media_common.xsd +++ b/services/media/jaxb/src/main/resources/media_common.xsd @@ -40,8 +40,8 @@ - - + + @@ -50,8 +50,8 @@ - - + + @@ -67,15 +67,29 @@ - + + - - + + + + + + + + + + + + + + -- 2.47.3