package com.github.jmchilton.jgalaxy;
import com.github.jmchilton.blend4j.galaxy.beans.HistoryContents;
import com.github.jmchilton.jgalaxy.mvp.DialogDisplay;
import com.google.common.collect.Maps;
import java.io.File;
import java.util.Map;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
/**
*
* @author john
*/
public class BulkDownloadDisplay extends DialogDisplay {
private static final HistoryContentsTableCellRenderer HISTORY_CONTENTS_TABLE_CELL_RENDERER = new HistoryContentsTableCellRenderer();
private final HistoryContentsSelectionModel model;
/**
* Creates new form BulkDownloadForm
*/
public BulkDownloadDisplay(final HistoryContentsSelectionModel model) {
this.model = model;
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
downloadDestinationChooser = new javax.swing.JFileChooser();
bulkDownloadPane = new javax.swing.JScrollPane();
bulkDownloadTable = new javax.swing.JTable();
bulkDownloadButton = new javax.swing.JButton();
downloadDestinationField = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jSeparator2 = new javax.swing.JSeparator();
provenanceCheckBox = new javax.swing.JCheckBox();
downloadDestinationChooser.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG);
downloadDestinationChooser.setFileSelectionMode(javax.swing.JFileChooser.DIRECTORIES_ONLY);
downloadDestinationChooser.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
downloadDestinationChooserActionPerformed(evt);
}
});
bulkDownloadTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Dataset", "Filename", "Status"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.Object.class
};
boolean[] canEdit = new boolean [] {
false, true, false
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
bulkDownloadPane.setViewportView(bulkDownloadTable);
bulkDownloadTable.getColumnModel().getColumn(0).setCellRenderer(HISTORY_CONTENTS_TABLE_CELL_RENDERER);
bulkDownloadTable.getColumnModel().getColumn(2).setCellRenderer(new ProgressRenderer());
bulkDownloadButton.setText("Download");
bulkDownloadButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bulkDownloadButtonActionPerformed(evt);
}
});
downloadDestinationField.setText(".");
downloadDestinationField.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
downloadDestinationFieldMouseClicked(evt);
}
});
downloadDestinationField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
downloadDestinationFieldActionPerformed(evt);
}
});
jLabel2.setText("Destination");
jSeparator2.setOrientation(javax.swing.SwingConstants.VERTICAL);
provenanceCheckBox.setText("Include Provenance Information");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(downloadDestinationField, javax.swing.GroupLayout.DEFAULT_SIZE, 253, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(bulkDownloadButton))
.addComponent(bulkDownloadPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(provenanceCheckBox)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(bulkDownloadPane, javax.swing.GroupLayout.DEFAULT_SIZE, 314, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(bulkDownloadButton)
.addComponent(downloadDestinationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(provenanceCheckBox)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void bulkDownloadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bulkDownloadButtonActionPerformed
final File destinationDirectory = new File(downloadDestinationField.getText());
new DownloadTasks(destinationDirectory, getBulkDownloads(), model.getHistory(), model.getGalaxyInstance().getHistoriesClient(), new IndexedProgressUpdater() {
public void setProgress(int index, int percentComplete) {
bulkDownloadTable.setValueAt(percentComplete, index, 2);
}
}, provenanceCheckBox.isSelected()).execute();
bulkDownloadPane.grabFocus();
}//GEN-LAST:event_bulkDownloadButtonActionPerformed
private void downloadDestinationFieldMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_downloadDestinationFieldMouseClicked
downloadDestinationChooser.showOpenDialog(this);
}//GEN-LAST:event_downloadDestinationFieldMouseClicked
private void downloadDestinationFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_downloadDestinationFieldActionPerformed
}//GEN-LAST:event_downloadDestinationFieldActionPerformed
private void downloadDestinationChooserActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_downloadDestinationChooserActionPerformed
File downloadDestination = downloadDestinationChooser.getSelectedFile();
downloadDestinationField.setText(downloadDestination.getPath());
}//GEN-LAST:event_downloadDestinationChooserActionPerformed
private Map<HistoryContents, String> getBulkDownloads() {
final Map<HistoryContents, String> downloads = Maps.newLinkedHashMap();
final DefaultTableModel model = getBulkDownloadModel();
final int rowCount = model.getRowCount();
for(int i = 0; i < rowCount; i++) {
final HistoryContents contents = (HistoryContents) model.getValueAt(i, 0);
final String filename = (String) model.getValueAt(i, 1);
downloads.put(contents, filename);
}
return downloads;
}
public void display() {
if(model.getHistoryContents().isEmpty()) {
JOptionPane.showMessageDialog(this, "Must select one or more datasets to download.", "Warning", JOptionPane.WARNING_MESSAGE);
return;
}
final DefaultTableModel tableModel = getBulkDownloadModel();
tableModel.setNumRows(0);
for(final HistoryContents historyContents : model.getHistoryContents()) {
tableModel.addRow(new Object[] {historyContents, historyContents.getName(), -1});
}
}
private DefaultTableModel getBulkDownloadModel() {
final DefaultTableModel model = (DefaultTableModel) bulkDownloadTable.getModel();
return model;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton bulkDownloadButton;
private javax.swing.JScrollPane bulkDownloadPane;
private javax.swing.JTable bulkDownloadTable;
private javax.swing.JFileChooser downloadDestinationChooser;
private javax.swing.JTextField downloadDestinationField;
private javax.swing.JLabel jLabel2;
private javax.swing.JSeparator jSeparator2;
private javax.swing.JCheckBox provenanceCheckBox;
// End of variables declaration//GEN-END:variables
}