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
}