]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-3917: Dollar signs (and backslashes) are now legal characters in import record...
authorAron Roberts <aron@socrates.berkeley.edu>
Wed, 25 Apr 2012 22:17:52 +0000 (15:17 -0700)
committerAron Roberts <aron@socrates.berkeley.edu>
Wed, 25 Apr 2012 22:17:52 +0000 (15:17 -0700)
services/IntegrationTests/src/test/resources/test-data/xmlreplay/imports/import-objectexit-dollarsign.xml [new file with mode: 0644]
services/IntegrationTests/src/test/resources/test-data/xmlreplay/imports/imports.xml
services/IntegrationTests/src/test/resources/test-data/xmlreplay/imports/res/import-objectexit-dollarsign.res.xml [new file with mode: 0644]
services/common-api/src/main/java/org/collectionspace/services/common/api/Tools.java
services/imports/service/src/main/java/org/collectionspace/services/imports/TemplateExpander.java

diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/imports/import-objectexit-dollarsign.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/imports/import-objectexit-dollarsign.xml
new file mode 100644 (file)
index 0000000..244d2b4
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<imports>
+    <import service="ObjectExit" type="ObjectExit">
+        <schema xmlns:objectexit_common="http://collectionspace.org/services/objectexit" 
+                name="objectexit_common">
+            <exitNote>A dollar sign followed by '29.00': $29.00  And a backslash: \</exitNote>        
+            <exitNumber>OE-IMPORT-TEST-1999.10</exitNumber>
+        </schema>
+    </import>
+</imports>
index de7148f73ecef94d876bc3a20a582535a268bd89..45f8e63acd6336fed402cd68f26e7b9331f944ea 100644 (file)
             <method>DELETE</method>
             <uri>/cspace-services/objectexit/${importObjectExitWithDocID.recordCSID}</uri>
         </test>
+        
+        <!--
+            Import a record containing dollar sign and backslash character(s).
+            (See CSPACE-3917.) 
+        -->
+        <test ID="importObjectExitWithDollarSign">
+            <expectedCodes>200</expectedCodes>
+            <method>POST</method>
+            <uri>/cspace-services/imports</uri>
+            <filename>imports/import-objectexit-dollarsign.xml</filename>
+            <response>
+                <expected level="TEXT" />
+                <filename>imports/res/import-objectexit.res.xml</filename>
+            </response>
+        </test>
+        <test ID="verifyObjectExitWithDollarSign">
+            <expectedCodes>200</expectedCodes>
+            <method>GET</method>
+            <uri>/cspace-services/objectexit/${importObjectExitWithDollarSign.got("//csid")}</uri>
+            <response>
+                <expected level="ADDOK" />
+                <filename>imports/res/import-objectexit-dollarsign.res.xml</filename>
+                <label>objectexit_common</label>
+            </response>
+        </test>
+        <test ID="deleteObjectExitWithDollarSign">
+            <expectedCodes>200</expectedCodes>
+            <method>DELETE</method>
+            <uri>/cspace-services/objectexit/${importObjectExitWithDollarSign.got("//csid")}</uri>
+        </test>
 
     </testGroup>
     
diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/imports/res/import-objectexit-dollarsign.res.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/imports/res/import-objectexit-dollarsign.res.xml
new file mode 100644 (file)
index 0000000..30dbe66
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document name="objectexit">
+    <ns2:objectexit_common xmlns:ns2="http://collectionspace.org/services/objectexit" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+        <exitNote>A dollar sign followed by '29.00': $29.00  And a backslash: \</exitNote>        
+        <exitNumber>OE-IMPORT-TEST-1999.10</exitNumber>
+    </ns2:objectexit_common>
+</document>
+
index c1bac1fa83479bcb4125a3fa9dfaa90f0df84625..c56016185aa18994c26fef2ee1da8e303497e60b 100644 (file)
@@ -113,6 +113,13 @@ public class Tools {
         String output = matcher.replaceAll(replace);\r
         return output;\r
     }\r
+    \r
+    public static String searchAndReplaceWithQuoteReplacement(String source, String find, String replace){\r
+        Pattern pattern = Pattern.compile(find);\r
+        Matcher matcher = pattern.matcher(source);\r
+        String output = matcher.replaceAll(matcher.quoteReplacement(replace));\r
+        return output;\r
+    }\r
 \r
     static boolean m_fileSystemIsDOS = "\\".equals(File.separator);\r
     static boolean m_fileSystemIsMac = ":".equals(File.separator);\r
index f1a2f0cb81a9ca2634335e8251f7c8bcf78e5a98..c48365fef17cf73572f62df2c4731cf63635f9fc 100644 (file)
@@ -59,7 +59,7 @@ public class TemplateExpander {
      * @return the expanded template.
      */
     public static String searchAndReplaceVar(String source, String theVar, String replace){
-        return Tools.searchAndReplace(source, var(theVar), replace);
+        return Tools.searchAndReplaceWithQuoteReplacement(source, var(theVar), replace);
     }
 
     public static String doOneService(String tenantId, String outDir, String partTmpl, String wrapperTmpl,
@@ -70,17 +70,17 @@ public class TemplateExpander {
         } else {
             docID = UUID.randomUUID().toString();
         }
-        String part = Tools.searchAndReplace(partTmpl, var("docID"), docID);
+        String part = searchAndReplaceVar(partTmpl, "docID", docID);
 
-        wrapperTmpl = Tools.searchAndReplace(wrapperTmpl, var("Schema"), part);
-        wrapperTmpl = Tools.searchAndReplace(wrapperTmpl, var("docID"), docID);
-        wrapperTmpl = Tools.searchAndReplace(wrapperTmpl, var("tenantID"), tenantId);
-        wrapperTmpl = Tools.searchAndReplace(wrapperTmpl, var("ServiceType"), SERVICE_TYPE);
-        wrapperTmpl = Tools.searchAndReplace(wrapperTmpl, var("ServiceName"), SERVICE_NAME);
+        wrapperTmpl = searchAndReplaceVar(wrapperTmpl, "Schema", part);
+        wrapperTmpl = searchAndReplaceVar(wrapperTmpl, "docID", docID);
+        wrapperTmpl = searchAndReplaceVar(wrapperTmpl, "tenantID", tenantId);
+        wrapperTmpl = searchAndReplaceVar(wrapperTmpl, "ServiceType", SERVICE_TYPE);
+        wrapperTmpl = searchAndReplaceVar(wrapperTmpl, "ServiceName", SERVICE_NAME);
         //TODO: set timestamp via creating a ${created} variable.
         String nowTime = GregorianCalendarDateTimeUtils.timestampUTC();
-        wrapperTmpl = Tools.searchAndReplace(wrapperTmpl, var("createdDate"), nowTime);
-        wrapperTmpl = Tools.searchAndReplace(wrapperTmpl, var("updatedDate"), nowTime);
+        wrapperTmpl = searchAndReplaceVar(wrapperTmpl, "createdDate", nowTime);
+        wrapperTmpl = searchAndReplaceVar(wrapperTmpl, "updatedDate", nowTime);
 
         String serviceDir = outDir+'/'+docID;
         FileTools.saveFile(serviceDir, "document.xml", wrapperTmpl, true/*true=create parent dirs*/);