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 }