/*
* #%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.MartLocation;
import org.gitools.ui.core.Application;
import org.gitools.ui.core.pages.common.FilteredListPanel;
import org.gitools.ui.platform.dialog.ExceptionGlassPane;
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 BiomartDatabasePage extends AbstractWizardPage {
private static class DatabaseListWrapper {
private final MartLocation mart;
public DatabaseListWrapper(MartLocation mart) {
this.mart = mart;
}
public MartLocation getMart() {
return mart;
}
@Override
public String toString() {
return mart.getDisplayName();
}
}
private final BiomartService biomartService;
private FilteredListPanel panelDataset;
private boolean updated;
public BiomartDatabasePage(BiomartService biomartService /*IBiomartService biomartService*/) {
super();
this.biomartService = biomartService;
updated = false;
setTitle("Select database");
}
@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 (updated) {
return;
}
setMessage(MessageStatus.PROGRESS, "Retrieving databases...");
panelDataset.setListData(new Object[]{});
new Thread(new Runnable() {
@Override
public void run() {
try {
List<MartLocation> registry = biomartService.getRegistry();
final List<DatabaseListWrapper> listData = new ArrayList<DatabaseListWrapper>();
for (MartLocation mart : registry)
if (mart.getVisible() != 0) {
listData.add(new DatabaseListWrapper(mart));
}
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
panelDataset.setListData(listData.toArray(new DatabaseListWrapper[listData.size()]));
setMessage(MessageStatus.INFO, "");
}
});
updated = true;
} catch (Exception e) {
setStatus(MessageStatus.ERROR);
setMessage(e.getMessage());
ExceptionGlassPane dlg = new ExceptionGlassPane(Application.get(), e);
dlg.setVisible(true);
}
}
}).start();
}
public MartLocation getMart() {
DatabaseListWrapper model = (DatabaseListWrapper) panelDataset.getSelectedValue();
return model.getMart();
}
private void selectionChangeActionPerformed() {
Object value = panelDataset.list.getSelectedValue();
setComplete(value != null);
}
}