]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-6129: When computing a Cataloging record's current location from related L...
authorAron Roberts <aron@socrates.berkeley.edu>
Thu, 20 Feb 2014 01:22:09 +0000 (17:22 -0800)
committerAron Roberts <aron@socrates.berkeley.edu>
Thu, 20 Feb 2014 01:22:09 +0000 (17:22 -0800)
services/IntegrationTests/src/test/resources/test-data/xmlreplay/batch/batch-update-object-loc.xml
services/batch/service/src/main/java/org/collectionspace/services/batch/nuxeo/UpdateObjectLocationBatchJob.java

index d2033a1c1ad7509290f7332ff4bdc3c718fd4909..d68b1ac5c3cda6ca1f2959d17b90832e8de13f5b 100644 (file)
@@ -7,6 +7,7 @@
     </auths>\r
         \r
     <!-- This tests the UpdateObjectLocationBatchJob -->\r
+    <!-- in various invocation modes -->\r
         \r
     <testGroup ID="invocationModeSingle" autoDeletePOSTS="true">\r
         \r
         \r
     </testGroup>\r
     \r
+    <testGroup ID="invocationModeSingleWithTiebreaker" autoDeletePOSTS="true">\r
+                    \r
+        <test ID="createBatchRecordWithTiebreaker">\r
+            <method>POST</method>\r
+            <uri>/cspace-services/batch</uri>\r
+            <filename>batch/batch-create-updateobjloc.xml</filename>\r
+            <expectedCodes>201</expectedCodes>\r
+        </test>\r
+                \r
+        <test ID="createCollectionObjectWithTiebreaker">\r
+            <method>POST</method>\r
+            <uri>/cspace-services/collectionobjects</uri>\r
+            <filename>batch/collObj1.xml</filename>\r
+            <expectedCodes>201</expectedCodes>\r
+        </test>\r
+        \r
+        <test ID="createMovement1WithTiebreaker">\r
+            <method>POST</method>\r
+            <uri>/cspace-services/movements</uri>\r
+            <filename>batch/movement.xml</filename>\r
+            <vars>\r
+                <var ID="currentLocation">location-1-with-tiebreaker</var>\r
+                <var ID="locationDate">1900-01-01</var>\r
+            </vars>\r
+            <expectedCodes>201</expectedCodes>\r
+        </test>\r
+        \r
+        <test ID="createMovement2WithTiebreaker">\r
+            <method>POST</method>\r
+            <uri>/cspace-services/movements</uri>\r
+            <filename>batch/movement.xml</filename>\r
+            <vars>\r
+                <var ID="currentLocation">location-2-with-tiebreaker</var>\r
+                <var ID="locationDate">${createMovement1WithTiebreaker.locationDate}</var>\r
+            </vars>\r
+            <expectedCodes>201</expectedCodes>\r
+        </test>\r
+        \r
+        <test ID="createMovement3WithTiebreaker">\r
+            <method>POST</method>\r
+            <uri>/cspace-services/movements</uri>\r
+            <filename>batch/movement.xml</filename>\r
+            <vars>\r
+                <var ID="currentLocation">location-3-with-tiebreaker</var>\r
+                <var ID="locationDate">${createMovement1WithTiebreaker.locationDate}</var>\r
+            </vars>\r
+            <expectedCodes>201</expectedCodes>\r
+        </test>\r
+        \r
+        <test ID="relateCollectionObjectToMovement1WithTiebreaker">\r
+            <method>POST</method>\r
+            <uri>/cspace-services/relations</uri>\r
+            <filename>batch/relation.xml</filename>\r
+            <vars>\r
+                <var ID="subjectCsid">${createCollectionObjectWithTiebreaker.CSID}</var>\r
+                <var ID="subjectDocumentType">CollectionObject</var>\r
+                <var ID="objectCsid">${createMovement1WithTiebreaker.CSID}</var>\r
+                <var ID="objectDocumentType">Movement</var>\r
+            </vars>\r
+            <expectedCodes>201</expectedCodes>\r
+        </test>\r
+        \r
+        <test ID="relateCollectionObjectToMovement2WithTiebreaker">\r
+            <method>POST</method>\r
+            <uri>/cspace-services/relations</uri>\r
+            <filename>batch/relation.xml</filename>\r
+            <vars>\r
+                <var ID="subjectCsid">${createCollectionObjectWithTiebreaker.CSID}</var>\r
+                <var ID="subjectDocumentType">CollectionObject</var>\r
+                <var ID="objectCsid">${createMovement2WithTiebreaker.CSID}</var>\r
+                <var ID="objectDocumentType">Movement</var>\r
+            </vars>\r
+            <expectedCodes>201</expectedCodes>\r
+        </test>\r
+         \r
+        <test ID="relateCollectionObjectToMovement3WithTiebreaker">\r
+            <method>POST</method>\r
+            <uri>/cspace-services/relations</uri>\r
+            <filename>batch/relation.xml</filename>\r
+            <vars>\r
+                <var ID="subjectCsid">${createCollectionObjectWithTiebreaker.CSID}</var>\r
+                <var ID="subjectDocumentType">CollectionObject</var>\r
+                <var ID="objectCsid">${createMovement3WithTiebreaker.CSID}</var>\r
+                <var ID="objectDocumentType">Movement</var>\r
+            </vars>\r
+            <expectedCodes>201</expectedCodes>\r
+        </test>\r
+\r
+        <test ID="modifyMovement1WithTiebreaker">\r
+            <method>PUT</method>\r
+            <uri>/cspace-services/movements/${createMovement1WithTiebreaker.CSID}</uri>\r
+            <filename>batch/movement.xml</filename>\r
+            <vars>\r
+                <var ID="currentLocation">location-1-modified-with-tiebreaker</var>\r
+                <var ID="locationDate">${createMovement1WithTiebreaker.locationDate}</var>\r
+            </vars>\r
+            <expectedCodes>200</expectedCodes>\r
+        </test>\r
\r
+        <test ID="invokeBatchAfterMovement1ModificationWithTiebreaker" auth="test" autoDeletePOSTS="false">\r
+            <method>POST</method>\r
+            <uri>/cspace-services/batch/${createBatchRecordWithTiebreaker.CSID}</uri>\r
+            <filename>batch/batch-invoke-updateobjloc-single.xml</filename>\r
+            <vars>\r
+                <var ID="collectionObjectCSID">${createCollectionObjectWithTiebreaker.CSID}</var>\r
+            </vars>\r
+            <expectedCodes>200</expectedCodes>\r
+        </test> \r
+        \r
+        <!-- Verify that, following the invocation of the batch job, the -->\r
+        <!-- computedCurrentLocation field in the CollectionObject record has -->\r
+        <!-- been updated to the appropriate value, reflecting the most recent -->\r
+        <!-- movement (e.g. the Movement record with the most recent locationDate, -->\r
+        <!-- and, as in this test group - where two Movement records have identical -->\r
+        <!-- locationDate values - the Movement record that has been updated most recently. -->\r
+        <test ID="readCollectionObjectAfterMovement1ModificationWithTiebreaker">\r
+            <method>GET</method>\r
+            <uri>/cspace-services/collectionobjects/${createCollectionObjectWithTiebreaker.CSID}</uri>\r
+            <filename>batch/updateobjloc.xml</filename>\r
+            <response>\r
+                <expected level="ADDOK" />\r
+                <filename>batch/res/collectionobject.res.xml</filename>\r
+                <vars>\r
+                    <var ID="computedCurrentLocationValue">${modifyMovement1WithTiebreaker.currentLocation}</var>\r
+                </vars>\r
+            </response>\r
+            <expectedCodes>200</expectedCodes>\r
+        </test>      \r
+\r
+        <test ID="modifyMovement2WithTiebreaker">\r
+            <method>PUT</method>\r
+            <uri>/cspace-services/movements/${createMovement2WithTiebreaker.CSID}</uri>\r
+            <filename>batch/movement.xml</filename>\r
+            <vars>\r
+                <var ID="currentLocation">location-2-modified-with-tiebreaker</var>\r
+                <var ID="locationDate">${createMovement1WithTiebreaker.locationDate}</var>\r
+            </vars>\r
+            <expectedCodes>200</expectedCodes>\r
+        </test>\r
\r
+        <test ID="invokeBatchAfterMovement2ModificationWithTiebreaker" auth="test" autoDeletePOSTS="false">\r
+            <method>POST</method>\r
+            <uri>/cspace-services/batch/${createBatchRecordWithTiebreaker.CSID}</uri>\r
+            <filename>batch/batch-invoke-updateobjloc-single.xml</filename>\r
+            <vars>\r
+                <var ID="collectionObjectCSID">${createCollectionObjectWithTiebreaker.CSID}</var>\r
+            </vars>\r
+            <expectedCodes>200</expectedCodes>\r
+        </test> \r
+        \r
+        <test ID="readCollectionObjectRecordAfterMovement2ModificationWithTiebreaker">\r
+            <method>GET</method>\r
+            <uri>/cspace-services/collectionobjects/${createCollectionObjectWithTiebreaker.CSID}</uri>\r
+            <filename>batch/updateobjloc.xml</filename>\r
+            <response>\r
+                <expected level="ADDOK" />\r
+                <filename>batch/res/collectionobject.res.xml</filename>\r
+                <vars>\r
+                    <var ID="computedCurrentLocationValue">${modifyMovement2WithTiebreaker.currentLocation}</var>\r
+                </vars>\r
+            </response>\r
+            <expectedCodes>200</expectedCodes>\r
+        </test>\r
+        \r
+        <test ID="modifyMovement3WithTiebreaker">\r
+            <method>PUT</method>\r
+            <uri>/cspace-services/movements/${createMovement3WithTiebreaker.CSID}</uri>\r
+            <filename>batch/movement.xml</filename>\r
+            <vars>\r
+                <var ID="currentLocation">location-3-modified-with-tiebreaker</var>\r
+                <var ID="locationDate">${createMovement1WithTiebreaker.locationDate}</var>\r
+            </vars>\r
+            <expectedCodes>200</expectedCodes>\r
+        </test>\r
\r
+        <test ID="invokeBatchAfterMovement3ModificationWithTiebreaker" auth="test" autoDeletePOSTS="false">\r
+            <method>POST</method>\r
+            <uri>/cspace-services/batch/${createBatchRecordWithTiebreaker.CSID}</uri>\r
+            <filename>batch/batch-invoke-updateobjloc-single.xml</filename>\r
+            <vars>\r
+                <var ID="collectionObjectCSID">${createCollectionObjectWithTiebreaker.CSID}</var>\r
+            </vars>\r
+            <expectedCodes>200</expectedCodes>\r
+        </test> \r
+        \r
+        <test ID="readCollectionObjectRecordAfterMovement3ModificationWithTiebreaker">\r
+            <method>GET</method>\r
+            <uri>/cspace-services/collectionobjects/${createCollectionObjectWithTiebreaker.CSID}</uri>\r
+            <filename>batch/updateobjloc.xml</filename>\r
+            <response>\r
+                <expected level="ADDOK" />\r
+                <filename>batch/res/collectionobject.res.xml</filename>\r
+                <vars>\r
+                    <var ID="computedCurrentLocationValue">${modifyMovement3WithTiebreaker.currentLocation}</var>\r
+                </vars>\r
+            </response>\r
+            <expectedCodes>200</expectedCodes>\r
+        </test>\r
+            \r
+    </testGroup>\r
+    \r
     <testGroup ID="invocationModeList" autoDeletePOSTS="true">\r
         \r
         <test ID="createBatchRecord">\r
index 36ef17097ffcad8c017a08f19ca42d781bcd0aee..590f0cac8f434e23e0fb03f83c300a23565a833b 100644 (file)
@@ -41,6 +41,7 @@ public class UpdateObjectLocationBatchJob extends AbstractBatchInvocable {
     private final static String LIFECYCLE_STATE_ELEMENT_NAME = "currentLifeCycleState";
     private final static String LOCATION_DATE_ELEMENT_NAME = "locationDate";
     private final static String OBJECT_NUMBER_ELEMENT_NAME = "objectNumber";
+    private final static String UPDATE_DATE_ELEMENT_NAME = "updatedAt";
     private final static String WORKFLOW_COMMON_SCHEMA_NAME = "workflow_common";
     private final static String WORKFLOW_COMMON_NAMESPACE_PREFIX = "ns2";
     private final static String WORKFLOW_COMMON_NAMESPACE_URI =
@@ -200,7 +201,9 @@ public class UpdateObjectLocationBatchJob extends AbstractBatchInvocable {
         String movementCsid;
         String currentLocation;
         String locationDate;
+        String updateDate;
         String mostRecentLocationDate = "";
+        String comparisonUpdateDate = "";
         for (AbstractCommonList.ListItem movementListItem : relatedMovements.getListItem()) {
             movementCsid = AbstractCommonListUtils.ListItemGetElementValue(movementListItem, CSID_ELEMENT_NAME);
             if (Tools.isBlank(movementCsid)) {
@@ -218,6 +221,10 @@ public class UpdateObjectLocationBatchJob extends AbstractBatchInvocable {
             if (Tools.isBlank(locationDate)) {
                 continue;
             }
+            updateDate = AbstractCommonListUtils.ListItemGetElementValue(movementListItem, UPDATE_DATE_ELEMENT_NAME);
+            if (Tools.isBlank(updateDate)) {
+                continue;
+            }
             currentLocation = AbstractCommonListUtils.ListItemGetElementValue(movementListItem, CURRENT_LOCATION_ELEMENT_NAME);
             if (Tools.isBlank(currentLocation)) {
                 continue;
@@ -229,6 +236,7 @@ public class UpdateObjectLocationBatchJob extends AbstractBatchInvocable {
             // value of a parameter passed in during batch job invocation.
             if (logger.isTraceEnabled()) {
                 logger.trace("Location date value = " + locationDate);
+                logger.trace("Update date value = " + updateDate);
                 logger.trace("Current location value = " + currentLocation);
             }
             // If this record's location date value is more recent than that of other
@@ -244,6 +252,15 @@ public class UpdateObjectLocationBatchJob extends AbstractBatchInvocable {
             if (locationDate.compareTo(mostRecentLocationDate) > 0) {
                 mostRecentLocationDate = locationDate;
                 mostRecentMovement = movementListItem;
+                comparisonUpdateDate = updateDate;
+            } else if (locationDate.compareTo(mostRecentLocationDate) == 0) {
+                // If the two location dates match, then use a tiebreaker
+                if (updateDate.compareTo(comparisonUpdateDate) > 0) {
+                    // The most recent location date value doesn't need to be
+                    // updated here, as the two records' values are identical
+                    mostRecentMovement = movementListItem;
+                    comparisonUpdateDate = updateDate;
+                }
             }
 
         }