+ }
+ if (avp.size() == 0)
+ {
+ return null;
+ }
+ GStructureViewer afs[] = avp.toArray(new GStructureViewer[avp.size()]);
+ return afs;
+ }
+
+ /**
+ * Add Groovy Support to Jalview
+ */
+ @Override
+ public void groovyShell_actionPerformed()
+ {
+ try
+ {
+ openGroovyConsole();
+ } catch (Exception ex)
+ {
+ jalview.bin.Cache.log.error("Groovy Shell Creation failed.", ex);
+ JvOptionPane.showInternalMessageDialog(Desktop.desktop,
+
+ MessageManager.getString("label.couldnt_create_groovy_shell"),
+ MessageManager.getString("label.groovy_support_failed"),
+ JvOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ /**
+ * Open the Groovy console
+ */
+ void openGroovyConsole()
+ {
+ if (groovyConsole == null)
+ {
+ groovyConsole = new groovy.ui.Console();
+ groovyConsole.setVariable("Jalview", this);
+ groovyConsole.run();
+
+ /*
+ * We allow only one console at a time, so that AlignFrame menu option
+ * 'Calculate | Run Groovy script' is unambiguous.
+ * Disable 'Groovy Console', and enable 'Run script', when the console is
+ * opened, and the reverse when it is closed
+ */
+ Window window = (Window) groovyConsole.getFrame();
+ window.addWindowListener(new WindowAdapter()
+ {
+ @Override
+ public void windowClosed(WindowEvent e)
+ {
+ /*
+ * rebind CMD-Q from Groovy Console to Jalview Quit
+ */
+ addQuitHandler();
+ enableExecuteGroovy(false);
+ }
+ });
+ }
+
+ /*
+ * show Groovy console window (after close and reopen)
+ */
+ ((Window) groovyConsole.getFrame()).setVisible(true);
+
+ /*
+ * if we got this far, enable 'Run Groovy' in AlignFrame menus
+ * and disable opening a second console
+ */
+ enableExecuteGroovy(true);
+ }
+
+ /**
+ * Bind Ctrl/Cmd-Q to Quit - for reset as Groovy Console takes over this
+ * binding when opened
+ */
+ protected void addQuitHandler()
+ {
+ getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
+ KeyStroke.getKeyStroke(KeyEvent.VK_Q, Toolkit
+ .getDefaultToolkit().getMenuShortcutKeyMask()), "Quit");
+ getRootPane().getActionMap().put("Quit", new AbstractAction()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ quit();
+ }
+ });
+ }
+
+ /**
+ * Enable or disable 'Run Groovy script' in AlignFrame calculate menus
+ *
+ * @param enabled
+ * true if Groovy console is open
+ */
+ public void enableExecuteGroovy(boolean enabled)
+ {
+ /*
+ * disable opening a second Groovy console
+ * (or re-enable when the console is closed)
+ */
+ groovyShell.setEnabled(!enabled);
+
+ AlignFrame[] alignFrames = getAlignFrames();
+ if (alignFrames != null)
+ {
+ for (AlignFrame af : alignFrames)
+ {
+ af.setGroovyEnabled(enabled);
+ }
+ }
+ }
+
+ /**
+ * Progress bars managed by the IProgressIndicator method.
+ */
+ private Hashtable<Long, JPanel> progressBars;
+
+ private Hashtable<Long, IProgressIndicatorHandler> progressBarHandlers;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see jalview.gui.IProgressIndicator#setProgressBar(java.lang.String, long)
+ */
+ @Override
+ public void setProgressBar(String message, long id)
+ {
+ if (progressBars == null)
+ {
+ progressBars = new Hashtable<Long, JPanel>();
+ progressBarHandlers = new Hashtable<Long, IProgressIndicatorHandler>();
+ }
+
+ if (progressBars.get(new Long(id)) != null)
+ {
+ JPanel panel = progressBars.remove(new Long(id));
+ if (progressBarHandlers.contains(new Long(id)))
+ {
+ progressBarHandlers.remove(new Long(id));
+ }
+ removeProgressPanel(panel);
+ }
+ else
+ {
+ progressBars.put(new Long(id), addProgressPanel(message));
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see jalview.gui.IProgressIndicator#registerHandler(long,
+ * jalview.gui.IProgressIndicatorHandler)
+ */
+ @Override
+ public void registerHandler(final long id,
+ final IProgressIndicatorHandler handler)
+ {
+ if (progressBarHandlers == null
+ || !progressBars.containsKey(new Long(id)))
+ {
+ throw new Error(
+ MessageManager
+ .getString("error.call_setprogressbar_before_registering_handler"));
+ }
+ progressBarHandlers.put(new Long(id), handler);
+ final JPanel progressPanel = progressBars.get(new Long(id));
+ if (handler.canCancel())
+ {
+ JButton cancel = new JButton(
+ MessageManager.getString("action.cancel"));
+ final IProgressIndicator us = this;
+ cancel.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ handler.cancelActivity(id);
+ us.setProgressBar(MessageManager.formatMessage(
+ "label.cancelled_params",
+ new Object[] { ((JLabel) progressPanel.getComponent(0))
+ .getText() }), id);
+ }
+ });
+ progressPanel.add(cancel, BorderLayout.EAST);
+ }
+ }
+
+ /**
+ *
+ * @return true if any progress bars are still active
+ */
+ @Override
+ public boolean operationInProgress()
+ {
+ if (progressBars != null && progressBars.size() > 0)
+ {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * This will return the first AlignFrame holding the given viewport instance.
+ * It will break if there are more than one AlignFrames viewing a particular
+ * av.
+ *
+ * @param viewport
+ * @return alignFrame for viewport
+ */
+ public static AlignFrame getAlignFrameFor(AlignViewportI viewport)
+ {
+ if (desktop != null)
+ {
+ AlignmentPanel[] aps = getAlignmentPanels(viewport.getSequenceSetId());
+ for (int panel = 0; aps != null && panel < aps.length; panel++)
+ {
+ if (aps[panel] != null && aps[panel].av == viewport)
+ {
+ return aps[panel].alignFrame;
+ }
+ }
+ }
+ return null;
+ }
+
+ public VamsasApplication getVamsasApplication()
+ {
+ return v_client;
+
+ }
+
+ /**
+ * flag set if jalview GUI is being operated programmatically
+ */
+ private boolean inBatchMode = false;
+
+ /**
+ * check if jalview GUI is being operated programmatically
+ *
+ * @return inBatchMode
+ */
+ public boolean isInBatchMode()
+ {
+ return inBatchMode;
+ }
+
+ /**
+ * set flag if jalview GUI is being operated programmatically
+ *
+ * @param inBatchMode
+ */
+ public void setInBatchMode(boolean inBatchMode)
+ {
+ this.inBatchMode = inBatchMode;
+ }
+
+ public void startServiceDiscovery()
+ {
+ startServiceDiscovery(false);
+ }
+
+ public void startServiceDiscovery(boolean blocking)
+ {
+ boolean alive = true;
+ Thread t0 = null, t1 = null, t2 = null;
+ // JAL-940 - JALVIEW 1 services are now being EOLed as of JABA 2.1 release
+ if (true)
+ {
+ // todo: changesupport handlers need to be transferred
+ if (discoverer == null)
+ {
+ discoverer = new jalview.ws.jws1.Discoverer();
+ // register PCS handler for desktop.
+ discoverer.addPropertyChangeListener(changeSupport);
+ }
+ // JAL-940 - disabled JWS1 service configuration - always start discoverer
+ // until we phase out completely
+ (t0 = new Thread(discoverer)).start();
+ }
+
+ if (Cache.getDefault("SHOW_JWS2_SERVICES", true))
+ {
+ t2 = jalview.ws.jws2.Jws2Discoverer.getDiscoverer().startDiscoverer(
+ changeSupport);
+ }
+ Thread t3 = null;
+ {
+ // TODO: do rest service discovery
+ }
+ if (blocking)
+ {
+ while (alive)