source: trunk/www/common/plugin/configure.jsp @ 7786

Last change on this file since 7786 was 7786, checked in by Nicklas Nordborg, 2 years ago

Merged patch release 3.15.3 to the trunk.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 29.5 KB
Line 
1<%-- $Id: configure.jsp 7786 2020-03-02 08:10:33Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Johan Enell, Jari Häkkinen, Nicklas Nordborg, Gregory Vincic
5  Copyright (C) 2007 Johan Enell, Nicklas Nordborg
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.Permission"
32  import="net.sf.basedb.core.Item"
33  import="net.sf.basedb.core.File"
34  import="net.sf.basedb.core.Nameable"
35  import="net.sf.basedb.core.Job"
36  import="net.sf.basedb.core.PluginDefinition"
37  import="net.sf.basedb.core.PluginConfiguration"
38  import="net.sf.basedb.core.PluginConfigurationRequest"
39  import="net.sf.basedb.core.RequestInformation"
40  import="net.sf.basedb.core.PluginParameter"
41  import="net.sf.basedb.core.Type"
42  import="net.sf.basedb.core.ParameterType"
43  import="net.sf.basedb.core.StringParameterType"
44  import="net.sf.basedb.core.IntegerParameterType"
45  import="net.sf.basedb.core.LongParameterType"
46  import="net.sf.basedb.core.FloatParameterType"
47  import="net.sf.basedb.core.DoubleParameterType"
48  import="net.sf.basedb.core.ItemParameterType"
49  import="net.sf.basedb.core.DateParameterType"
50  import="net.sf.basedb.core.TimestampParameterType"
51  import="net.sf.basedb.core.BooleanParameterType"
52  import="net.sf.basedb.core.FileParameterType"
53  import="net.sf.basedb.core.PathParameterType"
54  import="net.sf.basedb.core.ItemContext"
55  import="net.sf.basedb.core.Path"
56  import="net.sf.basedb.util.Enumeration"
57  import="net.sf.basedb.util.error.ThrowableUtil"
58  import="net.sf.basedb.util.json.JsonConverter"
59  import="net.sf.basedb.util.json.JsonUtil"
60  import="net.sf.basedb.plugins.util.Parameters"
61  import="net.sf.basedb.clients.web.Base"
62  import="net.sf.basedb.clients.web.WebException"
63  import="net.sf.basedb.clients.web.util.HTML"
64  import="net.sf.basedb.util.formatter.Formatter"
65  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
66  import="net.sf.basedb.clients.web.formatter.FormatterSettings"
67  import="net.sf.basedb.util.Values"
68  import="java.util.Date"
69  import="java.util.List"
70  import="java.util.Arrays"
71  import="java.util.ArrayList"
72  import="java.util.HashSet"
73  import="java.util.Set"
74  import="java.util.Collections"
75  import="org.json.simple.JSONArray"
76  import="org.json.simple.JSONObject"
77%>
78<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
79<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
80<%!
81List<?> getParameterValues(PluginParameter<?> pp, DbControl dc, javax.servlet.http.HttpServletRequest request, 
82  PluginConfigurationRequest pcRequest, ItemContext currentContext, Job job)
83{
84  ParameterType<?> pType = pp.getParameterType();
85 
86  // Get the current values... First we look in the http request object...
87  String[] requestValues = request.getParameterValues("parameter:"+pp.getName());
88 
89  // ...or in the current values from the job / plugin configuration
90  List<?> values = requestValues != null ? Arrays.asList(requestValues) : pcRequest.getCurrentParameterValues(pp.getName());
91
92  // File parameters should also check the auto-detected-file (if not enumeration)
93  if ((values == null || values.size() == 0) && !pType.isEnumeration() && 
94    pType instanceof FileParameterType)
95  {
96    if (currentContext != null && currentContext.getObject("auto-detected-file") != null)
97    {
98      values =  Collections.singletonList(currentContext.getObject("auto-detected-file"));
99      currentContext.setObject("auto-detected-file", null);
100    }
101  }
102 
103  // Special handling for "charset" parameter to make it match the auto-selected file
104  if (currentContext != null && Parameters.CHARSET_PARAMETER.equals(pp.getName()))
105  {
106    Object charset = currentContext.getObject("last-file-charset");
107    if (charset != null) values = Collections.singletonList(charset);
108  }
109 
110  // Special handling for "dryRun" parameter which is typically not stored as a job proerty
111  if ((values == null || values.size() == 0) && Parameters.DRY_RUN_PARAMETER.equals(pp.getName()))
112  {
113    if (job != null && job.isDryRun())
114    {
115      values = Collections.singletonList(true);
116    }
117  }
118 
119  // Then, we check the parameters default value
120  if ((values == null || values.size() == 0) && pp.getDefaultValue() != null)
121  {
122    values = Collections.singletonList(pp.getDefaultValue());
123  }
124 
125  // Item and File parameters will also look in the current context unless they are enumerated
126  if ((values == null || values.size() == 0) && 
127    !pType.isEnumeration() &&
128    (pType instanceof ItemParameterType || pType instanceof FileParameterType))
129  {
130    Item parameterItemType = Item.fromClass(pType.getParameterClass());
131    ItemContext cc = currentContext;
132    if (cc == null || parameterItemType != cc.getItemType())
133    {
134      cc = dc.getSessionControl().getCurrentContext(parameterItemType);
135    }
136    if (cc.getId() != 0 && pType.getMultiplicity() == 1)
137    {
138      if (pType instanceof FileParameterType)
139      {
140        try
141        {
142          File file = File.getById(dc, cc.getId());
143          values = Collections.singletonList(file.getPath().toString());
144          if (currentContext != null && file.getCharacterSet() != null)
145          {
146            currentContext.setObject("last-file-charset", file.getCharacterSet());
147          }
148        }
149        catch (Throwable t)
150        {}
151      }
152      else
153      {
154        values = Collections.singletonList(cc.getId());
155      }
156    }
157    else if (cc.getSelected().size() > 0 && pType.getMultiplicity() != 1)
158    {
159      values = new ArrayList<>(cc.getSelected());
160    }
161  }
162  // Finally, if the parameter has multiplicity=1, is requried and has a list of enumeration values
163  if ((values == null || values.size() == 0) && pType.getNotNull() && 
164    pType.getMultiplicity() == 1 && pType.getItems() != null && pType.getItems().size() > 0)
165  {
166    values = Collections.singletonList(pType.getItems().get(0)); 
167  }
168
169  return values;
170}
171
172JSONArray convertToJson(List<?> values, DbControl dc, ParameterType<?> pType, Formatter<Date> dateFormatter, Formatter<Date> dateTimeFormatter)
173{
174  JSONArray json = new JSONArray();
175 
176  if (values != null && values.size() > 0)
177  {
178    for (Object value : values)
179    {
180      if (value instanceof Date) 
181      {
182        if (pType.isEnumeration())
183        {
184          value = ((Date)value).getTime();
185        }
186        else
187        {
188          if (pType.getValueType() == Type.TIMESTAMP)
189          {
190            value = dateTimeFormatter.format((Date)value);
191          }
192          else
193          {
194            value = dateFormatter.format((Date)value);
195          }
196        }
197      }
198      else if (value instanceof File && pType instanceof FileParameterType)
199      {
200        File file = File.getById(dc, ((File)value).getId());
201        value = file.getPath().toString();
202      }
203      else if (value instanceof BasicItem)
204      {
205        value = ((BasicItem)value).getId();
206      }
207      if (value != null)
208      {
209        json.add(value.toString());
210      }
211    }
212  }
213  return json;
214}
215%>
216<%
217final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
218final String ID = sc.getId();
219final float scale = Base.getScale(sc);
220
221final Item itemType = request.getParameter("item_type") == null ? null : Item.valueOf(request.getParameter("item_type"));
222final String subContext = Values.getString(request.getParameter("subcontext"), "");
223final ItemContext currentContext = itemType == null ? null : sc.getCurrentContext(itemType, subContext);
224final DbControl dc = sc.newDbControl();
225try
226{
227  final Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
228  String dateFormat = FormatterSettings.getDateFormat(sc);
229  String htmlDateFormat = HTML.encodeTags(dateFormat);
230  final Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
231  String dateTimeFormat = FormatterSettings.getDateTimeFormat(sc);
232  String htmlDateTimeFormat = HTML.encodeTags(dateTimeFormat);
233
234  final PluginConfigurationRequest pcRequest = sc.getSessionSetting("plugin.configure.request");
235  if (pcRequest == null) throw new WebException("popup", "No request information found", "No request information found");
236 
237  final PluginDefinition plugin = sc.getSessionSetting("plugin.configure.plugin");
238  final Job job = sc.getSessionSetting("plugin.configure.job");
239  dc.reattachItem(plugin, false);
240 
241  final Set<String> options = new HashSet<String>();
242  final PluginConfiguration pluginConfig = sc.getSessionSetting("plugin.configure.config");
243  String errorMessage = sc.getSessionSetting("plugin.configure.errors.message");
244  List<Throwable> errors = sc.getSessionSetting("plugin.configure.errors.list");
245 
246  final RequestInformation ri = pcRequest.getRequestInformation();
247  List<PluginParameter<?>> parameters =  ri.getParameters();
248  String title = HTML.encodeTags(ri.getTitle());
249  String jobName = Values.getString(request.getParameter("job_name"), title);
250  StringBuilder sb = new StringBuilder();
251  String helpText = ri.getDescription();
252  if (helpText == null && pluginConfig != null) helpText = pluginConfig.getDescription();
253  if (helpText == null) helpText = plugin.getDescription();
254  List<File> recentFiles = currentContext == null ? null : currentContext.getRecent(dc, Item.FILE);
255 
256  JSONArray jsonParameters = JsonUtil.toArray(parameters, new JsonConverter<PluginParameter<?>>()
257  {
258    public Object convert(PluginParameter<?> pp)
259    {
260      ParameterType<?> pType = pp.getParameterType();
261      JSONObject json = new JSONObject();
262      json.put("name", pp.getName());
263      json.put("label", pp.getLabel());
264      json.put("hidden", pp.isHidden() ? 1 : 0);
265      if ("parserSection".equals(pp.getName())) 
266      {
267        if (plugin.supports("net.sf.basedb.util.parser.ConfigureByExample"))
268        {
269          options.add("configure-by-example");
270        }
271      }
272      if (pType != null)
273      {
274        json.put("valueClass", pType.getClass().getSimpleName());
275        if (pType instanceof PathParameterType)
276        {
277          PathParameterType ppType = (PathParameterType)pType;
278          json.put("pathType", ppType.getPathType().name());
279        }
280        json.put("nullable", pType.getNotNull() ? 0 : 1);
281        json.put("enumeration", pType.isEnumeration() ? 1 : 0);
282        json.put("multiplicity", pType.getMultiplicity());
283        List<?> values = getParameterValues(pp, dc, request, pcRequest, currentContext, job);
284        json.put("values", convertToJson(values, dc, pType, dateFormatter, dateTimeFormatter));
285      }
286      return json;
287    }
288  });
289  %>
290  <base:page type="popup" title="<%=title%>">
291  <base:head scripts="~configure.js" styles="parameters.css" />
292  <base:body>
293    <h1><%=title%> <base:help 
294      helpid="<%="runplugin.configure"+(job != null ? "." + plugin.getMainType().name().toLowerCase() : "") %>" /></h1>
295    <div id="page-data" class="data-container"
296      data-plugin-parameters="<%=HTML.encodeTags(jsonParameters.toJSONString())%>"
297    ></div>
298
299    <form action="index.jsp?ID=<%=ID%>" method="post" name="configure">
300    <input type="hidden" name="cmd" value="SetParameters">
301    <input type="hidden" name="title" value="<%=title%>">
302    <input type="hidden" name="requestId" value="<%=request.getParameter("requestId")%>">
303    <%
304    if (itemType != null)
305    {
306      %>
307      <input type="hidden" name="item_type" value="<%=itemType.name()%>">
308      <%
309    }
310    %>
311    <input type="hidden" name="subcontext" value="<%=subContext%>">
312   
313    <div class="content bottomborder">
314
315      <div class="absolutefull bg-filled-100" style="height: 4.5em;">
316        <table style="height: 100%; margin:auto;"><tr><td style="padding: 3px;">
317        <b>
318          <%=plugin == null ? "" : HTML.encodeTags(plugin.getName())%>
319          <%=pluginConfig == null ? "" : "(" + HTML.encodeTags(pluginConfig.getName()) + ")"%>
320        </b><br>
321        <%=HTML.niceFormat(helpText)%>
322        </td></tr></table>
323      </div>
324     
325      <div class="absolutefull topborder" style="top: 4.5em;">
326        <div class="absolutefull bg-filled-100 rightborder" style="width: 18em;">
327          <div class="absolutefull parameterlist" id="parameter-list" style="bottom: 2em;">
328          </div>
329       
330          <div class="absolutefull topborder" style="top: auto; bottom: 0px; height: 2em;">
331            <table style="height: 100%; margin:auto;"><tr><td>
332            <base:icon image="hasvalues.png" />= has value(s), <base:icon image="required.png" />= required
333            </td></tr></table>
334          </div>
335        </div>
336       
337        <div class="absolutefull input100" style="left: 18em; padding: 8px;">
338          <%
339          if (errorMessage != null || (errors != null && errors.size() > 0))
340          {
341            %>
342            <div id="errors" style="margin-bottom: 12px;">
343              <div class="messagecontainer error" style="margin: 0px;">
344              <%=errorMessage %>
345              <%
346              if (errors != null && errors.size() > 0)
347              {
348                %>
349                <div id="showerrorlist">
350                  <base:icon 
351                    id="btnShowErrorList"
352                    image="gonext.png" 
353                    style="color: #FFFFFF;"
354                    tooltip="Show more information about each error"
355                  />
356                </div>
357                <div id="errorlist" style="display: none; margin: 0px;">
358                  <base:icon 
359                    id="btnHideErrorList"
360                    image="move_down.png" 
361                    style="color: #FFFFFF;" 
362                    tooltip="Show less information"
363                  />
364                <ol>
365                <%
366                int i = 0;
367                for (Throwable t : errors)
368                {
369                  ++i;
370                  %>
371                  <li><%=t.getMessage()%>
372                    <base:icon
373                      subclass="auto-init"
374                      data-auto-init="toggle-stacktrace"
375                      data-stracktrace-index="<%=i%>"
376                      image="gonext.png" 
377                      tooltip="Toggle display of detailed stacktrace"
378                      id="<%="stacktracelink." + i %>"
379                    />
380                    <div id="stacktrace.<%=i%>" class="stacktrace" 
381                      style="display:none; height: 15em;"><%=ThrowableUtil.stackTraceToString(t)%></div>
382                    <%
383                  }
384                  %>
385                </ol>
386                </div>
387                <%
388              }
389              %>
390            </div>
391            </div>
392            <%
393          }
394          %>
395       
396          <div id="valuecontainer" style="display: none;">
397          <table>
398            <tr >
399            <td>
400              <b>Values</b> <span id="multiplicity"></span><br>
401              <select name="values" id="values" size="5" style="width: 20em;" multiple>
402              </select>
403            </td>
404            <td>&nbsp;</td>
405            <td>
406            <td>
407              <br>
408              <base:buttongroup vertical="true">
409                <base:button id="btnAddValue" subclass="leftaligned" title="Add" />
410                <base:button id="btnRemoveValue" subclass="leftaligned" title="Remove" />
411              </base:buttongroup>
412            </td>
413          </table>
414          </div>
415
416          <%
417          if (parameters != null && parameters.size() > 0)
418          {
419            for (PluginParameter<?> param : parameters)
420            {
421              if (!param.isHidden())
422              {
423                ParameterType<?> pType = param.getParameterType();
424                String fieldName = "parameter-"+param.getName();
425                if (pType != null)
426                {
427                  int multiplicity = pType.getMultiplicity();
428                  String select = null;
429                  if (multiplicity == 0)
430                  {
431                    if (pType.getNotNull())
432                    {
433                      select = "Select one or more";
434                    }
435                    else
436                    {
437                      select = "Select zero or more";
438                    }
439                  }
440                  else if (multiplicity == 1)
441                  {
442                    select = "Select one";
443                  }
444                  else
445                  {
446                    if (pType.getNotNull())
447                    {
448                      select = "Select 1 -- " + multiplicity;
449                    }
450                    else
451                    {
452                      select = "Select 0 -- " + multiplicity;
453                    }
454                  }
455                  %>
456                  <div id="<%=fieldName%>:section" style="display: none;">
457                  <%
458                  if (pType.isEnumeration())
459                  {
460                    Enumeration<?, String> enumeration = pType.getEnumeration();
461                    List<?> values = pType.getItems();
462                    %>
463                    <b><%=HTML.encodeTags(param.getLabel())%></b> (<%=select%>)
464                    <%
465                    if (multiplicity != 1)
466                    {
467                      %>
468                      <base:icon 
469                        id="<%=fieldName+":select-all"%>"
470                        subclass="auto-init"
471                        data-auto-init="select-all"
472                        data-field="<%=fieldName%>"
473                        image="check_uncheck.png" 
474                        tooltip="Select/deselect all"
475                      />
476                      <%
477                    }
478                    %>
479                    <br>
480                    <%
481                    if (multiplicity == 1)
482                    {
483                      %>
484                      <select name="<%=fieldName%>" id="<%=fieldName%>" style="min-width: 8em;">
485                      <%
486                      if (!pType.getNotNull() && !values.contains(null))
487                      {
488                        %>
489                        <option value="" style="font-style: italic;">- not specified -
490                        <%
491                      }
492                    }
493                    else
494                    {
495                      %>
496                      <select name="<%=fieldName%>" id="<%=fieldName%>" 
497                        multiple size="10" style="width: 30em;">
498                      <%
499                    }
500                    for (int i = 0; i < values.size(); ++i)
501                    {
502                      Object value;
503                      String listValue = "";
504                      String listText = "";
505                      String listTitle = "";
506                      if (enumeration != null)
507                      {
508                        value = enumeration.getKey(i);
509                        listText = HTML.encodeTags(enumeration.getValue(i));
510                      }
511                      else
512                      {
513                        value = values.get(i);
514                      }
515                      if (value instanceof Date) 
516                      {
517                        listValue = Long.toString(((Date)value).getTime());
518                        if (enumeration == null) 
519                        {
520                          if (pType.getValueType() == Type.TIMESTAMP)
521                          {
522                            listText = dateTimeFormatter.format((Date)value);
523                          }
524                          else
525                          {
526                            listText = dateFormatter.format((Date)value);
527                          }
528                        }
529                      }
530                      else if (value instanceof BasicItem)
531                      {
532                        BasicItem item = (BasicItem)value;
533                        listValue = Integer.toString(item.getId());
534                        if (item instanceof Nameable)
535                        {
536                          Nameable nameable = (Nameable)item;
537                          if (enumeration == null) listText = HTML.encodeTags(nameable.getName());
538                          listTitle = HTML.encodeTags(nameable.getDescription());
539                        }
540                        else
541                        {
542                          if (enumeration == null) listText = HTML.encodeTags(item.toString());
543                        }
544                      }
545                      else
546                      {
547                        listValue = HTML.encodeTags(value == null ? "" : value.toString());
548                        if (enumeration == null) listText = value == null ? "- not specified -" : listValue;
549                      }
550                      %>
551                      <option value="<%=listValue%>" title="<%=listTitle%>"><%=listText%>
552                      <%
553                    }
554                    %>
555                    </select>
556                    <%
557                  }
558                  else if (pType instanceof StringParameterType)
559                  {
560                    Integer maxLength = ((StringParameterType)pType).getMaxLength();
561                    int height = pType.getHeight() <= 0 ? 6 : pType.getHeight();
562                    if (height > 20) height = 20;
563                    boolean isPassword = pType.isMasked();
564                    if (maxLength == null || maxLength > 255)
565                    {
566                      %>
567                      <b><%=HTML.encodeTags(param.getLabel())%></b> (Text)<br>
568                      <table style="width: 100%;">
569                      <tr>
570                        <td>
571                        <textarea class="text <%=pType.getNotNull() ? "required" : ""%>" 
572                          name="<%=fieldName%>" id="<%=fieldName%>" rows="<%=height%>" 
573                          ></textarea>
574                        </td>
575                        <td style="width: 20px;">
576                          <base:zoom textarea="<%=fieldName%>" title="<%=HTML.encodeTags(param.getLabel()) %>" />
577                        </td>
578                      </tr>
579                      </table>
580                      <%
581                    }
582                    else
583                    {
584                      %>
585                      <b><%=HTML.encodeTags(param.getLabel())%></b> (String)<br>
586                      <input class="text <%=pType.getNotNull() ? "required" : ""%>" 
587                        type="<%=isPassword ? "password": "text"%>" 
588                        name="<%=fieldName%>" id="<%=fieldName%>" value=""
589                        maxlength="<%=maxLength%>">
590                      <%
591                    }
592                  }
593                  else if (pType instanceof IntegerParameterType)
594                  {
595                    IntegerParameterType ipType = (IntegerParameterType)pType;
596                    Integer minValue = ipType.getLowerLimit();
597                    Integer maxValue = ipType.getUpperLimit();
598                    String minMax = "";
599                    if (minValue != null && maxValue != null)
600                    {
601                      minMax = ": " + minValue + " -- " +maxValue;
602                    }
603                    else if (minValue != null)
604                    {
605                      minMax = " >= "+minValue;
606                    }
607                    else if (maxValue != null)
608                    {
609                      minMax = " <= "+maxValue;
610                    }
611                    %>
612                    <b><%=HTML.encodeTags(param.getLabel())%></b> (Integer<%=minMax%>)<br>
613                    <input class="text <%=pType.getNotNull() ? "required" : ""%>"
614                      type="text" name="<%=fieldName%>" id="<%=fieldName%>" value=""
615                      maxlength="20">
616                    <%
617                  }
618                  else if (pType instanceof LongParameterType)
619                  {
620                    LongParameterType ipType = (LongParameterType)pType;
621                    Long minValue = ipType.getLowerLimit();
622                    Long maxValue = ipType.getUpperLimit();
623                    String minMax = "";
624                    if (minValue != null && maxValue != null)
625                    {
626                      minMax = ": " + minValue + " -- " +maxValue;
627                    }
628                    else if (minValue != null)
629                    {
630                      minMax = " >= "+minValue;
631                    }
632                    else if (maxValue != null)
633                    {
634                      minMax = " <= "+maxValue;
635                    }
636                    %>
637                    <b><%=HTML.encodeTags(param.getLabel())%></b> (Long<%=minMax%>)<br>
638                    <input class="text <%=pType.getNotNull() ? "required" : ""%>"
639                      type="text" name="<%=fieldName%>" id="<%=fieldName%>" value=""
640                      maxlength="20">
641                    <%
642                  }
643                  else if (pType instanceof FloatParameterType)
644                  {
645                    FloatParameterType ipType = (FloatParameterType)pType;
646                    Float minValue = ipType.getLowerLimit();
647                    Float maxValue = ipType.getUpperLimit();
648                    String minMax = "";
649                    if (minValue != null && maxValue != null)
650                    {
651                      minMax = ": " + minValue + " -- " +maxValue;
652                    }
653                    else if (minValue != null)
654                    {
655                      minMax = " >= "+minValue;
656                    }
657                    else if (maxValue != null)
658                    {
659                      minMax = " <= "+maxValue;
660                    }
661                    %>
662                    <b><%=HTML.encodeTags(param.getLabel())%></b> (Float<%=minMax%>)<br>
663                    <input class="text <%=pType.getNotNull() ? "required" : ""%>"
664                      type="text" name="<%=fieldName%>" id="<%=fieldName%>" value=""
665                      maxlength="20">
666                    <%
667                  }
668                  else if (pType instanceof DoubleParameterType)
669                  {
670                    DoubleParameterType ipType = (DoubleParameterType)pType;
671                    Double minValue = ipType.getLowerLimit();
672                    Double maxValue = ipType.getUpperLimit();
673                    String minMax = "";
674                    if (minValue != null && maxValue != null)
675                    {
676                      minMax = ": " + minValue + " -- " +maxValue;
677                    }
678                    else if (minValue != null)
679                    {
680                      minMax = " >= "+minValue;
681                    }
682                    else if (maxValue != null)
683                    {
684                      minMax = " <= "+maxValue;
685                    }
686                    %>
687                    <b><%=HTML.encodeTags(param.getLabel())%></b> (Double<%=minMax%>)<br>
688                    <input class="text <%=pType.getNotNull() ? "required" : ""%>"
689                      type="text" name="<%=fieldName%>" id="<%=fieldName%>" value=""
690                      maxlength="20">
691                    <%
692                  }
693                  else if (pType instanceof DateParameterType)
694                  {
695                    %>
696                    <table>
697                    <tr>
698                    <td>
699                      <b><%=HTML.encodeTags(param.getLabel())%></b> (Date)<br>
700                      <input class="text <%=pType.getNotNull() ? "required" : ""%>"
701                        type="text" name="<%=fieldName%>" id="<%=fieldName%>" value=""
702                        size="20" maxlength="20" title="Enter date in format: <%=htmlDateFormat%>"
703                        >
704                    </td>
705                    <td>
706                      <br>
707                      <base:calendar textarea="<%=fieldName%>" title="Value" />
708                    </td>
709                    </tr>
710                    </table>
711                    <%
712                  }
713                  else if (pType instanceof TimestampParameterType)
714                  {
715                    %>
716                    <table>
717                    <tr>
718                    <td>
719                      <b><%=HTML.encodeTags(param.getLabel())%></b> (Timestamp)<br>
720                      <input class="text <%=pType.getNotNull() ? "required" : ""%>"
721                        type="text" name="<%=fieldName%>" id="<%=fieldName%>" value=""
722                        size="20" maxlength="20" title="Enter timestamp in format: <%=htmlDateTimeFormat%>"
723                        >
724                    </td>
725                    <td>
726                      <br>
727                      <base:calendar textarea="<%=fieldName%>" title="Value" data-use-time="1" 
728                        tooltip="Select a timestamp from a calendar" 
729                      />
730                    </td>
731                    </tr>
732                    </table>
733                    <%
734                  }
735                  else if (pType instanceof BooleanParameterType)
736                  {
737                    %>
738                    <b><%=HTML.encodeTags(param.getLabel())%></b><br>
739                    <label><input type="radio" name="<%=fieldName%>" id="<%=fieldName%>:null" value="" checked
740                      ><i>- not specified -</i></label><br>
741                    <label><input type="radio" name="<%=fieldName%>" id="<%=fieldName%>:true" value="true" 
742                      >true</label><br>
743                    <label><input type="radio" name="<%=fieldName%>" id="<%=fieldName%>:false" value="false" 
744                      >false</label>
745                    <%
746                  }
747                  else if (pType instanceof FileParameterType)
748                  {
749                    %>
750                    <b><%=HTML.encodeTags(param.getLabel())%></b><br>
751                    <table style="width: 100%;">
752                    <tr>
753                    <td style="width: 98%;"><input class="text <%=pType.getNotNull() ? "required" : ""%>" type="text" 
754                      name="<%=fieldName%>" id="<%=fieldName%>" value=""
755                      ></td>
756                    <td><base:button 
757                        id="<%=fieldName+":browse" %>"
758                        data-field="<%=fieldName%>"
759                        title="Browse&hellip;"
760                      /></td>
761                    </tr>
762                    </table>
763                    <%
764                    if (recentFiles != null && recentFiles.size() > 0)
765                    {
766                      %>
767                      <b>Recently used</b><br>
768                      <select 
769                        id="<%=fieldName%>:recent"
770                        name="<%=fieldName%>:recent" 
771                        data-field="<%=fieldName %>"
772                        style="width: 98%;">
773                      <option value="">
774                      <%
775                      for (File recent : recentFiles)
776                      {
777                        %>
778                        <option value="<%=recent.getId()%>"><%=HTML.encodeTags(recent.getPath().toString())%>
779                        <%
780                      }
781                      %>
782                      </select>
783                      <%
784                    }
785                  }
786                  else if (pType instanceof ItemParameterType)
787                  {
788                    Item parameterItemType = Item.fromClass(pType.getParameterClass());
789                    BasicItem item = (BasicItem)pcRequest.getCurrentParameterValue(param.getName());
790                    if (item == null)
791                    {
792                      ItemContext cc = sc.getCurrentContext(parameterItemType, parameterItemType == itemType ? subContext : "");
793                      if (cc.getId() != 0)
794                      {
795                        try
796                        {
797                          item = parameterItemType.getById(dc, cc.getId());
798                        }
799                        catch (Throwable t)
800                        {}
801                      }
802                    }
803                    if (item != null)
804                    {
805                      String display = "";
806                      if (item instanceof Nameable)
807                      {
808                        Nameable nameable = (Nameable)item;
809                        display = nameable.getName();
810                      }
811                      else 
812                      {
813                        display = item.toString();
814                      }
815                      %>
816                      <b><%=HTML.encodeTags(param.getLabel())%></b><br>
817                      <input class="text disabled" size="50" 
818                        name="<%=fieldName%>" id="<%=fieldName%>" type="text" disabled
819                        value="<%=HTML.encodeTags(display)%>">
820                      <%
821                    }
822                  }
823                  else if (pType instanceof PathParameterType)
824                  {
825                    %>
826                    <b><%=HTML.encodeTags(param.getLabel())%></b><br>
827                    <table style="width: 100%;">
828                    <tr>
829                    <td style="width: 98%;"><input type="text" class="text" 
830                      name="<%=fieldName%>" id="<%=fieldName%>" value=""
831                      ></td>
832                    <td><base:button 
833                        id="<%=fieldName+":browse" %>"
834                        data-field="<%=fieldName%>"
835                        title="Browse&hellip;"
836                        /></td>
837                    </tr>
838                    </table>
839                    <%
840                  }
841                  else
842                  {
843                    %>
844                    <b><%=HTML.encodeTags(param.getLabel())%></b><br>
845                    <%
846                  }
847                  String help = param.getDescription();
848                  if (help == null || "".equals(help)) help = "<i>No help available for this parameter</i>";
849                  %>
850                  <div class="messagecontainer help" style="margin-left: 0px; margin-right: 0px;">
851                  <%=HTML.niceFormat(help)%>
852                  </div>
853                  </div>
854                  <%
855                }
856                else
857                {
858                  String help = param.getDescription();
859                  if (help == null || "".equals(help)) help = "<i>No help available for this parameter</i>";
860                  %>
861                  <div id="<%=fieldName%>:section" style="display: none;" class="messagecontainer help">
862                  <%=HTML.niceFormat(help)%>
863                  </div>
864                  <%
865                }
866              }
867            }
868          }
869          %>
870       
871        </div>
872       
873      </div>
874
875    </div>
876
877    </form>
878
879    <base:buttongroup subclass="dialogbuttons">
880      <base:button id="btnTestWithFile" title="Test with file&hellip;" image="file.png"
881        tooltip="Use an uploaded file to create the regular expressions and column mappings"
882        visible="<%=options.contains("configure-by-example")%>" />
883      <base:button id="btnNext" title="Next" />
884      <base:button id="close" title="Cancel" />
885    </base:buttongroup>
886  </base:body>
887  </base:page>
888  <%
889}
890finally
891{
892  if (dc != null) dc.close();
893}
894%>
Note: See TracBrowser for help on using the repository browser.