package regressiontest.cluster;
import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import matrix.implementations.binary.BinaryDataMatrixInstance;
import org.molgenis.data.Data;
import org.molgenis.framework.db.Database;
import org.molgenis.framework.db.DatabaseException;
import org.molgenis.framework.db.QueryRule;
import org.molgenis.framework.db.QueryRule.Operator;
import org.molgenis.framework.db.jdbc.JDBCDatabase;
import org.molgenis.framework.db.jpa.JpaDatabase;
import org.molgenis.organization.Investigation;
import org.molgenis.util.JarClass;
import org.molgenis.util.TarGz;
import org.molgenis.xgap.InvestigationFile;
import plugins.archiveexportimport.ArchiveExportImportPlugin;
import plugins.archiveexportimport.XgapCsvImport;
import plugins.archiveexportimport.XgapExcelImport;
import xqtl.XqtlExampleData;
import filehandling.generic.PerformUpload;
public class AddExampleData
{
public AddExampleData(Database db) throws Exception
{
File tarFu = new File("./publicdata/xqtl/xqtl_exampledata.tar.gz");
// if using tomcat this doesn't work. To solve: I added publicdata to
// classpath
// now I can load this data from the Jar file directly
// @Joeri: you can consider to use this method allways given that ant
// copies this properly.
if (!tarFu.exists()) tarFu = new File(XqtlExampleData.class.getResource("xqtl_exampledata.tar.gz").getFile());
File extractDir = null;
if (tarFu.exists())
{
extractDir = TarGz.tarExtract(tarFu);
}
else
{
InputStream tfi = JarClass.getFileFromJARFile("Application.jar", "xqtl_exampledata.tar.gz");
extractDir = TarGz.tarExtract(tfi);
}
if (ArchiveExportImportPlugin.isExcelFormatXGAPArchive(extractDir))
{
new XgapExcelImport(extractDir, db, true);
}
else
{
new XgapCsvImport(extractDir, db, true);
}
System.out.println("starting plink file import..");
File plinkBin = new File("./publicdata/xqtl/plinkbin_exampleset.tar.gz");
File extractDirPlink = TarGz.tarExtract(plinkBin);
File bedFile = new File(extractDirPlink.getAbsolutePath() + File.separator + "hapmap1_bed.bed");
File bimFile = new File(extractDirPlink.getAbsolutePath() + File.separator + "hapmap1_bim.bim");
File famFile = new File(extractDirPlink.getAbsolutePath() + File.separator + "hapmap1_fam.fam");
Investigation inv = db.find(Investigation.class, new QueryRule("name", Operator.EQUALS, "ClusterDemo")).get(0);
boolean molgenisFilesAdded = false;
InvestigationFile bimInvFile = null;
InvestigationFile famInvFile = null;
InvestigationFile bedInvFile = null;
db.beginTx();
try
{
String fileSetName = "hapmap1";
bimInvFile = new InvestigationFile();
bimInvFile.setName(fileSetName + "_bim");
bimInvFile.setExtension("bim");
bimInvFile.setInvestigation_Id(inv.getId());
db.add(bimInvFile);
famInvFile = new InvestigationFile();
famInvFile.setName(fileSetName + "_fam");
famInvFile.setExtension("fam");
famInvFile.setInvestigation_Id(inv.getId());
db.add(famInvFile);
bedInvFile = new InvestigationFile();
bedInvFile.setName(fileSetName + "_bed");
bedInvFile.setExtension("bed");
bedInvFile.setInvestigation_Id(inv.getId());
db.add(bedInvFile);
db.commitTx();
molgenisFilesAdded = true;
}
catch (Exception e)
{
db.rollbackTx();
throw new Exception(e.getMessage());
}
if (molgenisFilesAdded)
{
System.out.println("plink file records added, now uploading files..");
PerformUpload.doUpload(db, bimInvFile, bimFile, true);
PerformUpload.doUpload(db, famInvFile, famFile, true);
PerformUpload.doUpload(db, bedInvFile, bedFile, true);
System.out.println("uploading plink files done");
}
System.out.println("now working on adding binary plink phenotypes example");
File importFile = new File(extractDirPlink.getAbsolutePath() + File.separator
+ "fake_metab_hapmap_example_plink_phenotypes.bin");
Data data = new Data();
data.setName("fake_metab_hapmap_example_plink_phenotypes");
// update this 'Data' with the info from the binary file
// but not name/investigationname
// additionally, set storage to Binary :)
BinaryDataMatrixInstance bmi = new BinaryDataMatrixInstance(importFile);
data.setFeatureType(bmi.getData().getFeatureType());
data.setTargetType(bmi.getData().getTargetType());
data.setValueType(bmi.getData().getValueType());
data.setInvestigation_Name(bmi.getData().getInvestigation_Name());
data.setStorage("Binary");
db.add(data);
System.out.println("added to database: " + data.toString());
// code from
// /molgenis_apps/modules/xgap/matrix/implementations/binary/BinaryDataMatrixWriter.java
// upload as a MolgenisFile, type 'BinaryDataMatrix'
HashMap<String, String> extraFields = new HashMap<String, String>();
extraFields.put("data_" + Data.ID, data.getId().toString());
extraFields.put("data_" + Data.NAME, data.getName());
System.out.println("now uploading binary plink pheno matrix file");
PerformUpload.doUpload(db, true, data.getName() + ".bin", "BinaryDataMatrix", importFile, extraFields, true);
System.out.println("done uploading binary plink pheno matrix file");
}
}