All Downloads are FREE. Search and download functionalities are using the official Maven repository.

atg.service.idgen.IdGeneratorInitializer Maven / Gradle / Ivy

Go to download

ATG DUST is a framework for building JUnit tests for applications built on the ATG Dynamo platform. This framework allows one to quickly write test code that depends up Nucleus or ATG Repositories. By using this framework one can drastically cut down on development time. It takes only a few seconds to start up a test with a repository, but it may take multiple minutes to start up an application server. To get started with DUST, take a look at http://atgdust.sourceforge.net/first-test.html. This page will walk you through the process of running a basic test which starts Nucleus. After that, read the other getting started guides to describe how to create standalone Junit tests which can startup repositories and use the DynamoHttpServletResponse classes. For only ATG10 and tested.

The newest version!
/**
 * Copyright 2009 ATG DUST Project 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.service.idgen;

import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.log4j.Logger;

/*
 * IdGeneratorInitializer contains logic used to create and drop the schema used
 * for IdGenerators.
 * $Id: //test/UnitTests/base/main/src/Java/atg/service/idgen/IdGeneratorInitializer.java#4 $
 * @author Adam Belmont
 */
public class IdGeneratorInitializer {

  private static final String SELECT_COUNT_FROM_TEMPLATE = "select count(*) from";

  private static final String DROP_TABLE_TEMPLATE = "DROP TABLE";

  private InitializingIdGenerator mGenerator;
  Logger log = Logger.getLogger(IdGeneratorInitializer.class);

  /**
   * Creates a new IdGeneratorInitializer used for the given generator,
   * pGenerator.
   * 
   * @param pGenerator
   */
  public IdGeneratorInitializer(InitializingIdGenerator pGenerator) {
    mGenerator = pGenerator;
  }

  /**
   * Creates a new schema for the current generator. If the schema exists, it's
   * dropped and a new one is created.
   * 
   * @throws SQLException
   */
  public void initialize() throws SQLException {
    if (tablesExist()) {
      dropTables();
    }
    initializeTables();
  }

// --------------------------
  /**
   * Drops the tables required for this component
   * 
   * @throws SQLException
   */
  void dropTables() throws SQLException {
    executeUpdateStatement(DROP_TABLE_TEMPLATE + " "
        + mGenerator.getTableName());
  }

  public Map mMetaDataMap = new HashMap();

  /**
   * Returns a cached instance of the DB metadata for the current connection
   * 
   * @return
   */
  public DatabaseMetaData getDatabaseMetaData() {
    DataSource ds = mGenerator.getDataSource();
    if (mMetaDataMap.get(ds) == null)
      try {
        mMetaDataMap.put(ds, ds.getConnection().getMetaData());
      } catch (SQLException e) {
        log.error("Failed to get DatabaseMetaData.", e);
      }
    return mMetaDataMap.get(ds);
  }

  // --------------------------
  /**
   * Returns true if the tables required for this component exist
   * 
   * @return
   */
  public boolean tablesExist() {
    String[] types = { "TABLE" };
    boolean exists = false;
    try {
      ResultSet rs = getDatabaseMetaData().getTables(null, null,
          mGenerator.getTableName(), types);
      while (rs.next()) {
        exists = true;
      }
    } catch (SQLException e) {
      ; // eat it
    }
    return exists;
  }

  // --------------------------
  /**
   * Creates the table required for this component
   * 
   * @throws SQLException
   */
  void initializeTables() throws SQLException {
    String statement = mGenerator.getCreateStatement();
    log.info("Creating IdGenerator tables : " + statement);
    executeUpdateStatement(statement);
  }

  // --------------------------
  /**
   * @return TODO
   * @throws SQLException
   */
  private boolean executeUpdateStatement(String pStatement) throws SQLException {
    boolean success = false;
    Statement st = null;
    try {
      st = mGenerator.getDataSource().getConnection().createStatement(); // statements
      int i = st.executeUpdate(pStatement); // run the query
      if (i == -1) {
        log.error("Error creating tables with statement" + pStatement);
      }
      success = true;
    } finally {
      try {
        st.close();
      } catch (SQLException e) {
        ; // eat it
      }
    }
    return success;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy