source: trunk/www/common/plugin/index.jsp @ 5437

Last change on this file since 5437 was 5437, checked in by Nicklas Nordborg, 12 years ago

Fixes #1519: Add TimestampParameterType? to plug-in api and provide support for it in the qui

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 24.6 KB
Line 
1<%-- $Id: index.jsp 5437 2010-10-01 11:51:57Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Johan Enell, Jari Häkkinen, Nicklas Nordborg
5  Copyright (C) 2007 Nicklas Nordborg, Martin Svensson
6
7  This file is part of BASE - BioArray Software Environment.
8  Available at http://base.thep.lu.se/
9
10  BASE is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License
12  as published by the Free Software Foundation; either version 3
13  of the License, or (at your option) any later version.
14
15  BASE is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with BASE. If not, see <http://www.gnu.org/licenses/>.
22  ------------------------------------------------------------------
23
24  @author Nicklas
25  @version 2.0
26--%>
27<%@ page pageEncoding="UTF-8" session="false"
28  import="net.sf.basedb.core.SessionControl"
29  import="net.sf.basedb.core.DbControl"
30  import="net.sf.basedb.core.BasicItem"
31  import="net.sf.basedb.core.Item"
32  import="net.sf.basedb.core.ItemContext"
33  import="net.sf.basedb.core.ItemQuery"
34  import="net.sf.basedb.core.PluginDefinition"
35  import="net.sf.basedb.core.PluginConfiguration"
36  import="net.sf.basedb.core.PluginParameter"
37  import="net.sf.basedb.core.ParameterType"
38  import="net.sf.basedb.core.StringParameterType"
39  import="net.sf.basedb.core.IntegerParameterType"
40  import="net.sf.basedb.core.LongParameterType"
41  import="net.sf.basedb.core.FloatParameterType"
42  import="net.sf.basedb.core.DoubleParameterType"
43  import="net.sf.basedb.core.ItemParameterType"
44  import="net.sf.basedb.core.DateParameterType"
45  import="net.sf.basedb.core.TimestampParameterType"
46  import="net.sf.basedb.core.BooleanParameterType"
47  import="net.sf.basedb.core.FileParameterType"
48  import="net.sf.basedb.core.PathParameterType"
49  import="net.sf.basedb.core.File"
50  import="net.sf.basedb.core.Path"
51  import="net.sf.basedb.core.Job"
52  import="net.sf.basedb.core.JobAgent"
53  import="net.sf.basedb.core.Type"
54  import="net.sf.basedb.core.Experiment"
55  import="net.sf.basedb.core.InternalJobQueue"
56  import="net.sf.basedb.core.BaseException"
57  import="net.sf.basedb.core.PermissionDeniedException"
58  import="net.sf.basedb.core.PluginConfigurationRequest"
59  import="net.sf.basedb.core.PluginExecutionRequest"
60  import="net.sf.basedb.core.PluginResponse"
61  import="net.sf.basedb.core.Include"
62  import="net.sf.basedb.core.SimpleProgressReporter"
63  import="net.sf.basedb.core.query.Hql"
64  import="net.sf.basedb.core.query.Expressions"
65  import="net.sf.basedb.core.query.Restrictions"
66  import="net.sf.basedb.core.query.Orders"
67  import="net.sf.basedb.core.plugin.Plugin"
68  import="net.sf.basedb.core.plugin.Response"
69  import="net.sf.basedb.core.plugin.GuiContext"
70  import="net.sf.basedb.core.plugin.InteractivePlugin"
71  import="net.sf.basedb.core.plugin.ExportOutputStream"
72  import="net.sf.basedb.core.signal.Signal"
73  import="net.sf.basedb.core.signal.SignalHandler"
74  import="net.sf.basedb.core.signal.SignalTarget"
75  import="net.sf.basedb.clients.web.Base"
76  import="net.sf.basedb.clients.web.WebException"
77  import="net.sf.basedb.clients.web.DuplicateWizardException"
78  import="net.sf.basedb.util.Values"
79  import="net.sf.basedb.util.ContextUtil"
80  import="net.sf.basedb.util.ContextUtil.ContextResult"
81  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
82  import="net.sf.basedb.clients.web.util.HTML"
83  import="net.sf.basedb.clients.web.util.ServletExportOutputStream"
84  import="net.sf.basedb.clients.web.util.SimpleSignalProgressReporter"
85  import="java.util.List"
86  import="java.util.LinkedList"
87  import="java.util.Arrays"
88  import="java.util.Map"
89  import="java.util.HashMap"
90  import="java.util.LinkedHashMap"
91  import="java.util.Set"
92  import="java.util.HashSet"
93  import="java.util.EnumSet"
94  import="java.io.PrintWriter"
95%>
96<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
97<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
98
99<%!
100private static final Set<Item> EXPERIMENT_CONTEXTS = 
101  EnumSet.of(Item.EXPERIMENT, Item.BIOASSAYSET, Item.BIOASSAY);
102
103private static String getJspPage(PluginConfigurationRequest request, 
104    PluginDefinition plugin, String defaultPage, String root)
105{
106  String jspPage = request.getRequestInformation().getJspPage();
107  if (jspPage == null)
108  {
109    jspPage = defaultPage;
110  }
111  else if (jspPage.startsWith("/"))
112  {
113    // The path is absolute... if it starts with the context root
114    // it must be removed because we are doing a forward action
115    if (jspPage.startsWith(root)) jspPage = jspPage.substring(root.length()-1);
116  }
117  else
118  {
119    String className = plugin.getClassName();
120    int lastDot = className.lastIndexOf('.');
121    String packageName = lastDot == -1 ? "" : className.substring(0, lastDot+1);
122    jspPage = "/plugins/"+packageName.replace('.', '/')+jspPage;
123  }
124  jspPage += "?requestId="+System.identityHashCode(request);
125  return jspPage;
126}
127private static Experiment getCurrentExperiment(DbControl dc, GuiContext context)
128{
129  if (!EXPERIMENT_CONTEXTS.contains(context.getItem())) return null;
130  SessionControl sc = dc.getSessionControl();
131  ItemContext expCtx = sc.getCurrentContext(Item.EXPERIMENT);
132  if (expCtx.getId() == 0) return null;
133  return Experiment.getById(dc, expCtx.getId());
134}
135%>
136
137<%
138final String root = request.getContextPath()+"/";
139final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
140final String ID = sc.getId();
141final String cmd = request.getParameter("cmd");
142final boolean warnIfOpen = Values.getBoolean(request.getParameter("warnIfOpen"), true);
143final boolean anotherIsOpen = sc.getSessionSetting("plugin.configure.plugin") != null;
144
145DbControl dc = null;
146String forward = null;
147String message = null;
148String redirect = null;
149try
150{
151
152  if ("SelectPlugin".equals(cmd))
153  {
154    Item itemType = Item.valueOf(request.getParameter("item_type"));
155    String subContext = Values.getString(request.getParameter("subcontext"), "");
156    GuiContext.Type contextType = GuiContext.Type.valueOf(request.getParameter("context_type"));
157    GuiContext context = new GuiContext(itemType, contextType, subContext);
158    Plugin.MainType mainType = Plugin.MainType.valueOf(request.getParameter("main_type"));
159    String pluginType = request.getParameter("plugin_type");
160
161    ItemQuery<PluginDefinition> pluginQuery = PluginDefinition.getQuery(context, pluginType);
162    pluginQuery.restrict(
163      Restrictions.eq(
164        Hql.property("mainType"),
165        Expressions.integer(mainType.getValue())
166      )
167    );
168    pluginQuery.order(Orders.asc(Hql.property("name")));
169    pluginQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
170   
171    ItemQuery<PluginConfiguration> configQuery = PluginConfiguration.getQuery();
172    configQuery.restrict(
173        Restrictions.eq(
174          Hql.property("pluginDefinition"),
175          Expressions.parameter("plugin")
176        )
177      );
178    configQuery.order(Orders.asc(Hql.property("name")));
179    configQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
180   
181    dc = sc.newDbControl();
182    Object currentItem = null;
183    if (contextType == GuiContext.Type.ITEM)
184    {
185      currentItem = itemType.getById(dc, sc.getCurrentContext(itemType).getId());
186    }
187    List<ContextResult> contextResult = ContextUtil.checkContext(dc, pluginQuery, configQuery, context, currentItem);
188    dc.close();
189
190    boolean showWarnings = Values.getBoolean(sc.getUserClientSetting("plugins.showWarnings"), false);
191    int totalPlugins = ContextUtil.countUsuablePlugins(contextResult);
192    Set<String> contextMessages = ContextUtil.getContextMessages(contextResult, showWarnings, true);
193   
194    if (totalPlugins == 0)
195    {
196      String msg = "No plugins can be used in this context, for the following reasons:<br><ul><li>";
197      if (contextMessages.size() == 0)
198      {
199        msg += "Could not find any plugins that you have permission to use</ul>";
200      }
201      else
202      {
203        msg += Values.getString(contextMessages, "<li>", true) + "</ul>";
204      }
205      throw new WebException("popup", "No usable plugins found", msg);
206    }
207    sc.setSessionSetting("MESSAGES", contextMessages);
208    sc.setSessionSetting("PLUGINS", contextResult);
209    if (totalPlugins == 1 && contextMessages.size() == 0 && !(warnIfOpen && anotherIsOpen))
210    {
211      // Only one plug-in, that can be used, exists, find it in contextResult and
212      //go directly to parameter input page
213      int i = 0;
214      PluginDefinition thePlugin = null;
215      PluginConfiguration theConfig = null;
216      while (i < contextResult.size() && thePlugin == null)
217      {
218        if (contextResult.get(i).isInContext())
219        {
220          thePlugin = contextResult.get(i).getPluginDefinition();
221          theConfig = contextResult.get(i).getPluginConfiguration();
222        }
223        i++;
224      }
225      int pluginDefinitionId = thePlugin.getId();
226      int pluginConfigurationId = theConfig == null ? 0 : theConfig.getId();
227      forward = "index.jsp?cmd=NewJob"+
228        "&plugindefinition_id="+pluginDefinitionId+
229        "&pluginconfiguration_id="+pluginConfigurationId;
230    }
231    else
232    {
233      forward = "select_plugin.jsp";
234    }
235  }
236  else if ("ConfigurePlugin".equals(cmd))
237  {
238    if (warnIfOpen && anotherIsOpen) 
239    {
240      throw new DuplicateWizardException();
241    }
242    int pluginConfigurationId = Values.getInt(request.getParameter("pluginconfiguration_id"));
243   
244    dc = sc.newDbControl();
245    PluginConfiguration pluginConfig = PluginConfiguration.getById(dc, pluginConfigurationId);
246    PluginDefinition plugin = pluginConfig.getPluginDefinition();
247   
248    if (!plugin.supportsConfigurations())
249    {
250      throw new WebException("popup", "Configurations are not supported",
251        "The plugin {1} doesn't support configurations.", HTML.encodeTags(plugin.getName()));
252    }
253    PluginConfigurationRequest pcRequest = pluginConfig.configure();
254   
255    sc.setSessionSetting("plugin.configure.request", pcRequest);
256    sc.setSessionSetting("plugin.configure.job", null);
257    sc.setSessionSetting("plugin.configure.plugin", plugin);
258    sc.setSessionSetting("plugin.configure.config", pluginConfig);
259    sc.setSessionSetting("plugin.configure.errors.message", null);
260    sc.setSessionSetting("plugin.configure.errors.list", null);
261    forward = getJspPage(pcRequest, plugin, "configure.jsp", root);
262  }
263
264  else if ("NewJob".equals(cmd))
265  {
266    if (warnIfOpen && anotherIsOpen) 
267    {
268      throw new DuplicateWizardException();
269    }
270    String pluginClass = request.getParameter("plugin_class");
271    int pluginDefinitionId = Values.getInt(request.getParameter("plugindefinition_id"));
272    int pluginConfigurationId = Values.getInt(request.getParameter("pluginconfiguration_id"));
273    Item itemType = Item.valueOf(request.getParameter("item_type"));
274    String subContext = Values.getString(request.getParameter("subcontext"), "");
275    ItemContext currentContext = sc.getCurrentContext(itemType, subContext);
276    GuiContext.Type contextType = GuiContext.Type.valueOf(request.getParameter("context_type"));
277    GuiContext context = new GuiContext(itemType, contextType, subContext);
278   
279    dc = sc.newDbControl();
280    PluginDefinition plugin = pluginClass == null ? 
281      PluginDefinition.getById(dc, pluginDefinitionId) : PluginDefinition.getByClassName(dc, pluginClass);
282    PluginConfiguration pluginConfig = pluginConfigurationId == 0 ? null : PluginConfiguration.getById(dc, pluginConfigurationId);
283    Job job = Job.getNew(dc, plugin, pluginConfig, getCurrentExperiment(dc, context));
284    String jobName = Values.getStringOrNull(request.getParameter("job_name"));
285    job.setName(jobName == null ? "Run plugin: " + plugin.getName() : jobName);
286    job.setDescription(request.getParameter("job_description"));
287   
288    PluginConfigurationRequest pcRequest = job.configure(context);
289    sc.setSessionSetting("plugin.configure.request", pcRequest);
290    sc.setSessionSetting("plugin.configure.job", job);
291    sc.setSessionSetting("plugin.configure.plugin", plugin);
292    sc.setSessionSetting("plugin.configure.config", pluginConfig);
293    sc.setSessionSetting("plugin.configure.errors.message", null);
294    sc.setSessionSetting("plugin.configure.errors.list", null);
295    sc.setSessionSetting("plugin.configure.currentContext", currentContext);
296    forward = getJspPage(pcRequest, plugin, "configure.jsp", root);
297  }
298 
299  else if ("CopyJob".equals(cmd))
300  {
301    dc = sc.newDbControl();
302    int jobId = Values.getInt(request.getParameter("job_id"));
303    Job copyFrom = Job.getById(dc, jobId);
304    PluginDefinition plugin = copyFrom.getPluginDefinition();
305    PluginConfiguration pluginConfig = copyFrom.getPluginConfiguration();
306   
307    Item itemType = Item.valueOf(request.getParameter("item_type"));
308    String subContext = Values.getString(request.getParameter("subcontext"), "");
309    ItemContext currentContext = sc.getCurrentContext(itemType, subContext);
310    GuiContext.Type contextType = GuiContext.Type.valueOf(request.getParameter("context_type"));
311    GuiContext context = new GuiContext(itemType, contextType, subContext);
312
313    Job job = Job.getNew(dc, plugin, pluginConfig, getCurrentExperiment(dc, context));
314    job.copyParametersFrom(copyFrom);
315   
316    PluginConfigurationRequest pcRequest = job.configure(context);
317    sc.setSessionSetting("plugin.configure.request", pcRequest);
318    sc.setSessionSetting("plugin.configure.job", job);
319    sc.setSessionSetting("plugin.configure.plugin", plugin);
320    sc.setSessionSetting("plugin.configure.config", pluginConfig);
321    sc.setSessionSetting("plugin.configure.errors.message", null);
322    sc.setSessionSetting("plugin.configure.errors.list", null);
323    sc.setSessionSetting("plugin.configure.currentContext", currentContext);
324    forward = getJspPage(pcRequest, plugin, "configure.jsp", root);
325  }
326 
327  else if ("ConfigureJob".equals(cmd))
328  {
329    dc = sc.newDbControl();
330
331    int jobId = Values.getInt(request.getParameter("job_id"));
332    Job job = Job.getById(dc, jobId);
333   
334    //Item itemType = Item.valueOf(request.getParameter("item_type"));
335    //String subContext = Values.getString(request.getParameter("subcontext"), "");
336    //GuiContext.Type contextType = GuiContext.Type.valueOf(request.getParameter("context_type"));
337    GuiContext context = job.getLastGuiContext();
338   
339    PluginDefinition plugin = job.getPluginDefinition();
340    PluginConfiguration pluginConfig = job.getPluginConfiguration();
341   
342    PluginConfigurationRequest pcRequest = job.configure(context);
343    sc.setSessionSetting("plugin.configure.request", pcRequest);
344    sc.setSessionSetting("plugin.configure.job", job);
345    sc.setSessionSetting("plugin.configure.plugin", plugin);
346    sc.setSessionSetting("plugin.configure.config", pluginConfig);
347    sc.setSessionSetting("plugin.configure.errors.message", null);
348    sc.setSessionSetting("plugin.configure.errors.list", null);
349    forward = getJspPage(pcRequest, plugin, "configure.jsp", root);
350  }
351
352  else if ("SetParameters".equals(cmd))
353  {
354    int maxRecent = Base.getMaxRecent(sc);
355    PluginConfigurationRequest pcRequest = (PluginConfigurationRequest)sc.getSessionSetting("plugin.configure.request");   
356    String requestId = request.getParameter("requestId");
357    if (requestId != null && !requestId.equals(Integer.toString(System.identityHashCode(pcRequest))))
358    {
359      throw new WebException("popup", "Invalid request ID", "Data in your configuration wizard has become corrupted. Please re-start and try again.");
360    }
361    List<PluginParameter<?>> parameters =  pcRequest.getRequestInformation().getParameters();
362    List<Throwable> parseErrors = new LinkedList<Throwable>();
363    ItemContext currentContext = (ItemContext)sc.getSessionSetting("plugin.configure.currentContext");
364    // Clear old errors
365    sc.setSessionSetting("plugin.configure.errors.message", null);
366    sc.setSessionSetting("plugin.configure.errors.list", null);
367    if (parameters != null && parameters.size() > 0)
368    {
369      for (PluginParameter<?> param : parameters)
370      {
371        ParameterType pType = param.getParameterType();
372        if (pType != null)
373        {
374          String[] sValues = request.getParameterValues("parameter:"+param.getName());
375          boolean emptyIsNull = Values.getBoolean(request.getParameter("parameter:" + param.getName() + ":emptyIsNull"));
376          if (emptyIsNull)
377          {
378            for (int i = 0; i < sValues.length; ++i)
379            {
380              if ("".equals(sValues[i])) sValues[i] = null;
381            }
382          }
383          Object[] oValues = null;
384          try
385          {
386            if (sValues != null)
387            {
388              if (pType instanceof StringParameterType)
389              {
390                oValues = sValues;
391              }
392              else if (pType instanceof IntegerParameterType)
393              {
394                oValues = Values.getInt(sValues);
395              }
396              else if (pType instanceof LongParameterType)
397              {
398                oValues = Values.getLong(sValues);
399              }
400              else if (pType instanceof FloatParameterType)
401              {
402                oValues = Values.getFloat(sValues);
403              }
404              else if (pType instanceof DoubleParameterType)
405              {
406                oValues = Values.getDouble(sValues);
407              }
408              else if (pType instanceof BooleanParameterType)
409              {
410                oValues = Type.BOOLEAN.parseStrings(sValues);
411              }
412              else if (pType instanceof DateParameterType)
413              {
414                oValues = Values.getDate(sValues, FormatterFactory.getDateFormatter(sc));
415              }
416              else if (pType instanceof TimestampParameterType)
417              {
418                oValues = Values.getDate(sValues, FormatterFactory.getDateTimeFormatter(sc));
419              }
420              else if (pType instanceof ItemParameterType)
421              {
422                Integer[] itemId = Values.getInt(sValues);
423                oValues = new Object[itemId.length];
424                Item iType = Item.fromItemClass(pType.getParameterClass());
425                dc = sc.newDbControl();
426                for (int i = 0; i < itemId.length; ++i)
427                {
428                  Integer id = itemId[i];
429                  if (id != null && id != 0)
430                  {
431                    BasicItem item = iType.getById(dc, id);
432                    oValues[i] = item;
433                    if (currentContext != null) 
434                    {
435                      currentContext.setRecent(item, maxRecent);
436                    }
437                  }
438                }
439                dc.close();
440              }
441              else if (pType instanceof FileParameterType)
442              {
443                oValues = new Object[sValues.length];
444                dc = sc.newDbControl();
445                for (int i = 0; i < sValues.length; ++i)
446                {
447                  File file = File.getByPath(dc, new Path(sValues[i], Path.Type.FILE), false);
448                  oValues[i] = file;
449                  if (currentContext != null) 
450                  {
451                    currentContext.setRecent(file, maxRecent);
452                  }
453                }
454                dc.close();
455              }
456              else if (pType instanceof PathParameterType)
457              {
458                oValues = sValues;
459              }
460            }
461          }
462          catch (Throwable t)
463          {
464            parseErrors.add(t);
465          }
466          pcRequest.setParameterValues(param.getName(), oValues == null ? null : Arrays.asList(oValues));
467        }
468      }
469    }
470    PluginResponse pluginResponse = null;
471    Response.Status status = null;
472    if (parseErrors.size() == 0)
473    {
474      pluginResponse = pcRequest.invoke();
475      status = pluginResponse.getStatus();
476    }
477    else
478    {
479      status = Response.Status.ERROR;
480    }
481    if (status == Response.Status.DONE || status == Response.Status.EXECUTE_IMMEDIATELY)
482    {
483      Job job = (Job)sc.getSessionSetting("plugin.configure.job");
484      if (job != null)
485      {
486        sc.setSessionSetting("plugin.configure.response", pluginResponse);
487        forward = "finish_job.jsp";
488      }
489      else
490      {
491        dc = sc.newDbControl();
492        pluginResponse.saveParameters(dc);
493        dc.commit();
494        sc.setSessionSetting("plugin.configure.request", null);
495        sc.setSessionSetting("plugin.configure.plugin", null);
496        sc.setSessionSetting("plugin.configure.config", null);
497        sc.setSessionSetting("plugin.configure.currentContext", null);
498        message = "Plugin configured";
499      }
500    }
501    else if (status == Response.Status.CONTINUE)
502    {
503      pcRequest = pluginResponse.getNextRequest();
504      sc.setSessionSetting("plugin.configure.request", pcRequest);
505      PluginDefinition plugin = (PluginDefinition)sc.getSessionSetting("plugin.configure.plugin");
506      forward = getJspPage(pcRequest, plugin, "configure.jsp", root);
507    }
508    else if (status == Response.Status.ERROR)
509    {
510      PluginDefinition plugin = (PluginDefinition)sc.getSessionSetting("plugin.configure.plugin");
511      if (parseErrors.size() > 0)
512      {
513        sc.setSessionSetting("plugin.configure.errors.message", 
514          parseErrors.size() + " parameter value(s) are invalid");
515        sc.setSessionSetting("plugin.configure.errors.list", parseErrors);
516      }
517      else
518      {
519        sc.setSessionSetting("plugin.configure.errors.message", pluginResponse.getMessage());
520        sc.setSessionSetting("plugin.configure.errors.list", pluginResponse.getErrorList());
521      }
522      forward = getJspPage(pcRequest, plugin, "configure.jsp", root);
523    }
524    else if (status == Response.Status.DOWNLOAD_IMMEDIATELY)
525    {
526      sc.setSessionSetting("plugin.configure.response", pluginResponse);
527      forward = "download_immediately.jsp";
528    }
529    else
530    {
531      throw new WebException("popup", "Unknown response from plugin", status.toString());
532    }
533  }
534  else if ("FinishNewJob".equals(cmd))
535  {
536    dc = sc.newDbControl();
537    Job job = (Job)sc.getSessionSetting("plugin.configure.job");
538    if (job.isInDatabase()) 
539    {
540      dc.reattachItem(job, false);
541    }
542    else
543    {
544      dc.saveItem(job);
545    }
546   
547    PluginResponse pluginResponse = (PluginResponse)sc.getSessionSetting("plugin.configure.response");
548    boolean executeImmediately =
549      pluginResponse != null && pluginResponse.getStatus() == Response.Status.EXECUTE_IMMEDIATELY;
550
551    job.setName(Values.getStringOrNull(request.getParameter("name")));
552    job.setDescription(Values.getStringOrNull(request.getParameter("description")));
553    job.setSendMessage(Values.getBoolean(request.getParameter("send_message")));
554    job.setRemoveJobWhenFinished(Values.getBoolean(request.getParameter("remove_job")));
555   
556    if (!executeImmediately)
557    {
558      int agentId = Values.getInt(request.getParameter("agent_id"), -1);
559      if (agentId >= 0)
560      {
561        job.setJobAgent(agentId == 0 ? null : JobAgent.getById(dc, agentId));
562      }
563    }
564   
565    if (pluginResponse != null) pluginResponse.saveParameters(dc);
566    dc.commit();
567    redirect = "../../views/jobs/index.jsp?ID="+ID+"&cmd=ViewItem&item_id="+job.getId();
568    sc.setSessionSetting("plugin.configure.job", null);
569    sc.setSessionSetting("plugin.configure.request", null);
570    sc.setSessionSetting("plugin.configure.response", null);
571    sc.setSessionSetting("plugin.configure.plugin", null);
572    sc.setSessionSetting("plugin.configure.config", null);
573    sc.setSessionSetting("plugin.configure.currentContext", null);
574    if (executeImmediately)
575    {
576      PluginExecutionRequest executionRequest = pluginResponse.getExecutionRequest(null);
577      executionRequest.registerSignalReceiver(InternalJobQueue.getSignalReceiver());
578      Thread t = new Thread(executionRequest);
579      t.setPriority(Thread.currentThread().getPriority() - 1);
580      t.start();
581    }
582  }
583  else if ("ExportImmediately".equals(cmd))
584  {
585    PluginResponse pluginResponse = (PluginResponse)sc.getSessionSetting("plugin.configure.response");
586    ExportOutputStream exportStream = new ServletExportOutputStream(response);
587    SimpleSignalProgressReporter progress = new SimpleSignalProgressReporter(null);
588    sc.setSessionSetting("plugin.configure.progress.reporter", progress);
589    try
590    {
591      pluginResponse.downloadImmediately(exportStream, progress);
592    }
593    catch (Throwable t)
594    {
595      PrintWriter pw = new PrintWriter(exportStream, true);
596      t.printStackTrace(pw);
597      pw.flush();
598      pw.close();
599    }
600    exportStream.flush();
601    exportStream.close();
602    sc.setSessionSetting("plugin.configure.job", null);
603    sc.setSessionSetting("plugin.configure.request", null);
604    sc.setSessionSetting("plugin.configure.response", null);
605    sc.setSessionSetting("plugin.configure.plugin", null);
606    sc.setSessionSetting("plugin.configure.config", null);
607    sc.setSessionSetting("plugin.configure.errors.message", null);
608    sc.setSessionSetting("plugin.configure.errors.list", null);
609    sc.setSessionSetting("plugin.configure.currentContext", null);
610    return;
611  }
612  else if ("CancelWizard".equals(cmd))
613  {
614    PluginConfigurationRequest pcRequest = 
615      (PluginConfigurationRequest)sc.setSessionSetting("plugin.configure.request", null);
616    SimpleSignalProgressReporter progress = (SimpleSignalProgressReporter)sc.getSessionSetting("plugin.configure.progress.reporter");
617    if (progress != null) progress.sendToAll(Signal.ABORT);
618    if (pcRequest != null) pcRequest.done();
619    sc.setSessionSetting("plugin.configure.response", null);
620    sc.setSessionSetting("plugin.configure.plugin", null);
621    sc.setSessionSetting("plugin.configure.config", null);
622    sc.setSessionSetting("plugin.configure.job", null);
623    sc.setSessionSetting("plugin.configure.errors.message", null);
624    sc.setSessionSetting("plugin.configure.errors.list", null);
625    sc.setSessionSetting("plugin.configure.currentContext", null);
626    sc.setSessionSetting("plugin.configure.progress.reporter", null);
627    redirect = root + "common/close_popup.jsp?refresh_opener=0&wait=0";
628  }
629  else
630  {
631    throw new WebException("popup", "Invalid command", "The command {1} is not recognised as a valid command.", cmd);
632  }
633}
634finally
635{
636  if (dc != null) dc.close();
637}
638
639if (forward != null)
640{
641  pageContext.forward(forward);
642}
643else if (redirect != null)
644{
645  response.sendRedirect(redirect);
646}
647else if (message == null)
648{
649  response.sendRedirect(root + "common/close_popup.jsp?refresh_opener=1&wait=0");
650}
651else
652{
653  response.sendRedirect(root + "common/close_popup.jsp?refresh_opener=1&message="+HTML.urlEncode(message));
654}
655%>
Note: See TracBrowser for help on using the repository browser.