package org.jblooming.persistence.hibernate;
import org.hibernate.mapping.Column;
import org.jblooming.PlatformRuntimeException;
import org.jblooming.waf.constants.Fields;
import org.jblooming.waf.settings.ApplicationState;
import org.jblooming.tracer.Tracer;
import org.jblooming.scheduler.Executable;
import org.jblooming.scheduler.JobLogData;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.HashSet;
/**
* Created by Open Lab
* info@open-lab.com
* Date: Sep 7, 2006
* Time: 3:57:17 PM
*/
public class PlatformSchemaUpdater {
public static List<Release> releases = new ArrayList();
public static void updateToLatestVersion() {
boolean updateSchema = false;
boolean doSetup = !Fields.TRUE.equals(ApplicationState.applicationSettings.get("SETUP_DB_UPDATE_DONE"));
for (Release r : releases) {
r.verifyIfUpdateNeeded();
updateSchema = r.needsToBeLaunched || updateSchema;
if (r.needsToBeLaunched || doSetup) {
r.schemaRefinementBeforeHibernateFactory();
}
}
if (updateSchema || doSetup) {
PersistenceContext pc=null;
try {
pc = new PersistenceContext();
HibernateUtilities.generateSchema(false, false, false, null, "tw_,testSuite_", true, ApplicationState.webAppFileSystemRootPath, pc);
pc.commitAndClose();
} catch (Throwable e) {
if (pc!=null)
pc.rollbackAndClose();
Tracer.logExceptionOnPlatformOrOther(e);
throw new PlatformRuntimeException(e);
}
}
for (Release r : releases) {
if (r.needsToBeLaunched || doSetup)
r.propertyFillAfterHibernateFactory();
}
for (Release r : releases) {
if (r.needsToBeLaunched || doSetup)
r.schemaRefinementAfterHibernateFactory();
}
}
public static boolean isSomeUpdateNeeded() {
for (Release r : releases) {
if (r.needsToBeLaunched)
return true;
}
return false;
}
}