Java tutorial
/* * Copyright 2013 Matt Sicker and Contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package atg.tools.dynunit.test.util; import org.apache.commons.dbcp.BasicDataSource; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.NotNull; import java.io.File; import java.sql.SQLException; import java.sql.Statement; import java.util.Map; import java.util.Properties; /** * This class is a merger of atg.tools.dynunit.test.util.DBUtils and * atg.adapter.gsa.GSATestUtils. The result will hopefully be a class that just * has the bare minimums needed for testing against an existing and/or in-memory * database. * <p/> * <p> * TODO: re-enable versioned repositories * </p> * * @author robert */ public class RepositoryManager { private static final Logger log = LogManager.getLogger(RepositoryManager.class); private boolean isDefaultInMemoryDb; private final BasicDataSource dataSource = new BasicDataSource(); /** * @param configRoot * @param repositoryPath The the repository to be tested, specified as nucleus component * path. * @param settings A {@link Properties} instance with the following values (in this * example * the properties are geared towards an mysql database): * <p/> * <pre> * final Properties properties = new * Properties(); * properties.put("driver", * "com.mysql.jdbc.Driver"); * properties.put("url", * "jdbc:mysql://localhost:3306/someDb"); * properties.put("user", * "someUserName"); * properties.put("password", * "somePassword"); * </pre> * @param dropTables If <code>true</code> then existing tables will be dropped and * re-created, if set to <code>false</code> the existing tables * will be used. * @param isDebug Enables or disables debugging. (Not really. See log4j config). * @param definitionFiles One or more needed repository definition files. * * @throws SQLException */ public void initializeMinimalRepositoryConfiguration(File configRoot, String repositoryPath, @NotNull Map<String, String> settings, final boolean dropTables, final boolean isDebug, String... definitionFiles) throws SQLException { dataSource.setDriverClassName(settings.get("driver")); dataSource.setUsername(settings.get("user")); dataSource.setPassword(settings.get("password")); dataSource.setUrl(settings.get("url")); log.info("Connected to '{}' using driver '{}'", dataSource.getUrl(), dataSource.getDriverClassName()); if (dropTables) { createIdGeneratorTables(); } else { log.info("Existing tables will be used."); } isDefaultInMemoryDb = settings.get("url") != null && settings.get("url").contains("jdbc:hsqldb:mem:testDb"); } /** * @throws SQLException */ public void shutdownInMemoryDbAndCloseConnections() throws SQLException { if (isDefaultInMemoryDb) { dataSource.getConnection().createStatement().execute("SHUTDOWN"); } dataSource.close(); } /** * @throws SQLException */ private void createIdGeneratorTables() throws SQLException { log.info("Re-creating (drop and create) DAS_ID_GENERATOR"); final Statement statement = dataSource.getConnection().createStatement(); try { statement.executeUpdate("DROP TABLE DAS_ID_GENERATOR"); } catch (SQLException e) { log.catching(e); // just try drop any existing DAS_ID_GENERATOR if desired } // create new DAS_ID_GENERATOR statement.executeUpdate("CREATE TABLE DAS_ID_GENERATOR(ID_SPACE_NAME VARCHAR(60) NOT NULL, " + "SEED NUMERIC(19, 0) NOT NULL, BATCH_SIZE INTEGER NOT NULL, " + "PREFIX VARCHAR(10) DEFAULT NULL, SUFFIX VARCHAR(10) DEFAULT NULL, " + "PRIMARY KEY(ID_SPACE_NAME))"); statement.close(); } }