/* * #%L * org.gitools.ui.app * %% * Copyright (C) 2013 - 2014 Universitat Pompeu Fabra - Biomedical Genomics group * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ package org.gitools.plugins.mutex.ui; import org.gitools.api.matrix.MatrixDimensionKey; import org.gitools.heatmap.Bookmark; import org.gitools.heatmap.Heatmap; import org.gitools.matrix.model.matrix.element.LayerAdapter; import org.gitools.plugins.mutex.MutualExclusiveBookmark; import org.gitools.plugins.mutex.MutualExclusivePlugin; import org.gitools.plugins.mutex.analysis.MutualExclusiveResult; import org.gitools.ui.platform.dialog.MessageStatus; import org.gitools.ui.platform.help.HelpContext; import org.gitools.ui.platform.wizard.AbstractWizardPage; import org.gitools.utils.formatter.HeatmapTextFormatter; import org.gitools.utils.formatter.ScientificHeatmapTextFormatter; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.util.ArrayList; import java.util.List; public class MutualExclusiveResultPage extends AbstractWizardPage { private JPanel panel; private JTextField nameField; private JLabel rowNbLabel; private JLabel colNbLabel; private JTextArea descriptionTextArea; private JLabel layerLabel; private JLabel mutexPvalueLabel; private JLabel zscoreLabel; private JLabel signalLabel; private JLabel coverageLabel; private JLabel ratioLabel; private JLabel meanLabel; private JLabel varianceLabel; private JLabel coocPValueLabel; private boolean delete = false; private List<String> forbiddenNames; private MutualExclusiveBookmark bookmark; private MutualExclusiveResult result; boolean creating; private Heatmap heatmap; private String oldName; public Bookmark getBookmark() { return bookmark; } public MutualExclusiveResultPage(Heatmap heatmap, MutualExclusiveBookmark bookmark) { super(); this.heatmap = heatmap; this.setTitle("Mutual Exclusive result"); this.result = bookmark.getResult(); this.bookmark = bookmark; this.oldName = bookmark.getName(); if (bookmark.getDescription().equals("")) { StringBuilder sb = new StringBuilder("Sorted and tested:\n"); List<String> tested = bookmark.getTestDimension().equals(MatrixDimensionKey.ROWS) ? bookmark.getRows() : bookmark.getColumns(); for (String t : tested) { sb.append(" - " + t + "\n"); } bookmark.setDescription(sb.toString()); } setMessage(MessageStatus.INFO, "Choose a name for the Bookmark"); setHelpContext(new HelpContext("http://www.google.com/s?Gitools+mutual+exclusive")); //BOOKMARK NAME MutualExclusivePlugin plugin = (MutualExclusivePlugin) heatmap.getPluggedBoxes().get(MutualExclusivePlugin.ID); forbiddenNames = new ArrayList<>(); forbiddenNames.add(""); forbiddenNames.add("-"); forbiddenNames.add(" "); for (String s : plugin.getKeys()) { forbiddenNames.add(s); } nameField.setText(bookmark.getName()); nameField.getDocument().addDocumentListener(new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { updateModel(); } @Override public void removeUpdate(DocumentEvent e) { updateModel(); } @Override public void changedUpdate(DocumentEvent e) { updateModel(); } }); //Description descriptionTextArea.getDocument().addDocumentListener(new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { updateModel(); } @Override public void removeUpdate(DocumentEvent e) { updateModel(); } @Override public void changedUpdate(DocumentEvent e) { updateModel(); } }); descriptionTextArea.setText(bookmark.getDescription()); assignLabels(); updateControls(); nameField.selectAll(); } public boolean isDelete() { return delete; } @Override public void updateModel() { bookmark.setName(nameField.getText()); bookmark.setDescription(descriptionTextArea.getText()); updateControls(); } @Override public void updateControls() { if (bookmark.getName().equals("new Bookmark") || bookmark.getName().equals("")) { setComplete(false); return; } if (!uniqueMutexName()) { setMessage(MessageStatus.WARN, "Please choose a unique name for the result or click cancel to discard"); setComplete(false); return; } else { setMessage(MessageStatus.INFO, "Click 'OK' add result to heatmap or 'Cancel' to discard"); } setComplete(true); } private String fill(String s) { return "<html><b>" + s + "</b></html>"; } private String fill(Double d) { return "<html><b>" + HeatmapTextFormatter.TWO_DECIMALS.format(d) + "</b></html>"; } private String fillPValue(Double d) { return "<html><b>" + ScientificHeatmapTextFormatter.INSTANCE.format(d) + "</b></html>"; } private String fill(Integer i) { return "<html><b>" + Integer.toString(i) + "</b></html>"; } private void assignLabels() { LayerAdapter<MutualExclusiveResult> adapter = new LayerAdapter<>(MutualExclusiveResult.class); String rows = bookmark.getRows() == null ? "-" : String.valueOf(bookmark.getRows().size()); String cols = bookmark.getColumns() == null ? "-" : String.valueOf(bookmark.getColumns().size()); rowNbLabel.setText(fill(rows)); colNbLabel.setText(fill(cols)); layerLabel.setText(fill(bookmark.getLayerId())); mutexPvalueLabel.setText(fillPValue(result.getMutexPvalue())); coocPValueLabel.setText(fillPValue(result.getCoocPvalue())); zscoreLabel.setText(fill(result.getZscore())); signalLabel.setText(fill(result.getSignal())); coverageLabel.setText(fill(result.getCoverage())); ratioLabel.setText(fill(result.getSignalCoverageRatio())); meanLabel.setText(fill(result.getExpectedMean())); varianceLabel.setText(fill(result.getExpectedVar())); } public boolean uniqueMutexName() { if (oldName == null || bookmark.getName().equals("")) { return false; } return (oldName.toLowerCase().equals(bookmark.getName().toLowerCase()) || !forbiddenNames.contains(bookmark.getName())); } @Override public JComponent createControls() { return panel; } }