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

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

References #1542: Plug-ins should be able to suggest a better job name

Fixed in the core API. Plug-ins can now call Response.setSuggestedJobName() to suggest a job name. The reporter importer was used as a test case. I will fix this in the remaining core plug-ins.

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