source: branches/3.6-stable/www/common/plugin/configure.jsp @ 7021

Last change on this file since 7021 was 7021, checked in by Nicklas Nordborg, 7 years ago

Fixes #1970: Need right padding in selection lists

Added 4px right padding and a minimum width in plug-in configuration dialog.

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