+ protected void buildVamsasStMenu()
+ {
+ if (v_client == null)
+ {
+ String[] sess = null;
+ try
+ {
+ sess = VamsasApplication.getSessionList();
+ } catch (Exception e)
+ {
+ jalview.bin.Cache.log.warn(
+ "Problem getting current sessions list.", e);
+ sess = null;
+ }
+ if (sess != null)
+ {
+ jalview.bin.Cache.log.debug("Got current sessions list: "
+ + sess.length + " entries.");
+ VamsasStMenu.removeAll();
+ for (int i = 0; i < sess.length; i++)
+ {
+ JMenuItem sessit = new JMenuItem();
+ sessit.setText(sess[i]);
+ sessit.setToolTipText(MessageManager.formatMessage(
+ "label.connect_to_session", new Object[] { sess[i] }));
+ final Desktop dsktp = this;
+ final String mysesid = sess[i];
+ sessit.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ if (dsktp.v_client == null)
+ {
+ Thread rthr = new Thread(new Runnable()
+ {
+
+ @Override
+ public void run()
+ {
+ dsktp.v_client = new VamsasApplication(dsktp, mysesid);
+ dsktp.setupVamsasConnectedGui();
+ dsktp.v_client.initial_update();
+ }
+
+ });
+ rthr.start();
+ }
+ };
+ });
+ VamsasStMenu.add(sessit);
+ }
+ // don't show an empty menu.
+ VamsasStMenu.setVisible(sess.length > 0);
+
+ }
+ else
+ {
+ jalview.bin.Cache.log.debug("No current vamsas sessions.");
+ VamsasStMenu.removeAll();
+ VamsasStMenu.setVisible(false);
+ }
+ }
+ else
+ {
+ // Not interested in the content. Just hide ourselves.
+ VamsasStMenu.setVisible(false);
+ }
+ }
+
+ @Override
+ public void vamsasSave_actionPerformed(ActionEvent e)
+ {
+ if (v_client != null)
+ {
+ // TODO: VAMSAS DOCUMENT EXTENSION is VDJ
+ JalviewFileChooser chooser = new JalviewFileChooser("vdj",
+ "Vamsas Document");
+
+ chooser.setFileView(new JalviewFileView());
+ chooser.setDialogTitle(MessageManager
+ .getString("label.save_vamsas_document_archive"));
+
+ int value = chooser.showSaveDialog(this);
+
+ if (value == JalviewFileChooser.APPROVE_OPTION)
+ {
+ java.io.File choice = chooser.getSelectedFile();
+ JPanel progpanel = addProgressPanel(MessageManager.formatMessage(
+ "label.saving_vamsas_doc",
+ new Object[] { choice.getName() }));
+ Cache.setProperty("LAST_DIRECTORY", choice.getParent());
+ String warnmsg = null;
+ String warnttl = null;
+ try
+ {
+ v_client.vclient.storeDocument(choice);
+ } catch (Error ex)
+ {
+ warnttl = "Serious Problem saving Vamsas Document";
+ warnmsg = ex.toString();
+ jalview.bin.Cache.log.error("Error Whilst saving document to "
+ + choice, ex);
+
+ } catch (Exception ex)
+ {
+ warnttl = "Problem saving Vamsas Document.";
+ warnmsg = ex.toString();
+ jalview.bin.Cache.log.warn("Exception Whilst saving document to "
+ + choice, ex);
+
+ }
+ removeProgressPanel(progpanel);
+ if (warnmsg != null)
+ {
+ JvOptionPane.showInternalMessageDialog(Desktop.desktop,
+
+ warnmsg, warnttl, JvOptionPane.ERROR_MESSAGE);
+ }
+ }
+ }
+ }
+
+ JPanel vamUpdate = null;
+
+ /**
+ * hide vamsas user gui bits when a vamsas document event is being handled.
+ *
+ * @param b
+ * true to hide gui, false to reveal gui
+ */
+ public void setVamsasUpdate(boolean b)
+ {
+ Cache.log.debug("Setting gui for Vamsas update "
+ + (b ? "in progress" : "finished"));
+
+ if (vamUpdate != null)
+ {
+ this.removeProgressPanel(vamUpdate);
+ }
+ if (b)
+ {
+ vamUpdate = this.addProgressPanel(MessageManager
+ .getString("label.updating_vamsas_session"));
+ }
+ vamsasStart.setVisible(!b);
+ vamsasStop.setVisible(!b);
+ vamsasSave.setVisible(!b);
+ }
+
+ public JInternalFrame[] getAllFrames()
+ {
+ return desktop.getAllFrames();
+ }
+
+ /**
+ * Checks the given url to see if it gives a response indicating that the user
+ * should be informed of a new questionnaire.
+ *
+ * @param url
+ */
+ public void checkForQuestionnaire(String url)
+ {
+ UserQuestionnaireCheck jvq = new UserQuestionnaireCheck(url);
+ // javax.swing.SwingUtilities.invokeLater(jvq);
+ new Thread(jvq).start();
+ }
+
+ public void checkURLLinks()
+ {
+ // Thread off the URL link checker
+ addDialogThread(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ if (Cache.getDefault("CHECKURLLINKS", true))
+ {
+ // check what the actual links are - if it's just the default don't
+ // bother with the warning
+ List<String> links = Preferences.sequenceUrlLinks
+ .getLinksForMenu();
+
+ // only need to check links if there is one with a
+ // SEQUENCE_ID which is not the default EMBL_EBI link
+ ListIterator<String> li = links.listIterator();
+ boolean check = false;
+ List<JLabel> urls = new ArrayList<JLabel>();
+ while (li.hasNext())
+ {
+ String link = li.next();
+ if (link.contains(SEQUENCE_ID)
+ && !link.equals(UrlConstants.DEFAULT_STRING))
+ {
+ check = true;
+ int barPos = link.indexOf("|");
+ String urlMsg = barPos == -1 ? link : link.substring(0,
+ barPos) + ": " + link.substring(barPos + 1);
+ urls.add(new JLabel(urlMsg));
+ }
+ }
+ if (!check)
+ {
+ return;
+ }
+
+ // ask user to check in case URL links use old style tokens
+ // ($SEQUENCE_ID$ for sequence id _or_ accession id)
+ JPanel msgPanel = new JPanel();
+ msgPanel.setLayout(new BoxLayout(msgPanel, BoxLayout.PAGE_AXIS));
+ msgPanel.add(Box.createVerticalGlue());
+ JLabel msg = new JLabel(
+ MessageManager
+ .getString("label.SEQUENCE_ID_for_DB_ACCESSION1"));
+ JLabel msg2 = new JLabel(
+ MessageManager
+ .getString("label.SEQUENCE_ID_for_DB_ACCESSION2"));
+ msgPanel.add(msg);
+ for (JLabel url : urls)
+ {
+ msgPanel.add(url);
+ }
+ msgPanel.add(msg2);
+
+ final JCheckBox jcb = new JCheckBox(
+ MessageManager.getString("label.do_not_display_again"));
+ jcb.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ // update Cache settings for "don't show this again"
+ boolean showWarningAgain = !jcb.isSelected();
+ Cache.setProperty("CHECKURLLINKS",
+ Boolean.valueOf(showWarningAgain).toString());
+ }
+ });
+ msgPanel.add(jcb);
+
+ JvOptionPane.showMessageDialog(Desktop.desktop, msgPanel,
+ MessageManager
+ .getString("label.SEQUENCE_ID_no_longer_used"),
+ JvOptionPane.WARNING_MESSAGE);
+ }
+ }
+ });
+ }
+
+ /**
+ * Proxy class for JDesktopPane which optionally displays the current memory
+ * usage and highlights the desktop area with a red bar if free memory runs
+ * low.
+ *
+ * @author AMW
+ */
+ public class MyDesktopPane extends JDesktopPane implements Runnable
+ {
+
+ private static final float ONE_MB = 1048576f;
+
+ boolean showMemoryUsage = false;
+
+ Runtime runtime;
+
+ java.text.NumberFormat df;
+
+ float maxMemory, allocatedMemory, freeMemory, totalFreeMemory,
+ percentUsage;
+
+ public MyDesktopPane(boolean showMemoryUsage)
+ {
+ showMemoryUsage(showMemoryUsage);
+ }
+
+ public void showMemoryUsage(boolean showMemory)
+ {
+ this.showMemoryUsage = showMemory;
+ if (showMemory)