package org.molgenis.lifelines.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import org.apache.commons.lang.StringUtils; import org.molgenis.organization.Investigation; import org.molgenis.pheno.Measurement; /** * * @author joris lops */ public class LoaderUtils { public static List<Measurement> getMeasurementsByInvestigationId(final int investigationId, EntityManager em, final String schemaName, final String tableName) throws Exception { Investigation investigation = em .createQuery("SELECT i FROM Investigation i WHERE i.id = :id", Investigation.class) .setParameter("id", investigationId).getSingleResult(); return getMeasurements(em, investigation, schemaName, tableName); } public static List<Measurement> getMeasurements(EntityManager em, Investigation investigation, String schemaName, String tableName) throws Exception { String sql = "SELECT * FROM %s%s"; if (StringUtils.isEmpty(schemaName)) { sql = String.format(sql, "", tableName); } else { sql = String.format(sql, schemaName + ".", tableName); } Connection con = LoaderUtils.getConnection(); Statement stm = con.createStatement(); ResultSet rs = stm.executeQuery(String.format(sql, tableName)); ResultSetMetaData rsmd = rs.getMetaData(); List<Measurement> measurements = new ArrayList<Measurement>(); for (int i = 1; i <= rsmd.getColumnCount(); ++i) { String columnName = rsmd.getColumnName(i); Measurement m = em .createQuery( "SELECT m FROM Measurement m WHERE m.name = :name AND m.investigation = :investigation", Measurement.class).setParameter("name", columnName) .setParameter("investigation", investigation).getSingleResult(); measurements.add(m); } return measurements; } public static Connection getConnection() throws Exception { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@//localhost:2000/llptest"; String username = "molgenis"; String password = "molTagtGen24Ora"; // String driver = "com.mysql.jdbc.Driver"; // String url = "jdbc:mysql://localhost/lifelines"; // String username = "molgenis"; // String password = "molgenis"; Class.forName(driver); Connection conn = DriverManager.getConnection(url, username, password); return conn; } public enum eDatabase { ORACLE, MYSQL } public static String getCast(String dataType, eDatabase database) throws Exception { dataType = dataType.toLowerCase(); int idx = dataType.indexOf("("); if (idx != -1) { dataType = dataType.substring(0, idx); } if (dataType.equals("code")) { if (database == eDatabase.MYSQL) { return "cast(%s as DECIMAL)"; } else if (database == eDatabase.ORACLE) { return "cast(%s as number)"; } } else if (dataType.equals("int") || dataType.equals("nummer")) { if (database == eDatabase.MYSQL) { return "cast(%s as DECIMAL)"; } else if (database == eDatabase.ORACLE) { return "cast(%s as number)"; } } else if (dataType.equals("datetime") || dataType.equals("datum") || dataType.equals("date")) { if (database == eDatabase.MYSQL) { return "cast(substr(value,1, 19) AS DATETIME) "; } else { return "to_date(substr(value,1, 19), 'yyyy-mm-dd hh24:mi:ss') "; } } else if (dataType.equals("decimal")) { if (database == eDatabase.MYSQL) { return "cast(%s as DECIMAL)"; } else if (database == eDatabase.ORACLE) { return "cast(%s as number)"; } } else if (dataType.equals("string") || dataType.equals("tekst") || dataType.equals("text") || dataType.equals("varchar2")) { return "%s"; } else if (dataType.equals("long")) { if (database == eDatabase.MYSQL) { return "cast(%s as DECIMAL)"; } else if (database == eDatabase.ORACLE) { return "cast(%s as number)"; } } else if (dataType.equals("number")) { if (database == eDatabase.MYSQL) { return "cast(%s as DECIMAL)"; } else if (database == eDatabase.ORACLE) { return "cast(%s as number)"; } } else { throw new Exception("DataType not supported!" + dataType); } throw new Exception("DataType/database not supported!" + dataType); } }