1 | package atg.test.util; |
2 | |
3 | import java.io.File; |
4 | import java.io.IOException; |
5 | import java.sql.SQLException; |
6 | import java.sql.Statement; |
7 | import java.util.Map; |
8 | import java.util.Properties; |
9 | |
10 | import org.apache.commons.dbcp.BasicDataSource; |
11 | import org.apache.log4j.Logger; |
12 | |
13 | /** |
14 | * This class is a merger of atg.test.util.DBUtils and |
15 | * atg.adapter.gsa.GSATestUtils. The result will hopefully be a class that just |
16 | * has the bare minimums needed for testing against an existing and/or in-memory |
17 | * database. |
18 | * |
19 | * <p> |
20 | * TODO: re-enable versioned repositories |
21 | * </p> |
22 | * |
23 | * @author robert |
24 | * |
25 | */ |
26 | public class RepositoryManager { |
27 | |
28 | private static Logger log = Logger.getLogger(RepositoryManager.class); |
29 | |
30 | private boolean isDefaultInMemoryDb; |
31 | |
32 | private final BasicDataSource dataSource = new BasicDataSource(); |
33 | |
34 | /** |
35 | * |
36 | * @param configRoot |
37 | * @param repositoryPath |
38 | * The the repository to be tested, specified as nucleus component |
39 | * path. |
40 | * @param settings |
41 | * |
42 | * A {@link Properties} instance with the following values (in this example |
43 | * the properties are geared towards an mysql database): |
44 | * |
45 | * <pre> |
46 | * final Properties properties = new Properties(); |
47 | * properties.put("driver", "com.mysql.jdbc.Driver"); |
48 | * properties.put("url", "jdbc:mysql://localhost:3306/someDb"); |
49 | * properties.put("user", "someUserName"); |
50 | * properties.put("password", "somePassword"); |
51 | * </pre> |
52 | * |
53 | * @param dropTables |
54 | * If <code>true</code> then existing tables will be dropped and |
55 | * re-created, if set to <code>false</code> the existing tables |
56 | * will be used. |
57 | * @param isDebug |
58 | * Enables or disables debugging. |
59 | * @param definitionFiles |
60 | * One or more needed repository definition files. |
61 | * @throws SQLException |
62 | * @throws IOException |
63 | */ |
64 | public void initializeMinimalRepositoryConfiguration(File configRoot, |
65 | String repositoryPath, Map<String, String> settings, |
66 | final boolean dropTables, final boolean isDebug, |
67 | String... definitionFiles) throws SQLException, IOException { |
68 | |
69 | dataSource.setDriverClassName(settings.get("driver")); |
70 | dataSource.setUsername(settings.get("user")); |
71 | dataSource.setPassword(settings.get("password")); |
72 | dataSource.setUrl(settings.get("url")); |
73 | |
74 | log.info(String.format("Connected to '%s' using driver '%s'", dataSource |
75 | .getUrl(), dataSource.getDriverClassName())); |
76 | |
77 | if (dropTables) { |
78 | createIdGeneratorTables(); |
79 | } |
80 | else { |
81 | log.info("Existing tables will be used."); |
82 | } |
83 | |
84 | isDefaultInMemoryDb = settings.get("url")==null?false: |
85 | settings.get("url").contains("jdbc:hsqldb:mem:testDb"); |
86 | |
87 | } |
88 | |
89 | /** |
90 | * |
91 | * @throws SQLException |
92 | */ |
93 | public void shutdownInMemoryDbAndCloseConnections() throws SQLException { |
94 | if (isDefaultInMemoryDb) { |
95 | dataSource.getConnection().createStatement().execute("SHUTDOWN"); |
96 | } |
97 | dataSource.close(); |
98 | } |
99 | |
100 | /** |
101 | * |
102 | * @throws SQLException |
103 | */ |
104 | private void createIdGeneratorTables() throws SQLException { |
105 | |
106 | log.info("Re-creating (drop and create) DAS_ID_GENERATOR"); |
107 | |
108 | final Statement statement = dataSource.getConnection().createStatement(); |
109 | try { |
110 | statement.executeUpdate("DROP TABLE DAS_ID_GENERATOR"); |
111 | } |
112 | catch (SQLException e) { |
113 | // just try drop any existing DAS_ID_GENERATOR if desired |
114 | } |
115 | // create new DAS_ID_GENERATOR |
116 | statement |
117 | .executeUpdate("CREATE TABLE DAS_ID_GENERATOR(ID_SPACE_NAME VARCHAR(60) NOT NULL, " |
118 | + "SEED NUMERIC(19, 0) NOT NULL, BATCH_SIZE INTEGER NOT NULL, " |
119 | + "PREFIX VARCHAR(10) DEFAULT NULL, SUFFIX VARCHAR(10) DEFAULT NULL, " |
120 | + "PRIMARY KEY(ID_SPACE_NAME))"); |
121 | statement.close(); |
122 | } |
123 | |
124 | } |