]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.core/src/main/java/org/argeo/slc/unit/IndependentDbTestCase.java
Create separate Hibernate project
[gpl/argeo-slc.git] / org.argeo.slc.core / src / main / java / org / argeo / slc / unit / IndependentDbTestCase.java
index 067ae6cef5ca0b39750a72c25357c468756c0019..bd6b2f993109374b98e472821da0284967ab30fa 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
@@ -71,7 +74,7 @@ public abstract class IndependentDbTestCase extends AbstractSpringTestCase {
         * returns <i>dataSource</i>.\r
         */\r
        protected String getDataSourceBeanName() {\r
-               return "dataSource";\r
+               return "slcDefault.dataSource.inMemoryTestHSQL";\r
        }\r
 \r
        /**\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