/* 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.rplot; import java.io.File; import matrix.AbstractDataMatrixInstance; import matrix.DataMatrixInstance; import matrix.general.DataMatrixHandler; import org.molgenis.data.Data; import org.molgenis.framework.db.Database; import org.molgenis.framework.ui.FormController; import org.molgenis.framework.ui.FormModel; 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 RplotPlugin<E extends Entity> extends PluginModel<E> { private static final long serialVersionUID = 2598093872153856022L; private DataMatrixHandler dmh = null; private RplotPluginModel model = new RplotPluginModel(); public RplotPluginModel getMyModel() { return model; } public RplotPlugin(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 "RplotPlugin"; } @Override public String getViewTemplate() { return "plugins/rplot/RplotPlugin.ftl"; } public void handleRequest(Database db, Tuple request) { if (request.getString("__action") != null) { try { this.model.setSelectedRow(request.getString("rowSelect")); this.model.setSelectedCol(request.getString("colSelect")); this.model.setSelectedWidth(Integer.parseInt(request.getString("resolution").split("x")[0])); this.model.setSelectedHeight(Integer.parseInt(request.getString("resolution").split("x")[1])); this.model.setSelectedPlotType(request.getString("typeSelect")); String rowType = this.model.getSelectedData().getTargetType(); // shorthand String colType = this.model.getSelectedData().getFeatureType(); // shorthand String rowName = this.model.getSelectedRow(); // shorthand String colName = this.model.getSelectedCol(); // shorthand DataMatrixInstance instance = this.model.getMatrixInstance(); // shorthand Data data = this.model.getSelectedData(); // shorthand String action = request.getString("__action"); // shorthand Object[] plotThis = null; PlotParameters params = new PlotParameters(); if (action.equals("plotRow")) { if (data.getValueType().equals("Text")) { params.setTitle(rowType + " " + rowName); params.setxLabel("Type of " + colType); params.setyLabel("# of " + colType); } else if (data.getValueType().equals("Decimal")) { params.setTitle(rowType + " " + rowName); params.setxLabel(colType); params.setyLabel(rowType + " value"); } plotThis = instance.getRow(rowName); } else if (action.equals("plotCol")) { if (data.getValueType().equals("Text")) { params.setTitle(colType + " " + colName); params.setxLabel("Type of " + rowType); params.setyLabel("# of " + rowType); } else if (data.getValueType().equals("Decimal")) { params.setTitle(colType + " " + colName); params.setxLabel(rowType); params.setyLabel(colType + " value"); } plotThis = instance.getCol(colName); } if (action.equals("plotRow") || action.equals("plotCol")) { File tmpImg = new File(System.getProperty("java.io.tmpdir") + File.separator + "rplot" + System.nanoTime() + ".png"); params.setType(request.getString("typeSelect")); params.setWidth(this.model.getSelectedWidth()); params.setHeight(this.model.getSelectedHeight()); if (this.model.getSelectedPlotType().equals("boxplot")) { params.setFunction("boxplot"); } else { params.setFunction("plot"); } new ScriptInstance(plotThis, tmpImg, params); this.model.setTmpImgName(tmpImg.getName()); } } catch (Exception e) { e.printStackTrace(); this.setMessages(new ScreenMessage(e.getMessage() != null ? e.getMessage() : "null", false)); } } } @Override public void reload(Database db) { try { // FormModel<Data> theParent = (FormModel<Data>) // this.getParent().getParent(); // Data newSelectedData = ((Data) theParent.getRecords().get(0)); ScreenController<?> parentController = (ScreenController<?>) this.getParent().getParent(); FormModel<Data> parentForm = (FormModel<Data>) ((FormController) parentController).getModel(); Data newSelectedData = parentForm.getRecords().get(0); if (dmh == null) { dmh = new DataMatrixHandler(db); } // first time load, or new matrix selected -> refresh rows/cols if (this.model.getSelectedData() == null || !(this.model.getSelectedData().getId().intValue() == newSelectedData.getId().intValue())) { this.model.setSelectedData(newSelectedData); DataMatrixInstance m = dmh.createInstance(newSelectedData, db); this.model.setMatrixCols(m.getColNames()); this.model.setMatrixRows(m.getRowNames()); this.model.setMatrixInstance(m); } } catch (Exception e) { e.printStackTrace(); this.setMessages(new ScreenMessage(e.getMessage() != null ? e.getMessage() : "null", false)); } } }