();
+ progressBars = new Hashtable<>();
+ progressBarHandlers = new Hashtable<>();
}
- if (progressBars.get(new Long(id)) != null)
+ if (progressBars.get(Long.valueOf(id)) != null)
{
- JPanel panel = progressBars.remove(new Long(id));
- if (progressBarHandlers.contains(new Long(id)))
+ JPanel panel = progressBars.remove(Long.valueOf(id));
+ if (progressBarHandlers.contains(Long.valueOf(id)))
{
- progressBarHandlers.remove(new Long(id));
+ progressBarHandlers.remove(Long.valueOf(id));
}
removeProgressPanel(panel);
}
else
{
- progressBars.put(new Long(id), addProgressPanel(message));
+ progressBars.put(Long.valueOf(id), addProgressPanel(message));
}
}
@@ -2515,18 +2830,18 @@ public class Desktop extends jalview.jbgui.GDesktop implements
* @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)))
+ || !progressBars.containsKey(Long.valueOf(id)))
{
- throw new Error(
- MessageManager
- .getString("error.call_setprogressbar_before_registering_handler"));
+ 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));
+ progressBarHandlers.put(Long.valueOf(id), handler);
+ final JPanel progressPanel = progressBars.get(Long.valueOf(id));
if (handler.canCancel())
{
JButton cancel = new JButton(
@@ -2535,13 +2850,14 @@ public class Desktop extends jalview.jbgui.GDesktop implements
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);
+ us.setProgressBar(MessageManager
+ .formatMessage("label.cancelled_params", new Object[]
+ { ((JLabel) progressPanel.getComponent(0)).getText() }),
+ id);
}
});
progressPanel.add(cancel, BorderLayout.EAST);
@@ -2574,7 +2890,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements
{
if (desktop != null)
{
- AlignmentPanel[] aps = getAlignmentPanels(viewport.getSequenceSetId());
+ AlignmentPanel[] aps = getAlignmentPanels(
+ viewport.getSequenceSetId());
for (int panel = 0; aps != null && panel < aps.length; panel++)
{
if (aps[panel] != null && aps[panel].av == viewport)
@@ -2588,7 +2905,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements
public VamsasApplication getVamsasApplication()
{
- return v_client;
+ // TODO: JAL-3311 remove remaining code from Jalview relating to VAMSAS
+ return null;
}
@@ -2617,13 +2935,36 @@ public class Desktop extends jalview.jbgui.GDesktop implements
this.inBatchMode = inBatchMode;
}
+ /**
+ * start service discovery and wait till it is done
+ */
public void startServiceDiscovery()
{
startServiceDiscovery(false);
}
+ /**
+ * start service discovery threads - blocking or non-blocking
+ *
+ * @param blocking
+ */
public void startServiceDiscovery(boolean blocking)
{
+ startServiceDiscovery(blocking, false);
+ }
+
+ /**
+ * start service discovery threads
+ *
+ * @param blocking
+ * - false means call returns immediately
+ * @param ignore_SHOW_JWS2_SERVICES_preference
+ * - when true JABA services are discovered regardless of user's JWS2
+ * discovery preference setting
+ */
+ public void startServiceDiscovery(boolean blocking,
+ boolean ignore_SHOW_JWS2_SERVICES_preference)
+ {
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
@@ -2641,15 +2982,11 @@ public class Desktop extends jalview.jbgui.GDesktop implements
(t0 = new Thread(discoverer)).start();
}
- if (Cache.getDefault("SHOW_JWS2_SERVICES", true))
+ if (ignore_SHOW_JWS2_SERVICES_preference
+ || Cache.getDefault("SHOW_JWS2_SERVICES", true))
{
- if (jalview.ws.jws2.Jws2Discoverer.getDiscoverer().isRunning())
- {
- jalview.ws.jws2.Jws2Discoverer.getDiscoverer().setAborted(true);
- }
- t2 = jalview.ws.jws2.Jws2Discoverer.getDiscoverer().startDiscoverer(
- changeSupport);
-
+ t2 = jalview.ws.jws2.Jws2Discoverer.getDiscoverer()
+ .startDiscoverer(changeSupport);
}
Thread t3 = null;
{
@@ -2665,8 +3002,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements
} catch (Exception e)
{
}
- alive = (t1 != null && t1.isAlive())
- || (t2 != null && t2.isAlive())
+ alive = (t1 != null && t1.isAlive()) || (t2 != null && t2.isAlive())
|| (t3 != null && t3.isAlive())
|| (t0 != null && t0.isAlive());
}
@@ -2693,47 +3029,39 @@ public class Desktop extends jalview.jbgui.GDesktop implements
// only run if we aren't already displaying one of these.
addDialogThread(serviceChangedDialog = new Runnable()
{
+ @Override
public void run()
{
/*
* JalviewDialog jd =new JalviewDialog() {
*
- * @Override protected void cancelPressed() { // TODO
- * Auto-generated method stub
+ * @Override protected void cancelPressed() { // TODO Auto-generated method stub
*
- * }@Override protected void okPressed() { // TODO
- * Auto-generated method stub
+ * }@Override protected void okPressed() { // TODO Auto-generated method stub
*
- * }@Override protected void raiseClosed() { // TODO
- * Auto-generated method stub
+ * }@Override protected void raiseClosed() { // TODO Auto-generated method stub
*
- * } }; jd.initDialogFrame(new
- * JLabel("" + ermsg +
+ * } }; jd.initDialogFrame(new JLabel("" +
+ * ermsg +
* " It may be that you have invalid JABA URLs in your web service preferences,"
* + " or mis-configured HTTP proxy settings. " +
- * "Check the Connections and Web services tab of the"
- * +
- * " Tools->Preferences dialog box to change them. | "
- * ), true, true, "Web Service Configuration Problem", 450,
- * 400);
+ * "Check the Connections and Web services tab of the" +
+ * " Tools->Preferences dialog box to change them. |
" ),
+ * true, true, "Web Service Configuration Problem", 450, 400);
*
* jd.waitForInput();
*/
- JOptionPane
- .showConfirmDialog(
- Desktop.desktop,
- new JLabel(
- ""
- + "It may be that you have invalid JABA URLs
in your web service preferences,"
- + "
or as a command-line argument, or mis-configured HTTP proxy settings.
"
- + "Check the Connections and Web services tab
of the"
- + " Tools->Preferences dialog box to change them.
"),
- "Web Service Configuration Problem",
- JOptionPane.DEFAULT_OPTION,
- JOptionPane.ERROR_MESSAGE);
+ JvOptionPane.showConfirmDialog(Desktop.desktop,
+ new JLabel(""
+ + "It may be that you have invalid JABA URLs
in your web service preferences,"
+ + "
or as a command-line argument, or mis-configured HTTP proxy settings.
"
+ + "Check the Connections and Web services tab
of the"
+ + " Tools->Preferences dialog box to change them.
"),
+ "Web Service Configuration Problem",
+ JvOptionPane.DEFAULT_OPTION,
+ JvOptionPane.ERROR_MESSAGE);
serviceChangedDialog = null;
}
@@ -2742,8 +3070,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements
}
else
{
- Cache.log
- .error("Errors reported by JABA discovery service. Check web services preferences.\n"
+ jalview.bin.Console.error(
+ "Errors reported by JABA discovery service. Check web services preferences.\n"
+ ermsg);
}
}
@@ -2761,7 +3089,16 @@ public class Desktop extends jalview.jbgui.GDesktop implements
*/
public static void showUrl(final String url)
{
- showUrl(url, Desktop.instance);
+ if (url != null && !url.trim().equals(""))
+ {
+ jalview.bin.Console.info("Opening URL: " + url);
+ showUrl(url, Desktop.instance);
+ }
+ else
+ {
+ jalview.bin.Console.warn("Ignoring attempt to show an empty URL.");
+ }
+
}
/**
@@ -2776,24 +3113,25 @@ public class Desktop extends jalview.jbgui.GDesktop implements
{
new Thread(new Runnable()
{
+ @Override
public void run()
{
try
{
if (progress != null)
{
- progress.setProgressBar(MessageManager.formatMessage(
- "status.opening_params", new Object[] { url }), this
- .hashCode());
+ progress.setProgressBar(MessageManager
+ .formatMessage("status.opening_params", new Object[]
+ { url }), this.hashCode());
}
jalview.util.BrowserLauncher.openURL(url);
} catch (Exception ex)
{
- JOptionPane.showInternalMessageDialog(Desktop.desktop,
+ JvOptionPane.showInternalMessageDialog(Desktop.desktop,
MessageManager
.getString("label.web_browser_not_found_unix"),
MessageManager.getString("label.web_browser_not_found"),
- JOptionPane.WARNING_MESSAGE);
+ JvOptionPane.WARNING_MESSAGE);
ex.printStackTrace();
}
@@ -2834,15 +3172,8 @@ public class Desktop extends jalview.jbgui.GDesktop implements
{
if (url != null)
{
- if (Cache.log != null)
- {
- Cache.log.error("Couldn't handle string " + url + " as a URL.");
- }
- else
- {
- System.err.println("Couldn't handle string " + url
- + " as a URL.");
- }
+ jalview.bin.Console
+ .error("Couldn't handle string " + url + " as a URL.");
}
// ignore any exceptions due to dud links.
}
@@ -2853,7 +3184,7 @@ public class Desktop extends jalview.jbgui.GDesktop implements
/**
* single thread that handles display of dialogs to user.
*/
- ExecutorService dialogExecutor = Executors.newSingleThreadExecutor();
+ ExecutorService dialogExecutor = Executors.newFixedThreadPool(3);
/**
* flag indicating if dialogExecutor should try to acquire a permit
@@ -2863,7 +3194,9 @@ public class Desktop extends jalview.jbgui.GDesktop implements
/**
* pause the queue
*/
- private java.util.concurrent.Semaphore block = new Semaphore(0);
+ private Semaphore block = new Semaphore(0);
+
+ private static groovy.console.ui.Console groovyConsole;
/**
* add another dialog thread to the queue
@@ -2874,17 +3207,12 @@ public class Desktop extends jalview.jbgui.GDesktop implements
{
dialogExecutor.submit(new Runnable()
{
+ @Override
public void run()
{
if (dialogPause)
{
- try
- {
- block.acquire();
- } catch (InterruptedException x)
- {
- }
- ;
+ acquireDialogQueue();
}
if (instance == null)
{
@@ -2895,41 +3223,91 @@ public class Desktop extends jalview.jbgui.GDesktop implements
SwingUtilities.invokeAndWait(prompter);
} catch (Exception q)
{
- Cache.log.warn("Unexpected Exception in dialog thread.", q);
+ jalview.bin.Console.warn("Unexpected Exception in dialog thread.",
+ q);
}
}
});
}
+ private boolean dialogQueueStarted = false;
+
public void startDialogQueue()
{
+ if (dialogQueueStarted)
+ {
+ return;
+ }
// set the flag so we don't pause waiting for another permit and semaphore
// the current task to begin
- dialogPause = false;
+ releaseDialogQueue();
+ dialogQueueStarted = true;
+ }
+
+ public void acquireDialogQueue()
+ {
+ try
+ {
+ block.acquire();
+ dialogPause = true;
+ } catch (InterruptedException e)
+ {
+ jalview.bin.Console.debug("Interruption when acquiring DialogueQueue",
+ e);
+ }
+ }
+
+ public void releaseDialogQueue()
+ {
+ if (!dialogPause)
+ {
+ return;
+ }
block.release();
+ dialogPause = false;
}
+ /**
+ * Outputs an image of the desktop to file in EPS format, after prompting the
+ * user for choice of Text or Lineart character rendering (unless a preference
+ * has been set). The file name is generated as
+ *
+ *
+ * Jalview_snapshot_nnnnn.eps where nnnnn is the current timestamp in milliseconds
+ *
+ */
@Override
protected void snapShotWindow_actionPerformed(ActionEvent e)
{
+ // currently the menu option to do this is not shown
invalidate();
- File of;
- ImageMaker im = new jalview.util.ImageMaker(this, ImageMaker.TYPE.EPS,
- "View of Desktop", getWidth(), getHeight(), of = new File(
- "Jalview_snapshot" + System.currentTimeMillis()
- + ".eps"), "View of desktop");
+
+ int width = getWidth();
+ int height = getHeight();
+ File of = new File(
+ "Jalview_snapshot_" + System.currentTimeMillis() + ".eps");
+ ImageWriterI writer = new ImageWriterI()
+ {
+ @Override
+ public void exportImage(Graphics g) throws Exception
+ {
+ paintAll(g);
+ jalview.bin.Console.info("Successfully written snapshot to file "
+ + of.getAbsolutePath());
+ }
+ };
+ String title = "View of desktop";
+ ImageExporter exporter = new ImageExporter(writer, null, TYPE.EPS,
+ title);
try
{
- paintAll(im.getGraphics());
- im.writeImage();
- } catch (Exception q)
+ exporter.doExport(of, this, width, height, title);
+ } catch (ImageOutputException ioex)
{
- Cache.log.error("Couldn't write snapshot to " + of.getAbsolutePath(),
- q);
- return;
+ jalview.bin.Console.error(
+ "Unexpected error whilst writing Jalview desktop snapshot as EPS",
+ ioex);
}
- Cache.log.info("Successfully written snapshot to file "
- + of.getAbsolutePath());
}
/**
@@ -2956,42 +3334,55 @@ public class Desktop extends jalview.jbgui.GDesktop implements
}
/*
- * Processing in reverse order works, forwards order leaves the first panels
- * not visible. I don't know why!
+ * Processing in reverse order works, forwards order leaves the first panels not
+ * visible. I don't know why!
*/
for (int i = viewCount - 1; i >= 0; i--)
{
/*
- * Make new top and bottom frames. These take over the respective
- * AlignmentPanel objects, including their AlignmentViewports, so the
- * cdna/protein relationships between the viewports is carried over to the
- * new split frames.
+ * Make new top and bottom frames. These take over the respective AlignmentPanel
+ * objects, including their AlignmentViewports, so the cdna/protein
+ * relationships between the viewports is carried over to the new split frames.
+ *
+ * explodedGeometry holds the (x, y) position of the previously exploded
+ * SplitFrame, and the (width, height) of the AlignFrame component
*/
AlignmentPanel topPanel = (AlignmentPanel) topPanels.get(i);
AlignFrame newTopFrame = new AlignFrame(topPanel);
newTopFrame.setSize(oldTopFrame.getSize());
newTopFrame.setVisible(true);
+ Rectangle geometry = ((AlignViewport) topPanel.getAlignViewport())
+ .getExplodedGeometry();
+ if (geometry != null)
+ {
+ newTopFrame.setSize(geometry.getSize());
+ }
+
AlignmentPanel bottomPanel = (AlignmentPanel) bottomPanels.get(i);
AlignFrame newBottomFrame = new AlignFrame(bottomPanel);
newBottomFrame.setSize(oldBottomFrame.getSize());
newBottomFrame.setVisible(true);
+ geometry = ((AlignViewport) bottomPanel.getAlignViewport())
+ .getExplodedGeometry();
+ if (geometry != null)
+ {
+ newBottomFrame.setSize(geometry.getSize());
+ }
+
topPanel.av.setGatherViewsHere(false);
bottomPanel.av.setGatherViewsHere(false);
JInternalFrame splitFrame = new SplitFrame(newTopFrame,
newBottomFrame);
- // either panel may hold previous exploded frame geometry
- Rectangle geometry = ((AlignViewport) topPanel.getAlignViewport())
- .getExplodedGeometry();
if (geometry != null)
{
- splitFrame.setBounds(geometry);
+ splitFrame.setLocation(geometry.getLocation());
}
Desktop.addInternalFrame(splitFrame, sf.getTitle(), -1, -1);
}
/*
- * Clear references to the panels (now relocated in the new SplitFrames)
- * before closing the old SplitFrame.
+ * Clear references to the panels (now relocated in the new SplitFrames) before
+ * closing the old SplitFrame.
*/
topPanels.clear();
bottomPanels.clear();
@@ -3007,10 +3398,18 @@ public class Desktop extends jalview.jbgui.GDesktop implements
*/
public void gatherViews(GSplitFrame source)
{
+ /*
+ * special handling of explodedGeometry for a view within a SplitFrame: - it
+ * holds the (x, y) position of the enclosing SplitFrame, and the (width,
+ * height) of the AlignFrame component
+ */
AlignFrame myTopFrame = (AlignFrame) source.getTopFrame();
AlignFrame myBottomFrame = (AlignFrame) source.getBottomFrame();
- myTopFrame.viewport.setExplodedGeometry(source.getBounds());
- myBottomFrame.viewport.setExplodedGeometry(source.getBounds());
+ myTopFrame.viewport.setExplodedGeometry(new Rectangle(source.getX(),
+ source.getY(), myTopFrame.getWidth(), myTopFrame.getHeight()));
+ myBottomFrame.viewport
+ .setExplodedGeometry(new Rectangle(source.getX(), source.getY(),
+ myBottomFrame.getWidth(), myBottomFrame.getHeight()));
myTopFrame.viewport.setGatherViewsHere(true);
myBottomFrame.viewport.setGatherViewsHere(true);
String topViewId = myTopFrame.viewport.getSequenceSetId();
@@ -3035,10 +3434,10 @@ public class Desktop extends jalview.jbgui.GDesktop implements
gatherThis = true;
topPanel.av.setGatherViewsHere(false);
bottomPanel.av.setGatherViewsHere(false);
- // both panels refer to the same split frame geometry
- Rectangle position = sf.getBounds();
- topPanel.av.setExplodedGeometry(position);
- bottomPanel.av.setExplodedGeometry(position);
+ topPanel.av.setExplodedGeometry(
+ new Rectangle(sf.getLocation(), topFrame.getSize()));
+ bottomPanel.av.setExplodedGeometry(
+ new Rectangle(sf.getLocation(), bottomFrame.getSize()));
myTopFrame.addAlignmentPanel(topPanel, false);
myBottomFrame.addAlignmentPanel(bottomPanel, false);
}
@@ -3057,17 +3456,474 @@ public class Desktop extends jalview.jbgui.GDesktop implements
* The dust settles...give focus to the tab we did this from.
*/
myTopFrame.setDisplayedView(myTopFrame.alignPanel);
+ }
+
+ public static groovy.console.ui.Console getGroovyConsole()
+ {
+ return groovyConsole;
+ }
+
+ /**
+ * handles the payload of a drag and drop event.
+ *
+ * TODO refactor to desktop utilities class
+ *
+ * @param files
+ * - Data source strings extracted from the drop event
+ * @param protocols
+ * - protocol for each data source extracted from the drop event
+ * @param evt
+ * - the drop event
+ * @param t
+ * - the payload from the drop event
+ * @throws Exception
+ */
+ public static void transferFromDropTarget(List