/tests/src/test/java/org/sigmah/endtoend/fixture/MSSQLDataSetLoader.java

http://sigma-h.googlecode.com/ · Java · 117 lines · 96 code · 17 blank · 4 comment · 3 complexity · 4f657973527072e6bcb7da9c397bbe75 MD5 · raw file

  1. /*
  2. * All Sigmah code is released under the GNU General Public License v3
  3. * See COPYRIGHT.txt and LICENSE.txt.
  4. */
  5. package org.sigmah.endtoend.fixture;
  6. import org.dbunit.DatabaseUnitException;
  7. import org.dbunit.database.IDatabaseConnection;
  8. import org.dbunit.dataset.DataSetException;
  9. import org.dbunit.dataset.IDataSet;
  10. import org.dbunit.dataset.xml.FlatXmlDataSet;
  11. import org.dbunit.ext.mssql.InsertIdentityOperation;
  12. import org.dbunit.ext.mssql.MsSqlConnection;
  13. import org.dbunit.operation.DatabaseOperation;
  14. import java.io.IOException;
  15. import java.io.InputStream;
  16. import java.io.InputStreamReader;
  17. import java.sql.Connection;
  18. import java.sql.DriverManager;
  19. import java.sql.SQLException;
  20. import java.sql.Statement;
  21. public class MSSQLDataSetLoader {
  22. private Connection connection;
  23. private IDataSet dataSet;
  24. private String name;
  25. public void load(String name) {
  26. this.name = name;
  27. try {
  28. load();
  29. } catch (Exception e) {
  30. throw new AssertionError(e);
  31. }
  32. }
  33. public void load() throws IOException, DatabaseUnitException, SQLException, ClassNotFoundException {
  34. openConnection();
  35. try {
  36. loadDataSet();
  37. removeAllRows();
  38. populate();
  39. } finally {
  40. closeConnection();
  41. }
  42. }
  43. private void loadDataSet() throws IOException, DataSetException {
  44. InputStream in = getClass().getResourceAsStream(name);
  45. if (in == null)
  46. throw new Error("Could not find resource '" + name + "'");
  47. dataSet = new FlatXmlDataSet(new InputStreamReader(in), false, true, false);
  48. }
  49. private void openConnection() throws SQLException, ClassNotFoundException {
  50. Class.forName("net.sourceforge.jtds.jdbc.Driver");
  51. connection = DriverManager.getConnection(
  52. "jdbc:jtds:sqlserver://localhost:1433/actinfo;user=sa;password=adminpwd");
  53. }
  54. private void removeAllRows() throws SQLException {
  55. String tables[] = {
  56. "AttributeGroupInActivity",
  57. "PartnerInDatabase",
  58. "LocationAdminLink",
  59. "IndicatorValue",
  60. "AttributeValue",
  61. "ReportingPeriod",
  62. "Site",
  63. "Location",
  64. "Indicator",
  65. "Attribute",
  66. "AttributeGroup",
  67. "Activity",
  68. "UserPermission",
  69. "Partner",
  70. "ReportSubscription",
  71. "ReportTemplate",
  72. "UserDatabase",
  73. "Authentication",
  74. "UserLogin",
  75. "LocationType",
  76. "AdminEntity",
  77. "AdminLevel",
  78. "Country" };
  79. Statement stmt = connection.createStatement();
  80. for(String tableName : tables) {
  81. stmt.execute("delete from " + tableName);
  82. }
  83. stmt.close();
  84. }
  85. private void populate() throws SQLException, DatabaseUnitException {
  86. executeOperation(InsertIdentityOperation.INSERT, dataSet);
  87. }
  88. private void executeOperation(final DatabaseOperation op, final IDataSet dataSet) throws SQLException, DatabaseUnitException {
  89. IDatabaseConnection dbUnitConnection = createDbUnitConnection(connection);
  90. op.execute(dbUnitConnection, dataSet);
  91. }
  92. private IDatabaseConnection createDbUnitConnection(Connection connection) throws DatabaseUnitException {
  93. IDatabaseConnection con = new MsSqlConnection(connection);
  94. con.getConfig().setProperty("http://www.dbunit.org/properties/escapePattern", "[?]");
  95. return con;
  96. }
  97. private void closeConnection() throws SQLException {
  98. connection.close();
  99. }
  100. }