package com.github.jmchilton.jgalaxy; import com.github.jmchilton.blend4j.galaxy.ToolsClient.FileUploadRequest; import com.github.jmchilton.blend4j.galaxy.ToolsClient.UploadFile; import com.github.jmchilton.jgalaxy.mvp.DialogDisplay; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import java.io.File; import java.util.List; import java.util.Map; import javax.swing.table.DefaultTableModel; public class UploadDisplay extends DialogDisplay { private final HistoryContentsSelectionModel model; public UploadDisplay(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() { uploadFileChooser = new javax.swing.JFileChooser(); uploadPane = new javax.swing.JScrollPane(); uploadTable = new javax.swing.JTable(); selectFilesButton = new javax.swing.JButton(); jSeparator3 = new javax.swing.JSeparator(); fileType = new javax.swing.JTextField(); fileTypeLabel = new javax.swing.JLabel(); jSeparator4 = new javax.swing.JSeparator(); uploadButton = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); dbKeyTextField = new javax.swing.JTextField(); jSeparator5 = new javax.swing.JSeparator(); namePanel = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); datasetName = new javax.swing.JTextField(); uploadFileChooser.setMultiSelectionEnabled(true); uploadFileChooser.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { uploadFileChooserActionPerformed(evt); } }); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); uploadTable.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 [] { true, true, false }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); uploadPane.setViewportView(uploadTable); uploadTable.getColumnModel().getColumn(2).setCellRenderer( new ProgressRenderer()); selectFilesButton.setText("Select Files"); selectFilesButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { selectFilesButtonActionPerformed(evt); } }); jSeparator3.setOrientation(javax.swing.SwingConstants.VERTICAL); fileType.setHorizontalAlignment(javax.swing.JTextField.TRAILING); fileType.setText("auto"); fileType.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { fileTypeActionPerformed(evt); } }); fileTypeLabel.setText("File Type"); jSeparator4.setOrientation(javax.swing.SwingConstants.VERTICAL); uploadButton.setText("Upload"); uploadButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { uploadButtonActionPerformed(evt); } }); jLabel3.setText("Genome"); dbKeyTextField.setHorizontalAlignment(javax.swing.JTextField.TRAILING); dbKeyTextField.setText("?"); jSeparator5.setOrientation(javax.swing.SwingConstants.VERTICAL); jLabel1.setText("Dataset Name"); datasetName.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { datasetNameActionPerformed(evt); } }); javax.swing.GroupLayout namePanelLayout = new javax.swing.GroupLayout(namePanel); namePanel.setLayout(namePanelLayout); namePanelLayout.setHorizontalGroup( namePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(namePanelLayout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(datasetName, javax.swing.GroupLayout.PREFERRED_SIZE, 227, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE)) ); namePanelLayout.setVerticalGroup( namePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(namePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(datasetName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel1)) ); 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) .addComponent(namePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(selectFilesButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jSeparator4, javax.swing.GroupLayout.PREFERRED_SIZE, 6, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(fileTypeLabel) .addGap(6, 6, 6) .addComponent(fileType, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(dbKeyTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jSeparator5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 60, Short.MAX_VALUE) .addComponent(uploadButton)) .addComponent(uploadPane)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(uploadPane, javax.swing.GroupLayout.DEFAULT_SIZE, 206, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(namePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jSeparator3) .addComponent(selectFilesButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jSeparator4) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(fileType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(fileTypeLabel)) .addComponent(uploadButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(dbKeyTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jSeparator5)) .addContainerGap()) ); pack(); }// </editor-fold>//GEN-END:initComponents private void selectFilesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectFilesButtonActionPerformed uploadFileChooser.showOpenDialog(this); }//GEN-LAST:event_selectFilesButtonActionPerformed private void fileTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileTypeActionPerformed // TODO add your handling code here: }//GEN-LAST:event_fileTypeActionPerformed private void uploadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_uploadButtonActionPerformed final List<UploadFile> uploads = getUploads(); final String historyId = model.getHistory().getId(); final boolean multipleFile = this.namePanel.isVisible(); final List<FileUploadRequest> uploadRequests = Lists.newArrayList(); if(multipleFile) { final FileUploadRequest request = new FileUploadRequest(historyId, uploads); request.setToolId("multi_upload1"); request.setDatasetName(this.datasetName.getText()); request.getExtraParameters().put("raw_merge_type", fileType.getText()); uploadRequests.add(request); } else { for(UploadFile file : uploads) { final FileUploadRequest request = new FileUploadRequest(historyId, file); request.setFileType(fileType.getText()); uploadRequests.add(request); } } for(final FileUploadRequest request : uploadRequests) { request.setDbKey(dbKeyTextField.getText()); } new UploadTask(uploadRequests, model.getGalaxyInstance().getToolsClient(), new IndexedProgressUpdater() { public void setProgress(int index, int percentComplete) { uploadTable.setValueAt(percentComplete, index, 2); } }).execute(); }//GEN-LAST:event_uploadButtonActionPerformed private void uploadFileChooserActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_uploadFileChooserActionPerformed final File[] files = uploadFileChooser.getSelectedFiles(); final DefaultTableModel model = getUploadModel(); for(final File file : files) { model.addRow(new Object[] { file.getName(), file.getPath(), -1 }); } }//GEN-LAST:event_uploadFileChooserActionPerformed private void datasetNameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_datasetNameActionPerformed }//GEN-LAST:event_datasetNameActionPerformed public void displayDatasetName(final boolean visible) { namePanel.setVisible(visible); } private DefaultTableModel getUploadModel() { final DefaultTableModel model = (DefaultTableModel) uploadTable.getModel(); return model; } private List<UploadFile> getUploads() { final List<UploadFile> uploads = Lists.newArrayList(); final DefaultTableModel tableModel = getUploadModel(); final int rowCount = tableModel.getRowCount(); for(int i = 0; i < rowCount; i++) { final String fileName = (String) tableModel.getValueAt(i, 0); final String filename = (String) tableModel.getValueAt(i, 1); final UploadFile file = new UploadFile(new File(filename), fileName); uploads.add(file); } return uploads; } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTextField datasetName; private javax.swing.JTextField dbKeyTextField; private javax.swing.JTextField fileType; private javax.swing.JLabel fileTypeLabel; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel3; private javax.swing.JSeparator jSeparator3; private javax.swing.JSeparator jSeparator4; private javax.swing.JSeparator jSeparator5; private javax.swing.JPanel namePanel; private javax.swing.JButton selectFilesButton; private javax.swing.JButton uploadButton; private javax.swing.JFileChooser uploadFileChooser; private javax.swing.JScrollPane uploadPane; private javax.swing.JTable uploadTable; // End of variables declaration//GEN-END:variables }