/* Date: February 10, 2010 * Template: PluginScreenJavaTemplateGen.java.ftl * generator: org.molgenis.generators.ui.PluginScreenJavaTemplateGen 3.3.2-testing * * THIS FILE IS A TEMPLATE. PLEASE EDIT :-) */ package org.molgenis.animaldb.plugins.viewers; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import org.molgenis.animaldb.commonservice.CommonService; import org.molgenis.framework.db.Database; import org.molgenis.framework.db.QueryRule.Operator; import org.molgenis.framework.ui.EasyPluginController; import org.molgenis.framework.ui.ScreenController; import org.molgenis.framework.ui.ScreenMessage; import org.molgenis.framework.ui.ScreenView; import org.molgenis.framework.ui.html.ActionInput; import org.molgenis.framework.ui.html.Container; import org.molgenis.framework.ui.html.DivPanel; import org.molgenis.framework.ui.html.EditableJQueryDataTable; import org.molgenis.framework.ui.html.MolgenisForm; import org.molgenis.matrix.component.MatrixViewer; import org.molgenis.matrix.component.SliceablePhenoMatrix; import org.molgenis.matrix.component.general.MatrixQueryRule; import org.molgenis.pheno.Individual; import org.molgenis.pheno.Measurement; import org.molgenis.pheno.ObservedValue; import org.molgenis.util.Tuple; public class ListPluginMatrix extends EasyPluginController { private static final long serialVersionUID = 8804579908239186037L; MatrixViewer targetMatrixViewer = null; static String TARGETMATRIX = "targetmatrix"; static String EDIT_BUTTON_ACTION = "switch_to_edit_mode"; private Container container = null; private DivPanel div = null; private String action = "init"; private CommonService cs = CommonService.getInstance(); private boolean reload = true; private int userId = -1; private Boolean inEditMode; public ListPluginMatrix(String name, ScreenController<?> parent) { super(name, parent); } @Override public Show handleRequest(Database db, Tuple request, OutputStream out) { if (targetMatrixViewer != null) { targetMatrixViewer.setDatabase(db); targetMatrixViewer.setAPPLICATION_STRING("ANIMALDB"); } reload = true; action = request.getAction(); try { if (action != null && action.startsWith(targetMatrixViewer.getName())) { targetMatrixViewer.handleRequest(db, request); reload = false; } if (action.equals(EDIT_BUTTON_ACTION) || action.equals(targetMatrixViewer.getName() + EditableJQueryDataTable.MATRIX_EDIT_ACTION)) { if (inEditMode) { inEditMode = false; } else { inEditMode = true; } reload = true; } } catch (Exception e) { e.printStackTrace(); this.getMessages().add( new ScreenMessage("Something went wrong while handling request: " + e.getMessage(), false)); } return Show.SHOW_MAIN; } @Override public void reload(Database db) { if (inEditMode == null) { inEditMode = false; } cs.setDatabase(db); // If a non-matrix related request was handled or if a new user has // logged in, reload the matrix if (reload == true || userId != db.getLogin().getUserId().intValue()) { userId = db.getLogin().getUserId().intValue(); container = new Container(); div = new DivPanel(); try { List<String> investigationNames = cs.getAllUserInvestigationNames(db.getLogin().getUserName()); List<String> measurementsToShow = new ArrayList<String>(); // Some measurements that we think AnimalDB users like to see // most: measurementsToShow.add("Active"); measurementsToShow.add("Sex"); measurementsToShow.add("Species"); measurementsToShow.add("Line"); // measurementsToShow.add("OldUliDbId"); measurementsToShow.add("OldUliDbTiernummer"); measurementsToShow.add("OldRhutDbAnimalId"); measurementsToShow.add("Location"); measurementsToShow.add("Background"); // measurementsToShow.add("Remark"); List<MatrixQueryRule> filterRules = new ArrayList<MatrixQueryRule>(); filterRules.add(new MatrixQueryRule(MatrixQueryRule.Type.rowHeader, Individual.INVESTIGATION_NAME, Operator.IN, investigationNames)); filterRules.add(new MatrixQueryRule(MatrixQueryRule.Type.colValueProperty, cs .getMeasurementId("Active"), ObservedValue.VALUE, Operator.EQUALS, "Alive")); if (inEditMode) { // restore filters and measurements to show filterRules = targetMatrixViewer.getMatrix().getRules(); int oldOffset = targetMatrixViewer.getMatrix().getRowOffset(); int oldLimit = targetMatrixViewer.getMatrix().getRowLimit(); targetMatrixViewer = new MatrixViewer(this, TARGETMATRIX, new SliceablePhenoMatrix<Individual, Measurement>(Individual.class, Measurement.class), true, 0, true, false, filterRules, null, true); // enable animalDB specific traits (sorting filtering etc) targetMatrixViewer.setAPPLICATION_STRING("ANIMALDB"); // restore paging targetMatrixViewer.getMatrix().setRowOffset(oldOffset); targetMatrixViewer.getMatrix().setRowLimit(oldLimit); String nameIdSave = targetMatrixViewer.getName() + EditableJQueryDataTable.MATRIX_EDIT_ACTION; ActionInput saveButton = new ActionInput(nameIdSave, "", "Save"); saveButton.setId(nameIdSave); div.add(saveButton); ActionInput editButton = new ActionInput(EDIT_BUTTON_ACTION, "", "Cancel"); editButton.setId(EDIT_BUTTON_ACTION); div.add(editButton); } else { int oldOffset = 0; int oldLimit = 10; MatrixQueryRule measurements = new MatrixQueryRule(MatrixQueryRule.Type.colHeader, Measurement.NAME, Operator.IN, measurementsToShow); if (targetMatrixViewer != null) { // restore filters and measurements to show filterRules = targetMatrixViewer.getMatrix().getRules(); oldOffset = targetMatrixViewer.getMatrix().getRowOffset(); oldLimit = targetMatrixViewer.getMatrix().getRowLimit(); measurements = null; } targetMatrixViewer = new MatrixViewer(this, TARGETMATRIX, new SliceablePhenoMatrix<Individual, Measurement>(Individual.class, Measurement.class), true, 0, true, false, filterRules, measurements, false); // enable animalDB specific traits (sorting filtering etc) targetMatrixViewer.setAPPLICATION_STRING("ANIMALDB"); // restore paging targetMatrixViewer.getMatrix().setRowOffset(oldOffset); targetMatrixViewer.getMatrix().setRowLimit(oldLimit); // Temporarily make this function admin only, because it is // to dangerous for normal users in its current form String userName = db.getLogin().getUserName(); if (userName.equals("admin")) { ActionInput editButton = new ActionInput(EDIT_BUTTON_ACTION, "", "Edit"); editButton.setId(EDIT_BUTTON_ACTION); div.add(editButton); } } targetMatrixViewer.setDatabase(db); div.add(targetMatrixViewer); container.add(div); } catch (Exception e) { e.printStackTrace(); this.getMessages().add( new ScreenMessage("Something went wrong while loading matrix: " + e.getMessage(), false)); } } else { targetMatrixViewer.setDatabase(db); } } public ScreenView getView() { MolgenisForm view = new MolgenisForm(this); view.add(container); return view; } }