Changeset 4118


Ignore:
Timestamp:
Feb 1, 2008, 3:00:32 PM (15 years ago)
Author:
Nicklas Nordborg
Message:

References #636: Kill a running job

Implemented support for cancelling the job in several of the core plug-ins and in a lot of places in the core that are used by the plug-ins.

Location:
trunk
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/core/net/sf/basedb/core/Affymetrix.java

    r4095 r4118  
    2828import net.sf.basedb.core.filehandler.CdfFileHandler;
    2929import net.sf.basedb.core.filehandler.CelFileHandler;
     30import net.sf.basedb.core.signal.ThreadSignalHandler;
    3031import affymetrix.fusion.cdf.FusionCDFData;
    3132import affymetrix.fusion.cel.FusionCELData;
     
    338339    while (index < numProbesets)
    339340    {
     341      ThreadSignalHandler.checkInterrupted();
    340342      String probesetId = cdf.getProbeSetName(index);
    341343      if (!batcher.exists(probesetId, true, true))
  • trunk/src/core/net/sf/basedb/core/SpotImages.java

    r4095 r4118  
    2727import net.sf.basedb.core.query.Orders;
    2828import net.sf.basedb.core.query.Hql;
     29import net.sf.basedb.core.signal.ThreadSignalHandler;
    2930import net.sf.basedb.core.data.SpotImagesData;
    3031import net.sf.basedb.core.data.RawData;
     
    385386    throws PermissionDeniedException, InvalidDataException, BaseException
    386387  {
     388    ThreadSignalHandler.checkInterrupted();
    387389    checkPermission(Permission.WRITE);
    388390    if (spotImagesFile == null) throw new InvalidUseOfNullException("spotImagesFile");
     
    460462      while (rawDataIterator.hasNext())
    461463      {
     464        ThreadSignalHandler.checkInterrupted();
    462465        RawData rawData = rawDataIterator.next();
    463466 
  • trunk/src/core/net/sf/basedb/core/plugin/AbstractPlugin.java

    r3994 r4118  
    3333import net.sf.basedb.core.SessionControl;
    3434import net.sf.basedb.core.PluginParameter;
     35import net.sf.basedb.core.signal.SignalException;
     36import net.sf.basedb.core.signal.ThreadSignalHandler;
    3537
    3638import java.util.Collection;
     
    308310  }
    309311 
     312  /**
     313    Check if the current thread has been interrupted and throw
     314    a SignalException if it has. Subclasses that use the {@link ThreadSignalHandler}
     315    to implement signal handling should regularly call this method.
     316    @since 2.6
     317  */
     318  protected void checkInterrupted()
     319  {
     320    if (Thread.interrupted())
     321    {
     322      throw new SignalException("Aborted by user");
     323    }
     324  }
    310325 
    311326}
  • trunk/src/core/net/sf/basedb/core/signal/ProgressReporterSignalHandler.java

    r4078 r4118  
    3737  uses with it's own progress reporter. Each time the plug-in calls
    3838  {@link ProgressReporter#display(int, String)} or {@link ProgressReporter#append(String)}
    39   the signal handler will check if a signal has been receiver. If so,
    40   a {@link SignalReceivedException} will be thrown.
     39  and the percentage value is less than 100 the signal handler will check if a signal
     40  has been received. If so, a {@link SignalReceivedException} will be thrown.
    4141  Here is a general outline of a plug-in that uses this signal handler:
    4242 
     
    112112 
    113113  /**
     114    The current percentage status.
     115  */
     116  private int percent;
     117
     118  /**
     119    When the progress has reached this limit signal
     120    checking becomes disabled. Default value is 100.
     121  */
     122  private int limit;
     123 
     124  /**
    114125    Create a new progress reporter signal handler that supports the specified
    115126    signals.
     
    121132    super(supported);
    122133    this.received = Collections.synchronizedList(new ArrayList<Signal>());
     134    this.limit = 100;
    123135  }
    124136 
     
    160172  {
    161173    if (forwardTo != null) forwardTo.append(message);
    162     checkForSignals();
     174    if (percent < limit) checkForSignals();
    163175  }
    164176  public void display(int percent, String message)
    165177  {
    166178    if (forwardTo != null) forwardTo.display(percent, message);
    167     checkForSignals();
     179    if (percent < limit) checkForSignals();
     180    this.percent = percent;
    168181  }
    169182  // -------------------------------------------
     
    208221 
    209222  /**
     223    Get the percentage limit where signal checking becomes disabled.
     224    @return The limit in percent
     225  */
     226  public int getLimit()
     227  {
     228    return limit;
     229  }
     230 
     231  /**
     232    Set the percentage limit. When the progress has reached the limit
     233    signal checking will be disable. The default value is 100 since there is
     234    no need to abort a process when it has already been finished.
     235    @param limit The new limit
     236  */
     237  public void setLimit(int limit)
     238  {
     239    this.limit = limit;
     240  }
     241 
     242  /**
    210243    If at least one signal has been received a {@link SignalReceivedException}
    211244    is thrown. This method clears the received signals.
  • trunk/src/core/net/sf/basedb/core/signal/ThreadSignalHandler.java

    r4078 r4118  
    7979{
    8080
     81  /**
     82    Utility method to check if the current thread has been interrupted and throws
     83    a SignalException if it has.
     84  */
     85  public static void checkInterrupted()
     86  {
     87    if (Thread.interrupted()) throw new SignalException("Aborted by user");
     88  }
     89 
     90 
    8191  /**
    8292    Log signals processing.
  • trunk/src/core/net/sf/basedb/util/BioAssaySetFilterUtil.java

    r4095 r4118  
    4444import net.sf.basedb.core.query.Restrictions;
    4545import net.sf.basedb.core.query.SqlResult;
     46import net.sf.basedb.core.signal.ThreadSignalHandler;
    4647
    4748import java.sql.SQLException;
     
    8788 
    8889    if (progress != null) progress.display(5, "Initialising spot filter...");
     90    ThreadSignalHandler.checkInterrupted();
    8991
    9092    // Create Transformation
     
    126128    int spotsAfter = 0;
    127129    if (progress != null) progress.display(10, "Filtering spots (0 done; "+spotsTotal+" total)...");
    128    
     130
    129131    // Create filter
    130132    if (bioAssays == null || bioAssays.size() == 0) bioAssays =  parent.getBioAssays().list(dc);
    131133    for (BioAssay parentBa : bioAssays)
    132134    {
     135      ThreadSignalHandler.checkInterrupted();
    133136      BioAssay childBa = child.newBioAssay(parentBa);
    134137      dc.saveItemIf(child, childBa, false);
     
    165168 
    166169    if (progress != null) progress.display(5, "Initialising spot filter...");
     170    ThreadSignalHandler.checkInterrupted();
    167171
    168172    // Create Transformation
     
    202206      query.restrict(Restrictions.in(column, selectedColumns));
    203207    }
    204 
     208   
    205209    // Prepare progress reporting
    206210    int interval = 10;  // Update progress after this many spots >= 10
     
    213217      progress.display(10, "Filtering spots (0 done; "+spotsTotal+" total)...");
    214218    }
    215    
     219
    216220    // Do the filtering
    217221    if (filter.useIncludeSpot())
     
    222226        while (result.hasNext())
    223227        {
     228          ThreadSignalHandler.checkInterrupted();
    224229          SqlResult data = result.next();
    225230          if (filter.includeSpot(data))
  • trunk/src/core/net/sf/basedb/util/IntensityCalculatorUtil.java

    r4095 r4118  
    5656import net.sf.basedb.core.query.Aggregations;
    5757import net.sf.basedb.core.query.Expressions;
     58import net.sf.basedb.core.signal.ThreadSignalHandler;
    5859import net.sf.basedb.util.jep.Jep;
    5960import net.sf.basedb.util.jep.RawFunction;
     
    161162   
    162163    checkSameArrayDesign(rawBioAssays, true);
     164    ThreadSignalHandler.checkInterrupted();
    163165   
    164166    // Create Transformation
     
    208210        query.reset();
    209211        first = false;
     212        ThreadSignalHandler.checkInterrupted();
    210213      }
    211214
     
    225228      spotBatcher.insert(query);
    226229      query.reset();
     230      ThreadSignalHandler.checkInterrupted();
    227231     
    228232      // Map spot data to raw data
     
    239243      query.reset();
    240244      rawBioAssaysDone++;
     245      ThreadSignalHandler.checkInterrupted();
    241246    }
    242247   
     
    349354     
    350355      DataResultIterator<RawData> rawData = rawQuery.iterate(dc);
     356      ThreadSignalHandler.checkInterrupted();
    351357      //data -= System.nanoTime();
    352358      while (rawData.hasNext())
    353359      {
     360        ThreadSignalHandler.checkInterrupted();
    354361        RawData rd = rawData.next();
    355362        int position = rd.getPosition();
  • trunk/src/core/net/sf/basedb/util/zip/AbstractFileUnpacker.java

    r3675 r4118  
    5656import net.sf.basedb.core.plugin.Request;
    5757import net.sf.basedb.core.plugin.Response;
     58import net.sf.basedb.core.signal.SignalHandler;
     59import net.sf.basedb.core.signal.SignalTarget;
     60import net.sf.basedb.core.signal.ThreadSignalHandler;
    5861
    5962/**
     
    8083public abstract class AbstractFileUnpacker
    8184  extends AbstractPlugin
    82   implements FileUnpacker, InteractivePlugin
     85  implements FileUnpacker, InteractivePlugin, SignalTarget
    8386{
    8487
     
    104107 
    105108  private RequestInformation configureJob;
     109 
     110  private ThreadSignalHandler signalHandler;
    106111 
    107112  /*
     
    246251  }
    247252  // -------------------------------------------
     253  /*
     254    From the SignalTarget interface
     255    -------------------------------------------
     256  */
     257  public SignalHandler getSignalHandler()
     258  {
     259    signalHandler = new ThreadSignalHandler();
     260    return signalHandler;
     261  }
     262  // -------------------------------------------
    248263
    249264  /**
  • trunk/src/core/net/sf/basedb/util/zip/ZipUnpacker.java

    r3675 r4118  
    4040import net.sf.basedb.core.Location;
    4141import net.sf.basedb.core.Path;
     42import net.sf.basedb.core.signal.ThreadSignalHandler;
    4243import net.sf.basedb.util.FileUtil;
    4344import net.sf.basedb.util.Values;
     
    9596    while ((entry = zip.getNextEntry()) != null)
    9697    {
     98      ThreadSignalHandler.checkInterrupted();
    9799      String subPath = entry.getName();
    98100      String completePath = rootPath + "/" + subPath;
  • trunk/src/plugins/core/net/sf/basedb/plugins/AbstractFlatFileImporter.java

    r4107 r4118  
    5252import net.sf.basedb.core.plugin.Response;
    5353import net.sf.basedb.core.plugin.Plugin;
    54 import net.sf.basedb.core.signal.SignalException;
    5554import net.sf.basedb.core.signal.SignalHandler;
    5655import net.sf.basedb.core.signal.SignalTarget;
     
    548547          if (progress != null) progress.display(getProgress(ffp), "Parsing headers...");
    549548        }
     549        checkInterrupted();
    550550        FlatFileParser.LineType result = ffp.parseHeaders();
    551551        FlatFileParser.Line line = null;
     
    574574              }
    575575            }
    576             // In case the server is shutting down... throw exception, rollback and quit
    577             if (Thread.interrupted()) throw new SignalException("Aborted by user.");
    578576          }
     577          checkInterrupted();
    579578        }
    580579        catch (Throwable t)
     
    620619              }
    621620              // In case the server is shutting down... throw exception, rollback and quit
    622               if (Thread.interrupted()) throw new SignalException("Aborted by user.");
     621              checkInterrupted();
    623622            }
    624623          }
  • trunk/src/plugins/core/net/sf/basedb/plugins/AnnotationFlatFileImporter.java

    r4107 r4118  
    800800            numError += na.getNumError();
    801801            numReplaced += na.getNumReplaced();
     802            checkInterrupted();
    802803          }
    803804        }
  • trunk/src/plugins/core/net/sf/basedb/plugins/CdfFileReporterImporter.java

    r4076 r4118  
    8080import net.sf.basedb.core.query.Hql;
    8181import net.sf.basedb.core.query.Orders;
     82import net.sf.basedb.core.signal.SignalHandler;
     83import net.sf.basedb.core.signal.SignalTarget;
     84import net.sf.basedb.core.signal.ThreadSignalHandler;
    8285import net.sf.basedb.util.FileUtil;
    8386
     
    97100public class CdfFileReporterImporter
    98101  extends AbstractPlugin
    99   implements InteractivePlugin, AutoDetectingImporter
     102  implements InteractivePlugin, AutoDetectingImporter, SignalTarget
    100103{
    101104
     
    132135  private RequestInformation configureJob;
    133136 
     137  private ThreadSignalHandler signalHandler;
     138 
    134139  /**
    135140     Constructor should be empty.
     
    180185  public void run(Request request, Response response, ProgressReporter progress)
    181186  {
     187    if (signalHandler != null) signalHandler.setWorkerThread(null);
    182188    DbControl dc = sc.newDbControl();
    183189    try
     
    186192      File cdfFile = (File)job.getValue("file");
    187193      cdfFile = File.getById(dc, cdfFile.getId());
     194      checkInterrupted();
    188195      FusionCDFData cdf = new CdfFileHandler().loadCdfFile(cdfFile);
    189196 
     
    371378  // -------------------------------------------
    372379 
    373  
     380  /*
     381    From the SignalTarget interface
     382    -------------------------------------------
     383  */
     384  public SignalHandler getSignalHandler()
     385  {
     386    signalHandler = new ThreadSignalHandler();
     387    return signalHandler;
     388  }
     389  // -------------------------------------------
     390
    374391  private RequestInformation getConfigureJobParameters(GuiContext context)
    375392  {
     
    462479  private int importFromCdf(DbControl dc, FusionCDFData cdf, ProgressReporter progress)
    463480  {
     481    checkInterrupted();
     482
    464483    ReporterBatcher batcher = ReporterBatcher.getNew(dc);
    465484    if (job.getValue("file") != null)
  • trunk/src/plugins/core/net/sf/basedb/plugins/FormulaFilter.java

    r3775 r4118  
    4949import net.sf.basedb.core.plugin.Response;
    5050import net.sf.basedb.core.query.Restriction;
     51import net.sf.basedb.core.signal.SignalHandler;
     52import net.sf.basedb.core.signal.SignalTarget;
     53import net.sf.basedb.core.signal.ThreadSignalHandler;
    5154import net.sf.basedb.util.BioAssaySetFilterUtil;
    5255import net.sf.basedb.util.BioAssaySetUtil;
     
    7376public class FormulaFilter
    7477  extends AbstractAnalysisPlugin
    75   implements InteractivePlugin, AnalysisFilterPlugin
     78  implements InteractivePlugin, AnalysisFilterPlugin, SignalTarget
    7679{
    7780
     
    100103  private RequestInformation configureJob;
    101104
     105  private ThreadSignalHandler signalHandler;
     106 
    102107  /**
    103108     Constructor should be empty.
     
    142147    try
    143148    {
     149      if (signalHandler != null)
     150      {
     151        signalHandler.setWorkerThread(null);
     152      }
     153
    144154      // Get all parameters
    145155      BioAssaySet source = getSourceBioAssaySet(dc);
     
    159169      // Parse filter expression
    160170      Restriction filter = BioAssaySetUtil.createJepRestriction(dc, source, expression, false);
     171     
     172      checkInterrupted();
    161173
    162174      if (includeLimit != null || excludeLimit != null)
     
    256268      response.setError(ex.getMessage(), Arrays.asList(ex));
    257269    }
     270  }
     271  // -------------------------------------------
     272  /*
     273    From the SignalTarget interface
     274    -------------------------------------------
     275  */
     276  public SignalHandler getSignalHandler()
     277  {
     278    signalHandler = new ThreadSignalHandler();
     279    return signalHandler;
    258280  }
    259281  // -------------------------------------------
  • trunk/src/plugins/core/net/sf/basedb/plugins/IntensityCalculatorPlugin.java

    r4078 r4118  
    5757import net.sf.basedb.core.query.Hql;
    5858import net.sf.basedb.core.query.Orders;
    59 import net.sf.basedb.core.signal.ProgressReporterSignalHandler;
    60 import net.sf.basedb.core.signal.Signal;
    6159import net.sf.basedb.core.signal.SignalHandler;
    62 import net.sf.basedb.core.signal.SignalReceivedException;
    6360import net.sf.basedb.core.signal.SignalTarget;
     61import net.sf.basedb.core.signal.ThreadSignalHandler;
    6462import net.sf.basedb.util.IntensityCalculator;
    6563import net.sf.basedb.util.IntensityCalculatorUtil;
     
    132130
    133131  private RequestInformation configureJob;
    134   private ProgressReporterSignalHandler signalHandler;
     132  private ThreadSignalHandler signalHandler;
    135133 
    136134  /**
     
    188186    if (signalHandler != null)
    189187    {
    190       signalHandler.forwardTo(progress);
    191       progress = signalHandler;
     188      signalHandler.setWorkerThread(null);
    192189    }
    193190    DbControl dc = sc.newDbControl();
     
    247244      Job thisJob = Job.getById(dc, jobId);
    248245
     246      checkInterrupted();
    249247      BioAssaySet rootBas = null;
    250248      if (IntensityCalculatorUtil.checkSameArrayDesign(sources, false))
     
    274272      if (progress != null) progress.display(100, "Done");
    275273      response.setDone("Done");
    276     }
    277     catch (SignalReceivedException ex)
    278     {
    279       response.setError("Aborted by user", Arrays.asList(ex));
    280274    }
    281275    catch (Throwable t)
     
    434428  public SignalHandler getSignalHandler()
    435429  {
    436     signalHandler = new ProgressReporterSignalHandler(Collections.singleton(Signal.ABORT));
     430    signalHandler = new ThreadSignalHandler();
    437431    return signalHandler;
    438432  }
  • trunk/src/plugins/core/net/sf/basedb/plugins/JepExtraValueCalculator.java

    r3675 r4118  
    5555import net.sf.basedb.core.query.Orders;
    5656import net.sf.basedb.core.query.Selects;
     57import net.sf.basedb.core.signal.SignalHandler;
     58import net.sf.basedb.core.signal.SignalTarget;
     59import net.sf.basedb.core.signal.ThreadSignalHandler;
    5760import net.sf.basedb.util.BioAssaySetUtil;
    5861
     
    7679public class JepExtraValueCalculator
    7780  extends AbstractAnalysisPlugin
    78   implements InteractivePlugin
     81  implements InteractivePlugin, SignalTarget
    7982{
    8083
     
    105108    );
    106109
     110  private ThreadSignalHandler signalHandler;
     111 
    107112  private RequestInformation configureJob;
    108113 
     
    143148  public void run(Request request, Response response, ProgressReporter progress)
    144149  {
     150    if (signalHandler != null) signalHandler.setWorkerThread(null);
    145151    DbControl dc = sc.newDbControl();
    146152    try
     
    172178
    173179      if (progress != null) progress.display(10, "Calculating extra value ("+source.getNumSpots()+" total)...");
     180      checkInterrupted();
    174181      extraBatcher.insert(query);
    175182
     
    250257  // -------------------------------------------
    251258
     259  /*
     260    From the SignalTarget interface
     261    -------------------------------------------
     262  */
     263  public SignalHandler getSignalHandler()
     264  {
     265    signalHandler = new ThreadSignalHandler();
     266    return signalHandler;
     267  }
     268  // -------------------------------------------
    252269
    253270  private RequestInformation getConfigureJobParameters()
  • trunk/src/plugins/core/net/sf/basedb/plugins/JepIntensityTransformer.java

    r3675 r4118  
    6262import net.sf.basedb.core.query.Expression;
    6363import net.sf.basedb.core.query.Selects;
     64import net.sf.basedb.core.signal.SignalHandler;
     65import net.sf.basedb.core.signal.SignalTarget;
     66import net.sf.basedb.core.signal.ThreadSignalHandler;
    6467import net.sf.basedb.util.BioAssaySetUtil;
    6568import net.sf.basedb.util.Values;
     
    7578public class JepIntensityTransformer
    7679  extends AbstractAnalysisPlugin
    77   implements InteractivePlugin
     80  implements InteractivePlugin, SignalTarget
    7881{
    7982
     
    98101      new HashSet<GuiContext>(Arrays.asList(CONTEXT_BIOASSAYSET, CONTEXT_BIOASSAYS)));
    99102
     103  private ThreadSignalHandler signalHandler;
    100104  private RequestInformation configureJob;
    101105  private List<PluginParameter<String>> channelParameters;
     
    137141  public void run(Request request, Response response, ProgressReporter progress)
    138142  {
     143    if (signalHandler != null) signalHandler.setWorkerThread(null);
    139144    DbControl dc = sc.newDbControl();
    140145    try
     
    191196      // Create the batchers we need
    192197      if (progress != null) progress.display(10, "Transforming intensities ("+source.getNumSpots()+" total)...");
     198      checkInterrupted();
    193199      SpotBatcher spotBatcher = child.getSpotBatcher();
    194200      spotBatcher.insert(query);
     
    273279      response.setError(ex.getMessage(), Arrays.asList(ex));
    274280    }
     281  }
     282  // -------------------------------------------
     283  /*
     284    From the SignalTarget interface
     285    -------------------------------------------
     286  */
     287  public SignalHandler getSignalHandler()
     288  {
     289    signalHandler = new ThreadSignalHandler();
     290    return signalHandler;
    275291  }
    276292  // -------------------------------------------
  • trunk/src/plugins/core/net/sf/basedb/plugins/LowessNormalization.java

    r4095 r4118  
    6767import net.sf.basedb.core.query.SqlResult;
    6868import net.sf.basedb.core.query.WhenStatement;
    69 import net.sf.basedb.core.signal.ProgressReporterSignalHandler;
    70 import net.sf.basedb.core.signal.Signal;
    7169import net.sf.basedb.core.signal.SignalHandler;
    7270import net.sf.basedb.core.signal.SignalReceivedException;
    7371import net.sf.basedb.core.signal.SignalTarget;
     72import net.sf.basedb.core.signal.ThreadSignalHandler;
    7473import net.sf.basedb.util.Values;
    7574
     
    170169  private RequestInformation configureJob;
    171170
    172   private ProgressReporterSignalHandler signalHandler;
     171  private ThreadSignalHandler signalHandler;
    173172 
    174173  /*
     
    210209      if (signalHandler != null)
    211210      {
    212         signalHandler.forwardTo(progress);
    213         progress = signalHandler;
     211        signalHandler.setWorkerThread(null);
    214212      }
    215213      DbControl dc = null;
     
    236234        response.setDone(normalizedSpots + " spots normalized, " + (source.getNumSpots() - normalizedSpots) + " spots removed");
    237235      }
    238       catch (SignalReceivedException ex)
    239       {
    240         response.setError("Aborted by user", Arrays.asList(ex));
    241       }
    242236      catch (Throwable ex)
    243237      {
     
    338332  public SignalHandler getSignalHandler()
    339333  {
    340     signalHandler = new ProgressReporterSignalHandler(Collections.singleton(Signal.ABORT));
     334    signalHandler = new ThreadSignalHandler();
    341335    return signalHandler;
    342336  }
     
    408402    query.restrict(intensityRestriction);
    409403    long numSpots = query.count(dc);
     404    checkInterrupted();
     405   
    410406    long normalizedSpots = 0;
    411407    if (progress != null) progress.display((int)(normalizedSpots / numSpots * 100), normalizedSpots + " spots normalized");
     
    423419    // Create query to retrieve spot data: COLUMN, POSITION, ch1, ch2, block, present
    424420    // We use a parameter to restrict the query to return data for one bioassay at a time
    425     // The 'exclude' value is 0 to not exclude and 1 to exclude a spot
     421    // The 'present' value is 0 to not exclude and 1 to exclude a spot
    426422    query.select(Dynamic.select(VirtualColumn.POSITION));
    427423    query.select(Selects.expression(ch1, "ch1"));
     
    434430    // Normalize one bioassay at a time
    435431    List<BioAssay> assays = source.getBioAssays().list(dc);
     432    checkInterrupted();
    436433 
    437434    try
     
    448445       
    449446        DynamicResultIterator it = query.iterate(dc);
     447        checkInterrupted();
    450448        int positionIndex = it.getIndex(VirtualColumn.POSITION.getName());
    451449        int ch1Index = it.getIndex("ch1");
     
    464462        }
    465463        it.close();
     464        checkInterrupted();
    466465       
    467466        // Continue with next bioassay if there is no data
     
    497496            Collections.sort(toNormalize);
    498497            List<Double> smoothCurve = lowess(toNormalize, fitFraction, iterations, delta);
     498            checkInterrupted();
    499499            for (int j = 0; j < smoothCurve.size(); ++j)
    500500            {
     
    503503              batcher.insert(bioassayColumn, spot.position, (float)(spot.ch1/factor), (float)(spot.ch2*factor));
    504504            }
     505            checkInterrupted();
    505506            normalizedSpots += smoothCurve.size();
    506507            if (progress != null) progress.display((int)((normalizedSpots * 100L) / numSpots), normalizedSpots + " spots normalized");
     
    581582  }
    582583 
    583   private static List<Double> lowess(List<SpotData> data, double f, int iter, double delta)
     584  private List<Double> lowess(List<SpotData> data, double f, int iter, double delta)
    584585  {
    585586    int dataSize = data.size();
     
    591592    for (int iteration = 0; iteration < iter; ++iteration)
    592593    {
     594      checkInterrupted();
    593595      int windowStart = 0;
    594596      int i = 0;
  • trunk/src/plugins/core/net/sf/basedb/plugins/PackedFileExporter.java

    r4095 r4118  
    5858import net.sf.basedb.core.query.Hql;
    5959import net.sf.basedb.core.query.Orders;
     60import net.sf.basedb.core.signal.SignalHandler;
     61import net.sf.basedb.core.signal.SignalTarget;
     62import net.sf.basedb.core.signal.ThreadSignalHandler;
    6063import net.sf.basedb.util.Values;
    6164import net.sf.basedb.util.zip.FilePacker;
     
    9093public class PackedFileExporter
    9194  extends AbstractExporterPlugin
    92   implements InteractivePlugin
     95  implements InteractivePlugin, SignalTarget
    9396{
    9497
     
    125128  private long totalBytes;
    126129  private List<Nameable> selectedFilesAndDirs;
     130 
     131  private ThreadSignalHandler signalHandler;
    127132 
    128133  /**
     
    354359    throws IOException
    355360  {
     361    if (signalHandler != null) signalHandler.setWorkerThread(null);
     362   
    356363    // Get parameters
    357364    Directory rootDir = (Directory)job.getValue("root");
     
    385392    for (Nameable item : itemsToPack)
    386393    {
     394      checkInterrupted();
    387395      currentFile++;
    388396      String entryPath = null;
     
    439447  {
    440448    return numFiles + " file(s) and directories compressed successfully.";
     449  }
     450  // -------------------------------------------
     451  /*
     452    From the SignalTarget interface
     453    -------------------------------------------
     454  */
     455  public SignalHandler getSignalHandler()
     456  {
     457    signalHandler = new ThreadSignalHandler();
     458    return signalHandler;
    441459  }
    442460  // -------------------------------------------
     
    563581      for (Integer fileId : files)
    564582      {
     583        checkInterrupted();
    565584        try
    566585        {
     
    578597      for (Integer dirId : directories)
    579598      {
     599        checkInterrupted();
    580600        try
    581601        {
     
    604624    for (File f : fileQuery.list(dc))
    605625    {
     626      checkInterrupted();
    606627      loadedFiles.add(f);
    607628      if (f.getLocation() == Location.PRIMARY) totalBytes += f.getSize();
     
    614635    for (Directory dir : dirQuery.list(dc))
    615636    {
     637      checkInterrupted();
    616638      loadedFiles.add(dir);
    617639      loadFiles(dc, loadedFiles, dir);
  • trunk/src/plugins/core/net/sf/basedb/plugins/SpotImageCreator.java

    r3679 r4118  
    4040import net.sf.basedb.core.plugin.Request;
    4141import net.sf.basedb.core.plugin.Response;
     42import net.sf.basedb.core.signal.SignalHandler;
     43import net.sf.basedb.core.signal.SignalTarget;
     44import net.sf.basedb.core.signal.ThreadSignalHandler;
    4245
    4346import java.util.Arrays;
     
    5457public class SpotImageCreator
    5558  extends AbstractPlugin
    56   implements Plugin 
     59  implements Plugin, SignalTarget 
    5760{
    5861
     
    7477  private static final Set<Permissions> permissions = new HashSet<Permissions>();
    7578
     79  private ThreadSignalHandler signalHandler;
     80 
    7681  /*
    7782    From the Plugin interface
     
    162167  }
    163168  // -------------------------------------------
     169  /*
     170    From the SignalTarget interface
     171    -------------------------------------------
     172  */
     173  public SignalHandler getSignalHandler()
     174  {
     175    signalHandler = new ThreadSignalHandler();
     176    return signalHandler;
     177  }
     178  // -------------------------------------------
    164179
    165180}
  • trunk/src/plugins/core/net/sf/basedb/plugins/TarFileUnpacker.java

    r4095 r4118  
    164164    while ((entry = TarUtil.getNextEntry(tarStream)) != null)
    165165    {
     166      checkInterrupted();
    166167      String subPath = entry.getName();
    167168      String completePath = rootPath + "/" + subPath;
  • trunk/www/common/plugin/download_immediately.jsp

    r3675 r4118  
    8585      <td width="50%"><base:button id="download" onclick="downloadExport();" title="Download"
    8686        image="download.gif" /></td>
    87       <td width="50%"><base:button onclick="doCancel();" title="Close" /></td>
     87      <td width="50%"><base:button onclick="doCancel();" title="Cancel" /></td>
    8888    </tr>
    8989    </table>
Note: See TracChangeset for help on using the changeset viewer.