]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-3758: Dimensions now part of blob payload.
authorRichard Millet <richard.millet@berkeley.edu>
Fri, 29 Apr 2011 21:27:07 +0000 (21:27 +0000)
committerRichard Millet <richard.millet@berkeley.edu>
Fri, 29 Apr 2011 21:27:07 +0000 (21:27 +0000)
services/blob/3rdparty/nuxeo-platform-cs-blob/src/main/resources/schemas/blobs_common.xsd
services/blob/client/src/main/java/org/collectionspace/services/client/BlobClient.java
services/blob/service/src/main/java/org/collectionspace/services/blob/BlobResource.java
services/blob/service/src/main/java/org/collectionspace/services/blob/nuxeo/BlobDocumentModelHandler.java
services/common/src/main/java/org/collectionspace/services/common/document/DocumentUtils.java
services/common/src/main/java/org/collectionspace/services/common/imaging/nuxeo/NuxeoImageUtils.java
services/jaxb/src/main/java/org/collectionspace/services/jaxb/BlobJAXBSchema.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
services/organization/client/pom.xml

index becb46d22962f728efcb4b4f7f61bc81b6146242..8ef243d0c7c26be7caba387b050c5bcfb033dbfe 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
     <xs:element name="uri" type="xs:string" />\r
     <xs:element name="repositoryId" type="xs:string" />\r
+    \r
+    <xs:complexType name="dimensionGroupList">\r
+        <xs:sequence>\r
+            <xs:element name="dimensionGroup" type="dimensionGroup" 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:sequence>\r
+            <xs:element name="measuredPart" type="xs:string"/>\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:string"/>\r
+            <xs:element name="valueDate" type="xs:string"/>\r
+            <xs:element name="valueQualifier" type="xs:string"/>\r
+        </xs:sequence>\r
+    </xs:complexType>\r
+    \r
 </xs:schema>\r
index 1ba83542acb42ed13fba2653b01ce112a9591386..1a753ee085255c6ff855a915c36ee26a6d974298 100644 (file)
@@ -34,6 +34,7 @@ public class BlobClient extends AbstractPoxServiceClientImpl<AbstractCommonList,
        public static final String SERVICE_PATH_COMPONENT = SERVICE_NAME;       
        public static final String SERVICE_PATH = "/" + SERVICE_PATH_COMPONENT;
        public static final String SERVICE_PAYLOAD_NAME = SERVICE_NAME;
+       public static final String SERVICE_COMMON_PART_NAME = SERVICE_NAME + PART_LABEL_SEPARATOR + PART_COMMON_LABEL;
 
        //HTTP query param string for specifying a URI source to blob bits.
        public static final String BLOB_URI_PARAM = "blobUri";
index 729a9bd671376ba16a20134fe9353243ab5adcb1..014cf97555040bff570b810c8401086495ea57c2 100644 (file)
@@ -121,7 +121,7 @@ public class BlobResource extends ResourceBase {
        blobInput.setDerivativeListRequested(true);
        BlobUtil.setBlobInput(ctx, blobInput);
 
-       PoxPayloadOut response = this.get(csid, ctx);
+       PoxPayloadOut response = this.get(csid, ctx);  //FIXME: Derivatives should get their own document handler -something like DerivativeDocumentModelHandler.
        if (logger.isDebugEnabled() == true) {
                logger.debug(response.toString());
        }
index c4686b097a9eb9ccf75d6573d8751d58a78ef514..602c36cb965c2e1fa02370c765168bb810a89ad3 100644 (file)
@@ -25,10 +25,16 @@ package org.collectionspace.services.blob.nuxeo;
 
 import org.collectionspace.services.blob.BlobsCommon;
 import org.collectionspace.services.nuxeo.client.java.DocHandlerBase;
+import org.collectionspace.services.client.BlobClient;
+import org.collectionspace.services.client.PayloadInputPart;
+import org.collectionspace.services.client.PayloadOutputPart;
+import org.collectionspace.services.client.PoxPayloadIn;
+import org.collectionspace.services.client.PoxPayloadOut;
 import org.collectionspace.services.common.blob.BlobInput;
 import org.collectionspace.services.common.blob.BlobOutput;
 import org.collectionspace.services.common.blob.BlobUtil;
 import org.collectionspace.services.common.context.ServiceContext;
+import org.collectionspace.services.common.document.DocumentUtils;
 import org.collectionspace.services.common.document.DocumentWrapper;
 import org.collectionspace.services.common.imaging.nuxeo.NuxeoImageUtils;
 import org.collectionspace.services.common.service.ListResultField;
@@ -36,14 +42,20 @@ import org.collectionspace.services.jaxb.AbstractCommonList;
 import org.collectionspace.services.jaxb.BlobJAXBSchema;
 import org.collectionspace.services.jaxb.AbstractCommonList;
 import org.collectionspace.services.nuxeo.client.java.CommonList;
+
 import org.nuxeo.ecm.core.api.ClientException;
 import org.nuxeo.ecm.core.api.DocumentModel;
 import org.nuxeo.ecm.core.api.repository.RepositoryInstance;
+import org.nuxeo.ecm.core.schema.types.Schema;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+
+import org.dom4j.Element;
 
 /**
  * The Class BlobDocumentModelHandler.
@@ -87,15 +99,15 @@ extends DocHandlerBase<BlobsCommon> {
        
        private void setCommonPartProperties(DocumentModel documentModel,
                        BlobsCommon blobsCommon) throws ClientException {
-               String label = getServiceContext().getCommonPartLabel();
-               documentModel.setProperty(label, BlobJAXBSchema.data, blobsCommon.getData());
-               documentModel.setProperty(label, BlobJAXBSchema.digest, blobsCommon.getDigest());
-               documentModel.setProperty(label, BlobJAXBSchema.encoding, blobsCommon.getEncoding());
-               documentModel.setProperty(label, BlobJAXBSchema.length, blobsCommon.getLength());
-               documentModel.setProperty(label, BlobJAXBSchema.mimeType, blobsCommon.getMimeType());
-               documentModel.setProperty(label, BlobJAXBSchema.name, blobsCommon.getName());
-               documentModel.setProperty(label, BlobJAXBSchema.uri, blobsCommon.getUri());
-               documentModel.setProperty(label, BlobJAXBSchema.repositoryId, blobsCommon.getRepositoryId());
+               try {
+                       String schemaName = getServiceContext().getCommonPartLabel();
+                       PayloadOutputPart outputPart = new PayloadOutputPart(schemaName, blobsCommon);
+                       Element element = outputPart.asElement();
+                       Map<String, Object> propertyMap = DocumentUtils.parseProperties(schemaName, element, getServiceContext());
+                       documentModel.setProperties(schemaName, propertyMap);
+               } catch (Exception e) {
+                       throw new ClientException(e);
+               }               
        }
 
        /* (non-Javadoc)
@@ -110,35 +122,47 @@ extends DocHandlerBase<BlobsCommon> {
                DocumentModel docModel = wrapDoc.getWrappedObject();
                BlobsCommon blobsCommon = this.getCommonPartProperties(docModel);               
                String blobRepositoryId = blobsCommon.getRepositoryId(); //cache the value to pass to the blob retriever
-               
+               //
+               // We're being asked for a list of blob derivatives, not the payload for a blob record.  FIXME: REM - This should be handled in a class called DerivativeDocumentHandler (need to create).
+               //
                if (blobInput.isDerivativeListRequested() == true) {
                List<ListResultField> resultsFields = getListItemsArray();
-                       CommonList blobsCommonList = NuxeoImageUtils.getBlobDerivatives(
+                       CommonList blobsCommonList = NuxeoImageUtils.getBlobDerivatives( //FIXME: REM - Need to replace "NuxeoImageUtils" with something more general like "BlobUtils" since we may support other blob types.
                                        repoSession, blobRepositoryId, resultsFields, getDerivativePathBase(docModel));
 //                     ctx.setProperty(BlobInput.BLOB_DERIVATIVE_LIST_KEY, blobsCommonList);
                        blobInput.setDerivativeList(blobsCommonList);
-                       return;  //FIXME: Don't like this exit point.  Perhaps derivatives should be a sub-resource?
+                       return;  //FIXME: REM - Don't like this exit point.  Perhaps derivatives should be a sub-resource with its own DerivativeDocumentHandler doc handler?
                }               
 
                String derivativeTerm = blobInput.getDerivativeTerm();
                Boolean getContentFlag = blobInput.isContentRequested();
-               BlobOutput blobOutput = NuxeoImageUtils.getBlobOutput(ctx, repoSession,
-                               blobRepositoryId, derivativeTerm, getContentFlag);
-               if (getContentFlag == true) {
-                       blobInput.setContentStream(blobOutput.getBlobInputStream());
-//                     ctx.setProperty(BlobInput.BLOB_CONTENT_KEY, blobOutput.getBlobInputStream());
-               }
-
-               if (derivativeTerm != null) {
-                       // reset 'blobsCommon' if we have a derivative request
-                       blobsCommon = blobOutput.getBlobsCommon();
-                       blobsCommon.setUri(getDerivativePathBase(docModel) +
-                                       derivativeTerm + "/" + BlobInput.URI_CONTENT_PATH);
+               //
+               // If we're being asked for either the content of the blob, the content of a derivative, or the payload for a derivative then
+               // fall into this block of code.  Otherwise, we'll just call our parent to deal with a plain-old-blob payload.
+               //
+               if (derivativeTerm != null || getContentFlag == true) {
+                       BlobOutput blobOutput = NuxeoImageUtils.getBlobOutput(ctx, repoSession,
+                                       blobRepositoryId, derivativeTerm, getContentFlag);
+                       if (getContentFlag == true) {
+                               blobInput.setContentStream(blobOutput.getBlobInputStream());
+                       }
+       
+                       if (derivativeTerm != null) {
+                               // reset 'blobsCommon' if we have a derivative request
+                               blobsCommon = blobOutput.getBlobsCommon();
+                               blobsCommon.setUri(getDerivativePathBase(docModel) +
+                                               derivativeTerm + "/" + BlobInput.URI_CONTENT_PATH);
+                       }
+                       
+                       blobsCommon.setRepositoryId(null); //hide the repository id from the GET results payload since it is private
+                       this.setCommonPartProperties(docModel, blobsCommon);
+                       // finish extracting the other parts by calling the parent
                }
                
-               blobsCommon.setRepositoryId(null); //hide the repository id from the GET results payload since it is private
-               this.setCommonPartProperties(docModel, blobsCommon);
-               // finish extracting the other parts by calling the parent
+               //
+               // Hide the Nuxeo repository ID of the Nuxeo blob since this is private
+               //
+               docModel.setProperty(ctx.getCommonPartLabel(), BlobJAXBSchema.repositoryId, null);              
                super.extractAllParts(wrapDoc);
        }
 
@@ -153,11 +177,24 @@ extends DocHandlerBase<BlobsCommon> {
                        DocumentModel documentModel = wrapDoc.getWrappedObject();
                        RepositoryInstance repoSession = this.getRepositorySession();           
                        BlobsCommon blobsCommon = NuxeoImageUtils.createPicture(ctx, repoSession, blobInput);
-                       this.setCommonPartProperties(documentModel, blobsCommon);
+               PoxPayloadIn input = (PoxPayloadIn)ctx.getInput();
+               //
+               // If the input payload is null, then we're creating a new blob from a post or a uri.  This means there
+               // is no "input" payload for our framework to process.  Therefore we need to synthesize a payload from
+               // the BlobsCommon instance we just filled out.
+               //
+               if (input == null) {
+                       PoxPayloadOut output = new PoxPayloadOut(BlobClient.SERVICE_PAYLOAD_NAME);
+                       PayloadOutputPart commonPart = new PayloadOutputPart(BlobClient.SERVICE_COMMON_PART_NAME, blobsCommon);
+                       output.addPart(commonPart);
+                       input = new PoxPayloadIn(output.toXML());
+                       ctx.setInput(input);
+               }
+//                     this.setCommonPartProperties(documentModel, blobsCommon);
                        blobInput.setBlobCsid(documentModel.getName());
-               } else {
-                       super.fillAllParts(wrapDoc, action);
                }
+
+               super.fillAllParts(wrapDoc, action);
        }    
 }
 
index 9559c3903bb27059ebc5d8f109bac4562a1df809..7ad430654ac567d2792d31ba4c7132e979c24c3e 100644 (file)
@@ -1112,6 +1112,13 @@ public class DocumentUtils {
                return result;
        }
        
+       public static Map<String, Object> parseProperties(String schemaName, org.dom4j.Element element, ServiceContext ctx) throws Exception {
+               Map<String, Object> result = null;
+               Schema schema = getSchemaFromName(schemaName);
+               result = DocumentUtils.loadSchema(schema, element, ctx);
+               return result;
+       }
+       
        /**
         * Load schema.
         *
index 87c891bbe215cff1a118452d9e2990407ddb87ca..583ad3de98c47db9f002afa76575427507e3cec2 100644 (file)
@@ -51,6 +51,8 @@ import org.nuxeo.runtime.services.streaming.FileSource;
 \r
 import org.nuxeo.ecm.platform.picture.api.adapters.MultiviewPictureAdapter;\r
 import org.nuxeo.ecm.platform.picture.api.adapters.MultiviewPictureAdapterFactory; \r
+import org.nuxeo.ecm.platform.picture.api.ImageInfo;\r
+import org.nuxeo.ecm.platform.picture.api.ImagingService;\r
 import org.nuxeo.ecm.platform.picture.api.PictureView;\r
 \r
 import org.nuxeo.ecm.platform.picture.api.adapters.PictureResourceAdapter;\r
@@ -113,6 +115,8 @@ import org.collectionspace.services.common.document.DocumentUtils;
 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.BlobsCommonList;\r
 //import org.collectionspace.services.blob.BlobsCommonList.BlobListItem;\r
 import org.collectionspace.services.jaxb.AbstractCommonList;\r
@@ -146,6 +150,16 @@ public class NuxeoImageUtils {
        public static final String DERIVATIVE_THUMBNAIL_TAG = DERIVATIVE_THUMBNAIL + "_";\r
 \r
        public static final String DERIVATIVE_UNKNOWN = "_UNKNOWN_DERIVATIVE_NAME_";\r
+       \r
+       //\r
+       // Image Dimension fields\r
+       //\r
+       public static final String PART_IMAGE = "digitalImage";\r
+       public static final String WIDTH = "width";\r
+       public static final String HEIGHT = "height";\r
+       public static final String DEPTH = "depth";\r
+       public static final String UNIT_PIXELS = "pixels";\r
+       public static final String UNIT_BITS = "bits";\r
 \r
        //      static DefaultBinaryManager binaryManager = new DefaultBinaryManager(); //can we get this from Nuxeo? i.e., Framework.getService(BinaryManger.class)\r
 \r
@@ -260,15 +274,73 @@ public class NuxeoImageUtils {
 \r
                return commonList;\r
        }\r
+       \r
+       static private DimensionGroupList getDimensions(DocumentModel documentModel, Blob nuxeoBlob) {\r
+               DimensionGroupList result = null;\r
+               try {\r
+                   ImagingService service = Framework.getService(ImagingService.class);                        \r
+                   ImageInfo imageInfo = service.getImageInfo(nuxeoBlob);\r
+                   \r
+                   if (imageInfo != null) {\r
+                       DimensionGroupList dimensionGroupList = new DimensionGroupList();\r
+                       List<DimensionGroup> dgList = dimensionGroupList.getDimensionGroup();\r
+                       //\r
+                       // Set the width\r
+                       //\r
+                       DimensionGroup widthDimension = new DimensionGroup();\r
+                       widthDimension.setMeasuredPart(PART_IMAGE);\r
+                       widthDimension.setDimension(WIDTH);\r
+                       widthDimension.setMeasurementUnit(UNIT_PIXELS);\r
+                       widthDimension.setValue(Integer.toString(imageInfo.getWidth()));\r
+                       dgList.add(widthDimension);\r
+                       //\r
+                       // Set the height\r
+                       //\r
+                       DimensionGroup heightDimension = new DimensionGroup();\r
+                       heightDimension.setMeasuredPart(PART_IMAGE);\r
+                       heightDimension.setDimension(HEIGHT);\r
+                       heightDimension.setMeasurementUnit(UNIT_PIXELS);\r
+                       heightDimension.setValue(Integer.toString(imageInfo.getHeight()));\r
+                       dgList.add(heightDimension);\r
+                       //\r
+                       // Set the depth\r
+                       //\r
+                       DimensionGroup depthDimension = new DimensionGroup();\r
+                       depthDimension.setMeasuredPart(PART_IMAGE);\r
+                       depthDimension.setDimension(DEPTH);\r
+                       depthDimension.setMeasurementUnit(UNIT_BITS);\r
+                       depthDimension.setValue(Integer.toString(imageInfo.getDepth()));\r
+                       dgList.add(depthDimension);\r
+                       //\r
+                       // Now set out result\r
+                       //\r
+                       result = dimensionGroupList;\r
+                   } else {\r
+                       if (logger.isWarnEnabled() == true) {\r
+                               logger.warn("Could not synthesize a dimension list of the blob: " + documentModel.getName());\r
+                       }\r
+                   }               \r
+               } catch (Exception e) {\r
+                       logger.warn("Could not extract image information for blob: " + documentModel.getName());\r
+               }\r
+               \r
+               return result;\r
+       }\r
 \r
        static private BlobsCommon createBlobsCommon(DocumentModel documentModel, Blob nuxeoBlob) {\r
                BlobsCommon result = new BlobsCommon();\r
+\r
                if (documentModel != null) {\r
                        result.setMimeType(nuxeoBlob.getMimeType());\r
                        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
+                       }\r
                }\r
+                               \r
                return result;\r
        }\r
 \r
@@ -615,6 +687,24 @@ public class NuxeoImageUtils {
                return result;\r
        }\r
 \r
+//     /*\r
+//      * This is an alternate approach to getting information about an image\r
+//      * and its corresponding derivatives.\r
+//      */\r
+//     //                      MultiviewPictureAdapter multiviewPictureAdapter = documentModel.getAdapter(MultiviewPictureAdapter.class);\r
+//     MultiviewPictureAdapterFactory multiviewPictureAdapterFactory = new MultiviewPictureAdapterFactory();\r
+//     MultiviewPictureAdapter multiviewPictureAdapter =\r
+//             (MultiviewPictureAdapter)multiviewPictureAdapterFactory.getAdapter(documentModel, null);\r
+//     if (multiviewPictureAdapter != null) {\r
+//             PictureView[] pictureViewArray = multiviewPictureAdapter.getViews();\r
+//             for (PictureView pictureView : pictureViewArray) {\r
+//                     if (logger.isDebugEnabled() == true) {\r
+//                             logger.debug("-------------------------------------");\r
+//                             logger.debug(toStringPictureView(pictureView));\r
+//                     }\r
+//             }\r
+//     }\r
+       \r
        /**\r
         * Gets the image.\r
         *\r
@@ -630,28 +720,10 @@ public class NuxeoImageUtils {
                        Boolean getContentFlag) {\r
                BlobOutput result = new BlobOutput();\r
 \r
-               try {\r
+               if (repositoryId != null && repositoryId.isEmpty() == false) try {\r
                        IdRef documentRef = new IdRef(repositoryId);\r
                        DocumentModel documentModel = repoSession.getDocument(documentRef);\r
-\r
-                       /*\r
-                        * This is a second, and better, approach to getting information about an image\r
-                        * and its corresponding derivatives.\r
-                        */\r
-                       //                      MultiviewPictureAdapter multiviewPictureAdapter = documentModel.getAdapter(MultiviewPictureAdapter.class);\r
-                       MultiviewPictureAdapterFactory multiviewPictureAdapterFactory = new MultiviewPictureAdapterFactory();\r
-                       MultiviewPictureAdapter multiviewPictureAdapter =\r
-                               (MultiviewPictureAdapter)multiviewPictureAdapterFactory.getAdapter(documentModel, null);\r
-                       if (multiviewPictureAdapter != null) {\r
-                               PictureView[] pictureViewArray = multiviewPictureAdapter.getViews();\r
-                               for (PictureView pictureView : pictureViewArray) {\r
-                                       if (logger.isDebugEnabled() == true) {\r
-                                               logger.debug("-------------------------------------");\r
-                                               logger.debug(toStringPictureView(pictureView));\r
-                                       }\r
-                               }\r
-                       }\r
-\r
+                       \r
                        Blob docBlob = null;\r
                        DocumentBlobHolder docBlobHolder = (DocumentBlobHolder)documentModel.getAdapter(BlobHolder.class);\r
                        if (docBlobHolder instanceof PictureBlobHolder) { // if it is a PictureDocument then it has these Nuxeo schemas: [dublincore, uid, picture, iptc, common, image_metadata]\r
@@ -667,7 +739,7 @@ public class NuxeoImageUtils {
                        } else {\r
                                docBlob = docBlobHolder.getBlob();\r
                        }\r
-\r
+                       \r
                        //\r
                        // Create the result instance that will contain the blob metadata\r
                        // and an InputStream with the bits if the 'getContentFlag' is set\r
@@ -676,7 +748,7 @@ public class NuxeoImageUtils {
                        result.setBlobsCommon(blobsCommon);\r
                        if (getContentFlag == true) {\r
                                InputStream remoteStream = docBlob.getStream();\r
-                               BufferedInputStream bufferedInputStream = new BufferedInputStream(remoteStream);\r
+                               BufferedInputStream bufferedInputStream = new BufferedInputStream(remoteStream); //FIXME: REM - To improve performance, try BufferedInputStream(InputStream in, int size) \r
                                result.setBlobInputStream(bufferedInputStream); // the input stream of blob bits\r
                        }\r
 \r
index da0a7227abb2539c7c7c71f4e7ad318bc96e1e84..1818b407953dcc1eeadbdac3195d93e90894b56a 100644 (file)
@@ -11,5 +11,6 @@ public interface BlobJAXBSchema {
     final static String length = "length";
     final static String digest = "digest";
     final static String uri = "uri";
+    final static String dimensionGroupList = "dimensionGroupList";
     final static String repositoryId = "repositoryId";
 }
index e9ea8e33e320fd146e8133fdbb4ff9fcb776a27c..8dc7186def4d52520be5ed72b8937ec66248ffef 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="uri" type="xs:string" />
                 <xs:element name="repositoryId" type="xs:string" />
           </xs:sequence>
         </xs:complexType>
     </xs:element>
     
+    <xs:complexType name="dimensionGroupList">
+        <xs:sequence>
+            <xs:element name="dimensionGroup" type="dimensionGroup" 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:sequence>
+            <xs:element name="measuredPart" type="xs:string"/>
+            <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="valueDate" type="xs:string"/>
+            <xs:element name="valueQualifier" type="xs:string"/>
+        </xs:sequence>
+    </xs:complexType>
+    
 </xs:schema>
 
index 464c10f09dcb1093d4a017efc281acb4d004f9a8..1908b5b2056501518656c6c93c82615268049cae 100644 (file)
@@ -59,6 +59,7 @@
     </xs:element>\r
     <xs:element name="rightsHolder" type="xs:string"/>\r
     <xs:element name="source" type="xs:string"/>\r
+    <xs:element name="sourceUrl" type="xs:string"/>\r
     <xs:element name="subjectList">\r
         <xs:complexType>\r
             <xs:sequence>\r
index 0d2c73c8998fc88b2d6cccd883f2780590f6c3ab..c804e7131e8fa0cc1d53989490e19b0506e6abf7 100644 (file)
@@ -50,7 +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="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"/>
index d1132c210013879eac63a53e1d9846e06dfe2384..76988295703de551e64d970761f34ccff32ad2c0 100644 (file)
@@ -29,7 +29,6 @@
         <dependency>\r
             <groupId>org.collectionspace.services</groupId>\r
             <artifactId>org.collectionspace.services.authority</artifactId>\r
-            <optional>true</optional>\r
             <version>${project.version}</version>\r
         </dependency>        \r
         <dependency>\r
@@ -50,8 +49,7 @@
         </dependency>\r
         <dependency>\r
             <groupId>org.collectionspace.services</groupId>\r
-            <artifactId>org.collectionspace.services.contact.client</artifactId>\r
-            \r
+            <artifactId>org.collectionspace.services.contact.client</artifactId>            \r
             <version>${project.version}</version>\r
         </dependency>\r
         <dependency>\r