JAL-1953 2.11.2 with Archeopteryx!
[jalview.git] / src / jalview / gui / WebserviceInfo.java
index a0191a5..7a5d693 100644 (file)
  */
 package jalview.gui;
 
-import jalview.jbgui.GWebserviceInfo;
-import jalview.util.MessageManager;
-import jalview.ws.WSClientI;
+import java.util.Locale;
 
 import java.awt.BorderLayout;
 import java.awt.Color;
-import java.awt.Font;
+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;
@@ -45,9 +44,16 @@ import javax.swing.JTabbedPane;
 import javax.swing.JTextArea;
 import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkListener;
+import javax.swing.event.InternalFrameAdapter;
+import javax.swing.event.InternalFrameEvent;
 import javax.swing.text.html.HTMLEditorKit;
 import javax.swing.text.html.StyleSheet;
 
+import jalview.jbgui.GWebserviceInfo;
+import jalview.util.ChannelProperties;
+import jalview.util.MessageManager;
+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
@@ -81,7 +87,7 @@ public class WebserviceInfo extends GWebserviceInfo
 
   Image image;
 
-  int angle = 0;
+  float angle = 0f;
 
   String title = "";
 
@@ -98,7 +104,7 @@ public class WebserviceInfo extends GWebserviceInfo
   {
     super.setVisible(aFlag);
     frame.setVisible(aFlag);
-  };
+  }
 
   JTabbedPane subjobs = null;
 
@@ -327,9 +333,7 @@ public class WebserviceInfo extends GWebserviceInfo
     this.title = title;
     setInfoText(info);
 
-    java.net.URL url = getClass()
-            .getResource("/images/Jalview_Logo_small.png");
-    image = java.awt.Toolkit.getDefaultToolkit().createImage(url);
+    image = ChannelProperties.getImage("rotatable_logo.48");
 
     MediaTracker mt = new MediaTracker(this);
     mt.addImage(image, 0);
@@ -342,26 +346,27 @@ public class WebserviceInfo extends GWebserviceInfo
     }
 
     AnimatedPanel ap = new AnimatedPanel();
-    titlePanel.add(ap, BorderLayout.CENTER);
+    ap.setPreferredSize(new Dimension(60, 60));
+    titlePanel.add(ap, BorderLayout.WEST);
+    titlePanel.add(titleText, BorderLayout.CENTER);
+    setStatus(currentStatus);
 
     Thread thread = new Thread(ap, "AnimatedPanel");
     thread.start();
     final WebserviceInfo thisinfo = this;
-    frame.addInternalFrameListener(
-            new javax.swing.event.InternalFrameAdapter()
-            {
-              @Override
-              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();
-                }
-              };
-            });
+    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();
 
   }
@@ -375,6 +380,36 @@ public class WebserviceInfo extends GWebserviceInfo
   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();
   }
 
   /**
@@ -512,7 +547,7 @@ public class WebserviceInfo extends GWebserviceInfo
     {
       return null;
     }
-    String lowertxt = text.toLowerCase();
+    String lowertxt = text.toLowerCase(Locale.ROOT);
     int htmlpos = leaveFirst ? -1 : lowertxt.indexOf("<body");
 
     int htmlend = leaveLast ? -1 : lowertxt.indexOf("</body");
@@ -541,7 +576,7 @@ public class WebserviceInfo extends GWebserviceInfo
     {
       return "";
     }
-    String lowertxt = text.toLowerCase();
+    String lowertxt = text.toLowerCase(Locale.ROOT);
     int htmlpos = lowertxt.indexOf("<body");
     int htmlend = lowertxt.indexOf("</body");
     int doctype = lowertxt.indexOf("<!doctype");
@@ -763,20 +798,33 @@ public class WebserviceInfo extends GWebserviceInfo
     {
       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;
           }
 
@@ -789,82 +837,62 @@ public class WebserviceInfo extends GWebserviceInfo
       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(" - ").concat(
-                        MessageManager.getString("label.state_queueing")),
-                60, 30);
-
-        break;
-
-      case STATE_RUNNING:
-        g.drawString(
-                title.concat(" - ").concat(
-                        MessageManager.getString("label.state_running")),
-                60, 30);
-
-        break;
-
-      case STATE_STOPPED_OK:
-        g.drawString(
-                title.concat(" - ").concat(
-                        MessageManager.getString("label.state_completed")),
-                60, 30);
-
-        break;
-
-      case STATE_CANCELLED_OK:
-        g.drawString(
-                title.concat(" - ")
-                        .concat(MessageManager
-                                .getString("label.state_job_cancelled")),
-                60, 30);
-
-        break;
-
-      case STATE_STOPPED_ERROR:
-        g.drawString(
-                title.concat(" - ").concat(
-                        MessageManager.getString("label.state_job_error")),
-                60, 30);
-
-        break;
-
-      case STATE_STOPPED_SERVERERROR:
-        g.drawString(
-                title.concat(" - ")
-                        .concat(MessageManager
-                                .getString("label.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);
+        g.rotate(3.14159 / 180 * (angle), x, y);
+        g.drawImage(image, 0, 0, this);
+        g.rotate(-3.14159 / 180 * (angle), x, y);
       }
     }