/* * #%L * gitools-ui-app * %% * Copyright (C) 2013 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.ui.app.analysis.groupcomparison.wizard; import org.gitools.analysis.ToolConfig; import org.gitools.analysis.groupcomparison.GroupComparisonAnalysis; import org.gitools.analysis.groupcomparison.dimensiongroups.DimensionGroup; import org.gitools.analysis.groupcomparison.dimensiongroups.DimensionGroupEnum; import org.gitools.analysis.stats.test.factory.TestFactory; import org.gitools.api.matrix.IMatrix; import org.gitools.api.resource.ResourceReference; import org.gitools.heatmap.Heatmap; import org.gitools.heatmap.header.HeatmapHeader; import org.gitools.resource.Property; import org.gitools.ui.core.components.wizard.AnalysisDetailsPage; import org.gitools.ui.core.components.wizard.AnalysisWizard; import org.gitools.ui.platform.IconUtils; import org.gitools.ui.platform.icons.IconNames; import org.gitools.ui.platform.wizard.IWizardPage; import org.gitools.utils.CloneUtils; import java.util.ArrayList; import java.util.List; public class GroupComparisonAnalysisWizard extends AnalysisWizard<GroupComparisonAnalysis> { private final Heatmap heatmap; private GroupComparisonStatisticsPage statisticsPage; private AnalysisDetailsPage analysisDetailsPage; private GroupComparisonGroupingPage groupingPage; public GroupComparisonAnalysisWizard(Heatmap heatmap) { super(); setTitle("Group Comparison analysis"); setLogo(IconUtils.getImageIconResourceScaledByHeight(IconNames.LOGO_GROUP_COMPARISON, 96)); this.heatmap = heatmap; } @Override public void addPages() { // Column Selection groupingPage = new GroupComparisonGroupingPage(heatmap, DimensionGroupEnum.Free); addPage(groupingPage); statisticsPage = new GroupComparisonStatisticsPage(); addPage(statisticsPage); // Analysis details analysisDetailsPage = new AnalysisDetailsPage(); addPage(analysisDetailsPage); } @Override public IWizardPage getNextPage(IWizardPage page) { page = getCurrentPage(); if (super.getNextPage(page) == statisticsPage) { statisticsPage.setGroupNumber(groupingPage.getGroups().size()); } else if (super.getNextPage(page) == analysisDetailsPage) { updateAnalysisDetails(); } return super.getNextPage(page); } @Override public IWizardPage getPreviousPage(IWizardPage page) { page = getCurrentPage(); return super.getPreviousPage(page); } @Override public boolean canFinish() { boolean canFinish = super.canFinish(); IWizardPage page = getCurrentPage(); canFinish |= page.isComplete() && (page == statisticsPage); return canFinish; } public GroupComparisonAnalysis createAnalysis() { GroupComparisonAnalysis a = new GroupComparisonAnalysis(); a.setData(new ResourceReference<IMatrix>("data", heatmap)); a.setTitle(analysisDetailsPage.getAnalysisTitle()); a.setDescription(analysisDetailsPage.getAnalysisDescription()); a.setProperties(analysisDetailsPage.getAnalysisProperties()); a.setTransposeData(false); ToolConfig toolConfig = TestFactory.createToolConfig("group comparison", statisticsPage.getTest().getName()); a.setLayer(groupingPage.getLayer()); a.setNullConversion(groupingPage.getNullConversion()); a.setToolConfig(toolConfig); a.setMtc(statisticsPage.getMtc()); a.setCopyAnnotation(groupingPage.isCopyHeatmapHeaders()); List<HeatmapHeader> rowHeaders = new ArrayList<>(); for (HeatmapHeader header : heatmap.getRows().getHeaders()) { try { HeatmapHeader headerClone = CloneUtils.clone(header); rowHeaders.add(headerClone); } catch (Exception e) { e.printStackTrace(); } } a.addGroups(groupingPage.getGroups()); a.setProperties(analysisDetailsPage.getAnalysisProperties()); return a; } /** * Fill the form with the analysis details */ private void updateAnalysisDetails() { List<Property> analysisAttributes = new ArrayList<>(); analysisAttributes.add(new Property("Data layer", createAnalysis().getLayerName())); analysisAttributes.add(new Property("Grouping type", groupingPage.getGroupingType().toString())); String title = "Group Comparison"; if (groupingPage.getSelectedGroupingType().equals(DimensionGroupEnum.Annotation)) { String nicepattern = groupingPage.getGroupingPattern().replaceAll("[\\$\\{\\}]", ""); analysisAttributes.add(new Property("Grouping pattern", nicepattern)); analysisDetailsPage.setAnalysisTitle(nicepattern + " " + title); } else { analysisDetailsPage.setAnalysisTitle(title); } int counter = 0; for (DimensionGroup g : groupingPage.getGroups()) { counter++; analysisAttributes.add(new Property("Group " + String.valueOf(counter) + ": " + g.getName(), g.getProperty())); } Double nullConversion = groupingPage.getNullConversion(); analysisAttributes.add(new Property("NoneConvertedTo", nullConversion != null ? Double.toString(nullConversion) : "null")); analysisDetailsPage.setAnalysisAttributes(analysisAttributes); } }