JAL-2790 provide a cancel button for JABAWS and AACon jobs
[jalview.git] / src / jalview / ws / jws2 / AbstractJabaCalcWorker.java
index c691fee..5961fc3 100644 (file)
@@ -30,6 +30,7 @@ import jalview.datamodel.AnnotatedCollectionI;
 import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
 import jalview.gui.IProgressIndicator;
+import jalview.gui.IProgressIndicatorHandler;
 import jalview.schemes.ResidueProperties;
 import jalview.workers.AlignCalcWorker;
 import jalview.ws.jws2.dm.AAConSettings;
@@ -66,7 +67,7 @@ public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
   /**
    * by default, we filter out non-standard residues before submission
    */
-  private boolean filterNonStandardResidues = true;
+  protected boolean filterNonStandardResidues = true;
 
   /**
    * Recover any existing parameters for this service
@@ -78,8 +79,10 @@ public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
       ((jalview.gui.AlignViewport) alignViewport).setCalcIdSettingsFor(
               getCalcId(),
               new AAConSettings(true, service, this.preset,
-                      (arguments != null) ? JabaParamStore
-                              .getJwsArgsfromJaba(arguments) : null), true);
+                      (arguments != null)
+                              ? JabaParamStore.getJwsArgsfromJaba(arguments)
+                              : null),
+              true);
     }
   }
 
@@ -164,8 +167,8 @@ public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
     super(alignViewport, alignPanel);
   }
 
-  public AbstractJabaCalcWorker(Jws2Instance service,
-          AlignFrame alignFrame, WsParamSetI preset, List<Argument> paramset)
+  public AbstractJabaCalcWorker(Jws2Instance service, AlignFrame alignFrame,
+          WsParamSetI preset, List<Argument> paramset)
   {
     this(alignFrame.getCurrentView(), alignFrame.alignPanel);
     this.guiProgress = alignFrame;
@@ -218,7 +221,26 @@ public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
                 progressId = System.currentTimeMillis());
       }
       rslt = submitToService(seqs);
+      if (guiProgress != null)
+      {
+        guiProgress.registerHandler(progressId,
+                new IProgressIndicatorHandler()
+                {
 
+                  @Override
+                  public boolean cancelActivity(long id)
+                  {
+                    cancelCurrentJob();
+                    return true;
+                  }
+
+                  @Override
+                  public boolean canCancel()
+                  {
+                    return true;
+                  }
+                });
+      }
       boolean finished = false;
       long rpos = 0;
       do
@@ -322,9 +344,8 @@ public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
         }
         if (collectAnnotationResultsFor(rslt))
         {
-          jalview.bin.Cache.log
-                  .debug("Updating result annotation from Job " + rslt
-                          + " at " + service.getUri());
+          jalview.bin.Cache.log.debug("Updating result annotation from Job "
+                  + rslt + " at " + service.getUri());
           updateResultAnnotation(true);
           ap.adjustAnnotationHeight();
         }
@@ -334,8 +355,8 @@ public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
     catch (JobSubmissionException x)
     {
 
-      System.err.println("submission error with " + getServiceActionText()
-              + " :");
+      System.err.println(
+              "submission error with " + getServiceActionText() + " :");
       x.printStackTrace();
       calcMan.disableWorker(this);
     } catch (ResultNotAvailableException x)
@@ -444,8 +465,9 @@ public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
           AnnotatedCollectionI inputSeqs)
   {
     if (alignment == null || alignment.getWidth() <= 0
-            || alignment.getSequences() == null || alignment.isNucleotide() ? !nucleotidesAllowed
-            : !proteinAllowed)
+            || alignment.getSequences() == null || alignment.isNucleotide()
+                    ? !nucleotidesAllowed
+                    : !proteinAllowed)
     {
       return null;
     }
@@ -470,9 +492,10 @@ public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
 
     for (SequenceI sq : (inputSeqs.getSequences()))
     {
-      if (bySequence ? sq.findPosition(end + 1)
-              - sq.findPosition(start + 1) > minlen - 1 : sq.getEnd()
-              - sq.getStart() > minlen - 1)
+      if (bySequence
+              ? sq.findPosition(end + 1)
+                      - sq.findPosition(start + 1) > minlen - 1
+              : sq.getEnd() - sq.getStart() > minlen - 1)
       {
         String newname = SeqsetUtils.unique_name(seqs.size() + 1);
         // make new input sequence with or without gaps
@@ -497,8 +520,10 @@ public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
           }
           for (int apos : sq.gapMap())
           {
+            char sqc = sq.getCharAt(apos);
             if (!filterNonStandardResidues
-                    || ResidueProperties.aaIndex[sq.getCharAt(apos)] < 20)
+                    || (sq.isProtein() ? ResidueProperties.aaIndex[sqc] < 20
+                            : ResidueProperties.nucleotideIndex[sqc] < 5))
             {
               gapMap[apos] = true; // aligned and real amino acid residue
             }
@@ -535,8 +560,8 @@ public abstract class AbstractJabaCalcWorker extends AlignCalcWorker
         FastaSequence sq = seqs.get(p);
         int l = sq.getSequence().length();
         // strip gapped columns
-        char[] padded = new char[realw], orig = sq.getSequence()
-                .toCharArray();
+        char[] padded = new char[realw],
+                orig = sq.getSequence().toCharArray();
         for (int i = 0, pp = 0; i < realw; pp++)
         {
           if (gapMap[pp])