src/core/net/sf/basedb/core/PluginRequest.java

Code
Comments
Other
Rev Date Author Line
938 15 Jul 05 samuel 1 /*
938 15 Jul 05 samuel 2   $Id$
938 15 Jul 05 samuel 3
3675 16 Aug 07 jari 4   Copyright (C) 2005 Samuel Andersson, Johan Enell, Nicklas Nordborg
4889 06 Apr 09 nicklas 5   Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson, Gregory Vincic
3675 16 Aug 07 jari 6   Copyright (C) 2007 Nicklas Nordborg
938 15 Jul 05 samuel 7
2304 22 May 06 jari 8   This file is part of BASE - BioArray Software Environment.
2304 22 May 06 jari 9   Available at http://base.thep.lu.se/
938 15 Jul 05 samuel 10
938 15 Jul 05 samuel 11   BASE is free software; you can redistribute it and/or
938 15 Jul 05 samuel 12   modify it under the terms of the GNU General Public License
4479 05 Sep 08 jari 13   as published by the Free Software Foundation; either version 3
938 15 Jul 05 samuel 14   of the License, or (at your option) any later version.
938 15 Jul 05 samuel 15
938 15 Jul 05 samuel 16   BASE is distributed in the hope that it will be useful,
938 15 Jul 05 samuel 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
938 15 Jul 05 samuel 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
938 15 Jul 05 samuel 19   GNU General Public License for more details.
938 15 Jul 05 samuel 20
938 15 Jul 05 samuel 21   You should have received a copy of the GNU General Public License
4517 11 Sep 08 jari 22   along with BASE. If not, see <http://www.gnu.org/licenses/>.
938 15 Jul 05 samuel 23 */
938 15 Jul 05 samuel 24 package net.sf.basedb.core;
938 15 Jul 05 samuel 25
4379 05 Aug 08 nicklas 26 import net.sf.basedb.core.data.JobData;
2601 29 Aug 06 martin 27 import net.sf.basedb.core.plugin.GuiContext;
1212 02 Sep 05 nicklas 28 import net.sf.basedb.core.plugin.Plugin;
1212 02 Sep 05 nicklas 29 import net.sf.basedb.core.plugin.Request;
938 15 Jul 05 samuel 30
938 15 Jul 05 samuel 31 import java.util.List;
1212 02 Sep 05 nicklas 32 import java.util.Map;
1212 02 Sep 05 nicklas 33 import java.util.HashMap;
7321 05 Apr 17 nicklas 34 import java.io.Serializable;
1212 02 Sep 05 nicklas 35 import java.util.Collections;
938 15 Jul 05 samuel 36
938 15 Jul 05 samuel 37 /**
1311 09 Sep 05 nicklas 38   Configures or executes a plugin. You will get an instance of
1376 22 Sep 05 nicklas 39   a subclass to this class when:
1238 05 Sep 05 nicklas 40   
1238 05 Sep 05 nicklas 41   <ol>
1238 05 Sep 05 nicklas 42   <li>You want to configure a plugin: {@link PluginConfiguration#configure()}
1924 07 Feb 06 gregory 43   <li>You want to configure a job: {@link Job#configure(GuiContext)}
1635 18 Nov 05 nicklas 44   <li>You want to execute a job: {@link Job#execute(ProgressReporter, String)}
1238 05 Sep 05 nicklas 45   </ol>
1311 09 Sep 05 nicklas 46   
1376 22 Sep 05 nicklas 47   @see PluginConfigurationRequest
1376 22 Sep 05 nicklas 48   @see PluginExecutionRequest
1238 05 Sep 05 nicklas 49   @author Nicklas
938 15 Jul 05 samuel 50   @version 2.0
1238 05 Sep 05 nicklas 51   @base.modified $Date$
938 15 Jul 05 samuel 52 */
1376 22 Sep 05 nicklas 53 abstract class PluginRequest<P extends Plugin>
938 15 Jul 05 samuel 54 {
938 15 Jul 05 samuel 55
1212 02 Sep 05 nicklas 56   private final SessionControl sc;
1211 02 Sep 05 enell 57
1376 22 Sep 05 nicklas 58   private String command;
1376 22 Sep 05 nicklas 59   
7329 07 Apr 17 nicklas 60   private final Serializable state;
7321 05 Apr 17 nicklas 61   
1212 02 Sep 05 nicklas 62   private final Map<String, List<?>> requestParameters;
1212 02 Sep 05 nicklas 63   
1730 20 Dec 05 nicklas 64   private final P plugin;
1212 02 Sep 05 nicklas 65   
1730 20 Dec 05 nicklas 66   private final ParameterValuesImpl configurationParameters;
1212 02 Sep 05 nicklas 67   
1766 13 Jan 06 nicklas 68   private final PluginConfiguration pluginConfiguration;
1212 02 Sep 05 nicklas 69   
2652 19 Sep 06 martin 70   private final PluginDefinition pluginDefinition;
2652 19 Sep 06 martin 71   
1730 20 Dec 05 nicklas 72   private final ParameterValuesImpl jobParameters;
1730 20 Dec 05 nicklas 73   
2348 01 Jun 06 nicklas 74   private final Map<String, PluginParameter<?>> parameterInfo;
2348 01 Jun 06 nicklas 75   
1759 12 Jan 06 nicklas 76   private final Job job;
1730 20 Dec 05 nicklas 77   
1730 20 Dec 05 nicklas 78   PluginRequest(SessionControl sc, P plugin, String command, 
1766 13 Jan 06 nicklas 79     PluginConfiguration pluginConfiguration, ParameterValuesImpl configurationParameters,
2652 19 Sep 06 martin 80     Job job, ParameterValuesImpl jobParameters, PluginDefinition pluginDefinition)
1212 02 Sep 05 nicklas 81   {
1212 02 Sep 05 nicklas 82     this.sc = sc;
1730 20 Dec 05 nicklas 83     this.plugin = plugin;
1212 02 Sep 05 nicklas 84     this.command = command;
7360 10 May 17 nicklas 85     this.state = job == null ? null : job.loadState(plugin.getClass().getClassLoader());
1766 13 Jan 06 nicklas 86     this.pluginConfiguration = pluginConfiguration;
2652 19 Sep 06 martin 87     this.pluginDefinition = pluginDefinition;
1730 20 Dec 05 nicklas 88     this.configurationParameters = configurationParameters;
1759 12 Jan 06 nicklas 89     this.job = job;
1730 20 Dec 05 nicklas 90     this.jobParameters = jobParameters;
1212 02 Sep 05 nicklas 91     this.requestParameters = new HashMap<String, List<?>>();
2348 01 Jun 06 nicklas 92     this.parameterInfo = new HashMap<String, PluginParameter<?>>();
5038 07 Aug 09 nicklas 93     plugin.init(sc.getPluginSessionControl(pluginDefinition, job), configurationParameters, jobParameters);
1212 02 Sep 05 nicklas 94   }
1212 02 Sep 05 nicklas 95
2854 02 Nov 06 nicklas 96   PluginRequest(PluginRequest<? extends P> copyFrom, String command)
2854 02 Nov 06 nicklas 97   {
2854 02 Nov 06 nicklas 98     this.sc = copyFrom.sc;
2854 02 Nov 06 nicklas 99     this.plugin = copyFrom.plugin;
2854 02 Nov 06 nicklas 100     this.command = command;
7321 05 Apr 17 nicklas 101     this.state = copyFrom.state;
2854 02 Nov 06 nicklas 102     this.pluginConfiguration = copyFrom.pluginConfiguration;
2854 02 Nov 06 nicklas 103     this.pluginDefinition = copyFrom.pluginDefinition;
2854 02 Nov 06 nicklas 104     this.configurationParameters = copyFrom.configurationParameters;
2854 02 Nov 06 nicklas 105     this.job = copyFrom.job;
2854 02 Nov 06 nicklas 106     this.jobParameters = copyFrom.jobParameters;
2854 02 Nov 06 nicklas 107     this.requestParameters = new HashMap<String, List<?>>();
2854 02 Nov 06 nicklas 108     this.parameterInfo = new HashMap<String, PluginParameter<?>>();
2854 02 Nov 06 nicklas 109   }
2854 02 Nov 06 nicklas 110   
1238 05 Sep 05 nicklas 111   /**
4801 05 Mar 09 nicklas 112     @return The SessionControl used in this request
4801 05 Mar 09 nicklas 113     @since 2.11
4801 05 Mar 09 nicklas 114   */
4801 05 Mar 09 nicklas 115   public SessionControl getSessionControl()
4801 05 Mar 09 nicklas 116   {
4801 05 Mar 09 nicklas 117     return sc;
4801 05 Mar 09 nicklas 118   }
4801 05 Mar 09 nicklas 119   
4801 05 Mar 09 nicklas 120   /**
1311 09 Sep 05 nicklas 121     Get the command this request will issue to the plugin when
1311 09 Sep 05 nicklas 122     {@link #invoke()} is called.
1311 09 Sep 05 nicklas 123   */
1311 09 Sep 05 nicklas 124   public String getCommand()
1311 09 Sep 05 nicklas 125   {
1311 09 Sep 05 nicklas 126     return command;
1311 09 Sep 05 nicklas 127   }
1376 22 Sep 05 nicklas 128
1311 09 Sep 05 nicklas 129   /**
1376 22 Sep 05 nicklas 130     Set the value of a request parameter to a single value. Normally a plugin
1376 22 Sep 05 nicklas 131     validates the value using the information available in the 
1376 22 Sep 05 nicklas 132     {@link RequestInformation} object.
1376 22 Sep 05 nicklas 133     
1376 22 Sep 05 nicklas 134     @param name The name of the parameter
1376 22 Sep 05 nicklas 135     @param value The value of the parameter
1635 18 Nov 05 nicklas 136     @see PluginConfigurationRequest#getRequestInformation()
1238 05 Sep 05 nicklas 137   */
1376 22 Sep 05 nicklas 138   public void setParameterValue(String name, Object value)
1219 05 Sep 05 nicklas 139   {
1376 22 Sep 05 nicklas 140     requestParameters.put(name, Collections.singletonList(value));
1219 05 Sep 05 nicklas 141   }
1212 02 Sep 05 nicklas 142
1238 05 Sep 05 nicklas 143   /**
1376 22 Sep 05 nicklas 144     Set the value of a request parameter to a list of values. Normally a plugin
1376 22 Sep 05 nicklas 145     validates the value using the information available in the 
1376 22 Sep 05 nicklas 146     {@link RequestInformation} object.
1376 22 Sep 05 nicklas 147     
1376 22 Sep 05 nicklas 148     @param name The name of the parameter
1376 22 Sep 05 nicklas 149     @param values The values of the parameter
1635 18 Nov 05 nicklas 150     @see PluginConfigurationRequest#getRequestInformation()
1376 22 Sep 05 nicklas 151   */
1376 22 Sep 05 nicklas 152   public void setParameterValues(String name, List<?> values)
1376 22 Sep 05 nicklas 153   {
1376 22 Sep 05 nicklas 154     requestParameters.put(name, values);
1376 22 Sep 05 nicklas 155   }
1730 20 Dec 05 nicklas 156
2745 18 Oct 06 nicklas 157   public Object getCurrentParameterValue(String name)
2745 18 Oct 06 nicklas 158   {
2745 18 Oct 06 nicklas 159     List<?> values = getCurrentParameterValues(name);
2745 18 Oct 06 nicklas 160     return values == null || values.size() == 0 ? null : values.get(0);
2745 18 Oct 06 nicklas 161   }
2745 18 Oct 06 nicklas 162   
3586 20 Jul 07 nicklas 163   /**
3586 20 Jul 07 nicklas 164     Get the values that are currently stored in the job or plugin configuration
3586 20 Jul 07 nicklas 165     related to this request. This method will first check the job and then the
3586 20 Jul 07 nicklas 166     plugin configuration.
3586 20 Jul 07 nicklas 167     @param name The name of the parameter
3586 20 Jul 07 nicklas 168     @return The parameter values, or null if no parameter with the given name
3586 20 Jul 07 nicklas 169       exists
3586 20 Jul 07 nicklas 170   */
1730 20 Dec 05 nicklas 171   public List<?> getCurrentParameterValues(String name)
1730 20 Dec 05 nicklas 172   {
1730 20 Dec 05 nicklas 173     List<?> values = null;
1730 20 Dec 05 nicklas 174     if (jobParameters != null)
1730 20 Dec 05 nicklas 175     {
1730 20 Dec 05 nicklas 176       values = jobParameters.getValues(name);
1730 20 Dec 05 nicklas 177     }
3586 20 Jul 07 nicklas 178     if (values == null && configurationParameters != null)
1730 20 Dec 05 nicklas 179     {
1730 20 Dec 05 nicklas 180       values = configurationParameters.getValues(name);
1730 20 Dec 05 nicklas 181     }
1730 20 Dec 05 nicklas 182     return values;
1730 20 Dec 05 nicklas 183   }
1376 22 Sep 05 nicklas 184   
1730 20 Dec 05 nicklas 185   
3586 20 Jul 07 nicklas 186   /**
3586 20 Jul 07 nicklas 187     Get the values that are currently stored in the plugin configuration
3586 20 Jul 07 nicklas 188     related to this request.
3586 20 Jul 07 nicklas 189     @param name The name of the parameter
3586 20 Jul 07 nicklas 190     @return The parameter values, or null if no parameter with the given name
3586 20 Jul 07 nicklas 191       exists or if this request isn't associated with a plugin configuration
3586 20 Jul 07 nicklas 192   */
1730 20 Dec 05 nicklas 193   public List<?> getCurrentConfigurationParameterValues(String name)
1730 20 Dec 05 nicklas 194   {
1730 20 Dec 05 nicklas 195     List<?> values = null;
1730 20 Dec 05 nicklas 196     if (configurationParameters != null)
1730 20 Dec 05 nicklas 197     {
1730 20 Dec 05 nicklas 198       values = configurationParameters.getValues(name);
1730 20 Dec 05 nicklas 199     }
1730 20 Dec 05 nicklas 200     return values;
1730 20 Dec 05 nicklas 201   }
1730 20 Dec 05 nicklas 202   
3586 20 Jul 07 nicklas 203   /**
3586 20 Jul 07 nicklas 204     Get the values that are currently stored in the job related to this
3586 20 Jul 07 nicklas 205     request.
3586 20 Jul 07 nicklas 206     @param name The name of the parameter
3586 20 Jul 07 nicklas 207     @return The parameter values, or null if no parameter with the given name
3586 20 Jul 07 nicklas 208       exists or if this request isn't associated with a job
3586 20 Jul 07 nicklas 209   */
1730 20 Dec 05 nicklas 210   public List<?> getCurrentJobParameterValues(String name)
1730 20 Dec 05 nicklas 211   {
1730 20 Dec 05 nicklas 212     List<?> values = null;
1730 20 Dec 05 nicklas 213     if (jobParameters != null)
1730 20 Dec 05 nicklas 214     {
1730 20 Dec 05 nicklas 215       values = jobParameters.getValues(name);
1730 20 Dec 05 nicklas 216     }
1730 20 Dec 05 nicklas 217     return values;
1730 20 Dec 05 nicklas 218   }
1730 20 Dec 05 nicklas 219   
1376 22 Sep 05 nicklas 220   /**
2700 04 Oct 06 nicklas 221     Invoke the plugin and let it do it's work. Note that
2700 04 Oct 06 nicklas 222     this method doesn't throw any exceptions. If an exception
2700 04 Oct 06 nicklas 223     occurs during the execution of a plugin, the response
2700 04 Oct 06 nicklas 224     status will be set to {@link net.sf.basedb.core.plugin.Response.Status#ERROR} and
2700 04 Oct 06 nicklas 225     the error messages will be available in the 
2700 04 Oct 06 nicklas 226     {@link PluginResponse#getMessage()} and 
2700 04 Oct 06 nicklas 227     {@link PluginResponse#getErrorList()} methods.
2700 04 Oct 06 nicklas 228     
2700 04 Oct 06 nicklas 229     @return A <code>PluginResponse</code> object
2646 18 Sep 06 martin 230   */
2722 11 Oct 06 nicklas 231   public abstract PluginResponse invoke();
2646 18 Sep 06 martin 232   
2646 18 Sep 06 martin 233   /**
1238 05 Sep 05 nicklas 234     Aborts the execution of the plugin.
1238 05 Sep 05 nicklas 235   */
1238 05 Sep 05 nicklas 236   public void done()
1238 05 Sep 05 nicklas 237   {
1730 20 Dec 05 nicklas 238     plugin.done();
1238 05 Sep 05 nicklas 239   }
1238 05 Sep 05 nicklas 240   
2348 01 Jun 06 nicklas 241   /**
2348 01 Jun 06 nicklas 242     Keep track of all parameters so that we can save label and
2348 01 Jun 06 nicklas 243     description in the {@link ParameterValuesImpl#saveParameters(Job, Map)}
2348 01 Jun 06 nicklas 244     method.
2348 01 Jun 06 nicklas 245   */
2348 01 Jun 06 nicklas 246   void registerParameters(List<PluginParameter<?>> parameters)
2348 01 Jun 06 nicklas 247   {
2348 01 Jun 06 nicklas 248     if (parameters != null)
2348 01 Jun 06 nicklas 249     {
2348 01 Jun 06 nicklas 250       for (PluginParameter<?> pp : parameters)
2348 01 Jun 06 nicklas 251       {
2348 01 Jun 06 nicklas 252         parameterInfo.put(pp.getName(), pp);
2348 01 Jun 06 nicklas 253       }
2348 01 Jun 06 nicklas 254     }
2348 01 Jun 06 nicklas 255   }
2348 01 Jun 06 nicklas 256   
2348 01 Jun 06 nicklas 257   /**
2348 01 Jun 06 nicklas 258     Save all parameters that have got values in this request/response session.
2348 01 Jun 06 nicklas 259   */
4379 05 Aug 08 nicklas 260   void saveParameters(DbControl dc, GuiContext context)
1730 20 Dec 05 nicklas 261   {
1759 12 Jan 06 nicklas 262     if (jobParameters != null && !jobParameters.isWriteProtected() && job != null)
1730 20 Dec 05 nicklas 263     {
1759 12 Jan 06 nicklas 264       Job theJob = job.isInDatabase() ? Job.getById(dc, job.getId()) : job;
4379 05 Aug 08 nicklas 265       JobData jobData = theJob.getData();
4379 05 Aug 08 nicklas 266       if (pluginConfiguration != null)
4379 05 Aug 08 nicklas 267       {
4379 05 Aug 08 nicklas 268         jobData.setParameterVersion(pluginConfiguration.getParameterVersion());
4379 05 Aug 08 nicklas 269       }
4379 05 Aug 08 nicklas 270       if (context != null)
4379 05 Aug 08 nicklas 271       {
4379 05 Aug 08 nicklas 272         jobData.setContextItem(context.getItem().getValue());
4379 05 Aug 08 nicklas 273         jobData.setContextType(context.getType().getValue());
4379 05 Aug 08 nicklas 274         jobData.setSubContext(context.getSubContext());
4379 05 Aug 08 nicklas 275         
4379 05 Aug 08 nicklas 276       }
4379 05 Aug 08 nicklas 277       else
4379 05 Aug 08 nicklas 278       {
4379 05 Aug 08 nicklas 279         jobData.setContextItem(null);
4379 05 Aug 08 nicklas 280         jobData.setContextType(null);
4379 05 Aug 08 nicklas 281         jobData.setSubContext(null);
4379 05 Aug 08 nicklas 282       }
2348 01 Jun 06 nicklas 283       jobParameters.saveParameters(theJob, parameterInfo);
1730 20 Dec 05 nicklas 284     }
1766 13 Jan 06 nicklas 285     if (configurationParameters != null && !configurationParameters.isWriteProtected() && pluginConfiguration != null)
1730 20 Dec 05 nicklas 286     {
1766 13 Jan 06 nicklas 287       PluginConfiguration theConfig = pluginConfiguration.isInDatabase() ? PluginConfiguration.getById(dc, pluginConfiguration.getId()) : pluginConfiguration;
2348 01 Jun 06 nicklas 288       configurationParameters.saveParameters(theConfig, parameterInfo);
1730 20 Dec 05 nicklas 289     }
1730 20 Dec 05 nicklas 290   }
1730 20 Dec 05 nicklas 291
1238 05 Sep 05 nicklas 292   /**
1376 22 Sep 05 nicklas 293     Sets the next command in a configuration sequence.
1238 05 Sep 05 nicklas 294   */
1376 22 Sep 05 nicklas 295   void setNextCommand(String command)
1212 02 Sep 05 nicklas 296   {
1376 22 Sep 05 nicklas 297     this.command = command;
1376 22 Sep 05 nicklas 298     requestParameters.clear();
1212 02 Sep 05 nicklas 299   }
1212 02 Sep 05 nicklas 300   
1238 05 Sep 05 nicklas 301   /**
1376 22 Sep 05 nicklas 302     Get the plugin object.
4105 28 Jan 08 nicklas 303     @since 2.6 (was not public before)
1238 05 Sep 05 nicklas 304   */
4105 28 Jan 08 nicklas 305   public P getPlugin()
1212 02 Sep 05 nicklas 306   {
1376 22 Sep 05 nicklas 307     return plugin;
1212 02 Sep 05 nicklas 308   }
1212 02 Sep 05 nicklas 309   
2854 02 Nov 06 nicklas 310   /**
2854 02 Nov 06 nicklas 311     Get the job for the request or null if we are not configuring/executing a job.
2854 02 Nov 06 nicklas 312     @since 2.2
2854 02 Nov 06 nicklas 313   */
2854 02 Nov 06 nicklas 314   Job getJob()
2854 02 Nov 06 nicklas 315   {
2854 02 Nov 06 nicklas 316     return job;
2854 02 Nov 06 nicklas 317   }
938 15 Jul 05 samuel 318   
1238 05 Sep 05 nicklas 319   /**
1238 05 Sep 05 nicklas 320     An implementation of the {@link Request} interface 
1238 05 Sep 05 nicklas 321     that is passed to the plugin.
1238 05 Sep 05 nicklas 322   */
1376 22 Sep 05 nicklas 323   class RequestImpl
1212 02 Sep 05 nicklas 324     implements Request
1212 02 Sep 05 nicklas 325   {
2854 02 Nov 06 nicklas 326     private final boolean allowImmediateExecution;
2854 02 Nov 06 nicklas 327     RequestImpl(boolean allowImmediateExecution)
2854 02 Nov 06 nicklas 328     {
2854 02 Nov 06 nicklas 329       this.allowImmediateExecution = allowImmediateExecution;
2854 02 Nov 06 nicklas 330     }
2854 02 Nov 06 nicklas 331     
1238 05 Sep 05 nicklas 332     /*
1238 05 Sep 05 nicklas 333       From the Request interface (plugin package)
1238 05 Sep 05 nicklas 334       ---------------------------------------------------
1238 05 Sep 05 nicklas 335     */
6127 14 Sep 12 nicklas 336     @Override
1212 02 Sep 05 nicklas 337     public String getCommand()
1212 02 Sep 05 nicklas 338     {
1212 02 Sep 05 nicklas 339       return command;
1212 02 Sep 05 nicklas 340     }
1212 02 Sep 05 nicklas 341     
6127 14 Sep 12 nicklas 342     @Override
7321 05 Apr 17 nicklas 343     public Serializable getState()
7321 05 Apr 17 nicklas 344     {
7321 05 Apr 17 nicklas 345       return state;
7321 05 Apr 17 nicklas 346     }
7321 05 Apr 17 nicklas 347     
7605 26 Feb 19 nicklas 348     @SuppressWarnings("unchecked")
7321 05 Apr 17 nicklas 349     @Override
7605 26 Feb 19 nicklas 350     public <T> T getParameterValue(String name)
1212 02 Sep 05 nicklas 351     {
7605 26 Feb 19 nicklas 352       T value = null;
7605 26 Feb 19 nicklas 353       List<T> values = (List<T>)requestParameters.get(name);
1212 02 Sep 05 nicklas 354       if (values != null && values.size() != 0)
1212 02 Sep 05 nicklas 355       {
1212 02 Sep 05 nicklas 356         value = values.get(0);
1212 02 Sep 05 nicklas 357       }
1212 02 Sep 05 nicklas 358       return value;
1212 02 Sep 05 nicklas 359     }
1212 02 Sep 05 nicklas 360   
7605 26 Feb 19 nicklas 361     @SuppressWarnings("unchecked")
6127 14 Sep 12 nicklas 362     @Override
7605 26 Feb 19 nicklas 363     public <T> List<T> getParameterValues(String name)
1212 02 Sep 05 nicklas 364     {
7605 26 Feb 19 nicklas 365       return (List<T>)requestParameters.get(name);
1212 02 Sep 05 nicklas 366     }
2854 02 Nov 06 nicklas 367     
6127 14 Sep 12 nicklas 368     @Override
2854 02 Nov 06 nicklas 369     public boolean isAllowedImmediateExecution()
2854 02 Nov 06 nicklas 370     {
2854 02 Nov 06 nicklas 371       return allowImmediateExecution;
2854 02 Nov 06 nicklas 372     }
1238 05 Sep 05 nicklas 373     // -------------------------------------------
1212 02 Sep 05 nicklas 374   }
938 15 Jul 05 samuel 375 }