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

Last change on this file since 5917 was 5917, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

Edit dialogs for array lims.

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