package org.isatools.isacreator.validateconvert.ui;
import com.explodingpixels.macwidgets.IAppWidgetFactory;
import com.sun.awt.AWTUtilities;
import org.apache.log4j.Logger;
import org.isatools.errorreporter.model.ErrorLevel;
import org.isatools.errorreporter.model.ErrorMessage;
import org.isatools.isacreator.common.CommonMouseAdapter;
import org.isatools.isacreator.common.UIHelper;
import org.isatools.isacreator.common.button.ButtonType;
import org.isatools.isacreator.common.button.FlatButton;
import org.isatools.isacreator.effects.GraphicsUtils;
import org.isatools.isacreator.effects.HUDTitleBar;
import org.isatools.isacreator.effects.SimpleListCellRenderer;
import org.isatools.isacreator.launch.ISAcreatorGUIProperties;
import org.isatools.isacreator.managers.ApplicationManager;
import org.isatools.isacreator.model.Investigation;
import org.isatools.isacreator.model.Study;
import org.isatools.isacreator.settings.ISAcreatorProperties;
import org.isatools.isacreator.validateconvert.ui.ENAReceipt.ENAReceipt;
import org.isatools.isacreator.validateconvert.ui.ENAReceipt.ENAReceiptParser;
import org.isatools.isatab.export.sra.submission.ENAResponse;
import org.isatools.isatab.export.sra.submission.ENARestServer;
import org.isatools.isatab.export.sra.submission.SRASubmitter;
import org.isatools.isatab.gui_invokers.AllowedConversions;
import org.isatools.isatab.gui_invokers.GUIISATABValidator;
import org.isatools.isatab.gui_invokers.GUIInvokerResult;
import org.isatools.isatab.isaconfigurator.ISAConfigurationSet;
import org.jdesktop.fuse.InjectedResource;
import org.jdesktop.fuse.ResourceInjector;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.html.HTMLEditorKit;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.io.*;
import java.net.URISyntaxException;
import java.util.*;
import java.util.List;
/**
* User intereface for ENA submission.
*/
public class ENASubmissionUI extends CommonValidationConversionUI {
@InjectedResource
private ImageIcon submitIcon, created_by, new_sub, new_sub_over, update_sub, update_sub_over,
box_icon, metadata_icon, submission_complete, submission_failed, dev_server, dev_server_over, prod_server,
prod_server_over, test_server, test_server_over;
public static final float DESIRED_OPACITY = .98f;
private static Logger log = Logger.getLogger(ENASubmissionUI.class.getName());
private Container metadataPanel, menuPanel, serverPanel;
private JTextField username, centerName, labName, brokerName, studyIdentifier;
private JPasswordField password;
private JLabel status;
private ENARestServer server = ENARestServer.TEST;
private String sraAction;
protected static ImageIcon submitENAAnimation = new ImageIcon(ENASubmissionUI.class.getResource("/images/submission/submitting.gif"));
protected static ImageIcon convertISAAnimation = new ImageIcon(ENASubmissionUI.class.getResource("/images/validator/converting.gif"));
public static ENASubmissionUI createENASubmissionUI() {
return new ENASubmissionUI();
}
private ENASubmissionUI() {
ResourceInjector.get("submission-package.style").inject(true, this);
}
public void createGUI() {
setTitle("Submit to ENA");
setUndecorated(true);
setBackground(UIHelper.BG_COLOR);
if (GraphicsUtils.isWindowTransparencySupported()) {
AWTUtilities.setWindowOpacity(this, DESIRED_OPACITY);
}
HUDTitleBar titlePanel = new HUDTitleBar(null, null);
add(titlePanel, BorderLayout.NORTH);
titlePanel.installListeners();
((JComponent) getContentPane()).setBorder(new EtchedBorder(UIHelper.LIGHT_GREEN_COLOR, UIHelper.LIGHT_GREEN_COLOR));
swappableContainer = new JPanel();
swappableContainer.add(createMenu());
swappableContainer.setBorder(new EmptyBorder(1, 1, 1, 1));
swappableContainer.setPreferredSize(new Dimension(750, 450));
add(swappableContainer, BorderLayout.CENTER);
pack();
}
public Container createMenu() {
menuPanel = Box.createVerticalBox();
addHeaderImageToContainer(menuPanel);
final JLabel newSubmission = new JLabel(new_sub);
newSubmission.addMouseListener(new CommonMouseAdapter() {
@Override
public void mouseEntered(MouseEvent mouseEvent) {
super.mouseEntered(mouseEvent);
newSubmission.setIcon(new_sub_over);
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
super.mouseExited(mouseEvent); //To change body of overridden methods use File | Settings | File Templates.
newSubmission.setIcon(new_sub);
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
super.mouseReleased(mouseEvent);
newSubmission.setIcon(new_sub);
sraAction = "ADD";
swapContainers(chooseServerUI());
}
});
final JLabel updateSubmission = new JLabel(update_sub);
updateSubmission.addMouseListener(new CommonMouseAdapter() {
@Override
public void mouseEntered(MouseEvent mouseEvent) {
super.mouseEntered(mouseEvent);
updateSubmission.setIcon(update_sub_over);
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
super.mouseExited(mouseEvent); //To change body of overridden methods use File | Settings | File Templates.
updateSubmission.setIcon(update_sub);
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
super.mouseReleased(mouseEvent);
updateSubmission.setIcon(update_sub);
sraAction = "MODIFY";
swapContainers(chooseServerUI());
}
});
Box menuContainer = Box.createHorizontalBox();
menuContainer.add(newSubmission);
menuContainer.add(updateSubmission);
menuPanel.add(menuContainer);
JPanel created_by_panel = new JPanel();
created_by_panel.setBackground(new Color(236, 240, 241));
menuPanel.add(UIHelper.wrapComponentInPanel(new JLabel(created_by)));
menuPanel.add(Box.createVerticalStrut(20));
return menuPanel;
}
/**
* Screen to choose the ENA server (test, dev, prod)
* @return
*/
private Container chooseServerUI() {
serverPanel = Box.createVerticalBox();
serverPanel.setPreferredSize(new Dimension(530, 390));
addHeaderImageToContainer(serverPanel);
serverPanel.add(UIHelper.wrapComponentInPanel(UIHelper.createLabel("Please choose a server to upload to: ", UIHelper.VER_14_PLAIN, UIHelper.EMERALD)));
serverPanel.add(Box.createVerticalStrut(10));
final JLabel testServer = new JLabel(test_server);
testServer.addMouseListener(new CommonMouseAdapter() {
@Override
public void mouseEntered(MouseEvent mouseEvent) {
super.mouseEntered(mouseEvent);
testServer.setIcon(test_server_over);
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
super.mouseExited(mouseEvent); //To change body of overridden methods use File | Settings | File Templates.
testServer.setIcon(test_server);
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
super.mouseReleased(mouseEvent);
testServer.setIcon(test_server);
server = ENARestServer.TEST;
swapContainers(createMetadataEntryUI());
}
});
final JLabel devServer = new JLabel(dev_server);
devServer.addMouseListener(new CommonMouseAdapter() {
@Override
public void mouseEntered(MouseEvent mouseEvent) {
super.mouseEntered(mouseEvent);
devServer.setIcon(dev_server_over);
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
super.mouseExited(mouseEvent); //To change body of overridden methods use File | Settings | File Templates.
devServer.setIcon(dev_server);
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
super.mouseReleased(mouseEvent);
devServer.setIcon(dev_server);
server = ENARestServer.DEV;
swapContainers(createMetadataEntryUI());
}
});
final JLabel prodServer = new JLabel(prod_server);
prodServer.addMouseListener(new CommonMouseAdapter() {
@Override
public void mouseEntered(MouseEvent mouseEvent) {
super.mouseEntered(mouseEvent);
prodServer.setIcon(prod_server_over);
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
super.mouseExited(mouseEvent); //To change body of overridden methods use File | Settings | File Templates.
prodServer.setIcon(prod_server);
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
super.mouseReleased(mouseEvent);
prodServer.setIcon(prod_server);
server = ENARestServer.PROD;
swapContainers(createMetadataEntryUI());
}
});
Box menuContainer = Box.createHorizontalBox();
menuContainer.add(testServer);
menuContainer.add(Box.createHorizontalStrut(5));
menuContainer.add(devServer);
menuContainer.add(Box.createHorizontalStrut(5));
menuContainer.add(prodServer);
serverPanel.add(menuContainer);
serverPanel.add(Box.createVerticalStrut(70));
return serverPanel;
}
private Container createMetadataEntryUI() {
metadataPanel = Box.createVerticalBox();
addHeaderImageToContainer(metadataPanel);
Box leftAndRightSections = Box.createHorizontalBox();
Box userLoginSection = createUserLoginSection();
leftAndRightSections.add(userLoginSection);
leftAndRightSections.add(Box.createHorizontalStrut(10));
Box metadataSection = createMetadataSection();
leftAndRightSections.add(metadataSection);
metadataPanel.add(leftAndRightSections);
Box buttonContainer = Box.createHorizontalBox();
FlatButton backButton = new FlatButton(ButtonType.RED, "Back");
backButton.addMouseListener(new CommonMouseAdapter() {
@Override
public void mousePressed(MouseEvent mouseEvent) {
super.mousePressed(mouseEvent);
swapContainers(menuPanel);
}
});
FlatButton nextButton = new FlatButton(ButtonType.EMERALD, "Next");
nextButton.addMouseListener(new CommonMouseAdapter() {
@Override
public void mousePressed(MouseEvent mouseEvent) {
super.mousePressed(mouseEvent);
if (username.getText().equals("") || username.equals("Username") || password.getPassword().length==0){
status.setText("<html><font size=\"2\">Please complete username and password! </font></html>");
} else {
validateConvertAndSubmitFiles();
}
}
});
buttonContainer.add(backButton);
buttonContainer.add(Box.createHorizontalGlue());
buttonContainer.add(nextButton);
metadataPanel.add(Box.createVerticalStrut(sraAction.equals("MODIFY") ? 20 : 30));
metadataPanel.add(buttonContainer);
return metadataPanel;
}
private void clearStatus(){
status.setText("");
}
/**
* Creates a Box for the user login
* @return Box
*/
private Box createUserLoginSection() {
Box userLoginSection = Box.createVerticalBox();
JLabel enaBoxDetails = new JLabel("ENA Dropbox Credentials", box_icon, JLabel.LEFT);
enaBoxDetails.setHorizontalAlignment(SwingConstants.LEFT);
UIHelper.renderComponent(enaBoxDetails, UIHelper.VER_12_BOLD, UIHelper.EMERALD, false);
userLoginSection.add(UIHelper.wrapComponentInPanel(enaBoxDetails));
String sra_username = ISAcreatorProperties.getProperty("sra_username");
username = new JTextField(sra_username.isEmpty() ? "Username" : sra_username);
username.addFocusListener(new FocusListener() {
public void focusGained(FocusEvent focusEvent) {
clearStatus();
}
public void focusLost(FocusEvent focusEvent) {
clearStatus();
}
});
password = new JPasswordField("");
password.addFocusListener(new FocusListener() {
public void focusGained(FocusEvent focusEvent) {
clearStatus();
}
public void focusLost(FocusEvent focusEvent) {
clearStatus();
}
});
status = new JLabel();
status.setText("");
status.setForeground(UIHelper.RED_COLOR);
status.setSize(new Dimension(200, 25));
status.setOpaque(true);
userLoginSection.add(createMetadataFieldContainer(username, "Username"));
userLoginSection.add(Box.createVerticalStrut(5));
userLoginSection.add(createMetadataFieldContainer(password, "Password", 1, 10));
userLoginSection.add(Box.createVerticalStrut(5));
userLoginSection.add(UIHelper.wrapComponentInPanel(status));
userLoginSection.add(sraAction.equals("MODIFY")
? Box.createVerticalStrut(75) :
Box.createVerticalStrut(45));
JEditorPane registerInfo = new JEditorPane();
registerInfo.setPreferredSize(new Dimension(230, 50));
registerInfo.setContentType("text/html");
registerInfo.setEditable(false);
String label = "<html><p style=\"color: #888888; font-family: 'Verdana'; font-size: 9px\">Don’t have an account? <span style=\"color:#4FBA6F\">Create one in <a href=\"https://www.ebi.ac.uk/metagenomics/register\">EBI metagenomics</a> or <a href=\"https://www.ebi.ac.uk/ena/submit/sra/#registration\">EBI ENA</a></span></p></html>";
registerInfo.setText(label);
registerInfo.setVisible(true);
registerInfo.addHyperlinkListener(new HyperlinkListener() {
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
if (Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().browse(e.getURL().toURI());
} catch (IOException e1) {
e1.printStackTrace();
} catch (URISyntaxException e1) {
e1.printStackTrace();
}
}
}
}
});
userLoginSection.add(Box.createVerticalStrut(30));
userLoginSection.add(registerInfo);
return userLoginSection;
}
private Box createMetadataSection() {
Box metadataSection = Box.createVerticalBox();
JLabel metadataDetails = new JLabel("Additional Metadata", metadata_icon, JLabel.LEFT);
UIHelper.renderComponent(metadataDetails, UIHelper.VER_12_BOLD, UIHelper.EMERALD, false);
metadataSection.add(UIHelper.wrapComponentInPanel(metadataDetails));
if (sraAction.equals("MODIFY")) {
studyIdentifier = new JTextField("e.g. ERAxxxxxx");
metadataSection.add(createMetadataFieldContainer(studyIdentifier, "Study Accession"));
metadataSection.add(Box.createVerticalStrut(5));
}
centerName = new JTextField("OXFORD");
metadataSection.add(createMetadataFieldContainer(centerName, "SRA Centre Name"));
metadataSection.add(Box.createVerticalStrut(5));
brokerName = new JTextField("OXFORD");
metadataSection.add(createMetadataFieldContainer(brokerName, "Broker Name", 0, 35));
metadataSection.add(Box.createVerticalStrut(5));
labName = new JTextField("Oxford e-Research Centre");
metadataSection.add(createMetadataFieldContainer(labName, "SRA Lab Name", 0, 30));
metadataSection.add(Box.createVerticalStrut(50));
// metadataSection.add(Box.createVerticalGlue());
JEditorPane submissionInfo = new JEditorPane();
submissionInfo.setPreferredSize(new Dimension(350, 40));
//UIHelper.renderComponent(submissionInfo, UIHelper.VER_9_PLAIN, new Color(127, 140, 141), false);
submissionInfo.setContentType("text/html");
submissionInfo.setEditable(false);
submissionInfo.setEditorKit(new HTMLEditorKit());
String label = "<html><p style=\"color: #888888; font-family: 'Verdana'; font-size: 9px\"><span style=\"color:#4FBA6F; \"><a href=\"http://www.ebi.ac.uk/ena/about/sra_rest_submissions\">Read more</a></span> about ENA Submission Requirements...</p></html>";
submissionInfo.setText(label);
submissionInfo.setVisible(true);
submissionInfo.addHyperlinkListener(new HyperlinkListener() {
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
if (Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().browse(e.getURL().toURI());
} catch (IOException e1) {
e1.printStackTrace();
} catch (URISyntaxException e1) {
e1.printStackTrace();
}
}
}
}
});
metadataSection.add(submissionInfo);
return metadataSection;
}
private Container createMetadataFieldContainer(JTextField field, String fieldName) {
return createMetadataFieldContainer(field, fieldName, 0, 10);
}
/**
* Creates a Container for a metadata field
*
* @param field - Field to be created and added
* @param fieldName - Name to be given to the field
* @param type - 0 for JTextField, 1 for JPasswordField
* @return a container with the field and it's label in a grey box.
*/
private Container createMetadataFieldContainer(JTextField field, String fieldName, int type, int padding) {
field.setSize(new Dimension(200, 25));
field.setOpaque(true);
UIHelper.renderComponent(field, UIHelper.VER_10_PLAIN, UIHelper.EMERALD, UIHelper.VERY_LIGHT_GREY_COLOR);
field.setBorder(null);
Box fieldContainer = createFieldDetailWrapper(null, fieldName, padding);
fieldContainer.add(field);
return fieldContainer;
}
private Box createFieldDetailWrapper(ImageIcon image_icon, String text, int padding) {
Box fieldContainer = Box.createHorizontalBox();
fieldContainer.setOpaque(true);
fieldContainer.setBackground(UIHelper.VERY_LIGHT_GREY_COLOR);
fieldContainer.setBorder(BorderFactory.createLineBorder(UIHelper.VERY_LIGHT_GREY_COLOR, 8));
if (image_icon != null) {
JLabel icon = new JLabel(image_icon);
icon.setOpaque(true);
icon.setBackground(UIHelper.VERY_LIGHT_GREY_COLOR);
fieldContainer.add(icon);
}
if (text != null) {
JLabel label = UIHelper.createLabel(text, UIHelper.VER_10_BOLD, new Color(127, 140, 141));
label.setOpaque(true);
label.setBackground(UIHelper.VERY_LIGHT_GREY_COLOR);
fieldContainer.add(UIHelper.wrapComponentInPanel(label));
}
Component space = Box.createHorizontalStrut(padding);
((JComponent) space).setOpaque(true);
space.setBackground(UIHelper.VERY_LIGHT_GREY_COLOR);
fieldContainer.add(space);
return fieldContainer;
}
private void submit(final String sraFolder) {
Thread performer = new Thread(new Runnable() {
public void run() {
log.info("Current ISA-Tab is: " + ISAcreatorProperties.getProperty(ISAcreatorProperties.CURRENT_ISATAB));
Box submitProgressContainer = createSubmitProgressContainer();
swapContainers(submitProgressContainer);
SRASubmitter submitter = new SRASubmitter();
ENAResponse response = submitter.submit(server, username.getText(), new String(password.getPassword()), sraFolder);
if (response!=null){
int status = response.getStatus_code();
String message = response.getReceipt();
System.out.println("STATUS is " + status);
System.out.println("RECEIPT/MESSAGE is " + message);
ENAReceipt receipt = null;
if (status == 406) {
swapContainers(createSubmitFailed(message));
} else if (status != 200) {
receipt = ENAReceiptParser.parseReceipt(message);
swapContainers(createSubmitFailed(receipt));
} else {
receipt = ENAReceiptParser.parseReceipt(message);
if (receipt.getErrors().size() > 0) {
swapContainers(createSubmitFailed(receipt));
} else {
swapContainers(createSubmitComplete(receipt));
}
}
}
}
});
performer.start();
}
private void validateConvertAndSubmitFiles() {
log.info("Current ISA-Tab is: " + ISAcreatorProperties.getProperty(ISAcreatorProperties.CURRENT_ISATAB));
ISAConfigurationSet.setConfigPath(ISAcreatorProperties.getProperty(ISAcreatorProperties.CURRENT_CONFIGURATION));
Investigation investigation = ApplicationManager.getCurrentApplicationInstance().getDataEntryEnvironment().getInvestigation();
ApplicationManager.getCurrentApplicationInstance().saveISATab();
ISAcreatorProperties.setProperty("sra_username", username.getText());
final Set<String> studies = new HashSet<String>();
for (Study study : investigation.getStudies().values()) {
studies.add(study.getStudyId());
study.addComment("Comment[SRA Submission Action]", sraAction);
study.addComment("Comment[SRA Broker Name]", brokerName.getText());
study.addComment("Comment[SRA Lab Name]", labName.getText());
study.addComment("Comment[SRA Center Name]", centerName.getText());
study.addComment("Comment[Study Accession]", sraAction.equals("MODIFY") ? studyIdentifier.getText() : "");
}
// We're changing the study comments programmatically, so to avoid saving with values currently in the interface,
// we save by forcing the UI to not update. This preserves the comment values we've specified above.
ISAcreatorProperties.setProperty("DO_NOT_UPDATE_FROM_GUI", "true");
ApplicationManager.getCurrentApplicationInstance().saveISATab();
ISAcreatorProperties.setProperty("DO_NOT_UPDATE_FROM_GUI", "false");
swapContainers(UIHelper.padComponentVerticalBox(100, new JLabel(convertISAAnimation)));
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final GUIISATABValidator isatabValidator = new GUIISATABValidator();
GUIInvokerResult result = isatabValidator.validate(ISAcreatorProperties.getProperty(ISAcreatorProperties.CURRENT_ISATAB));
final Map<String, List<ErrorMessage>> errorMessages = getErrorMessages(isatabValidator.getLog());
boolean strictValidationEnabled = Boolean.valueOf(ISAcreatorProperties.getProperty(ISAcreatorProperties.STRICT_VALIDATION));
log.info("Strict validation on? " + strictValidationEnabled);
boolean shouldShowErrors = strictValidationEnabled && errorMessages.size() > 0;
if (result == GUIInvokerResult.SUCCESS && !shouldShowErrors) {
String outputLocation = System.getProperty("java.io.tmpdir") + "sra/" + System.currentTimeMillis() + "/";
new File(outputLocation).mkdirs();
result = convertISAtab(isatabValidator.getStore(), AllowedConversions.SRA,
ISAcreatorProperties.getProperty(ISAcreatorProperties.CURRENT_ISATAB),
outputLocation);
if (result == GUIInvokerResult.SUCCESS || result == GUIInvokerResult.WARNING) {
for (String study : studies) {
submit(outputLocation + "sra/" + study + "/");
}
}
} else
{
log.info("Showing errors and warnings...");
SwingUtilities.invokeLater(new Runnable() {
public void run() {
displayValidationErrorsAndWarnings(errorMessages);
}
});
}
}
});
}
private Box createSubmitProgressContainer() {
Box submitProgressContainer = Box.createVerticalBox();
submitProgressContainer.add(Box.createVerticalStrut(40));
submitProgressContainer.add(UIHelper.wrapComponentInPanel(new JLabel(submitENAAnimation)));
return submitProgressContainer;
}
private Container createSubmitComplete(ENAReceipt receipt) {
JPanel submitProgressContainer = new JPanel(new BorderLayout());
submitProgressContainer.setPreferredSize(new Dimension(600, 420));
submitProgressContainer.add(UIHelper.wrapComponentInPanel(new JLabel(submission_complete)), BorderLayout.NORTH);
// create 4 lists with the Study, Sample, Experiment and Runs accessions
JPanel listPanel = new JPanel(new GridLayout(1, 3));
listPanel.setBorder(BorderFactory.createLineBorder(Color.WHITE, 20));
listPanel.setSize(new Dimension(600, 420));
JList studyList = new JList(receipt.getStudyAccessions().toArray());
JList experimentList = new JList(receipt.getExperimentAccessions().toArray());
JList runList = new JList(receipt.getRunAccessions().toArray());
JList sampleList = new JList(receipt.getSampleAccessions().toArray());
Box studyListContainer = Box.createVerticalBox();
JScrollPane studyScroller = createScrollerForList(studyList);
JLabel studies = UIHelper.createLabel("Studies", UIHelper.VER_11_BOLD, UIHelper.NEPHRITIS);
studies.setToolTipText("ENA accession numbers for the submitted studies");
studyListContainer.add(UIHelper.wrapComponentInPanel(studies));
studyListContainer.add(studyScroller);
listPanel.add(studyListContainer);
Box experimentListContainer = Box.createVerticalBox();
JScrollPane experimentController = createScrollerForList(experimentList);
JLabel experiments = UIHelper.createLabel("Experiments", UIHelper.VER_11_BOLD, UIHelper.NEPHRITIS);
experiments.setToolTipText("ENA accession numbers for the submitted experiments");
experimentListContainer.add(UIHelper.wrapComponentInPanel(experiments));
experimentListContainer.add(experimentController);
listPanel.add(experimentListContainer);
Box runListContainer = Box.createVerticalBox();
JLabel runs = UIHelper.createLabel("Runs", UIHelper.VER_11_BOLD, UIHelper.NEPHRITIS);
runs.setToolTipText("ENA accession numbers for the submitted runs");
runListContainer.add(UIHelper.wrapComponentInPanel(runs));
JScrollPane runScroller = createScrollerForList(runList);
runListContainer.add(runScroller);
listPanel.add(runListContainer);
Box sampleListContainer = Box.createVerticalBox();
JLabel samples = UIHelper.createLabel("Samples", UIHelper.VER_11_BOLD, UIHelper.NEPHRITIS);
samples.setToolTipText("ENA accession numbers for the submitted samples");
sampleListContainer.add(UIHelper.wrapComponentInPanel(samples));
JScrollPane sampleScroller = createScrollerForList(sampleList);
sampleListContainer.add(sampleScroller);
listPanel.add(sampleListContainer);
submitProgressContainer.add(listPanel);
FlatButton nextButton = new FlatButton(ButtonType.RED, "Close");
nextButton.addMouseListener(new CommonMouseAdapter() {
@Override
public void mousePressed(MouseEvent mouseEvent) {
super.mousePressed(mouseEvent);
setVisible(false);
ENASubmissionUI.this.dispose();
}
});
submitProgressContainer.add(UIHelper.wrapComponentInPanel(nextButton), BorderLayout.SOUTH);
return submitProgressContainer;
}
private JScrollPane createScrollerForList(JList experimentList) {
experimentList.setCellRenderer(new SimpleListCellRenderer());
JScrollPane experimentScroller = new JScrollPane(experimentList,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
experimentScroller.setBorder(new EmptyBorder(0, 0, 0, 0));
IAppWidgetFactory.makeIAppScrollPane(experimentScroller);
return experimentScroller;
}
private Box createSubmitFailed(String message) {
Box submitProgressContainer = Box.createVerticalBox();
submitProgressContainer.add(UIHelper.wrapComponentInPanel(new JLabel(submission_failed)));
ErrorUI errorContainer = new ErrorUI();
List<ErrorMessage> errorMessages = new ArrayList();
errorMessages.add(new ErrorMessage(ErrorLevel.ERROR, message));
errorContainer.constructErrorPane(errorMessages, "Submission");
errorContainer.setPreferredSize(new Dimension(650, 300));
submitProgressContainer.add(errorContainer);
// SUBMIT ANOTHER, OR BACK
FlatButton nextButton = new FlatButton(ButtonType.RED, "Back to Submission Screen");
nextButton.addMouseListener(new CommonMouseAdapter() {
@Override
public void mousePressed(MouseEvent mouseEvent) {
super.mousePressed(mouseEvent);
swapContainers(metadataPanel);
}
});
submitProgressContainer.add(Box.createVerticalStrut(20));
submitProgressContainer.add(UIHelper.wrapComponentInPanel(nextButton));
return submitProgressContainer;
}
/**
* Creates a box when submission failed
*
* @param receipt
* @return
*/
private Box createSubmitFailed(ENAReceipt receipt) {
Box submitProgressContainer = Box.createVerticalBox();
submitProgressContainer.add(UIHelper.wrapComponentInPanel(new JLabel(submission_failed)));
ErrorUI errorContainer = new ErrorUI();
errorContainer.constructErrorPane(receipt.getMessagesForDisplay("Submission Errors"), "Submission");
errorContainer.setPreferredSize(new Dimension(650, 300));
submitProgressContainer.add(errorContainer);
// SUBMIT ANOTHER, OR BACK
FlatButton nextButton = new FlatButton(ButtonType.RED, "Back to Submission Screen");
nextButton.addMouseListener(new CommonMouseAdapter() {
@Override
public void mousePressed(MouseEvent mouseEvent) {
super.mousePressed(mouseEvent);
swapContainers(metadataPanel);
}
});
submitProgressContainer.add(Box.createVerticalStrut(20));
submitProgressContainer.add(UIHelper.wrapComponentInPanel(nextButton));
return submitProgressContainer;
}
private void addHeaderImageToContainer(Container submitProgressContainer) {
submitProgressContainer.add(UIHelper.wrapComponentInPanel(new JLabel(submitIcon)));
submitProgressContainer.add(Box.createVerticalStrut(20));
}
public static void main(String[] args) {
ISAcreatorGUIProperties.setProperties();
ENASubmissionUI ui = new ENASubmissionUI();
ui.createGUI();
ui.setVisible(true);
Set<String> experiments = new HashSet<String>();
experiments.add("ERX546955");
experiments.add("ERX546956");
experiments.add("ERX546957");
experiments.add("ERX546958");
experiments.add("ERX546959");
experiments.add("ERX546960");
experiments.add("ERX546961");
experiments.add("ERX546962");
Set<String> runs = new HashSet<String>();
runs.add("ERR546955");
runs.add("ERR546956");
runs.add("ERR546957");
runs.add("ERR546958");
runs.add("ERR546959");
runs.add("ERR546960");
runs.add("ERR546961");
runs.add("ERR546962");
Set<String> samples = new HashSet<String>();
samples.add("ERS546955");
samples.add("ERS546956");
samples.add("ERS546957");
samples.add("ERS546958");
samples.add("ERS546959");
samples.add("ERS546960");
samples.add("ERS546961");
samples.add("ERS546962");
Set<String> studies = new HashSet<String>();
studies.add("ERP006700");
ENAReceipt receipt = new ENAReceipt(experiments, samples, runs, studies, new HashSet<String>(), new HashSet<String>());
ui.swapContainers(ui.createSubmitComplete(receipt));
}
}