package org.molgenis.datatable.test;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.molgenis.framework.db.Database;
import org.molgenis.framework.db.DatabaseException;
import org.molgenis.framework.tupletable.TupleTable;
import org.molgenis.pheno.Individual;
import org.molgenis.pheno.Measurement;
import org.molgenis.pheno.ObservedValue;
import org.molgenis.protocol.Protocol;
import org.molgenis.protocol.ProtocolApplication;
import org.testng.annotations.Test;
import app.DatabaseFactory;
public class CreateProtocolData
{
TupleTable table;
Protocol protocol;
Database db;
@Test
public void setup() throws DatabaseException
{
BasicConfigurator.configure();
Logger.getLogger("org.hibernate").setLevel(Level.INFO);
Logger.getLogger("org.hibernate.type").setLevel(Level.INFO);
db = DatabaseFactory.create();
final int numRows = 100;
// clean protocols, protocolApplications, measurements, values
db.remove(db.find(ObservedValue.class));
db.remove(db.find(ProtocolApplication.class));
db.remove(db.find(Protocol.class));
db.remove(db.find(Measurement.class));
db.remove(db.find(Individual.class));
// create Measurements
final List<Measurement> mList = new ArrayList<Measurement>();
for (int i = 1; i <= 10; i++)
{
final Measurement m = new Measurement();
m.setName("meas" + i);
mList.add(m);
}
db.add(mList);
// create protocol and link its features (measurements)
protocol = new Protocol();
protocol.setName("TestProtocol");
for (Measurement m : mList)
{
// add the features to the protocol
protocol.getFeatures_Id().add(m.getId());
}
db.add(protocol);
// generate some protocol applications
final List<Individual> iList = new ArrayList<Individual>();
for (int row = 1; row <= numRows; row++)
{
final Individual ind = new Individual();
ind.setName("patient" + row);
iList.add(ind);
}
db.add(iList);
final List<ProtocolApplication> paList = new ArrayList<ProtocolApplication>();
for (int row = 0; row < iList.size(); row++)
{
final ProtocolApplication pa = new ProtocolApplication();
pa.setName("pa" + row);
pa.setProtocol(protocol.getId());
paList.add(pa);
}
db.add(paList);
List<ObservedValue> values = new ArrayList<ObservedValue>();
for (int row = 0; row < iList.size(); row++)
{
for (final Measurement m : mList)
{
final ObservedValue v = new ObservedValue();
v.setTarget_Id(iList.get(row).getId());
v.setProtocolApplication(paList.get(row).getId());
v.setFeature_Id(m.getId());
v.setValue(m.getName() + ":val" + row);
values.add(v);
}
// empty cache
if (values.size() > 1000)
{
db.add(values);
values = new ArrayList<ObservedValue>();
}
}
db.add(values);
// table = new ProtocolTable(db, protocol);
}
}