package plugins.matrix.manager; import java.io.File; import matrix.DataMatrixInstance; import matrix.implementations.database.DatabaseDataMatrixInstance; import org.molgenis.framework.db.Database; import org.molgenis.util.Tuple; import plugins.rplot.MakeRPlot; public class RequestHandler { public static void handle(MatrixManagerModel screenModel, Tuple request, Database db) throws Exception { if (screenModel.getBrowser().getModel().getInstance() instanceof DatabaseDataMatrixInstance) { ((DatabaseDataMatrixInstance) screenModel.getBrowser().getModel().getInstance()).setDatabase(db); } String action = request.getString("__action"); if (action.equals("refresh")) { screenModel.setSelectedData(null); screenModel.setTmpImgName(null); } else if (action.equals("changeSubmatrixSize")) { int stepSize = request.getInt("stepSize") < 1 ? 1 : request.getInt("stepSize"); int width = request.getInt("width") < 1 ? 1 : request.getInt("width"); int height = request.getInt("height") < 1 ? 1 : request.getInt("height"); // if only width has changed, do special update of submatrix to // preserve rows if (width != screenModel.getBrowser().getModel().getWidth() && height == screenModel.getBrowser().getModel().getHeight()) { setStepWidthHeight(screenModel, stepSize, width, height); screenModel.getBrowser().updateSubmatrixKeepRows(); screenModel.setFilter("width updated, row selection was preserved"); } // if only height has changed, do special update of submatrix to // preserve columns else if (width == screenModel.getBrowser().getModel().getWidth() && height != screenModel.getBrowser().getModel().getHeight()) { setStepWidthHeight(screenModel, stepSize, width, height); screenModel.getBrowser().updateSubmatrixKeepCols(); screenModel.setFilter("height updated, column selection was preserved"); } // nothing has changed, do not update submatrix (just stepsize) else if (width == screenModel.getBrowser().getModel().getWidth() && height == screenModel.getBrowser().getModel().getHeight()) { screenModel.getBrowser().getModel().setStepSize(stepSize); screenModel.setFilter("stepsize updated"); } // both have changed, do a regular update of submatrix, resetting // row/col to limit/offset defaults else { setStepWidthHeight(screenModel, stepSize, width, height); screenModel.getBrowser().update(); screenModel.setFilter("width and height updated, " + moveMsg); } } else if (action.startsWith("filter")) { String filter = screenModel.getBrowser().applyFilters(request, db, screenModel); screenModel.setFilter(filter); } else if (action.startsWith("select_")) { String filter = screenModel.getBrowser().applySelect(request, db, screenModel); screenModel.setFilter(filter); } else if (action.startsWith("2d_filter")) { screenModel.setSelectedFilterDiv("filter7"); String filter = screenModel.getBrowser().apply2DFilter(request, db); screenModel.setFilter(filter); } else if (action.startsWith("r_plot")) { String rowName = request.getString("r_plot_row_select"); String colName = request.getString("r_plot_col_select"); String type = request.getString("r_plot_type"); if (action.endsWith("heatmap")) type = request.getString("r_heatmap_type"); int width = Integer.parseInt(request.getString("r_plot_resolution").split("x")[0]); int height = Integer.parseInt(request.getString("r_plot_resolution").split("x")[1]); screenModel.setSelectedWidth(width); screenModel.setSelectedHeight(height); screenModel.setSelectedFilterDiv("filter6"); DataMatrixInstance instance; if (action.startsWith("r_plot_full")) { instance = screenModel.getBrowser().getModel().getInstance(); } else if (action.startsWith("r_plot_visible")) { instance = screenModel.getBrowser().getModel().getSubMatrix(); } else { throw new Exception("unrecognized action: " + action); } File img = MakeRPlot.plot(screenModel.getSelectedData(), instance, rowName, colName, action, type, width, height); screenModel.setTmpImgName(img.getName()); } else if (action.equals("moveRight")) { screenModel.getBrowser().moveRight(); screenModel.setFilter("moved right, " + moveMsg); } else if (action.equals("moveLeft")) { screenModel.getBrowser().moveLeft(); screenModel.setFilter("moved left, " + moveMsg); } else if (action.equals("moveDown")) { screenModel.getBrowser().moveDown(); screenModel.setFilter("moved down, " + moveMsg); } else if (action.equals("moveUp")) { screenModel.getBrowser().moveUp(); screenModel.setFilter("moved up, " + moveMsg); } else if (action.equals("moveFarRight")) { screenModel.getBrowser().moveFarRight(); screenModel.setFilter("moved far right, " + moveMsg); } else if (action.equals("moveFarLeft")) { screenModel.getBrowser().moveFarLeft(); screenModel.setFilter("moved far left, " + moveMsg); } else if (action.equals("moveFarDown")) { screenModel.getBrowser().moveFarDown(); screenModel.setFilter("moved far down, " + moveMsg); } else if (action.equals("moveFarUp")) { screenModel.getBrowser().moveFarUp(); screenModel.setFilter("moved far up, " + moveMsg); } else { throw new Exception("Action '" + action + "' unknown."); } } static String moveMsg = "restored matrix to unfiltered state (paging by index)"; private static void setStepWidthHeight(MatrixManagerModel screenModel, int stepSize, int width, int height) { screenModel.getBrowser().getModel().setStepSize(stepSize); screenModel.getBrowser().getModel().setWidth(width); screenModel.getBrowser().getModel().setHeight(height); } }