/* 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 org.activiti.upgrade.data;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.util.logging.Logger;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.db.DbSqlSession;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.interceptor.CommandExecutor;
import org.activiti.engine.impl.util.ClassNameUtil;
import org.activiti.engine.impl.util.LogUtil;
import org.activiti.upgrade.CleanPostgres;
import org.activiti.upgrade.ProxyDriver;
import org.activiti.upgrade.UpgradeUtil;
/**
* @author Tom Baeyens
* @author Joram Barrez
*/
public class UpgradeDataGenerator {
static Logger log = Logger.getLogger(UpgradeDataGenerator.class.getName());
public static void main(String[] args) {
ProcessEngineConfigurationImpl processEngineConfiguration = null;
try {
LogUtil.readJavaUtilLoggingConfigFromClasspath();
if (args==null || args.length!=2) {
throw new RuntimeException("exactly 2 arguments expected: database and releaseVersion");
}
String database = args[0];
String releaseVersion = args[1];
log.fine("database: "+database);
log.fine("releaseVersion: "+releaseVersion);
processEngineConfiguration = UpgradeUtil.createProcessEngineConfiguration(database);
// install the jdbc proxy driver
log.fine("installing jdbc proxy driver delegating to "+processEngineConfiguration.getJdbcUrl());
ProxyDriver.setUrl(processEngineConfiguration.getJdbcUrl());
processEngineConfiguration.setJdbcUrl("proxy");
DriverManager.registerDriver(new ProxyDriver());
log.fine("building the process engine...");
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
log.fine("### Running data generator "+ClassNameUtil.getClassNameWithoutPackage(CommonDataGenerator.class)+" in the old version");
CommonDataGenerator commonDataGenerator = new CommonDataGenerator();
commonDataGenerator.setProcessEngine(processEngine);
commonDataGenerator.run();
// < 5.11 upgrade tests (ie the following data only needs to be generated when the engine is lower then or equals 5.10)
if (UpgradeUtil.getProcessEngineVersion(processEngine) < 11) {
Activiti_5_10_DataGenerator activiti_5_10_DataGenerator = new Activiti_5_10_DataGenerator();
activiti_5_10_DataGenerator.setProcessEngine(processEngine);
activiti_5_10_DataGenerator.run();
}
log.fine("### Captured SQL");
PrintWriter file = new PrintWriter("src/test/resources/org/activiti/db/"+releaseVersion+"/data/"+database+".data.sql");
System.err.println();
System.err.println();
for (String statement: ProxyDriver.statements) {
System.err.println(statement);
System.err.println();
file.println(statement);
file.println();
}
file.close();
} catch (Exception e) {
e.printStackTrace();
}
dbSchemaDrop(processEngineConfiguration);
}
private static void dbSchemaDrop(ProcessEngineConfigurationImpl processEngineConfiguration) {
if (processEngineConfiguration.getDatabaseType().equals("postgres")) {
CleanPostgres cleanPostgres = new CleanPostgres();
cleanPostgres.execute();
} else {
CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutorTxRequired();
commandExecutor.execute(new Command<Object> (){
public Object execute(CommandContext commandContext) {
commandContext
.getSession(DbSqlSession.class)
.dbSchemaDrop();
return null;
}
});
}
}
}