Add binary support in independent db test case
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 15 Jan 2008 16:42:12 +0000 (16:42 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 15 Jan 2008 16:42:12 +0000 (16:42 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@920 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.core/src/main/java/org/argeo/slc/core/structure/tree/TreeSRelated.java
org.argeo.slc.core/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java

index 8bf57efdd821bb1ec480bd0c7607a22a0447c572..f939fbc12cffa7ac9e1851e6b061b9598cad244d 100644 (file)
@@ -1,9 +1,10 @@
 package org.argeo.slc.core.structure.tree;\r
 \r
+import org.argeo.slc.core.structure.StructureAware;\r
 import org.argeo.slc.core.structure.StructureElement;\r
 import org.argeo.slc.core.structure.StructureRegistry;\r
 \r
-public interface TreeSRelated {\r
+public interface TreeSRelated extends StructureAware<TreeSPath>{\r
        public TreeSPath getBasePath();\r
        public StructureRegistry<TreeSPath> getRegistry();\r
        public StructureElement getStructureElement(String key);\r
index 067ae6cef5ca0b39750a72c25357c468756c0019..15e7f679e77f364e0b3908306b3e08175d7d1961 100644 (file)
@@ -10,11 +10,14 @@ import org.dbunit.DatabaseUnitException;
 import org.dbunit.IDatabaseTester;\r
 import org.dbunit.database.IDatabaseConnection;\r
 import org.dbunit.dataset.IDataSet;\r
+import org.dbunit.dataset.ReplacementDataSet;\r
 import org.dbunit.dataset.xml.FlatXmlDataSet;\r
 import org.dbunit.operation.DatabaseOperation;\r
 import org.springframework.core.io.ClassPathResource;\r
 import org.springframework.core.io.Resource;\r
 \r
+import org.apache.commons.io.IOUtils;\r
+\r
 import org.hibernate.tool.hbm2ddl.SchemaExport;\r
 \r
 import org.argeo.slc.core.SlcException;\r
@@ -80,16 +83,57 @@ public abstract class IndependentDbTestCase extends AbstractSpringTestCase {
         * {@link #getDataSetResource()}\r
         */\r
        protected IDataSet createDataSet() {\r
+               InputStream in = null;\r
                try {\r
-                       InputStream in = getDataSetResource().getInputStream();\r
-                       IDataSet dataSet = new FlatXmlDataSet(in);\r
-                       in.close();\r
+                       in = getDataSetResource().getInputStream();\r
+                       String[] replaceStrings = getReplacementStrings();\r
+                       IDataSet dataSet;\r
+                       if (replaceStrings.length == 0) {\r
+                               dataSet = new FlatXmlDataSet(in);\r
+                       } else {\r
+                               dataSet = new ReplacementDataSet(new FlatXmlDataSet(in));\r
+                               for (String str : replaceStrings) {\r
+                                       replace((ReplacementDataSet) dataSet, str);\r
+                               }\r
+                       }\r
                        return dataSet;\r
                } catch (Exception e) {\r
                        throw new SlcException("Cannot create data set", e);\r
+               } finally {\r
+                       IOUtils.closeQuietly(in);\r
                }\r
        }\r
 \r
+       /**\r
+        * To be overridden. Return an empty array by default.\r
+        * \r
+        * @return the array of strings to replace in the dataset\r
+        */\r
+       protected String[] getReplacementStrings() {\r
+               return new String[0];\r
+       }\r
+\r
+       /**\r
+        * Set the object replacing the given string. To be overridden. Does nothing\r
+        * by default.\r
+        */\r
+       protected void replace(ReplacementDataSet dataSet, String str)\r
+                       throws Exception {\r
+\r
+       }\r
+\r
+       /**\r
+        * Replace the given string by the content of the resource with the same\r
+        * name in the same package, as a byte array.\r
+        */\r
+       protected void replaceByRessource(ReplacementDataSet dataSet, String str)\r
+                       throws Exception {\r
+               Resource zipResource = new ClassPathResource(inPackage(str));\r
+\r
+               dataSet.addReplacementObject(str, IOUtils.toByteArray(zipResource\r
+                               .getInputStream()));\r
+       }\r
+\r
        /**\r
         * The resource of the data set to load. The default implementation loads a\r
         * <code>ClassPathResource</code> located at\r