package convertors; import java.io.File; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.molgenis.framework.db.Database; import org.molgenis.organization.Investigation; import org.molgenis.pheno.Individual; import org.molgenis.pheno.Measurement; import org.molgenis.pheno.ObservedValue; import org.molgenis.util.CsvFileReader; import org.molgenis.util.Tuple; import app.CsvExport; public class CopyOfGenericConvertor { private Logger logger; final List<Individual> individualsList = new ArrayList<Individual>(); final List<Measurement> measurementsList = new ArrayList<Measurement>(); final List<Measurement> totalMeasurementsList = new ArrayList<Measurement>(); final List<ObservedValue> valuesList = new ArrayList<ObservedValue>(); final List<Investigation> investigationList = new ArrayList<Investigation>(); private String invName; public File tmpDir = null; Database db; public void converter(File file, String invName, Database db) throws Exception { this.invName = invName; this.db = db; makeInvestigation(invName); populateIndividual(file, invName); populateMeasurement(file, invName); populateValue(file, invName); CsvExport export = new CsvExport(); tmpDir = new File(System.getProperty("java.io.tmpdir")); logger.info("############ " + tmpDir.toString()); File a = new File(tmpDir + File.separator + "measurement.txt"); boolean flag = false; if (a.exists()) { flag = a.delete(); } else { logger.info("Measurement.txt was not in de tmpdirectory"); } try { export.exportAll(tmpDir, individualsList, measurementsList, valuesList); } catch (Exception e) { logger.info("CANNOT EXPORT DATA"); } } public Database getDb() { return db; } public Integer getListSizeTargets() { return individualsList.size(); } public Integer getListSizeMeasurements() { return measurementsList.size(); } public Integer getListSizeValues() { return valuesList.size(); } public File getDir() { return tmpDir; } public CopyOfGenericConvertor() throws Exception { logger = Logger.getLogger("Generic Convertor"); } public Investigation makeInvestigation(String invName) { Investigation newInvest = new Investigation(); newInvest.setName(invName); newInvest.setName(invName); return newInvest; } public void populateIndividual(File file, String invName) throws Exception { individualsList.clear(); final List<String> namesSeen = new ArrayList<String>(); this.invName = invName; CsvFileReader reader = new CsvFileReader(file); for (Tuple tuple : reader) { // Change id into the targetname/target id column String id = tuple.getString("PA_ID"); // Optionally // String mother_Name = tuple.getString("id_mother"); // String father_Name = tuple.getString("id_father"); if (!namesSeen.contains(id)) { namesSeen.add(id); Individual newIndividual = new Individual(); newIndividual.setName(id); newIndividual.setInvestigation_Name(getInvestigation()); // Optionally // newIndividual.setMother_Name(mother_Name); // newIndividual.setFather_Name(father_Name); individualsList.add(newIndividual); } } } public void populateMeasurement(File file, String invName) throws Exception { measurementsList.clear(); totalMeasurementsList.clear(); CsvFileReader reader = new CsvFileReader(file); for (String header : reader.colnames()) { // optionally if (!header.equals("PA_ID")) { // if (!header.equals("id_individual") && // !header.equals("id_mother") && !header.equals("id_father")) { if (db.query(Measurement.class).eq(Measurement.NAME, header).count() == 0) { Measurement measurement = new Measurement(); measurement.setName(header); measurement.setInvestigation_Name(invName); measurementsList.add(measurement); totalMeasurementsList.add(measurement); } else { List<Measurement> measList = db.query(Measurement.class).eq(Measurement.NAME, header).find(); int invID = db.query(Investigation.class).eq(Investigation.NAME, "System").find().get(0).getId(); Measurement meas = measList.get(0); meas.setInvestigation_Id(invID); db.update(meas); totalMeasurementsList.add(meas); } } } } public String getInvestigation() { return invName; } public void populateValue(File file, String invName) throws Exception { valuesList.clear(); CsvFileReader reader = new CsvFileReader(file); for (Tuple tuple : reader) { // Change targetname into the targetname/target id column String targetName = tuple.getString("PA_ID"); for (Measurement m : totalMeasurementsList) { String featureName = m.getName(); String value = tuple.getString(featureName); ObservedValue newValue = new ObservedValue(); newValue.setFeature_Name(featureName); newValue.setTarget_Name(targetName); newValue.setValue(value); newValue.setInvestigation_Name(getInvestigation()); valuesList.add(newValue); } } } }