/* * #%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.actions.file; import com.google.common.collect.ObjectArrays; import org.gitools.analysis.combination.format.CombinationAnalysisFormat; import org.gitools.analysis.correlation.format.CorrelationAnalysisFormat; import org.gitools.analysis.groupcomparison.format.GroupComparisonAnalysisFormat; import org.gitools.analysis.htest.enrichment.format.EnrichmentAnalysisFormat; import org.gitools.analysis.overlapping.format.OverlappingAnalysisFormat; import org.gitools.api.matrix.IMatrix; import org.gitools.api.persistence.FileFormat; import org.gitools.api.resource.IResourceFormat; import org.gitools.heatmap.format.HeatmapFormat; import org.gitools.matrix.FileFormats; import org.gitools.matrix.format.CdmMatrixFormat; import org.gitools.matrix.format.TdmMatrixFormat; import org.gitools.ui.app.commands.CommandLoadFile; import org.gitools.ui.app.fileimport.ImportManager; import org.gitools.ui.core.Application; import org.gitools.ui.core.actions.AbstractAction; import org.gitools.ui.core.utils.FileChoose; import org.gitools.ui.core.utils.FileChooserUtils; import org.gitools.ui.core.utils.FileFormatFilter; import org.gitools.ui.platform.icons.IconNames; import org.gitools.ui.platform.progress.JobThread; import org.gitools.ui.platform.settings.Settings; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Collections; import java.util.List; import static org.gitools.api.ApplicationContext.getPersistenceManager; public class OpenFromFilesystemBrowseAction extends AbstractAction { public static FileFormat[] FORMAT_ANALYSIS = new FileFormat[]{ EnrichmentAnalysisFormat.FILE_FORMAT, CorrelationAnalysisFormat.FILE_FORMAT, CombinationAnalysisFormat.FILE_FORMAT, OverlappingAnalysisFormat.FILE_FORMAT, GroupComparisonAnalysisFormat.FILE_FORMAT }; public static FileFormat[] FORMAT_HEATMAPS = new FileFormat[]{ HeatmapFormat.FILE_FORMAT, FileFormats.MULTIVALUE_DATA_MATRIX, FileFormats.DOUBLE_MATRIX, FileFormats.DOUBLE_BINARY_MATRIX, FileFormats.GENE_CLUSTER_TEXT, FileFormats.GENE_MATRIX, FileFormats.GENE_MATRIX_TRANSPOSED, FileFormats.DOUBLE_BINARY_MATRIX, FileFormats.MODULES_INDEXED_MAP, FileFormats.MODULES_2C_MAP }; public static FileFormatFilter[] FILE_FORMAT_FILTERS; static { List<FileFormatFilter> filters = new ArrayList<>(); Collections.addAll(filters, new FileFormatFilter("All known formats", FileFormat.concat( ImportManager.get().getFileFormats(), ObjectArrays.concat(FORMAT_HEATMAPS, FORMAT_ANALYSIS, FileFormat.class) )), new FileFormatFilter("Analysis", FORMAT_ANALYSIS), new FileFormatFilter(HeatmapFormat.FILE_FORMAT), new FileFormatFilter("All files"), new FileFormatFilter(FileFormats.MULTIVALUE_DATA_MATRIX), new FileFormatFilter(FileFormats.DOUBLE_MATRIX), new FileFormatFilter(FileFormats.GENE_CLUSTER_TEXT), new FileFormatFilter(FileFormats.DOUBLE_BINARY_MATRIX), new FileFormatFilter(FileFormats.GENE_MATRIX), new FileFormatFilter(FileFormats.GENE_MATRIX_TRANSPOSED), // Analysis new FileFormatFilter(EnrichmentAnalysisFormat.FILE_FORMAT), new FileFormatFilter(CorrelationAnalysisFormat.FILE_FORMAT), new FileFormatFilter(OverlappingAnalysisFormat.FILE_FORMAT), new FileFormatFilter(GroupComparisonAnalysisFormat.FILE_FORMAT), new FileFormatFilter(CombinationAnalysisFormat.FILE_FORMAT) ); filters.addAll(ImportManager.get().getFileFormatFilters()); FILE_FORMAT_FILTERS = filters.toArray(new FileFormatFilter[filters.size()]); } public OpenFromFilesystemBrowseAction() { super("Browse..."); setDesc("Open a heatmap or an analysis from the filesystem"); setSmallIconFromResource(IconNames.openMatrix16); setLargeIconFromResource(IconNames.openMatrix24); setMnemonic(KeyEvent.VK_O); setDefaultEnabled(true); setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_DOWN_MASK)); } @Override public void actionPerformed(ActionEvent e) { final FileChoose fileChoose = FileChooserUtils.selectFile("Select file", FileChooserUtils.MODE_OPEN, FILE_FORMAT_FILTERS); if (fileChoose == null) { return; } Settings.get().setLastPath(fileChoose.getFile().getParent()); Settings.get().save(); IResourceFormat format = null; if (fileChoose.getFilter() != null) { if (fileChoose.getFilter().getDescription().startsWith(FileFormats.MULTIVALUE_DATA_MATRIX.getTitle())) { format = getPersistenceManager().getFormat(TdmMatrixFormat.EXSTENSION, IMatrix.class); } if (fileChoose.getFilter().getDescription().startsWith(FileFormats.DOUBLE_MATRIX.getTitle())) { format = getPersistenceManager().getFormat(CdmMatrixFormat.EXTENSION, IMatrix.class); } } String fileName = fileChoose.getFile().getAbsolutePath(); CommandLoadFile loadFile = new CommandLoadFile(fileName, format); JobThread.execute(Application.get(), loadFile); Settings.get().addRecentFile(fileName); Settings.get().save(); Application.get().showNotification("Loaded " + fileName + "."); } }