package ch.elexis.data;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.data.constants.ElexisSystemPropertyConstants;
import ch.rgw.tools.JdbcLink;
import ch.rgw.tools.JdbcLink.Stm;
public class TestInitializer {
public static final String FLAVOR_H2_MEM = "h2";
public static final String FLAVOR_MYSQL = "mysql";
public static final String FLAVOR_POSTGRES = "postgresql";
/**
*
* @param dbflavor
* @return
*/
public static JdbcLink initTestDBConnection(String dbflavor){
JdbcLink link = null;
if (dbflavor == FLAVOR_H2_MEM) {
link = new JdbcLink("org.h2.Driver", "jdbc:h2:mem:test_mem", "h2");
} else if (dbflavor == FLAVOR_MYSQL) {
link = JdbcLink.createMySqlLink("localhost", "unittests");
} else if (dbflavor == FLAVOR_POSTGRES) {
link = JdbcLink.createPostgreSQLLink("localhost", "unittests");
}
if (link == null) {
return link;
}
try {
boolean connectionOk = link.connect("elexisTest", "elexisTest");
if (connectionOk) {
return link;
}
} catch (Exception jle) {
jle.printStackTrace();
link = null;
}
return link;
}
protected static void executeDBScript(DBConnection connection, String filename)
throws IOException{
Stm stm = null;
try (InputStream is = PersistentObject.class.getResourceAsStream(filename)) {
stm = connection.getStatement();
boolean success = stm.execScript(is, true, true);
if (!success) {
fail("Error executing script!");
throw new IOException();
}
} finally {
connection.releaseStatement(stm);
}
}
public static JdbcLink initDemoDbConnection(){
String demoDBLocation = System.getProperty(ElexisSystemPropertyConstants.DEMO_DB_LOCATION);
if (demoDBLocation == null) {
demoDBLocation = CoreHub.getWritableUserDir() + File.separator + "demoDB";
}
File demo = new File(demoDBLocation);
// --
// returns if either, demo db, direct connection or run from scratch
// --
if (demo.exists() && demo.isDirectory()) {
// open demo database connection
JdbcLink link = JdbcLink.createH2Link(demo.getAbsolutePath() + File.separator + "db");
try {
boolean connectionOk = link.connect("sa", "");
if (connectionOk) {
return link;
}
} catch (Exception jle) {
jle.printStackTrace();
link = null;
}
}
return null;
}
}