]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-3686: In Cataloging / CollectionObject, Media and Blob services, Dimensions...
authorAron Roberts <aron@socrates.berkeley.edu>
Thu, 10 Nov 2011 03:28:03 +0000 (03:28 +0000)
committerAron Roberts <aron@socrates.berkeley.edu>
Thu, 10 Nov 2011 03:28:03 +0000 (03:28 +0000)
services/blob/3rdparty/nuxeo-platform-cs-blob/src/main/resources/schemas/blobs_common.xsd
services/collectionobject/3rdparty/nuxeo-platform-cs-collectionobject/src/main/resources/schemas/collectionobjects_common.xsd
services/collectionobject/client/src/test/java/org/collectionspace/services/client/test/CollectionObjectServiceTest.java
services/collectionobject/jaxb/src/main/resources/collectionobjects_common.xsd
services/common/src/main/java/org/collectionspace/services/common/imaging/nuxeo/NuxeoImageUtils.java
services/jaxb/src/main/resources/blobs_common.xsd
services/media/3rdparty/nuxeo-platform-cs-media/src/main/resources/schemas/media_common.xsd
services/media/jaxb/src/main/resources/media_common.xsd

index eb029c315382dba205ad8709008cedf7237565af..fa00fd0e478354d3564a19294e3fcb5978feab65 100644 (file)
     <xs:element name="name" type="xs:string" />\r
     <xs:element name="length" type="xs:string" />\r
     <xs:element name="digest" type="xs:string" />\r
-    <xs:element name="dimensionGroupList" type="dimensionGroupList"/>\r
+    <!-- Changed name from dimensionGroupList (type="dimensionGroupList") in v1.13 when adding repeatable sub group -->\r
+    <xs:element name="measuredPartGroupList" type="measuredPartGroupList"/>\r
     <xs:element name="uri" type="xs:string" />\r
     <xs:element name="repositoryId" type="xs:string" />\r
     \r
-    <xs:complexType name="dimensionGroupList">\r
+    <!-- Changed names, as of v1.13: dimensionGroupList became measuredPartGroupList, dimensionGroup became measuredPartGroup. -->\r
+    <xs:complexType name="measuredPartGroupList">\r
         <xs:sequence>\r
-            <xs:element name="dimensionGroup" type="dimensionGroup" minOccurs="0"\r
-                maxOccurs="unbounded"/>\r
+            <xs:element name="measuredPartGroup" type="measuredPartGroup" minOccurs="0"\r
+                   maxOccurs="unbounded"/>\r
         </xs:sequence>\r
     </xs:complexType>\r
-    <xs:complexType name="dimensionGroup"> <!-- //FIXME: The "dimensionGroup" type should be declared in one place since other services use it -->\r
+    <xs:complexType name="measuredPartGroup">\r
         <xs:sequence>\r
             <xs:element name="measuredPart" type="xs:string"/>\r
+            <xs:element name="dimensionSummary" type="xs:string"/>\r
+            <xs:element name="dimensionSubGroupList" type="dimensionSubGroupList"/>\r
+        </xs:sequence>\r
+    </xs:complexType>\r
+\r
+    <xs:complexType name="dimensionSubGroupList">\r
+        <xs:sequence>\r
+            <xs:element name="dimensionSubGroup" type="dimensionSubGroup" minOccurs="0" maxOccurs="unbounded" />\r
+        </xs:sequence>\r
+    </xs:complexType>\r
+\r
+    <xs:complexType name="dimensionSubGroup">\r
+        <xs:sequence>\r
             <xs:element name="dimension" type="xs:string"/>\r
             <xs:element name="measuredBy" type="xs:string"/>\r
             <xs:element name="measurementUnit" type="xs:string"/>\r
             <xs:element name="measurementMethod" type="xs:string"/>\r
             <xs:element name="value" type="xs:decimal"/>\r
-            <xs:element name="valueDate" type="xs:string"/>\r
+            <xs:element name="valueDate" type="xs:dateTime"/>\r
             <xs:element name="valueQualifier" type="xs:string"/>\r
         </xs:sequence>\r
     </xs:complexType>\r
-    \r
+\r
 </xs:schema>\r
index 2a37ed571072285c4c1c99524982fb7cc77643fd..5c332c9cc27a964b51b3b4ab22ad2ace67d78ca7 100644 (file)
         </xs:complexType>\r
     </xs:element>\r
     <xs:element name="copyNumber" type="xs:string"/>\r
-    <!-- FIXME Move this dimensionSummary field into the repeatable Dimensions group in 1.3+ -->\r
-    <xs:element name="dimensionSummary" type="xs:string"/>\r
-    <xs:element name="dimensions" type="ns:dimensionList"/>\r
-    <!-- FIXME Remove these six elements when the App/UI layer is -->\r
-    <!-- using the new repeatable 'dimensions' field: -->\r
-    <xs:element name="dimension" type="xs:string"/>\r
-    <xs:element name="dimensionMeasuredPart" type="xs:string"/>\r
-    <xs:element name="dimensionMeasurementUnit" type="xs:string"/>\r
-    <xs:element name="dimensionValue" type="xs:string"/>\r
-    <xs:element name="dimensionValueDate" type="xs:string"/>\r
-    <xs:element name="dimensionValueQualifier" type="xs:string"/>\r
-    <!-- end of six elements to be removed -->\r
+    <!-- Changed name of next field from dimensions (type="dimensionList") in v1.13 when adding repeatable sub group -->\r
+    <xs:element name="measuredPartGroupList" type="measuredPartGroupList"/>\r
     <xs:element name="editionNumber" type="xs:string"/>\r
     <xs:element name="forms">\r
         <xs:complexType>\r
         </xs:sequence>\r
     </xs:complexType>\r
 \r
-    <xs:complexType name="dimensionList">\r
+    <!-- Changed names, as of v1.13: dimensionList became measuredPartGroupList, dimensionGroup became measuredPartGroup. -->\r
+    <xs:complexType name="measuredPartGroupList">\r
         <xs:sequence>\r
-            <xs:element name="dimensionGroup" type="dimensionGroup" minOccurs="0"\r
+            <xs:element name="measuredPartGroup" type="measuredPartGroup" minOccurs="0"\r
                 maxOccurs="unbounded"/>\r
         </xs:sequence>\r
     </xs:complexType>\r
-    <xs:complexType name="dimensionGroup">\r
+    <xs:complexType name="measuredPartGroup">\r
         <xs:sequence>\r
             <xs:element name="measuredPart" type="xs:string"/>\r
+            <xs:element name="dimensionSummary" type="xs:string" />\r
+            <xs:element name="dimensionSubGroupList" type="dimensionSubGroupList"/>\r
+        </xs:sequence>\r
+    </xs:complexType>\r
+\r
+    <xs:complexType name="dimensionSubGroupList">\r
+        <xs:sequence>\r
+            <xs:element name="dimensionSubGroup" type="dimensionSubGroup" minOccurs="0" maxOccurs="unbounded" />\r
+        </xs:sequence>\r
+    </xs:complexType>\r
+\r
+    <xs:complexType name="dimensionSubGroup">\r
+        <xs:sequence>\r
             <xs:element name="dimension" type="xs:string"/>\r
             <xs:element name="measuredBy" type="xs:string"/>\r
             <xs:element name="measurementUnit" type="xs:string"/>\r
             <xs:element name="measurementMethod" type="xs:string"/>\r
             <xs:element name="value" type="xs:decimal"/>\r
-            <xs:element name="valueDate" type="xs:string"/>\r
+            <xs:element name="valueDate" type="xs:dateTime"/>\r
             <xs:element name="valueQualifier" type="xs:string"/>\r
         </xs:sequence>\r
     </xs:complexType>\r
index f6317738a9764b8fab5ba8c5378102a775acd68d..3d6729025500c7806fccc81ce19f0676adcc3b00 100644 (file)
@@ -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<DimensionGroup> 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<MeasuredPartGroup> 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<DimensionSubGroup> 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<DimensionGroup> 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<MeasuredPartGroup> 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<DimensionSubGroup> 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<TitleGroup> 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<DimensionGroup> 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<MeasuredPartGroup> measuredPartGroups = measuredPartGroupList.getMeasuredPartGroup();
+        Assert.assertNotNull(measuredPartGroups, "Measured part groups are null");
+        MeasuredPartGroup measuredPartGroup = new MeasuredPartGroup();
+        measuredPartGroup.setMeasuredPart(MEASURED_PART);
+
+        DimensionSubGroupList dimensionSubGroupList = new DimensionSubGroupList();
+        List<DimensionSubGroup> 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
         
index 1101a1a4ad515a5ee3d16289d28a6c578b4bcd18..e9f8bdd342db052297a9c3cb420a6e227364b00e 100644 (file)
                 <xs:element name="contentPositions" type="contentPositionList"/>
                 <xs:element name="contentScripts" type="contentScriptList"/>
                 <xs:element name="copyNumber" type="xs:string"/>
-                <xs:element name="dimensionSummary" type="xs:string"/>
-                <xs:element name="dimensions" type="ns:dimensionList"/>
-
-                <!-- Remove these six elements when the App/UI layer is -->
-                <!-- using the new repeatable 'dimensions' field: -->
-                <xs:element name="dimension" type="xs:string"/>
-                <xs:element name="dimensionMeasuredPart" type="xs:string"/>
-                <xs:element name="dimensionMeasurementUnit" type="xs:string"/>
-                <xs:element name="dimensionValue" type="xs:string"/>
-                <xs:element name="dimensionValueDate" type="xs:string"/>
-                <xs:element name="dimensionValueQualifier" type="xs:string"/>
-                
+                <!-- Changed name of next field from dimensions (type="dimensionList") in v1.13 when adding repeatable sub group -->
+                <xs:element name="measuredPartGroupList" type="measuredPartGroupList"/>
                 <xs:element name="editionNumber" type="xs:string"/>
                 <xs:element name="forms" type="formList"/>
 
             <xs:element name="contentScript" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
         </xs:sequence>
     </xs:complexType>
-    
-    <xs:complexType name="dimensionList">
+
+    <!-- Changed names, as of v1.13: dimensions (type="dimensionList") became measuredPartGroupList, dimensionGroup became measuredPartGroup. -->
+    <xs:complexType name="measuredPartGroupList">
         <xs:sequence>
-            <xs:element name="dimensionGroup" type="dimensionGroup" minOccurs="0"
+            <xs:element name="measuredPartGroup" type="measuredPartGroup" minOccurs="0"
                 maxOccurs="unbounded"/>
         </xs:sequence>
     </xs:complexType>
-    <xs:complexType name="dimensionGroup">
+    <xs:complexType name="measuredPartGroup">
         <xs:sequence>
             <xs:element name="measuredPart" type="xs:string"/>
+            <xs:element name="dimensionSummary" type="xs:string" />
+            <xs:element name="dimensionSubGroupList" type="dimensionSubGroupList"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="dimensionSubGroupList">
+        <xs:sequence>
+            <xs:element name="dimensionSubGroup" type="dimensionSubGroup" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="dimensionSubGroup">
+        <xs:sequence>
             <xs:element name="dimension" type="xs:string"/>
             <xs:element name="measuredBy" type="xs:string"/>
             <xs:element name="measurementUnit" type="xs:string"/>
index 77d4d2c6965911106164f717a17c1d222d5a098f..e1c07a6f8273d8c349cf3e36ecaba344250f9cae 100644 (file)
@@ -32,8 +32,9 @@ import java.io.InputStream;
 import java.io.FileInputStream;\r
 import java.io.BufferedInputStream;\r
 import java.io.IOException;\r
-\r
 import java.io.Serializable;\r
+import java.math.BigDecimal;\r
+import java.math.BigInteger;\r
 import java.util.ArrayList;\r
 import java.util.HashMap;\r
 import java.util.List;\r
@@ -111,12 +112,15 @@ import org.slf4j.LoggerFactory;
 import org.collectionspace.services.common.ServiceMain;\r
 import org.collectionspace.services.common.blob.BlobInput;\r
 import org.collectionspace.services.common.context.ServiceContext;\r
+import org.collectionspace.services.common.datetime.GregorianCalendarDateTimeUtils;\r
 import org.collectionspace.services.common.document.DocumentUtils;\r
 import org.collectionspace.services.common.service.ListResultField;\r
 import org.collectionspace.services.common.FileUtils;\r
 import org.collectionspace.services.blob.BlobsCommon;\r
-import org.collectionspace.services.blob.DimensionGroup;\r
-import org.collectionspace.services.blob.DimensionGroupList;\r
+import org.collectionspace.services.blob.DimensionSubGroup;\r
+import org.collectionspace.services.blob.DimensionSubGroupList;\r
+import org.collectionspace.services.blob.MeasuredPartGroup;\r
+import org.collectionspace.services.blob.MeasuredPartGroupList;\r
 //import org.collectionspace.services.blob.BlobsCommonList;\r
 //import org.collectionspace.services.blob.BlobsCommonList.BlobListItem;\r
 import org.collectionspace.services.jaxb.AbstractCommonList;\r
@@ -289,47 +293,57 @@ public class NuxeoImageUtils {
            return metadataMap;\r
        }\r
                \r
-       static private DimensionGroupList getDimensions(DocumentModel documentModel, Blob nuxeoBlob) {\r
-               DimensionGroupList result = null;\r
+       static private MeasuredPartGroupList getDimensions(DocumentModel documentModel, Blob nuxeoBlob) {\r
+               MeasuredPartGroupList result = null;\r
                try {\r
                    ImagingService service = Framework.getService(ImagingService.class);                        \r
                    ImageInfo imageInfo = service.getImageInfo(nuxeoBlob);\r
                    Map<String, Object> metadataMap = getMetadata(nuxeoBlob);\r
                    \r
                    if (imageInfo != null) {\r
-                       DimensionGroupList dimensionGroupList = new DimensionGroupList();\r
-                       List<DimensionGroup> dgList = dimensionGroupList.getDimensionGroup();\r
+                        MeasuredPartGroupList measuredPartGroupList = new MeasuredPartGroupList();\r
+                        List<MeasuredPartGroup> measuredPartList = measuredPartGroupList.getMeasuredPartGroup();\r
+                        \r
+                        MeasuredPartGroup mpGroup = new MeasuredPartGroup();\r
+                        mpGroup.setMeasuredPart(PART_IMAGE);\r
+                        \r
+                       DimensionSubGroupList dimensionSubGroupList = mpGroup.getDimensionSubGroupList();\r
+                       List<DimensionSubGroup> dgList = dimensionSubGroupList.getDimensionSubGroup();\r
+                        \r
+                        String valueDate = GregorianCalendarDateTimeUtils.timestampUTC(); \r
+\r
                        //\r
                        // Set the width\r
                        //\r
-                       DimensionGroup widthDimension = new DimensionGroup();\r
-                       widthDimension.setMeasuredPart(PART_IMAGE);\r
+                       DimensionSubGroup widthDimension = new DimensionSubGroup();\r
                        widthDimension.setDimension(WIDTH);\r
                        widthDimension.setMeasurementUnit(UNIT_PIXELS);\r
-                       widthDimension.setValue(Integer.toString(imageInfo.getWidth()));\r
+                       widthDimension.setValue(intToBigDecimal(imageInfo.getWidth()));\r
+                        widthDimension.setValueDate(valueDate);\r
                        dgList.add(widthDimension);\r
                        //\r
                        // Set the height\r
                        //\r
-                       DimensionGroup heightDimension = new DimensionGroup();\r
-                       heightDimension.setMeasuredPart(PART_IMAGE);\r
+                       DimensionSubGroup heightDimension = new DimensionSubGroup();\r
                        heightDimension.setDimension(HEIGHT);\r
                        heightDimension.setMeasurementUnit(UNIT_PIXELS);\r
-                       heightDimension.setValue(Integer.toString(imageInfo.getHeight()));\r
+                       heightDimension.setValue(intToBigDecimal(imageInfo.getHeight()));\r
+                        heightDimension.setValueDate(valueDate);\r
                        dgList.add(heightDimension);\r
                        //\r
                        // Set the depth\r
                        //\r
-                       DimensionGroup depthDimension = new DimensionGroup();\r
-                       depthDimension.setMeasuredPart(PART_IMAGE);\r
+                       DimensionSubGroup depthDimension = new DimensionSubGroup();\r
                        depthDimension.setDimension(DEPTH);\r
                        depthDimension.setMeasurementUnit(UNIT_BITS);\r
-                       depthDimension.setValue(Integer.toString(imageInfo.getDepth()));\r
+                       depthDimension.setValue(intToBigDecimal(imageInfo.getDepth()));\r
+                        depthDimension.setValueDate(valueDate);\r
                        dgList.add(depthDimension);\r
                        //\r
                        // Now set out result\r
                        //\r
-                       result = dimensionGroupList;\r
+                        measuredPartList.add(mpGroup);\r
+                       result = measuredPartGroupList;\r
                    } else {\r
                        if (logger.isWarnEnabled() == true) {\r
                                logger.warn("Could not synthesize a dimension list of the blob: " + documentModel.getName());\r
@@ -341,6 +355,13 @@ public class NuxeoImageUtils {
                \r
                return result;\r
        }\r
+        \r
+        // FIXME: Add error checking here, as none of these calls return an Exception\r
+        static private BigDecimal intToBigDecimal(int i) {\r
+            BigInteger bigint = BigInteger.valueOf(i);\r
+            BigDecimal bigdec = new BigDecimal(bigint);\r
+            return bigdec;\r
+        }\r
 \r
        static private BlobsCommon createBlobsCommon(DocumentModel documentModel, Blob nuxeoBlob) {\r
                BlobsCommon result = new BlobsCommon();\r
@@ -350,9 +371,9 @@ public class NuxeoImageUtils {
                        result.setName(nuxeoBlob.getFilename());\r
                        result.setLength(Long.toString(nuxeoBlob.getLength()));\r
                        result.setRepositoryId(documentModel.getId());\r
-                       DimensionGroupList dimensionGroupList = getDimensions(documentModel, nuxeoBlob);\r
-                       if (dimensionGroupList != null) {\r
-                               result.setDimensionGroupList(dimensionGroupList);\r
+                       MeasuredPartGroupList measuredPartGroupList = getDimensions(documentModel, nuxeoBlob);\r
+                       if (measuredPartGroupList != null) {\r
+                               result.setMeasuredPartGroupList(measuredPartGroupList);\r
                        }\r
                }\r
                                \r
index 1ac4adc5b5765e53cd35da483445e8ab156f8da8..25286555786211dd8532d1a336c8628946496cd3 100644 (file)
                 <xs:element name="name" type="xs:string" />
                 <xs:element name="length" type="xs:string" />
                 <xs:element name="digest" type="xs:string" />
-                <xs:element name="dimensionGroupList" type="dimensionGroupList"/>
+                <xs:element name="measuredPartGroupList" type="measuredPartGroupList"/>
                 <xs:element name="uri" type="xs:string" />
                 <xs:element name="repositoryId" type="xs:string" />
-          </xs:sequence>
+            </xs:sequence>
         </xs:complexType>
     </xs:element>
     
-    <xs:complexType name="dimensionGroupList">
+    <xs:complexType name="measuredPartGroupList">
         <xs:sequence>
-            <xs:element name="dimensionGroup" type="dimensionGroup" minOccurs="0"
-                maxOccurs="unbounded"/>
+            <xs:element name="measuredPartGroup" type="measuredPartGroup" minOccurs="0"
+                   maxOccurs="unbounded"/>
         </xs:sequence>
     </xs:complexType>
-    
-    <xs:complexType name="dimensionGroup"> <!-- //FIXME: The "dimensionGroup" type should be declared in one place since other services use it -->
+    <xs:complexType name="measuredPartGroup">
         <xs:sequence>
             <xs:element name="measuredPart" type="xs:string"/>
+               <!-- Next field added to group in v1.13 -->
+            <xs:element name="dimensionSummary" type="xs:string"/>
+            <xs:element name="dimensionSubGroupList" type="dimensionSubGroupList"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="dimensionSubGroupList">
+        <xs:sequence>
+            <xs:element name="dimensionSubGroup" type="dimensionSubGroup" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="dimensionSubGroup">
+        <xs:sequence>
             <xs:element name="dimension" type="xs:string"/>
             <xs:element name="measuredBy" type="xs:string"/>
             <xs:element name="measurementUnit" type="xs:string"/>
             <xs:element name="measurementMethod" type="xs:string"/>
-            <xs:element name="value" type="xs:string"/>
+            <xs:element name="value" type="xs:decimal"/>
             <xs:element name="valueDate" type="xs:string"/>
             <xs:element name="valueQualifier" type="xs:string"/>
         </xs:sequence>
index 74e1265db443b93b74e13f63be5b34cac6765342..c8834267a329c5cfc341909b83771b153362d405 100644 (file)
@@ -36,8 +36,9 @@
     <xs:element name="dateCreated" type="xs:string"/>\r
     <xs:element name="dateModified" type="xs:string"/>\r
     <xs:element name="description" type="xs:string"/>\r
-    <xs:element name="dimensionSummary" type="xs:string"/>\r
-    <xs:element name="dimensionGroupList" type="dimensionGroupList"/>\r
+\r
+     <!-- Changed name of next field from dimensionGroupList (type="dimensionGroupList") in v1.13 when adding repeatable sub group -->\r
+    <xs:element name="measuredPartGroupList" type="measuredPartGroupList"/>\r
     <xs:element name="filename" type="xs:string"/>\r
     <xs:element name="format" type="xs:string"/>\r
     <xs:element name="identificationNumber" type="xs:string"/>\r
     <xs:element name="uri" type="xs:string" />\r
     <xs:element name="blobCsid" type="xs:string" />\r
 \r
-    <xs:complexType name="dimensionGroupList">\r
+    <!-- Changed names, as of v1.13: dimensionGroupList became measuredPartGroupList, dimensionGroup became measuredPartGroup. -->\r
+    <xs:complexType name="measuredPartGroupList">\r
         <xs:sequence>\r
-            <xs:element name="dimensionGroup" type="dimensionGroup" minOccurs="0"\r
+            <xs:element name="measuredPartGroup" type="measuredPartGroup" minOccurs="0"\r
                 maxOccurs="unbounded"/>\r
         </xs:sequence>\r
     </xs:complexType>\r
-    <xs:complexType name="dimensionGroup">\r
+    <xs:complexType name="measuredPartGroup">\r
         <xs:sequence>\r
             <xs:element name="measuredPart" type="xs:string"/>\r
+            <xs:element name="dimensionSummary" type="xs:string"/>\r
+            <xs:element name="dimensionSubGroupList" type="dimensionSubGroupList"/>\r
+        </xs:sequence>\r
+    </xs:complexType>\r
+\r
+    <xs:complexType name="dimensionSubGroupList">\r
+        <xs:sequence>\r
+            <xs:element name="dimensionSubGroup" type="dimensionSubGroup" minOccurs="0" maxOccurs="unbounded" />\r
+        </xs:sequence>\r
+    </xs:complexType>\r
+\r
+    <xs:complexType name="dimensionSubGroup">\r
+        <xs:sequence>\r
             <xs:element name="dimension" type="xs:string"/>\r
             <xs:element name="measuredBy" type="xs:string"/>\r
             <xs:element name="measurementUnit" type="xs:string"/>\r
             <xs:element name="measurementMethod" type="xs:string"/>\r
             <xs:element name="value" type="xs:decimal"/>\r
-            <xs:element name="valueDate" type="xs:string"/>\r
+            <xs:element name="valueDate" type="xs:dateTime"/>\r
             <xs:element name="valueQualifier" type="xs:string"/>\r
         </xs:sequence>\r
     </xs:complexType>\r
index 8150912dce2ba3bcc74cd17441852fd58f34bc71..2040536da6f24c6cffbec22f99fa141c5bab8e0f 100644 (file)
@@ -40,8 +40,8 @@
                 <xs:element name="dateCreated" type="xs:string"/>
                 <xs:element name="dateModified" type="xs:string"/>
                 <xs:element name="description" type="xs:string"/>
-                <xs:element name="dimensionSummary" type="xs:string"/>
-                <xs:element name="dimensionGroupList" type="dimensionGroupList"/>
+                 <!-- Changed name of next field from dimensionGroupList (type="dimensionGroupList") in v1.13 when adding repeatable sub group -->
+                <xs:element name="measuredPartGroupList" type="measuredPartGroupList"/>
                 <xs:element name="filename" type="xs:string"/>
                 <xs:element name="format" type="xs:string"/>
                 <xs:element name="identificationNumber" type="xs:string"/>
@@ -50,8 +50,8 @@
                 <xs:element name="publisher" type="xs:string"/>
                 <xs:element name="relationList" type="relationList"/>
                 <xs:element name="rightsHolder" type="xs:string"/>
-                           <xs:element name="source" type="xs:string"/>
-                           <xs:element name="sourceUrl" type="xs:string"/>
+                <xs:element name="source" type="xs:string"/>
+                <xs:element name="sourceUrl" type="xs:string"/>
                 <xs:element name="subjectList" type="subjectList"/>
                 <xs:element name="title" type="xs:string"/>
                 <xs:element name="typeList" type="typeList"/>
         </xs:sequence>
     </xs:complexType>
 
-    <xs:complexType name="dimensionGroupList">
+    <!-- Changed names, as of v1.13: dimensionGroupList became measuredPartGroupList, dimensionGroup became measuredPartGroup. -->
+    <xs:complexType name="measuredPartGroupList">
         <xs:sequence>
-            <xs:element name="dimensionGroup" type="dimensionGroup" minOccurs="0"
+            <xs:element name="measuredPartGroup" type="measuredPartGroup" minOccurs="0"
                 maxOccurs="unbounded"/>
         </xs:sequence>
     </xs:complexType>
-    <xs:complexType name="dimensionGroup">
+    <xs:complexType name="measuredPartGroup">
         <xs:sequence>
             <xs:element name="measuredPart" type="xs:string"/>
+            <xs:element name="dimensionSummary" type="xs:string"/>
+            <xs:element name="dimensionSubGroupList" type="dimensionSubGroupList"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="dimensionSubGroupList">
+        <xs:sequence>
+            <xs:element name="dimensionSubGroup" type="dimensionSubGroup" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="dimensionSubGroup">
+        <xs:sequence>
             <xs:element name="dimension" type="xs:string"/>
             <xs:element name="measuredBy" type="xs:string"/>
             <xs:element name="measurementUnit" type="xs:string"/>