X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FWebserviceInfo.java;h=b9b42dcfb2e1a3c638e7c9505c338f828fd47db6;hb=0751c58086542f9e0466201b624f84d1efd547bb;hp=6696a3a4bc6324c424ac77ce4cfb9647a3bba006;hpb=7daa9e81a5e0c71271c1b135ff47cfa7bd367635;p=jalview.git
diff --git a/src/jalview/gui/WebserviceInfo.java b/src/jalview/gui/WebserviceInfo.java
old mode 100755
new mode 100644
index 6696a3a..b9b42dc
--- a/src/jalview/gui/WebserviceInfo.java
+++ b/src/jalview/gui/WebserviceInfo.java
@@ -1,38 +1,57 @@
/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
- * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- *
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
* Jalview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License along with Jalview. If not, see .
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.gui;
-import java.util.*;
+import jalview.jbgui.GWebserviceInfo;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+import jalview.ws.WSClientI;
-import java.awt.*;
-import java.awt.event.*;
-import java.awt.image.*;
-import javax.swing.*;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GridLayout;
+import java.awt.Image;
+import java.awt.MediaTracker;
+import java.awt.RenderingHints;
+import java.awt.event.ActionEvent;
+import java.awt.image.BufferedImage;
+import java.util.Vector;
+
+import javax.swing.JComponent;
+import javax.swing.JEditorPane;
+import javax.swing.JInternalFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextArea;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
-import javax.swing.event.HyperlinkEvent.EventType;
+import javax.swing.event.InternalFrameAdapter;
+import javax.swing.event.InternalFrameEvent;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.StyleSheet;
-import jalview.bin.Cache;
-import jalview.jbgui.*;
-import jalview.ws.WSClientI;
-
/**
* Base class for web service client thread and gui TODO: create StAX parser to
* extract html body content reliably when preparing html formatted job statuses
@@ -40,8 +59,8 @@ import jalview.ws.WSClientI;
* @author $author$
* @version $Revision$
*/
-public class WebserviceInfo extends GWebserviceInfo implements
- HyperlinkListener
+public class WebserviceInfo extends GWebserviceInfo
+ implements HyperlinkListener, IProgressIndicator
{
/** Job is Queued */
@@ -66,7 +85,7 @@ public class WebserviceInfo extends GWebserviceInfo implements
Image image;
- int angle = 0;
+ float angle = 0f;
String title = "";
@@ -76,6 +95,15 @@ public class WebserviceInfo extends GWebserviceInfo implements
JInternalFrame frame;
+ private IProgressIndicator progressBar;
+
+ @Override
+ public void setVisible(boolean aFlag)
+ {
+ super.setVisible(aFlag);
+ frame.setVisible(aFlag);
+ }
+
JTabbedPane subjobs = null;
java.util.Vector jobPanes = null;
@@ -208,10 +236,13 @@ public class WebserviceInfo extends GWebserviceInfo implements
* short name and job type
* @param info
* reference or other human readable description
+ * @param makeVisible
+ * true to display the webservices window immediatly (otherwise need
+ * to call setVisible(true))
*/
- public WebserviceInfo(String title, String info)
+ public WebserviceInfo(String title, String info, boolean makeVisible)
{
- init(title, info, 520, 500);
+ init(title, info, 520, 500, makeVisible);
}
/**
@@ -226,9 +257,11 @@ public class WebserviceInfo extends GWebserviceInfo implements
* @param height
* DOCUMENT ME!
*/
- public WebserviceInfo(String title, String info, int width, int height)
+ public WebserviceInfo(String title, String info, int width, int height,
+ boolean makeVisible)
{
- init(title, info, width, height);
+ // no references
+ init(title, info, width, height, makeVisible);
}
/**
@@ -286,17 +319,21 @@ public class WebserviceInfo extends GWebserviceInfo implements
* @param height
* DOCUMENT ME!
*/
- void init(String title, String info, int width, int height)
+ void init(String title, String info, int width, int height,
+ boolean makeVisible)
{
frame = new JInternalFrame();
frame.setContentPane(this);
- Desktop.addInternalFrame(frame, title, width, height);
+ Desktop.addInternalFrame(frame, title, makeVisible, width, height, Desktop.FRAME_ALLOW_RESIZE, Desktop.FRAME_SET_MIN_SIZE_300);
frame.setClosable(false);
+ progressBar = new ProgressBar(statusPanel, statusBar);
+
this.title = title;
setInfoText(info);
- java.net.URL url = getClass().getResource("/images/logo_v2_square.jpg");
+ java.net.URL url = getClass()
+ .getResource("/images/Jalview_Logo_small_with_border.png");
image = java.awt.Toolkit.getDefaultToolkit().createImage(url);
MediaTracker mt = new MediaTracker(this);
@@ -310,24 +347,31 @@ public class WebserviceInfo extends GWebserviceInfo implements
}
AnimatedPanel ap = new AnimatedPanel();
- titlePanel.add(ap, BorderLayout.CENTER);
-
- Thread thread = new Thread(ap);
- thread.start();
- final WebserviceInfo thisinfo = this;
- frame.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
+ ap.setPreferredSize(new Dimension(60, 60));
+ titlePanel.add(ap, BorderLayout.WEST);
+ titlePanel.add(titleText, BorderLayout.CENTER);
+ setStatus(currentStatus);
+ if (!Platform.isJS())
{
- public void internalFrameClosed(
- javax.swing.event.InternalFrameEvent evt)
- {
- // System.out.println("Shutting down webservice client");
- WSClientI service = thisinfo.getthisService();
- if (service != null && service.isCancellable())
- {
- service.cancelJob();
- }
- };
- });
+ // No animation for the moment//
+ Thread thread = new Thread(ap);
+ thread.start();
+ }
+ final WebserviceInfo thisinfo = this;
+ frame.addInternalFrameListener(
+ new InternalFrameAdapter()
+ {
+ @Override
+ public void internalFrameClosed(InternalFrameEvent evt)
+ {
+ // System.out.println("Shutting down webservice client");
+ WSClientI service = thisinfo.getthisService();
+ if (service != null && service.isCancellable())
+ {
+ service.cancelJob();
+ }
+ }
+ });
frame.validate();
}
@@ -341,6 +385,36 @@ public class WebserviceInfo extends GWebserviceInfo implements
public void setStatus(int status)
{
currentStatus = status;
+
+ String message = null;
+ switch (currentStatus)
+ {
+ case STATE_QUEUING:
+ message = MessageManager.getString("label.state_queueing");
+ break;
+
+ case STATE_RUNNING:
+ message = MessageManager.getString("label.state_running");
+ break;
+
+ case STATE_STOPPED_OK:
+ message = MessageManager.getString("label.state_completed");
+ break;
+
+ case STATE_CANCELLED_OK:
+ message = MessageManager.getString("label.state_job_cancelled");
+ break;
+
+ case STATE_STOPPED_ERROR:
+ message = MessageManager.getString("label.state_job_error");
+ break;
+
+ case STATE_STOPPED_SERVERERROR:
+ message = MessageManager.getString("label.server_error_try_later");
+ break;
+ }
+ titleText.setText(title + (message == null ? "" : " - " + message));
+ titleText.repaint();
}
/**
@@ -353,8 +427,9 @@ public class WebserviceInfo extends GWebserviceInfo implements
{
if (jobpane < 0 || jobpane >= jobPanes.size())
{
- throw new Error("setStatus called for non-existent job pane."
- + jobpane);
+ throw new Error(MessageManager.formatMessage(
+ "error.setstatus_called_non_existent_job_pane", new String[]
+ { Integer.valueOf(jobpane).toString() }));
}
switch (status)
{
@@ -481,8 +556,8 @@ public class WebserviceInfo extends GWebserviceInfo implements
int htmlpos = leaveFirst ? -1 : lowertxt.indexOf("
", htmlpos), htmlende = lowertxt
- .indexOf(">", htmlend);
+ int htmlpose = lowertxt.indexOf(">", htmlpos),
+ htmlende = lowertxt.indexOf(">", htmlend);
if (htmlend == -1 && htmlpos == -1)
{
return text;
@@ -529,8 +604,8 @@ public class WebserviceInfo extends GWebserviceInfo implements
}
if (text.indexOf(" -1)
{
- System.err.println("HTML COntent: \n" + text
- + "<< END HTML CONTENT\n");
+ System.err
+ .println("HTML COntent: \n" + text + "<< END HTML CONTENT\n");
}
return text;
@@ -552,11 +627,12 @@ public class WebserviceInfo extends GWebserviceInfo implements
{
String txt = getHtmlFragment(
((JEditorPane) ((JScrollPane) jobPanes.get(which))
- .getViewport().getComponent(0)).getText(), true,
- false);
+ .getViewport().getComponent(0)).getText(),
+ true, false);
((JEditorPane) ((JScrollPane) jobPanes.get(which)).getViewport()
- .getComponent(0)).setText(ensureHtmlTagged(txt
- + getHtmlFragment(text, false, true)));
+ .getComponent(0))
+ .setText(ensureHtmlTagged(
+ txt + getHtmlFragment(text, false, true)));
}
else
{
@@ -640,6 +716,7 @@ public class WebserviceInfo extends GWebserviceInfo implements
* @param e
* DOCUMENT ME!
*/
+ @Override
protected void cancel_actionPerformed(ActionEvent e)
{
if (!serviceIsCancellable)
@@ -648,8 +725,10 @@ public class WebserviceInfo extends GWebserviceInfo implements
// anyhow - it has to stop threads and clean up
// JBPNote : TODO: Instead of a warning, we should have an optional 'Are
// you sure?' prompt
- warnUser("This job cannot be cancelled.\nJust close the window.",
- "Cancel job");
+ warnUser(
+ MessageManager.getString(
+ "warn.job_cannot_be_cancelled_close_window"),
+ MessageManager.getString("action.cancel_job"));
}
else
{
@@ -669,10 +748,11 @@ public class WebserviceInfo extends GWebserviceInfo implements
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
+ @Override
public void run()
{
- JOptionPane.showInternalMessageDialog(Desktop.desktop, message,
- title, JOptionPane.WARNING_MESSAGE);
+ JvOptionPane.showInternalMessageDialog(Desktop.getDesktopPane(), message,
+ title, JvOptionPane.WARNING_MESSAGE);
}
});
@@ -718,23 +798,38 @@ public class WebserviceInfo extends GWebserviceInfo implements
BufferedImage offscreen;
+ @Override
public void run()
{
startTime = System.currentTimeMillis();
+ float invSpeed = 15f;
+ float factor = 1f;
while (currentStatus < STATE_STOPPED_OK)
{
+ if (currentStatus == STATE_QUEUING)
+ {
+ invSpeed = 25f;
+ factor = 1f;
+ }
+ else if (currentStatus == STATE_RUNNING)
+ {
+ invSpeed = 10f;
+ factor = (float) (0.5 + 1.5
+ * (0.5 - (0.5 * Math.sin(3.14159 / 180 * (angle + 45)))));
+ }
try
{
Thread.sleep(50);
- int units = (int) ((System.currentTimeMillis() - startTime) / 10f);
- angle += units;
+ float delta = (System.currentTimeMillis() - startTime) / invSpeed;
+ angle += delta * factor;
angle %= 360;
startTime = System.currentTimeMillis();
if (currentStatus >= STATE_STOPPED_OK)
{
+ park();
angle = 0;
}
@@ -747,66 +842,67 @@ public class WebserviceInfo extends GWebserviceInfo implements
cancel.setEnabled(false);
}
+ public void park()
+ {
+ startTime = System.currentTimeMillis();
+
+ while (angle < 360)
+ {
+ float invSpeed = 5f;
+ float factor = 1f;
+ try
+ {
+ Thread.sleep(25);
+
+ float delta = (System.currentTimeMillis() - startTime) / invSpeed;
+ angle += delta * factor;
+ startTime = System.currentTimeMillis();
+
+ if (angle >= 360)
+ {
+ angle = 360;
+ }
+
+ repaint();
+ } catch (Exception ex)
+ {
+ }
+ }
+
+ }
+
void drawPanel()
{
if (offscreen == null || offscreen.getWidth(this) != getWidth()
|| offscreen.getHeight(this) != getHeight())
{
offscreen = new BufferedImage(getWidth(), getHeight(),
- BufferedImage.TYPE_INT_ARGB);
+ BufferedImage.TYPE_INT_RGB);
}
Graphics2D g = (Graphics2D) offscreen.getGraphics();
+ g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_ON);
+ g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
+ RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+ g.setRenderingHint(RenderingHints.KEY_RENDERING,
+ RenderingHints.VALUE_RENDER_QUALITY);
+
g.setColor(Color.white);
g.fillRect(0, 0, getWidth(), getHeight());
- g.setFont(new Font("Arial", Font.BOLD, 12));
- g.setColor(Color.black);
-
- switch (currentStatus)
- {
- case STATE_QUEUING:
- g.drawString(title.concat(" - queuing"), 60, 30);
-
- break;
-
- case STATE_RUNNING:
- g.drawString(title.concat(" - running"), 60, 30);
-
- break;
-
- case STATE_STOPPED_OK:
- g.drawString(title.concat(" - complete"), 60, 30);
-
- break;
-
- case STATE_CANCELLED_OK:
- g.drawString(title.concat(" - job cancelled!"), 60, 30);
-
- break;
-
- case STATE_STOPPED_ERROR:
- g.drawString(title.concat(" - job error!"), 60, 30);
-
- break;
-
- case STATE_STOPPED_SERVERERROR:
- g.drawString(title.concat(" - Server Error! (try later)"), 60, 30);
-
- break;
- }
-
if (image != null)
{
- int x=image.getWidth(this)/2,y=image.getHeight(this)/2;
- g.rotate(Math.toRadians(angle), 10+x, 10+y);
- g.drawImage(image, 10, 10, this);
- g.rotate(-Math.toRadians(angle), 10+x, 10+y);
+ int x = image.getWidth(this) / 2, y = image.getHeight(this) / 2;
+ g.rotate(3.14159 / 180 * (angle), x, y);
+ g.drawImage(image, 0, 0, this);
+ g.rotate(-3.14159 / 180 * (angle), x, y);
}
}
- public void paintComponent(Graphics g1)
+ @Override
+ public void paintComponent(Graphics g1)
{
drawPanel();
@@ -821,8 +917,43 @@ public class WebserviceInfo extends GWebserviceInfo implements
renderAsHtml = b;
}
- public void hyperlinkUpdate(HyperlinkEvent e)
+ @Override
+public void hyperlinkUpdate(HyperlinkEvent e)
{
Desktop.hyperlinkUpdate(e);
}
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see jalview.gui.IProgressIndicator#setProgressBar(java.lang.String, long)
+ */
+ @Override
+ public void setProgressBar(String message, long id)
+ {
+ progressBar.setProgressBar(message, id);
+ }
+
+ @Override
+ public void removeProgressBar(long id)
+ {
+ progressBar.removeProgressBar(id);
+ }
+
+ @Override
+ public void registerHandler(final long id,
+ final IProgressIndicatorHandler handler)
+ {
+ progressBar.registerHandler(id, handler);
+ }
+
+ /**
+ *
+ * @return true if any progress bars are still active
+ */
+ @Override
+ public boolean operationInProgress()
+ {
+ return progressBar.operationInProgress();
+ }
}