package org.molgenis.omx.dataset; import java.io.OutputStream; import java.util.List; import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import org.molgenis.framework.db.Database; import org.molgenis.framework.db.DatabaseException; import org.molgenis.framework.server.MolgenisRequest; import org.molgenis.framework.tupletable.TableException; import org.molgenis.framework.tupletable.view.JQGridView; import org.molgenis.framework.ui.EasyPluginController; import org.molgenis.framework.ui.ScreenController; import org.molgenis.framework.ui.ScreenView; import org.molgenis.framework.ui.html.MolgenisForm; import org.molgenis.model.elements.Field; import org.molgenis.observ.DataSet; import org.molgenis.observ.ObservableFeature; import org.molgenis.omx.view.DataSetChooser; import org.molgenis.util.HandleRequestDelegationException; import org.molgenis.util.Tuple; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; /** Simple plugin that only shows a data table for testing */ public class DataSetViewerPlugin extends EasyPluginController<DataSetViewerPlugin> { private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(DataSetViewerPlugin.class); private JQGridView tableView; private DataSetChooser dataSetChooser; public DataSetViewerPlugin(String name, ScreenController<?> parent) { super(name, parent); setModel(this); } @Override public void reload(Database db) { if (tableView == null) { createViews(db, null, null); } } // handling of the ajax; should be auto-wired via the JQGridTableView // contructor (TODO) public void download_json_dataset(Database db, Tuple request, OutputStream out) throws HandleRequestDelegationException { // handle requests for the table named 'dataset' tableView.handleRequest(db, request, out); } public void selectDataSet(Database db, Tuple request) throws HandleRequestDelegationException { Integer selectedDataSetId = request.getInt("dataSetId"); HttpSession session = ((MolgenisRequest) request).getRequest().getSession(); if (selectedDataSetId != null) { @SuppressWarnings("unchecked") List<ObservableFeature> selectedObservableFeatures = (List<ObservableFeature>) session .getAttribute("selectedObservableFeatures"); createViews(db, selectedDataSetId, selectedObservableFeatures); session.removeAttribute("selectedObservableFeatures"); } } private void createViews(Database db, Integer selectedDataSetId, List<ObservableFeature> selectedObservableFeatures) { try { List<DataSet> dataSets = db.find(DataSet.class); if ((dataSets != null) && !dataSets.isEmpty()) { DataSet dataSet = null; if (selectedDataSetId != null) { dataSet = db.findById(DataSet.class, selectedDataSetId); } if (dataSet == null) { dataSet = dataSets.get(0); selectedDataSetId = dataSet.getId(); } DataSetTable table = new DataSetTable(dataSet, db); if (selectedObservableFeatures != null) { for (final Field field : table.getAllColumns()) { ObservableFeature observableFeature = Iterables.find(selectedObservableFeatures, new Predicate<ObservableFeature>() { @Override public boolean apply(ObservableFeature of) { return of.getIdentifier().equals(field.getName()); } }, null); if (observableFeature == null) { table.hideColumn(field.getName()); } else { table.showColumn(field.getName()); } } } tableView = new JQGridView("dataset", this, table); dataSetChooser = new DataSetChooser(dataSets, selectedDataSetId); } } catch (TableException e) { logger.error("TableException creating views"); throw new RuntimeException(e); } catch (DatabaseException e) { logger.error("TableException creating views"); throw new RuntimeException(e); } } /** * This is for the dataset chooser */ @Override public String getCustomHtmlHeaders() { StringBuilder s = new StringBuilder(); s.append("<link rel=\"stylesheet\" href=\"bootstrap/css/bootstrap.min.css\" type=\"text/css\" />"); s.append("<script type=\"text/javascript\" src=\"bootstrap/js/bootstrap.min.js\"></script>"); return s.toString(); } // what is shown to the user public ScreenView getView() { MolgenisForm view = new MolgenisForm(this); if (dataSetChooser != null) { view.add(dataSetChooser); } if (tableView != null) { view.add(tableView); } return view; } }