/* * #%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.datasources.biomart.wizard; import org.gitools.datasources.biomart.BiomartService; import org.gitools.datasources.biomart.restful.model.DatasetInfo; import org.gitools.datasources.biomart.restful.model.MartLocation; import org.gitools.ui.core.pages.common.FilteredListPanel; import org.gitools.ui.platform.dialog.MessageStatus; import org.gitools.ui.platform.wizard.AbstractWizardPage; import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.util.ArrayList; import java.util.List; /** * @noinspection ALL */ public class BiomartDatasetPage extends AbstractWizardPage { private static class DatasetListWrapper { private final DatasetInfo dataset; public DatasetListWrapper(DatasetInfo dataset) { this.dataset = dataset; } public DatasetInfo getDataset() { return dataset; } @Override public String toString() { return dataset.getDisplayName(); } } private final BiomartService biomartService; private MartLocation mart; private FilteredListPanel panelDataset; private boolean updated; /** * @noinspection UnusedDeclaration */ public BiomartDatasetPage(BiomartService biomartService /*IBiomartService biomartService*/) { super(); this.biomartService = biomartService; this.mart = null; updated = false; setTitle("Select dataset"); } @Override public JComponent createControls() { panelDataset = new FilteredListPanel(); panelDataset.list.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { selectionChangeActionPerformed(); } }); return panelDataset; } @Override public void updateControls() { if (mart == null) { return; } if (updated) { return; } setStatus(MessageStatus.PROGRESS); setMessage("Retrieving datasets for " + mart.getDisplayName() + " ..."); panelDataset.setListData(new Object[]{}); new Thread(new Runnable() { @Override public void run() { try { List<DatasetInfo> dataSets = biomartService.getDatasets(mart); final List<DatasetListWrapper> visibleDataSets = new ArrayList<DatasetListWrapper>(); for (DatasetInfo ds : dataSets) { if (ds.getVisible() != 0) { visibleDataSets.add(new DatasetListWrapper(ds)); } } SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { panelDataset.setListData(visibleDataSets.toArray(new DatasetListWrapper[visibleDataSets.size()])); setMessage(MessageStatus.INFO, ""); } }); updated = true; } catch (Exception e) { setStatus(MessageStatus.ERROR); setMessage(e.getMessage()); e.printStackTrace(); } } }).start(); } public void setMart(MartLocation mart) { if (this.mart != mart) { updated = false; } this.mart = mart; } public DatasetInfo getDataset() { DatasetListWrapper wrapper = (DatasetListWrapper) panelDataset.getSelectedValue(); return wrapper.getDataset(); } private void selectionChangeActionPerformed() { Object value = panelDataset.list.getSelectedValue(); setComplete(value != null); } }