/* Date: February 2, 2010
* Template: PluginScreenJavaTemplateGen.java.ftl
* generator: org.molgenis.generators.ui.PluginScreenJavaTemplateGen 3.3.2-testing
*
* THIS FILE IS A TEMPLATE. PLEASE EDIT :-)
*/
package plugins.xgapwizard;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import matrix.general.DataMatrixHandler;
import matrix.general.Importer;
import org.molgenis.cluster.DataName;
import org.molgenis.cluster.DataSet;
import org.molgenis.cluster.DataValue;
import org.molgenis.data.Data;
import org.molgenis.framework.db.Database;
import org.molgenis.framework.db.Query;
import org.molgenis.framework.db.QueryRule;
import org.molgenis.framework.db.QueryRule.Operator;
import org.molgenis.framework.ui.PluginModel;
import org.molgenis.framework.ui.ScreenController;
import org.molgenis.framework.ui.ScreenMessage;
import org.molgenis.util.Entity;
import org.molgenis.util.Tuple;
public class MatrixWizard extends PluginModel<Entity>
{
private static final long serialVersionUID = -1928168826559410284L;
private DataMatrixHandler dmh = null;
private MatrixWizardModel model = new MatrixWizardModel();
public MatrixWizardModel getMyModel()
{
return model;
}
public MatrixWizard(String name, ScreenController<?> parent)
{
super(name, parent);
}
// moved overlib to molgenis core
// @Override
// public String getCustomHtmlHeaders()
// {
// return
// "<script src=\"res/scripts/overlib.js\" language=\"javascript\"></script>";
//
// }
@Override
public String getViewName()
{
return "MatrixWizard";
}
@Override
public String getViewTemplate()
{
return "plugins/xgapwizard/MatrixWizard.ftl";
}
public void handleRequest(Database db, Tuple request)
{
if (request.getString("__action") != null)
{
try
{
if (request.getString("__action").equals("upload")
|| request.getString("__action").equals("uploadTextArea"))
{
File importFile = null;
int dataIdreq = request.getInt("__dataId");
if (request.getString("__action").equals("uploadTextArea"))
{
String content = request.getString("inputTextArea");
File inputTextAreaContent = new File(System.getProperty("java.io.tmpdir") + File.separator
+ "tmpTextAreaInput" + System.nanoTime() + ".txt");
BufferedWriter outWriter = new BufferedWriter(new FileWriter(inputTextAreaContent));
outWriter.write(content);
outWriter.close();
importFile = inputTextAreaContent;
}
else
{
importFile = request.getFile("upload" + dataIdreq);
}
Data data = db.find(Data.class, new QueryRule("id", Operator.EQUALS, dataIdreq)).get(0);
new Importer().performImport(importFile, data, db);
}
else if (request.getString("__action").equals("showVerified"))
{
this.getMyModel().setShowVerified(true);
}
else if (request.getString("__action").equals("hideVerified"))
{
this.getMyModel().setShowVerified(false);
}
else if (request.getString("__action").equals("tag"))
{
int dataIdreq = request.getInt("__dataId");
String[] tagging = request.getString("tagging_" + dataIdreq).split(" -> ");
String dataSetName = tagging[0];
String dataNameName = tagging[1];
Data data = db.find(Data.class, new QueryRule("id", Operator.EQUALS, dataIdreq)).get(0);
DataSet dsRef = db.find(DataSet.class, new QueryRule("name", Operator.EQUALS, dataSetName)).get(0);
Query<DataName> q = db.query(DataName.class);
q.addRules(new QueryRule("name", Operator.EQUALS, dataNameName));
q.addRules(new QueryRule("dataset", Operator.EQUALS, dsRef.getId()));
DataName dnRef = q.find().get(0);
DataValue dv = new DataValue();
dv.setDataName(dnRef);
dv.setValue(data);
dv.setName(data.getInvestigation_Name() + "_" + data.getName());
db.add(dv);
}
}
catch (Exception e)
{
e.printStackTrace();
this.setMessages(new ScreenMessage(e.getMessage() != null ? e.getMessage() : "null", false));
}
}
}
@Override
public void reload(Database db)
{
if (dmh == null)
{
dmh = new DataMatrixHandler(db);
}
if (this.getMyModel().getShowVerified() == null)
{
this.getMyModel().setShowVerified(true);
}
ArrayList<DataInfo> dataInfo = new ArrayList<DataInfo>();
try
{
// pre-query data stuff
List<Data> dataList = db.find(Data.class);
List<DataSet> dataSetList = db.find(DataSet.class);
List<DataName> dataNameList = db.find(DataName.class);
List<DataValue> dataValueList = db.find(DataValue.class);
// iterate through data and get info
for (Data data : dataList)
{
String eds = dmh.findSource(data, db);
// query the current matrix tags and add to info
List<String> tags = new ArrayList<String>();
// FIXME: not very pretty.....
for (DataValue dv : dataValueList)
{
// match reference to matrix
if (dv.getValue_Id().equals(data.getId()))
{
// find the DataName
for (DataName dn : dataNameList)
{
if (dv.getDataName_Id().equals(dn.getId()))
{
// find the DataSet
for (DataSet ds : dataSetList)
{
if (dn.getDataSet_Id().equals(ds.getId()))
{
tags.add(ds.getName() + " -> " + dn.getName());
}
}
}
}
}
}
dataInfo.add(new DataInfo(data, eds, tags));
}
this.model.setDataInfo(dataInfo);
// use possible tags and set as options
ArrayList<String> combinations = new ArrayList<String>();
for (DataSet ds : dataSetList)
{
for (DataName dn : dataNameList)
{
if (dn.getDataSet_Id().equals(ds.getId()))
{
combinations.add(ds.getName() + " -> " + dn.getName());
}
}
}
this.model.setTagList(combinations);
}
catch (Exception e)
{
e.printStackTrace();
this.setMessages(new ScreenMessage(e.getMessage() != null ? e.getMessage() : "null", false));
}
}
}