PageRenderTime 50ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/src/main/java/org/isatools/isacreator/validateconvert/ui/ENASubmissionUI.java

http://github.com/ISA-tools/ISAcreator
Java | 837 lines | 627 code | 178 blank | 32 comment | 35 complexity | b30fba7e3b881ee8d72a650e98277c9b MD5 | raw file
  1. package org.isatools.isacreator.validateconvert.ui;
  2. import com.explodingpixels.macwidgets.IAppWidgetFactory;
  3. import com.sun.awt.AWTUtilities;
  4. import org.apache.log4j.Logger;
  5. import org.isatools.errorreporter.model.ErrorLevel;
  6. import org.isatools.errorreporter.model.ErrorMessage;
  7. import org.isatools.isacreator.common.CommonMouseAdapter;
  8. import org.isatools.isacreator.common.UIHelper;
  9. import org.isatools.isacreator.common.button.ButtonType;
  10. import org.isatools.isacreator.common.button.FlatButton;
  11. import org.isatools.isacreator.effects.GraphicsUtils;
  12. import org.isatools.isacreator.effects.HUDTitleBar;
  13. import org.isatools.isacreator.effects.SimpleListCellRenderer;
  14. import org.isatools.isacreator.launch.ISAcreatorGUIProperties;
  15. import org.isatools.isacreator.managers.ApplicationManager;
  16. import org.isatools.isacreator.model.Investigation;
  17. import org.isatools.isacreator.model.Study;
  18. import org.isatools.isacreator.settings.ISAcreatorProperties;
  19. import org.isatools.isacreator.validateconvert.ui.ENAReceipt.ENAReceipt;
  20. import org.isatools.isacreator.validateconvert.ui.ENAReceipt.ENAReceiptParser;
  21. import org.isatools.isatab.export.sra.submission.ENAResponse;
  22. import org.isatools.isatab.export.sra.submission.ENARestServer;
  23. import org.isatools.isatab.export.sra.submission.SRASubmitter;
  24. import org.isatools.isatab.gui_invokers.AllowedConversions;
  25. import org.isatools.isatab.gui_invokers.GUIISATABValidator;
  26. import org.isatools.isatab.gui_invokers.GUIInvokerResult;
  27. import org.isatools.isatab.isaconfigurator.ISAConfigurationSet;
  28. import org.jdesktop.fuse.InjectedResource;
  29. import org.jdesktop.fuse.ResourceInjector;
  30. import javax.swing.*;
  31. import javax.swing.border.EmptyBorder;
  32. import javax.swing.border.EtchedBorder;
  33. import javax.swing.event.HyperlinkEvent;
  34. import javax.swing.event.HyperlinkListener;
  35. import javax.swing.text.html.HTMLEditorKit;
  36. import java.awt.*;
  37. import java.awt.event.FocusEvent;
  38. import java.awt.event.FocusListener;
  39. import java.awt.event.MouseEvent;
  40. import java.io.*;
  41. import java.net.URISyntaxException;
  42. import java.util.*;
  43. import java.util.List;
  44. /**
  45. * User intereface for ENA submission.
  46. */
  47. public class ENASubmissionUI extends CommonValidationConversionUI {
  48. @InjectedResource
  49. private ImageIcon submitIcon, created_by, new_sub, new_sub_over, update_sub, update_sub_over,
  50. box_icon, metadata_icon, submission_complete, submission_failed, dev_server, dev_server_over, prod_server,
  51. prod_server_over, test_server, test_server_over;
  52. public static final float DESIRED_OPACITY = .98f;
  53. private static Logger log = Logger.getLogger(ENASubmissionUI.class.getName());
  54. private Container metadataPanel, menuPanel, serverPanel;
  55. private JTextField username, centerName, labName, brokerName, studyIdentifier;
  56. private JPasswordField password;
  57. private JLabel status;
  58. private ENARestServer server = ENARestServer.TEST;
  59. private String sraAction;
  60. protected static ImageIcon submitENAAnimation = new ImageIcon(ENASubmissionUI.class.getResource("/images/submission/submitting.gif"));
  61. protected static ImageIcon convertISAAnimation = new ImageIcon(ENASubmissionUI.class.getResource("/images/validator/converting.gif"));
  62. public static ENASubmissionUI createENASubmissionUI() {
  63. return new ENASubmissionUI();
  64. }
  65. private ENASubmissionUI() {
  66. ResourceInjector.get("submission-package.style").inject(true, new Object[]{this});
  67. }
  68. public void createGUI() {
  69. setTitle("Submit to ENA");
  70. setUndecorated(true);
  71. setBackground(UIHelper.BG_COLOR);
  72. if (GraphicsUtils.isWindowTransparencySupported()) {
  73. AWTUtilities.setWindowOpacity(this, DESIRED_OPACITY);
  74. }
  75. HUDTitleBar titlePanel = new HUDTitleBar(null, null);
  76. add(titlePanel, BorderLayout.NORTH);
  77. titlePanel.installListeners();
  78. ((JComponent) getContentPane()).setBorder(new EtchedBorder(UIHelper.LIGHT_GREEN_COLOR, UIHelper.LIGHT_GREEN_COLOR));
  79. swappableContainer = new JPanel();
  80. swappableContainer.add(createMenu());
  81. swappableContainer.setBorder(new EmptyBorder(1, 1, 1, 1));
  82. swappableContainer.setPreferredSize(new Dimension(750, 450));
  83. add(swappableContainer, BorderLayout.CENTER);
  84. pack();
  85. }
  86. public Container createMenu() {
  87. menuPanel = Box.createVerticalBox();
  88. addHeaderImageToContainer(menuPanel);
  89. final JLabel newSubmission = new JLabel(new_sub);
  90. newSubmission.addMouseListener(new CommonMouseAdapter() {
  91. @Override
  92. public void mouseEntered(MouseEvent mouseEvent) {
  93. super.mouseEntered(mouseEvent);
  94. newSubmission.setIcon(new_sub_over);
  95. }
  96. @Override
  97. public void mouseExited(MouseEvent mouseEvent) {
  98. super.mouseExited(mouseEvent); //To change body of overridden methods use File | Settings | File Templates.
  99. newSubmission.setIcon(new_sub);
  100. }
  101. @Override
  102. public void mouseReleased(MouseEvent mouseEvent) {
  103. super.mouseReleased(mouseEvent);
  104. newSubmission.setIcon(new_sub);
  105. sraAction = "ADD";
  106. swapContainers(chooseServerUI());
  107. }
  108. });
  109. final JLabel updateSubmission = new JLabel(update_sub);
  110. updateSubmission.addMouseListener(new CommonMouseAdapter() {
  111. @Override
  112. public void mouseEntered(MouseEvent mouseEvent) {
  113. super.mouseEntered(mouseEvent);
  114. updateSubmission.setIcon(update_sub_over);
  115. }
  116. @Override
  117. public void mouseExited(MouseEvent mouseEvent) {
  118. super.mouseExited(mouseEvent); //To change body of overridden methods use File | Settings | File Templates.
  119. updateSubmission.setIcon(update_sub);
  120. }
  121. @Override
  122. public void mouseReleased(MouseEvent mouseEvent) {
  123. super.mouseReleased(mouseEvent);
  124. updateSubmission.setIcon(update_sub);
  125. sraAction = "MODIFY";
  126. swapContainers(chooseServerUI());
  127. }
  128. });
  129. Box menuContainer = Box.createHorizontalBox();
  130. menuContainer.add(newSubmission);
  131. menuContainer.add(updateSubmission);
  132. menuPanel.add(menuContainer);
  133. JPanel created_by_panel = new JPanel();
  134. created_by_panel.setBackground(new Color(236, 240, 241));
  135. menuPanel.add(UIHelper.wrapComponentInPanel(new JLabel(created_by)));
  136. menuPanel.add(Box.createVerticalStrut(20));
  137. return menuPanel;
  138. }
  139. /**
  140. * Screen to choose the ENA server (test, dev, prod)
  141. * @return
  142. */
  143. private Container chooseServerUI() {
  144. serverPanel = Box.createVerticalBox();
  145. serverPanel.setPreferredSize(new Dimension(530, 390));
  146. addHeaderImageToContainer(serverPanel);
  147. serverPanel.add(UIHelper.wrapComponentInPanel(UIHelper.createLabel("Please choose a server to upload to: ", UIHelper.VER_14_PLAIN, UIHelper.EMERALD)));
  148. serverPanel.add(Box.createVerticalStrut(10));
  149. final JLabel testServer = new JLabel(test_server);
  150. testServer.addMouseListener(new CommonMouseAdapter() {
  151. @Override
  152. public void mouseEntered(MouseEvent mouseEvent) {
  153. super.mouseEntered(mouseEvent);
  154. testServer.setIcon(test_server_over);
  155. }
  156. @Override
  157. public void mouseExited(MouseEvent mouseEvent) {
  158. super.mouseExited(mouseEvent); //To change body of overridden methods use File | Settings | File Templates.
  159. testServer.setIcon(test_server);
  160. }
  161. @Override
  162. public void mouseReleased(MouseEvent mouseEvent) {
  163. super.mouseReleased(mouseEvent);
  164. testServer.setIcon(test_server);
  165. server = ENARestServer.TEST;
  166. swapContainers(createMetadataEntryUI());
  167. }
  168. });
  169. final JLabel devServer = new JLabel(dev_server);
  170. devServer.addMouseListener(new CommonMouseAdapter() {
  171. @Override
  172. public void mouseEntered(MouseEvent mouseEvent) {
  173. super.mouseEntered(mouseEvent);
  174. devServer.setIcon(dev_server_over);
  175. }
  176. @Override
  177. public void mouseExited(MouseEvent mouseEvent) {
  178. super.mouseExited(mouseEvent); //To change body of overridden methods use File | Settings | File Templates.
  179. devServer.setIcon(dev_server);
  180. }
  181. @Override
  182. public void mouseReleased(MouseEvent mouseEvent) {
  183. super.mouseReleased(mouseEvent);
  184. devServer.setIcon(dev_server);
  185. server = ENARestServer.DEV;
  186. swapContainers(createMetadataEntryUI());
  187. }
  188. });
  189. final JLabel prodServer = new JLabel(prod_server);
  190. prodServer.addMouseListener(new CommonMouseAdapter() {
  191. @Override
  192. public void mouseEntered(MouseEvent mouseEvent) {
  193. super.mouseEntered(mouseEvent);
  194. prodServer.setIcon(prod_server_over);
  195. }
  196. @Override
  197. public void mouseExited(MouseEvent mouseEvent) {
  198. super.mouseExited(mouseEvent); //To change body of overridden methods use File | Settings | File Templates.
  199. prodServer.setIcon(prod_server);
  200. }
  201. @Override
  202. public void mouseReleased(MouseEvent mouseEvent) {
  203. super.mouseReleased(mouseEvent);
  204. prodServer.setIcon(prod_server);
  205. server = ENARestServer.PROD;
  206. swapContainers(createMetadataEntryUI());
  207. }
  208. });
  209. Box menuContainer = Box.createHorizontalBox();
  210. menuContainer.add(testServer);
  211. menuContainer.add(Box.createHorizontalStrut(5));
  212. menuContainer.add(devServer);
  213. menuContainer.add(Box.createHorizontalStrut(5));
  214. menuContainer.add(prodServer);
  215. serverPanel.add(menuContainer);
  216. serverPanel.add(Box.createVerticalStrut(70));
  217. return serverPanel;
  218. }
  219. private Container createMetadataEntryUI() {
  220. metadataPanel = Box.createVerticalBox();
  221. addHeaderImageToContainer(metadataPanel);
  222. Box leftAndRightSections = Box.createHorizontalBox();
  223. Box userLoginSection = createUserLoginSection();
  224. leftAndRightSections.add(userLoginSection);
  225. leftAndRightSections.add(Box.createHorizontalStrut(10));
  226. Box metadataSection = createMetadataSection();
  227. leftAndRightSections.add(metadataSection);
  228. metadataPanel.add(leftAndRightSections);
  229. Box buttonContainer = Box.createHorizontalBox();
  230. FlatButton backButton = new FlatButton(ButtonType.RED, "Back");
  231. backButton.addMouseListener(new CommonMouseAdapter() {
  232. @Override
  233. public void mousePressed(MouseEvent mouseEvent) {
  234. super.mousePressed(mouseEvent);
  235. swapContainers(menuPanel);
  236. }
  237. });
  238. FlatButton nextButton = new FlatButton(ButtonType.EMERALD, "Next");
  239. nextButton.addMouseListener(new CommonMouseAdapter() {
  240. @Override
  241. public void mousePressed(MouseEvent mouseEvent) {
  242. super.mousePressed(mouseEvent);
  243. if (username.getText().equals("") || username.equals("Username") || password.getPassword().length==0){
  244. status.setText("<html><font size=\"2\">Please complete username and password! </font></html>");
  245. } else {
  246. validateConvertAndSubmitFiles();
  247. }
  248. }
  249. });
  250. buttonContainer.add(backButton);
  251. buttonContainer.add(Box.createHorizontalGlue());
  252. buttonContainer.add(nextButton);
  253. metadataPanel.add(Box.createVerticalStrut(sraAction.equals("MODIFY") ? 20 : 30));
  254. metadataPanel.add(buttonContainer);
  255. return metadataPanel;
  256. }
  257. private void clearStatus(){
  258. status.setText("");
  259. }
  260. /**
  261. * Creates a Box for the user login
  262. * @return Box
  263. */
  264. private Box createUserLoginSection() {
  265. Box userLoginSection = Box.createVerticalBox();
  266. JLabel enaBoxDetails = new JLabel("ENA Dropbox Credentials", box_icon, JLabel.LEFT);
  267. enaBoxDetails.setHorizontalAlignment(SwingConstants.LEFT);
  268. UIHelper.renderComponent(enaBoxDetails, UIHelper.VER_12_BOLD, UIHelper.EMERALD, false);
  269. userLoginSection.add(UIHelper.wrapComponentInPanel(enaBoxDetails));
  270. String sra_username = ISAcreatorProperties.getProperty("sra_username");
  271. username = new JTextField(sra_username.isEmpty() ? "Username" : sra_username);
  272. username.addFocusListener(new FocusListener() {
  273. public void focusGained(FocusEvent focusEvent) {
  274. clearStatus();
  275. }
  276. public void focusLost(FocusEvent focusEvent) {
  277. clearStatus();
  278. }
  279. });
  280. password = new JPasswordField("");
  281. password.addFocusListener(new FocusListener() {
  282. public void focusGained(FocusEvent focusEvent) {
  283. clearStatus();
  284. }
  285. public void focusLost(FocusEvent focusEvent) {
  286. clearStatus();
  287. }
  288. });
  289. status = new JLabel();
  290. status.setText("");
  291. status.setForeground(UIHelper.RED_COLOR);
  292. status.setSize(new Dimension(200, 25));
  293. status.setOpaque(true);
  294. userLoginSection.add(createMetadataFieldContainer(username, "Username"));
  295. userLoginSection.add(Box.createVerticalStrut(5));
  296. userLoginSection.add(createMetadataFieldContainer(password, "Password", 1, 10));
  297. userLoginSection.add(Box.createVerticalStrut(5));
  298. userLoginSection.add(UIHelper.wrapComponentInPanel(status));
  299. userLoginSection.add(sraAction.equals("MODIFY")
  300. ? Box.createVerticalStrut(75) :
  301. Box.createVerticalStrut(45));
  302. JEditorPane registerInfo = new JEditorPane();
  303. registerInfo.setPreferredSize(new Dimension(230, 50));
  304. registerInfo.setContentType("text/html");
  305. registerInfo.setEditable(false);
  306. 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>";
  307. registerInfo.setText(label);
  308. registerInfo.setVisible(true);
  309. registerInfo.addHyperlinkListener(new HyperlinkListener() {
  310. public void hyperlinkUpdate(HyperlinkEvent e) {
  311. if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
  312. if (Desktop.isDesktopSupported()) {
  313. try {
  314. Desktop.getDesktop().browse(e.getURL().toURI());
  315. } catch (IOException e1) {
  316. e1.printStackTrace();
  317. } catch (URISyntaxException e1) {
  318. e1.printStackTrace();
  319. }
  320. }
  321. }
  322. }
  323. });
  324. userLoginSection.add(Box.createVerticalStrut(30));
  325. userLoginSection.add(registerInfo);
  326. return userLoginSection;
  327. }
  328. private Box createMetadataSection() {
  329. Box metadataSection = Box.createVerticalBox();
  330. JLabel metadataDetails = new JLabel("Additional Metadata", metadata_icon, JLabel.LEFT);
  331. UIHelper.renderComponent(metadataDetails, UIHelper.VER_12_BOLD, UIHelper.EMERALD, false);
  332. metadataSection.add(UIHelper.wrapComponentInPanel(metadataDetails));
  333. if (sraAction.equals("MODIFY")) {
  334. studyIdentifier = new JTextField("e.g. ERAxxxxxx");
  335. metadataSection.add(createMetadataFieldContainer(studyIdentifier, "Study Accession"));
  336. metadataSection.add(Box.createVerticalStrut(5));
  337. }
  338. centerName = new JTextField("OXFORD");
  339. metadataSection.add(createMetadataFieldContainer(centerName, "SRA Centre Name"));
  340. metadataSection.add(Box.createVerticalStrut(5));
  341. brokerName = new JTextField("OXFORD");
  342. metadataSection.add(createMetadataFieldContainer(brokerName, "Broker Name", 0, 35));
  343. metadataSection.add(Box.createVerticalStrut(5));
  344. labName = new JTextField("Oxford e-Research Centre");
  345. metadataSection.add(createMetadataFieldContainer(labName, "SRA Lab Name", 0, 30));
  346. metadataSection.add(Box.createVerticalStrut(50));
  347. // metadataSection.add(Box.createVerticalGlue());
  348. JEditorPane submissionInfo = new JEditorPane();
  349. submissionInfo.setPreferredSize(new Dimension(350, 40));
  350. //UIHelper.renderComponent(submissionInfo, UIHelper.VER_9_PLAIN, new Color(127, 140, 141), false);
  351. submissionInfo.setContentType("text/html");
  352. submissionInfo.setEditable(false);
  353. submissionInfo.setEditorKit(new HTMLEditorKit());
  354. 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>";
  355. submissionInfo.setText(label);
  356. submissionInfo.setVisible(true);
  357. submissionInfo.addHyperlinkListener(new HyperlinkListener() {
  358. public void hyperlinkUpdate(HyperlinkEvent e) {
  359. if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
  360. if (Desktop.isDesktopSupported()) {
  361. try {
  362. Desktop.getDesktop().browse(e.getURL().toURI());
  363. } catch (IOException e1) {
  364. e1.printStackTrace();
  365. } catch (URISyntaxException e1) {
  366. e1.printStackTrace();
  367. }
  368. }
  369. }
  370. }
  371. });
  372. metadataSection.add(submissionInfo);
  373. return metadataSection;
  374. }
  375. private Container createMetadataFieldContainer(JTextField field, String fieldName) {
  376. return createMetadataFieldContainer(field, fieldName, 0, 10);
  377. }
  378. /**
  379. * Creates a Container for a metadata field
  380. *
  381. * @param field - Field to be created and added
  382. * @param fieldName - Name to be given to the field
  383. * @param type - 0 for JTextField, 1 for JPasswordField
  384. * @return a container with the field and it's label in a grey box.
  385. */
  386. private Container createMetadataFieldContainer(JTextField field, String fieldName, int type, int padding) {
  387. field.setSize(new Dimension(200, 25));
  388. field.setOpaque(true);
  389. UIHelper.renderComponent(field, UIHelper.VER_10_PLAIN, UIHelper.EMERALD, UIHelper.VERY_LIGHT_GREY_COLOR);
  390. field.setBorder(null);
  391. Box fieldContainer = createFieldDetailWrapper(null, fieldName, padding);
  392. fieldContainer.add(field);
  393. return fieldContainer;
  394. }
  395. private Box createFieldDetailWrapper(ImageIcon image_icon, String text, int padding) {
  396. Box fieldContainer = Box.createHorizontalBox();
  397. fieldContainer.setOpaque(true);
  398. fieldContainer.setBackground(UIHelper.VERY_LIGHT_GREY_COLOR);
  399. fieldContainer.setBorder(BorderFactory.createLineBorder(UIHelper.VERY_LIGHT_GREY_COLOR, 8));
  400. if (image_icon != null) {
  401. JLabel icon = new JLabel(image_icon);
  402. icon.setOpaque(true);
  403. icon.setBackground(UIHelper.VERY_LIGHT_GREY_COLOR);
  404. fieldContainer.add(icon);
  405. }
  406. if (text != null) {
  407. JLabel label = UIHelper.createLabel(text, UIHelper.VER_10_BOLD, new Color(127, 140, 141));
  408. label.setOpaque(true);
  409. label.setBackground(UIHelper.VERY_LIGHT_GREY_COLOR);
  410. fieldContainer.add(UIHelper.wrapComponentInPanel(label));
  411. }
  412. Component space = Box.createHorizontalStrut(padding);
  413. ((JComponent) space).setOpaque(true);
  414. space.setBackground(UIHelper.VERY_LIGHT_GREY_COLOR);
  415. fieldContainer.add(space);
  416. return fieldContainer;
  417. }
  418. private void submit(final String sraFolder) {
  419. Thread performer = new Thread(new Runnable() {
  420. public void run() {
  421. log.info("Current ISA-Tab is: " + ISAcreatorProperties.getProperty(ISAcreatorProperties.CURRENT_ISATAB));
  422. Box submitProgressContainer = createSubmitProgressContainer();
  423. swapContainers(submitProgressContainer);
  424. SRASubmitter submitter = new SRASubmitter();
  425. ENAResponse response = submitter.submit(server, username.getText(), new String(password.getPassword()), sraFolder);
  426. if (response!=null){
  427. int status = response.getStatus_code();
  428. String message = response.getReceipt();
  429. System.out.println("STATUS is " + status);
  430. System.out.println("RECEIPT/MESSAGE is " + message);
  431. ENAReceipt receipt = null;
  432. if (status == 406) {
  433. swapContainers(createSubmitFailed(message));
  434. } else if (status != 200) {
  435. receipt = ENAReceiptParser.parseReceipt(message);
  436. swapContainers(createSubmitFailed(receipt));
  437. } else {
  438. receipt = ENAReceiptParser.parseReceipt(message);
  439. if (receipt.getErrors().size() > 0) {
  440. swapContainers(createSubmitFailed(receipt));
  441. } else {
  442. swapContainers(createSubmitComplete(receipt));
  443. }
  444. }
  445. }
  446. }
  447. });
  448. performer.start();
  449. }
  450. private void validateConvertAndSubmitFiles() {
  451. log.info("Current ISA-Tab is: " + ISAcreatorProperties.getProperty(ISAcreatorProperties.CURRENT_ISATAB));
  452. ISAConfigurationSet.setConfigPath(ISAcreatorProperties.getProperty(ISAcreatorProperties.CURRENT_CONFIGURATION));
  453. Investigation investigation = ApplicationManager.getCurrentApplicationInstance().getDataEntryEnvironment().getInvestigation();
  454. ApplicationManager.getCurrentApplicationInstance().saveISATab();
  455. ISAcreatorProperties.setProperty("sra_username", username.getText());
  456. final Set<String> studies = new HashSet<String>();
  457. for (Study study : investigation.getStudies().values()) {
  458. studies.add(study.getStudyId());
  459. study.addComment("Comment[SRA Submission Action]", sraAction);
  460. study.addComment("Comment[SRA Broker Name]", brokerName.getText());
  461. study.addComment("Comment[SRA Lab Name]", labName.getText());
  462. study.addComment("Comment[SRA Center Name]", centerName.getText());
  463. study.addComment("Comment[Study Accession]", sraAction.equals("MODIFY") ? studyIdentifier.getText() : "");
  464. }
  465. // We're changing the study comments programmatically, so to avoid saving with values currently in the interface,
  466. // we save by forcing the UI to not update. This preserves the comment values we've specified above.
  467. ISAcreatorProperties.setProperty("DO_NOT_UPDATE_FROM_GUI", "true");
  468. ApplicationManager.getCurrentApplicationInstance().saveISATab();
  469. ISAcreatorProperties.setProperty("DO_NOT_UPDATE_FROM_GUI", "false");
  470. swapContainers(UIHelper.padComponentVerticalBox(100, new JLabel(convertISAAnimation)));
  471. SwingUtilities.invokeLater(new Runnable() {
  472. public void run() {
  473. final GUIISATABValidator isatabValidator = new GUIISATABValidator();
  474. GUIInvokerResult result = isatabValidator.validate(ISAcreatorProperties.getProperty(ISAcreatorProperties.CURRENT_ISATAB));
  475. final Map<String, List<ErrorMessage>> errorMessages = getErrorMessages(isatabValidator.getLog());
  476. boolean strictValidationEnabled = Boolean.valueOf(ISAcreatorProperties.getProperty(ISAcreatorProperties.STRICT_VALIDATION));
  477. log.info("Strict validation on? " + strictValidationEnabled);
  478. boolean shouldShowErrors = strictValidationEnabled && errorMessages.size() > 0;
  479. if (result == GUIInvokerResult.SUCCESS && !shouldShowErrors) {
  480. String outputLocation = System.getProperty("java.io.tmpdir") + "sra/" + System.currentTimeMillis() + "/";
  481. new File(outputLocation).mkdirs();
  482. result = convertISAtab(isatabValidator.getStore(), AllowedConversions.SRA,
  483. ISAcreatorProperties.getProperty(ISAcreatorProperties.CURRENT_ISATAB),
  484. outputLocation);
  485. if (result == GUIInvokerResult.SUCCESS || result == GUIInvokerResult.WARNING) {
  486. for (String study : studies) {
  487. submit(outputLocation + "sra/" + study + "/");
  488. }
  489. }
  490. } else
  491. {
  492. log.info("Showing errors and warnings...");
  493. SwingUtilities.invokeLater(new Runnable() {
  494. public void run() {
  495. displayValidationErrorsAndWarnings(errorMessages);
  496. }
  497. });
  498. }
  499. }
  500. });
  501. }
  502. private Box createSubmitProgressContainer() {
  503. Box submitProgressContainer = Box.createVerticalBox();
  504. submitProgressContainer.add(Box.createVerticalStrut(40));
  505. submitProgressContainer.add(UIHelper.wrapComponentInPanel(new JLabel(submitENAAnimation)));
  506. return submitProgressContainer;
  507. }
  508. private Container createSubmitComplete(ENAReceipt receipt) {
  509. JPanel submitProgressContainer = new JPanel(new BorderLayout());
  510. submitProgressContainer.setPreferredSize(new Dimension(600, 420));
  511. submitProgressContainer.add(UIHelper.wrapComponentInPanel(new JLabel(submission_complete)), BorderLayout.NORTH);
  512. // create 4 lists with the Study, Sample, Experiment and Runs accessions
  513. JPanel listPanel = new JPanel(new GridLayout(1, 3));
  514. listPanel.setBorder(BorderFactory.createLineBorder(Color.WHITE, 20));
  515. listPanel.setSize(new Dimension(600, 420));
  516. JList studyList = new JList(receipt.getStudyAccessions().toArray());
  517. JList experimentList = new JList(receipt.getExperimentAccessions().toArray());
  518. JList runList = new JList(receipt.getRunAccessions().toArray());
  519. JList sampleList = new JList(receipt.getSampleAccessions().toArray());
  520. Box studyListContainer = Box.createVerticalBox();
  521. JScrollPane studyScroller = createScrollerForList(studyList);
  522. JLabel studies = UIHelper.createLabel("Studies", UIHelper.VER_11_BOLD, UIHelper.NEPHRITIS);
  523. studies.setToolTipText("ENA accession numbers for the submitted studies");
  524. studyListContainer.add(UIHelper.wrapComponentInPanel(studies));
  525. studyListContainer.add(studyScroller);
  526. listPanel.add(studyListContainer);
  527. Box experimentListContainer = Box.createVerticalBox();
  528. JScrollPane experimentController = createScrollerForList(experimentList);
  529. JLabel experiments = UIHelper.createLabel("Experiments", UIHelper.VER_11_BOLD, UIHelper.NEPHRITIS);
  530. experiments.setToolTipText("ENA accession numbers for the submitted experiments");
  531. experimentListContainer.add(UIHelper.wrapComponentInPanel(experiments));
  532. experimentListContainer.add(experimentController);
  533. listPanel.add(experimentListContainer);
  534. Box runListContainer = Box.createVerticalBox();
  535. JLabel runs = UIHelper.createLabel("Runs", UIHelper.VER_11_BOLD, UIHelper.NEPHRITIS);
  536. runs.setToolTipText("ENA accession numbers for the submitted runs");
  537. runListContainer.add(UIHelper.wrapComponentInPanel(runs));
  538. JScrollPane runScroller = createScrollerForList(runList);
  539. runListContainer.add(runScroller);
  540. listPanel.add(runListContainer);
  541. Box sampleListContainer = Box.createVerticalBox();
  542. JLabel samples = UIHelper.createLabel("Samples", UIHelper.VER_11_BOLD, UIHelper.NEPHRITIS);
  543. samples.setToolTipText("ENA accession numbers for the submitted samples");
  544. sampleListContainer.add(UIHelper.wrapComponentInPanel(samples));
  545. JScrollPane sampleScroller = createScrollerForList(sampleList);
  546. sampleListContainer.add(sampleScroller);
  547. listPanel.add(sampleListContainer);
  548. submitProgressContainer.add(listPanel);
  549. FlatButton nextButton = new FlatButton(ButtonType.RED, "Close");
  550. nextButton.addMouseListener(new CommonMouseAdapter() {
  551. @Override
  552. public void mousePressed(MouseEvent mouseEvent) {
  553. super.mousePressed(mouseEvent);
  554. setVisible(false);
  555. ENASubmissionUI.this.dispose();
  556. }
  557. });
  558. submitProgressContainer.add(UIHelper.wrapComponentInPanel(nextButton), BorderLayout.SOUTH);
  559. return submitProgressContainer;
  560. }
  561. private JScrollPane createScrollerForList(JList experimentList) {
  562. experimentList.setCellRenderer(new SimpleListCellRenderer());
  563. JScrollPane experimentScroller = new JScrollPane(experimentList,
  564. JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
  565. JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
  566. experimentScroller.setBorder(new EmptyBorder(0, 0, 0, 0));
  567. IAppWidgetFactory.makeIAppScrollPane(experimentScroller);
  568. return experimentScroller;
  569. }
  570. private Box createSubmitFailed(String message) {
  571. Box submitProgressContainer = Box.createVerticalBox();
  572. submitProgressContainer.add(UIHelper.wrapComponentInPanel(new JLabel(submission_failed)));
  573. ErrorUI errorContainer = new ErrorUI();
  574. List<ErrorMessage> errorMessages = new ArrayList();
  575. errorMessages.add(new ErrorMessage(ErrorLevel.ERROR, message));
  576. errorContainer.constructErrorPane(errorMessages, "Submission");
  577. errorContainer.setPreferredSize(new Dimension(650, 300));
  578. submitProgressContainer.add(errorContainer);
  579. // SUBMIT ANOTHER, OR BACK
  580. FlatButton nextButton = new FlatButton(ButtonType.RED, "Back to Submission Screen");
  581. nextButton.addMouseListener(new CommonMouseAdapter() {
  582. @Override
  583. public void mousePressed(MouseEvent mouseEvent) {
  584. super.mousePressed(mouseEvent);
  585. swapContainers(metadataPanel);
  586. }
  587. });
  588. submitProgressContainer.add(Box.createVerticalStrut(20));
  589. submitProgressContainer.add(UIHelper.wrapComponentInPanel(nextButton));
  590. return submitProgressContainer;
  591. }
  592. /**
  593. * Creates a box when submission failed
  594. *
  595. * @param receipt
  596. * @return
  597. */
  598. private Box createSubmitFailed(ENAReceipt receipt) {
  599. Box submitProgressContainer = Box.createVerticalBox();
  600. submitProgressContainer.add(UIHelper.wrapComponentInPanel(new JLabel(submission_failed)));
  601. ErrorUI errorContainer = new ErrorUI();
  602. errorContainer.constructErrorPane(receipt.getMessagesForDisplay("Submission Errors"), "Submission");
  603. errorContainer.setPreferredSize(new Dimension(650, 300));
  604. submitProgressContainer.add(errorContainer);
  605. // SUBMIT ANOTHER, OR BACK
  606. FlatButton nextButton = new FlatButton(ButtonType.RED, "Back to Submission Screen");
  607. nextButton.addMouseListener(new CommonMouseAdapter() {
  608. @Override
  609. public void mousePressed(MouseEvent mouseEvent) {
  610. super.mousePressed(mouseEvent);
  611. swapContainers(metadataPanel);
  612. }
  613. });
  614. submitProgressContainer.add(Box.createVerticalStrut(20));
  615. submitProgressContainer.add(UIHelper.wrapComponentInPanel(nextButton));
  616. return submitProgressContainer;
  617. }
  618. private void addHeaderImageToContainer(Container submitProgressContainer) {
  619. submitProgressContainer.add(UIHelper.wrapComponentInPanel(new JLabel(submitIcon)));
  620. submitProgressContainer.add(Box.createVerticalStrut(20));
  621. }
  622. public static void main(String[] args) {
  623. ISAcreatorGUIProperties.setProperties();
  624. ENASubmissionUI ui = new ENASubmissionUI();
  625. ui.createGUI();
  626. ui.setVisible(true);
  627. Set<String> experiments = new HashSet<String>();
  628. experiments.add("ERX546955");
  629. experiments.add("ERX546956");
  630. experiments.add("ERX546957");
  631. experiments.add("ERX546958");
  632. experiments.add("ERX546959");
  633. experiments.add("ERX546960");
  634. experiments.add("ERX546961");
  635. experiments.add("ERX546962");
  636. Set<String> runs = new HashSet<String>();
  637. runs.add("ERR546955");
  638. runs.add("ERR546956");
  639. runs.add("ERR546957");
  640. runs.add("ERR546958");
  641. runs.add("ERR546959");
  642. runs.add("ERR546960");
  643. runs.add("ERR546961");
  644. runs.add("ERR546962");
  645. Set<String> samples = new HashSet<String>();
  646. samples.add("ERS546955");
  647. samples.add("ERS546956");
  648. samples.add("ERS546957");
  649. samples.add("ERS546958");
  650. samples.add("ERS546959");
  651. samples.add("ERS546960");
  652. samples.add("ERS546961");
  653. samples.add("ERS546962");
  654. Set<String> studies = new HashSet<String>();
  655. studies.add("ERP006700");
  656. ENAReceipt receipt = new ENAReceipt(experiments, samples, runs, studies, new HashSet<String>(), new HashSet<String>());
  657. ui.swapContainers(ui.createSubmitComplete(receipt));
  658. }
  659. }