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

Last change on this file since 3329 was 3329, checked in by Nicklas Nordborg, 14 years ago

References #548: Write "Installing plug-ins" section

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 35.7 KB
Line 
1<%-- $Id: configure.jsp 3329 2007-05-11 12:20:35Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) Authors contributing to this file.
4
5  This file is part of BASE - BioArray Software Environment.
6  Available at http://base.thep.lu.se/
7
8  BASE is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License
10  as published by the Free Software Foundation; either version 2
11  of the License, or (at your option) any later version.
12
13  BASE is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  GNU General Public License for more details.
17
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place - Suite 330,
21  Boston, MA  02111-1307, USA.
22  ------------------------------------------------------------------
23
24  @author Nicklas
25  @version 2.0
26--%>
27<%@ page 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.ParameterType"
42  import="net.sf.basedb.core.StringParameterType"
43  import="net.sf.basedb.core.IntegerParameterType"
44  import="net.sf.basedb.core.LongParameterType"
45  import="net.sf.basedb.core.FloatParameterType"
46  import="net.sf.basedb.core.DoubleParameterType"
47  import="net.sf.basedb.core.ItemParameterType"
48  import="net.sf.basedb.core.DateParameterType"
49  import="net.sf.basedb.core.BooleanParameterType"
50  import="net.sf.basedb.core.FileParameterType"
51  import="net.sf.basedb.core.PathParameterType"
52  import="net.sf.basedb.core.ItemContext"
53  import="net.sf.basedb.core.Path"
54  import="net.sf.basedb.util.Enumeration"
55  import="net.sf.basedb.clients.web.Base"
56  import="net.sf.basedb.clients.web.WebException"
57  import="net.sf.basedb.clients.web.util.HTML"
58  import="net.sf.basedb.util.formatter.Formatter"
59  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
60  import="net.sf.basedb.clients.web.formatter.FormatterSettings"
61  import="net.sf.basedb.util.Values"
62  import="java.util.Date"
63  import="java.util.List"
64  import="java.util.Arrays"
65  import="java.util.Collections"
66%>
67<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
68<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
69<%
70final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
71final String ID = sc.getId();
72final float scale = Base.getScale(sc);
73final String clazz = "class=\"text\"";
74final String requiredClazz = "class=\"text required\"";
75
76final Item itemType = request.getParameter("item_type") == null ? null : Item.valueOf(request.getParameter("item_type"));
77final String subContext = Values.getString(request.getParameter("subcontext"), "");
78final ItemContext currentContext = itemType == null ? null : sc.getCurrentContext(itemType, subContext);
79DbControl dc = null;
80try
81{
82  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
83  String dateFormat = FormatterSettings.getDateFormat(sc);
84  String jsDateFormat = HTML.javaScriptEncode(dateFormat);
85  String htmlDateFormat = HTML.encodeTags(dateFormat);
86
87  dc = sc.newDbControl();
88  PluginConfigurationRequest pcRequest = (PluginConfigurationRequest)sc.getSessionSetting("plugin.configure.request");
89  if (pcRequest == null) throw new WebException("popup", "No request information found", "No request information found");
90 
91  PluginDefinition plugin = (PluginDefinition)sc.getSessionSetting("plugin.configure.plugin");
92  Job job = (Job)sc.getSessionSetting("plugin.configure.job");
93  dc.reattachItem(plugin);
94  boolean configureByExample = false;
95  PluginConfiguration pluginConfig = (PluginConfiguration)sc.getSessionSetting("plugin.configure.config");
96  String errorMessage = (String)sc.getSessionSetting("plugin.configure.errors.message");
97  List<Throwable> errors = (List<Throwable>)sc.getSessionSetting("plugin.configure.errors.list");
98 
99  RequestInformation ri = pcRequest.getRequestInformation();
100  List<PluginParameter<?>> parameters =  ri.getParameters();
101  String title = HTML.encodeTags(ri.getTitle());
102  String jobName = Values.getString(request.getParameter("job_name"), title);
103  StringBuilder sb = new StringBuilder();
104 
105  List<File> recentFiles = null;
106  %>
107
108  <base:page type="popup" title="<%=title%>">
109  <base:head scripts="plugin.js,parameters.js" styles="parameters.css">
110    <script language="JavaScript">
111    function init()
112    {
113      var width = Main.getWindowWidth();
114      var height = Main.getWindowHeight();
115      if (height < 600) height = 600;
116      if (width < 800) width = 800; // >
117      window.resizeTo(width, height);
118      <%
119      if (parameters != null && parameters.size() > 0)
120      {
121        for (PluginParameter<?> param : parameters)
122        {
123          ParameterType pType = param.getParameterType();
124          String name = param.getName();
125          if ("parserSection".equals(name)) 
126          {
127            configureByExample = plugin.supports("net.sf.basedb.util.parser.ConfigureByExample");
128          }
129          String label = HTML.encodeTags(Values.trimString(param.getLabel(), 30));
130          String fullLabel = HTML.encodeTags(param.getLabel());
131          if (pType != null)
132          {
133            // Get the current values... First we look in the http request object...
134            String[] requestValues = request.getParameterValues("parameter:"+param.getName());
135            // ...or in the current values from the job / plugin configuration
136            List values = requestValues != null ? Arrays.asList(requestValues) : pcRequest.getCurrentParameterValues(param.getName());
137            if ((values == null || values.size() == 0) && (pType instanceof ItemParameterType || pType instanceof FileParameterType))
138            {
139              // Item and File parameters will also look in the current context
140              Item parameterItemType = Item.fromClass(pType.getParameterClass());
141              ItemContext cc = sc.getCurrentContext(parameterItemType, parameterItemType == itemType ? subContext : "");
142              if (cc.getId() != 0 && pType.getMultiplicity() == 1)
143              {
144                values = new java.util.ArrayList();
145                if (pType instanceof FileParameterType)
146                {
147                  values.add(File.getById(dc, cc.getId()).getPath().toString());
148                  if (currentContext != null && recentFiles == null)
149                  {
150                    recentFiles = (List<File>)currentContext.getRecent(dc, Item.FILE);
151                  }
152                }
153                else
154                {
155                  values.add(cc.getId());
156                }
157              }
158              else if (cc.getSelected().size() > 0 && pType.getMultiplicity() != 1)
159              {
160                values = new java.util.ArrayList(cc.getSelected());
161              }
162            }
163            // Then, we use the parameters default value
164            if ((values == null || values.size() == 0) && param.getDefaultValue() != null)
165            {
166              values = Collections.singletonList(param.getDefaultValue());
167            }
168            // Finally, if the parameter has multiplicity=1, is requried and has a list of enumeration values
169            if ((values == null || values.size() == 0) && pType.getNotNull() && 
170              pType.getMultiplicity() == 1 && pType.getItems() != null && pType.getItems().size() > 0)
171            {
172              values = Collections.singletonList(pType.getItems().get(0)); 
173            }
174            String icon = "";
175            if (values != null && values.size() > 0)
176            {
177              icon = pType.getNotNull() ? "required_values.gif" : "notrequired_values.gif";
178            }
179            else
180            {
181              icon = pType.getNotNull() ? "required_novalues.gif" : "notrequired_novalues.gif";
182            }
183            if (!param.isHidden())
184            {
185              icon = "<span class=\"icon\"><img id=\"icon_"+name+"\" src=\"../../images/"+icon+"\"></span>";
186              sb.append("<div class=\"param\" id=\"prompt_"+name+"\" onclick=\"parametersOnClick('"+name+"')\"");
187              sb.append(" onmouseover=\"Main.addClass(this, 'hover')\" onmouseout=\"Main.removeClass(this, 'hover')\" title=\""+fullLabel+"\">");
188              sb.append(icon+"<span class=\"label\">"+label+"</span></div>\n");
189            }
190            %>
191            var values = new Array();
192            <%
193            if (values != null && values.size() > 0)
194            {
195              for (Object value : values)
196              {
197                if (value instanceof Date) 
198                {
199                  if (pType.isEnumeration())
200                  {
201                    value = ((Date)value).getTime();
202                  }
203                  else
204                  {
205                    value = dateFormatter.format((Date)value);
206                  }
207                }
208                else if (value instanceof File)
209                {
210                  value = ((File)value).getPath().toString();
211                }
212                else if (value instanceof BasicItem)
213                {
214                  value = ((BasicItem)value).getId();
215                }
216                %>
217                values[values.length] = '<%=HTML.javaScriptEncode(value == null ? "" : value.toString())%>';
218                <%
219              }
220            }
221            %>
222            new Parameter('<%=name%>', '<%=HTML.javaScriptEncode(param.getLabel())%>', <%=pType.getMultiplicity()%>, <%=pType.isEnumeration()%>, <%=pType.getNotNull()%>, values);
223            <%
224          }
225          else
226          {
227            sb.append("<h4 class=\"param\" id=\"prompt_"+name+"\" title=\""+fullLabel+"\" onclick=\"parametersOnClick('"+name+"')\" onmouseover=\"Main.addClass(this, 'hover')\" onmouseout=\"Main.removeClass(this, 'hover')\">"+label+"</h4>");
228            %>
229            new Parameter('<%=name%>', '[<%=HTML.javaScriptEncode(param.getLabel())%>]', 1, 0, 0, {});
230            <%
231          }
232        }
233      }
234      %>
235    }
236   
237    var oldValueDiv;
238    function parametersOnClick(parameterId)
239    {
240      var frm = document.forms['configure'];
241      if (oldValueDiv) Main.hide(oldValueDiv);
242     
243      var pp = Parameters.allParameters['ID'+parameterId];
244      setSelectedParameter(pp, parameterId);
245      oldValueDiv = 'value_'+pp.name+'_div'
246      Main.show(oldValueDiv);
247      var valueElement = frm['value_'+pp.name];
248      if (valueElement.focus && !valueElement.disabled) valueElement.focus();
249      if (pp.enumeration)
250      {
251        Main.hide('valuecontainer');
252        var numSelected;
253        if (valueElement.type && valueElement.type.search('select') != -1)
254        {
255          numSelected = Forms.selectListOptions(valueElement, pp.values);
256        }
257        else if (pp.multiplicity == 1)
258        {
259          // radio buttons
260          numSelected = Forms.checkRadio(valueElement, pp.values[0]) == -1 ? 0 : 1;
261        }
262        else
263        {
264          // check boxes
265          numSelected = Forms.checkCheckBoxes(valueElement, pp.values);
266        }
267        if (numSelected == 0)
268        {
269          pp.values.length = 0;
270          updateSelectedStyle();
271        }
272      }
273      else if (pp.multiplicity == 1)
274      {
275        Main.hide('valuecontainer');
276        if (pp.values.length > 0)
277        {
278          if (valueElement.length) // ie. radio buttons for boolean parameter
279          {
280            Forms.checkRadio(valueElement, pp.values[0]);
281          }
282          else if (!valueElement.disabled)
283          {
284            valueElement.value = pp.values[0];
285          }
286        }
287      }
288      else
289      {
290        var values = frm.values;
291        values.length = 0;
292        for (var i = 0; i < pp.values.length; i++) // >
293        {
294          var value = Main.cutString(pp.values[i].replace(/\n/g, ' '), 40);
295          values[values.length] = new Option(value);
296        }
297        var mult = document.getElementById('multiplicity');
298        mult.innerHTML = pp.multiplicity == 0 ? '' : '(Max '+pp.multiplicity+' values)';
299        Main.show('valuecontainer');
300      }
301    }
302   
303    var selectedPluginParameter = null;
304    var selectedPluginParameterId = null;
305    function getSelectedParameter()
306    {
307      return selectedPluginParameter;
308    }
309   
310    function setSelectedParameter(pluginParameter, parameterId)
311    {
312      if (selectedPluginParameter != null)
313      {
314        Main.removeClass(document.getElementById('prompt_'+selectedPluginParameter.name), 'selected');
315      }
316      selectedPluginParameter = pluginParameter;
317      selectedPluginParameterId = parameterId;
318      if (selectedPluginParameter != null)
319      {
320        Main.addClass(document.getElementById('prompt_'+selectedPluginParameter.name), 'selected');
321      }
322    }
323
324    function updateStyle(pp)
325    {
326      var icon = document.getElementById('icon_'+pp.name);
327      var gif = getRoot()+'images/';
328      if (pp.values.length == 0)
329      {
330        gif += pp.required ? 'required_novalues.gif' : 'notrequired_novalues.gif';
331      }
332      else
333      {
334        gif += pp.required ? 'required_values.gif' : 'notrequired_values.gif';
335      }
336      icon.src = gif;
337    }
338
339    function updateSelectedStyle()
340    {
341      updateStyle(getSelectedParameter());
342    }
343   
344    function setCurrentValue(value)
345    {
346      var pp = getSelectedParameter();
347      if (value == null || value == '')
348      {
349        pp.removeValue(0);
350      }
351      else
352      {
353        pp.updateValue(0, value);
354      }
355      updateSelectedStyle();
356    }
357   
358    function setEnumValues(name)
359    {
360      var pp = getSelectedParameter();
361      if (!pp) return;
362   
363      var frm = document.forms['configure'];
364      var valueElement = frm[name];
365      var values = new Array();
366      for (var i = 0; i < valueElement.length; i++) // >
367      {
368        if (valueElement[i].checked || valueElement[i].selected)
369        {
370          values[values.length] = valueElement[i].value;
371        }
372      }
373      pp.setValues(values);
374      updateSelectedStyle();
375    }
376
377    var lastValueIndex = -1;
378    function valuesOnClick()
379    {
380      var frm = document.forms['configure'];
381      var pp = getSelectedParameter();
382      lastValueIndex = frm.values.selectedIndex;
383      if (lastValueIndex >= 0)
384      {
385        frm['value_'+pp.name].value = pp.values[lastValueIndex];
386      }
387    }
388
389    function valueOnBlur(value)
390    {
391      var pp = getSelectedParameter();
392      if (!pp) return;
393      if (pp.multiplicity == 1)
394      {
395        setCurrentValue(value);
396      }
397      else
398      {
399        if (lastValueIndex < 0) return; // >
400        var frm = document.forms['configure'];
401        if (value == '' || value == null)
402        {
403          pp.removeValue(lastValueIndex);
404          frm.values[lastValueIndex] = null;
405        }
406        else
407        {
408          pp.updateValue(lastValueIndex, value);
409          frm.values[lastValueIndex].text = value;
410        }
411      }
412    }
413    function addOnClick()
414    {
415      var pp = getSelectedParameter();
416      if (!pp) return;
417      var frm = document.forms['configure'];
418      var valueElement = frm['value_'+pp.name];
419      if (frm.values.selectedIndex < 0 && valueElement.value != '') // >
420      {
421        if (pp.addValue(valueElement.value))
422        {
423          lastValueIndex = frm.values.length;
424          frm.values[lastValueIndex] = new Option(valueElement.value, '', false, false);
425          valueElement.value = '';
426          lastValueIndex = -1;
427        }
428      }
429      else
430      {
431        if (pp.addValue(''))
432        {
433          lastValueIndex = frm.values.length;
434          frm.values[lastValueIndex] = new Option('<new>', '', false, true);
435          valueElement.value = '';
436        }
437      }
438      valueElement.focus();
439      updateSelectedStyle();
440    }
441    function removeOnClick()
442    {
443      var pp = getSelectedParameter();
444      if (!pp) return;
445     
446      var frm = document.forms['configure'];
447      var values = frm.values;
448      for (var i = 0; i < values.length; i++) // >
449      {
450        if (values[i].selected)
451        {
452          pp.removeValue(i);
453          values[i] = null;
454          i--;
455        }
456      }
457      updateSelectedStyle();
458    }
459    function setDateCallback(frmName, inputName, theDate)
460    {
461      var frm = document.forms[frmName];
462      frm[inputName].value = theDate;
463      valueOnBlur(theDate);
464    }
465    var lastFileInputName;
466    function browseOnClick(inputName)
467    {
468      var frm = document.forms['configure'];
469      var url = '../../filemanager/index.jsp?ID=<%=ID%>&cmd=SelectOne&callback=setFileCallback';
470      lastFileInputName = inputName;
471      Main.openPopup(url, 'SelectFile', 1000, 700);
472    }
473    function setFileCallback(fileId, path)
474    {
475      var frm = document.forms['configure'];
476      frm[lastFileInputName].value = path;
477      valueOnBlur(path);
478    }
479   
480    function recentOnChange(inputName)
481    {
482      var frm = document.forms['configure'];
483      var recentList = frm['recent.'+inputName];
484      var path = recentList[recentList.selectedIndex].text;
485      frm[inputName].value = path;
486      valueOnBlur(path);
487      recentList.selectedIndex = 0;
488    }
489   
490    var lastItemInputName;
491    function selectItemOnClick(inputName, itemType)
492    {
493      lastItemInputName = inputName;
494      Main.selectItem('<%=ID%>', itemType, 'selectone', 'selectItemCallback');
495    }
496    function selectItemCallback(itemId, name)
497    {
498      var frm = document.forms['configure'];
499      frm[lastItemInputName].value = name;
500      setCurrentValue(itemId);
501    }
502    function clearItemOnClick(inputName, itemType)
503    {
504      var frm = document.forms['configure'];
505      frm[inputName].value = '';
506      setCurrentValue();
507    }
508   
509    function saveAsOnClick(inputName)
510    {
511      var frm = document.forms['configure'];
512      var url = '../../filemanager/index.jsp?ID=<%=ID%>&cmd=SaveAs&callback=saveAsCallback';
513      lastFileInputName = inputName;
514      Main.openPopup(url, 'SaveAs', 1000, 700);
515    }
516    function saveAsCallback(path)
517    {
518      var frm = document.forms['configure'];
519      frm[lastFileInputName].value = path;
520      valueOnBlur(path);
521    }
522    function selectDirectoryOnClick(inputName)
523    {
524      var frm = document.forms['configure'];
525      var url = '../../filemanager/directories/index.jsp?ID=<%=ID%>&mode=selectonedirectory&callback=setFileCallback';
526      lastFileInputName = inputName;
527      Main.openPopup(url, 'SelectDirectory', 350, 500);
528    }
529   
530    function hideErrorList()
531    {
532      Main.hide('errorlist');
533      Main.show('showerrorlist');
534    }
535    function showErrorList()
536    {
537      Main.show('errorlist');
538      Main.hide('showerrorlist');
539    }
540   
541    function saveSettings()
542    {
543      var frm = document.forms['configure'];
544      for (var i = 0; i < Parameters.allParameters.length; i++) // > 
545      {
546        var pp = Parameters.allParameters[i];
547        if (pp.required && pp.values.length == 0)
548        {
549          alert('No value entered for parameter '+pp.label);
550          return;
551        }
552      }
553      Parameters.addParameterValuesToForm(frm);
554      //Main.openPopup('', 'SubmitPluginParameters', 100, 100);
555      //frm.target = 'SubmitPluginParameters';
556      frm.submit();
557    }
558   
559    function testWithFile()
560    {
561      Main.openPopup('test_with_file.jsp?ID=<%=ID%>', 'TestWithFile', 1000, 800);
562    }
563   
564    function getParameterValue(ID)
565    {
566      var param = Parameters.allParameters['ID'+ID];
567      if (param)
568      {
569        return param.values;
570      }
571      else
572      {
573        return '';
574      }
575    }
576   
577    function setParameterValue(ID, value)
578    {
579      var param = Parameters.allParameters['ID'+ID];
580      if (param)
581      {
582        if (value == null || Main.trimString(value) == '')
583        {
584          param.clearValues();
585        }
586        else
587        {
588          var values = new Array();
589          values[values.length] = value;
590          param.setValues(values);
591        }
592        var selected = getSelectedParameter();
593        if (selected && selected.name == param.name)
594        {
595          parametersOnClick(param.name);
596        }
597        else
598        {
599          updateStyle(param);
600        }
601      }
602    }
603   
604    </script>
605  </base:head>
606  <base:body onload="init()">
607    <p>
608    <form action="index.jsp?ID=<%=ID%>" method="post" name="configure" onsubmit="return false;">
609    <input type="hidden" name="cmd" value="SetParameters">
610    <input type="hidden" name="title" value="<%=title%>">
611    <%
612    if (itemType != null)
613    {
614      %>
615      <input type="hidden" name="item_type" value="<%=itemType.name()%>">
616      <%
617    }
618    %>
619    <input type="hidden" name="subcontext" value="<%=subContext%>">
620   
621    <h3 class="docked"><%=title%> <base:help 
622      helpid="<%="runplugin.configure"+(job != null ? "." + plugin.getMainType().name().toLowerCase() : "") %>" /></h3>
623    <div class="boxed">
624   
625      <table class="form">
626      <tr valign="baseline">
627        <td class="prompt">Plugin</td>
628        <td><%=plugin == null ? "<i>- none -</i>" : HTML.encodeTags(plugin.getName())%></td>
629        <td class="prompt">Configuration</td>
630        <td><%=pluginConfig == null ? "<i>- none -</i>" : HTML.encodeTags(pluginConfig.getName())%></td>
631      </tr>
632      </table>
633   
634      <div class="pluginhelp">
635        <%=HTML.niceFormat(ri.getDescription())%>
636      </div>
637
638      <table class="form" cellspacing="0" border="0" cellpadding="0" width="100%">
639      <tr valign="top">
640        <td nowrap style="width: 240px">
641          <div class="parameterlist" style="height: <%=(int)(scale*320)%>px; width:240px;">
642          <%=sb.toString()%>
643          </div>
644          <base:icon image="hasvalues.gif" /> = has value(s), <base:icon image="required.gif" /> = required
645        </td>
646       
647        <td>
648          <%
649          if (errorMessage != null || (errors != null && errors.size() > 0))
650          {
651            %>
652            <div id="errors" style="margin-bottom: 12px;" class="parameterhelp">
653              <div class="error" style="margin: 0px;">
654              <%=errorMessage %>
655              </div>
656              <%
657              if (errors != null && errors.size() > 0)
658              {
659                %>
660                <div id="showerrorlist" style="display: none;">
661                  <base:icon image="bullet.gif" /><a href="javascript:showErrorList()">Show details</a>
662                </div>
663                <div id="errorlist">
664                <ol>
665                <%
666                for (Throwable t : errors)
667                {
668                  t.printStackTrace();
669                  %>
670                  <li><%=t.getMessage()%><br>
671                  <%
672                }
673                %>
674                </ol>
675                <base:icon image="bullet.gif" /><a href="javascript:hideErrorList()">Hide details</a>
676                </div>
677                <%
678              }
679              %>
680            </div>
681            <%
682          }
683          %>
684       
685          <div id="valuecontainer" style="display: none;">
686          <table cellspacing="2" border="0" cellpadding="0" cellspacing="0">
687            <tr valign="top">
688            <td>
689              <b>Values</b> <span id="multiplicity"></span><br>
690              <select name="values" size="5" style="width: 20em;"
691                onchange="valuesOnClick()" multiple>
692              </select>
693            </td>
694            <td>&nbsp;</td>
695            <td>
696            <td>
697              <br>
698              <base:button onclick="addOnClick()" title="Add" />
699              <base:button onclick="removeOnClick()" title="Remove" />
700            </td>
701          </table>
702          </div>
703
704          <%
705          if (parameters != null && parameters.size() > 0)
706          {
707            for (PluginParameter<?> param : parameters)
708            {
709              if (!param.isHidden())
710              {
711                ParameterType pType = param.getParameterType();
712                String inputName = "value_"+param.getName();
713                if (pType != null)
714                {
715                  int multiplicity = pType.getMultiplicity();
716                  String select = null;
717                  if (multiplicity == 0)
718                  {
719                    if (pType.getNotNull())
720                    {
721                      select = "Select one or more";
722                    }
723                    else
724                    {
725                      select = "Select zero or more";
726                    }
727                  }
728                  else if (multiplicity == 1)
729                  {
730                    select = "Select one";
731                  }
732                  else
733                  {
734                    if (pType.getNotNull())
735                    {
736                      select = "Select 1 -- " + multiplicity;
737                    }
738                    else
739                    {
740                      select = "Select 0 -- " + multiplicity;
741                    }
742                  }
743                  %>
744                  <div id="<%=inputName%>_div" style="display: none;">
745                  <%
746                  if (pType.isEnumeration())
747                  {
748                    Enumeration<?, String> enumeration = pType.getEnumeration();
749                    List<?> values = pType.getItems();
750                    %>
751                    <b><%=HTML.encodeTags(param.getLabel())%></b> (<%=select%>)<br>
752                    <%
753                    if (multiplicity == 1)
754                    {
755                      %>
756                      <select name="<%=inputName%>"
757                        onchange="setCurrentValue(this[this.selectedIndex].value)">
758                      <%
759                      if (!pType.getNotNull())
760                      {
761                        %>
762                        <option value="" style="font-style: italic;">- not specified -
763                        <%
764                      }
765                    }
766                    else
767                    {
768                      %>
769                      <select name="<%=inputName%>" multiple size="10" style="width: 30em;"
770                        onchange="setEnumValues('<%=inputName%>')">
771                      <%
772                    }
773                    for (int i = 0; i < values.size(); ++i)
774                    {
775                      Object value;
776                      String listValue = "";
777                      String listText = "";
778                      String listTitle = "";
779                      if (enumeration != null)
780                      {
781                        value = enumeration.getKey(i);
782                        listText = HTML.encodeTags(enumeration.getValue(i));
783                      }
784                      else
785                      {
786                        value = values.get(i);
787                      }
788                      if (value instanceof Date) 
789                      {
790                        listValue = Long.toString(((Date)value).getTime());
791                        if (enumeration == null) listText = dateFormatter.format((Date)value);
792                      }
793                      else if (value instanceof BasicItem)
794                      {
795                        BasicItem item = (BasicItem)value;
796                        listValue = Integer.toString(item.getId());
797                        if (item instanceof Nameable)
798                        {
799                          Nameable nameable = (Nameable)item;
800                          if (enumeration == null) listText = HTML.encodeTags(nameable.getName());
801                          listTitle = HTML.encodeTags(nameable.getDescription());
802                        }
803                        else
804                        {
805                          if (enumeration == null) listText = HTML.encodeTags(item.toString());
806                        }
807                      }
808                      else
809                      {
810                        listValue = HTML.encodeTags(value == null ? "" : value.toString());
811                        if (enumeration == null) listText = listValue;
812                      }
813                      %>
814                      <option value="<%=listValue%>" title="<%=listTitle%>"><%=listText%>
815                      <%
816                    }
817                    %>
818                    </select>
819                    <%
820                  }
821                  else if (pType instanceof StringParameterType)
822                  {
823                    Integer maxLength = ((StringParameterType)pType).getMaxLength();
824                    int width = pType.getWidth() <= 0 ? 40 : pType.getWidth();
825                    if (width > 80) width = 80;
826                    int height = pType.getHeight() <= 0 ? 6 : pType.getHeight();
827                    if (height > 20) height = 20;
828                    if (maxLength == null || maxLength > 255)
829                    {
830                      %>
831                      <b><%=HTML.encodeTags(param.getLabel())%></b> (Text)<br>
832                      <textarea <%=pType.getNotNull() ? requiredClazz : clazz%> 
833                        name="<%=inputName%>" rows="<%=height%>" cols="<%=width%>"
834                        onblur="valueOnBlur(this.value)"></textarea>
835                      <a href="javascript:Main.zoom('<%=HTML.javaScriptEncode(param.getLabel())%>', 'configure', '<%=inputName%>')" 
836                        title="Edit in larger window"><base:icon image="zoom.gif" /></a>
837                      <%
838                    }
839                    else
840                    {
841                      %>
842                      <b><%=HTML.encodeTags(param.getLabel())%></b> (String)<br>
843                      <input <%=pType.getNotNull() ? requiredClazz : clazz%> type="text" 
844                        name="<%=inputName%>" value=""
845                        size="<%=width%>" maxlength="<%=maxLength%>"
846                        onblur="valueOnBlur(this.value)">
847                      <%
848                    }
849                  }
850                  else if (pType instanceof IntegerParameterType)
851                  {
852                    IntegerParameterType ipType = (IntegerParameterType)pType;
853                    Integer minValue = ipType.getLowerLimit();
854                    Integer maxValue = ipType.getUpperLimit();
855                    String minMax = "";
856                    if (minValue != null && maxValue != null)
857                    {
858                      minMax = ": " + minValue + " -- " +maxValue;
859                    }
860                    else if (minValue != null)
861                    {
862                      minMax = " >= "+minValue;
863                    }
864                    else if (maxValue != null)
865                    {
866                      minMax = " <= "+maxValue;
867                    }
868                    %>
869                    <b><%=HTML.encodeTags(param.getLabel())%></b> (Integer<%=minMax%>)<br>
870                    <input <%=pType.getNotNull() ? requiredClazz : clazz%>
871                      type="text" name="<%=inputName%>" value=""
872                      size="20" maxlength="20" onkeypress="return Numbers.integerOnly(event)"
873                      onblur="valueOnBlur(this.value)">
874                    <%
875                  }
876                  else if (pType instanceof LongParameterType)
877                  {
878                    LongParameterType ipType = (LongParameterType)pType;
879                    Long minValue = ipType.getLowerLimit();
880                    Long maxValue = ipType.getUpperLimit();
881                    String minMax = "";
882                    if (minValue != null && maxValue != null)
883                    {
884                      minMax = ": " + minValue + " -- " +maxValue;
885                    }
886                    else if (minValue != null)
887                    {
888                      minMax = " >= "+minValue;
889                    }
890                    else if (maxValue != null)
891                    {
892                      minMax = " <= "+maxValue;
893                    }
894                    %>
895                    <b><%=HTML.encodeTags(param.getLabel())%></b> (Long<%=minMax%>)<br>
896                    <input <%=pType.getNotNull() ? requiredClazz : clazz%>
897                      type="text" name="<%=inputName%>" value=""
898                      size="20" maxlength="20" onkeypress="return Numbers.integerOnly(event)"
899                      onblur="valueOnBlur(this.value)">
900                    <%
901                  }
902                  else if (pType instanceof FloatParameterType)
903                  {
904                    FloatParameterType ipType = (FloatParameterType)pType;
905                    Float minValue = ipType.getLowerLimit();
906                    Float maxValue = ipType.getUpperLimit();
907                    String minMax = "";
908                    if (minValue != null && maxValue != null)
909                    {
910                      minMax = ": " + minValue + " -- " +maxValue;
911                    }
912                    else if (minValue != null)
913                    {
914                      minMax = " >= "+minValue;
915                    }
916                    else if (maxValue != null)
917                    {
918                      minMax = " <= "+maxValue;
919                    }
920                    %>
921                    <b><%=HTML.encodeTags(param.getLabel())%></b> (Float<%=minMax%>)<br>
922                    <input <%=pType.getNotNull() ? requiredClazz : clazz%>
923                      type="text" name="<%=inputName%>" value=""
924                      size="20" maxlength="20" onkeypress="return Numbers.numberOnly(event)"
925                      onblur="valueOnBlur(this.value)">
926                    <%
927                  }
928                  else if (pType instanceof DoubleParameterType)
929                  {
930                    DoubleParameterType ipType = (DoubleParameterType)pType;
931                    Double minValue = ipType.getLowerLimit();
932                    Double maxValue = ipType.getUpperLimit();
933                    String minMax = "";
934                    if (minValue != null && maxValue != null)
935                    {
936                      minMax = ": " + minValue + " -- " +maxValue;
937                    }
938                    else if (minValue != null)
939                    {
940                      minMax = " >= "+minValue;
941                    }
942                    else if (maxValue != null)
943                    {
944                      minMax = " <= "+maxValue;
945                    }
946                    %>
947                    <b><%=HTML.encodeTags(param.getLabel())%></b> (Double<%=minMax%>)<br>
948                    <input <%=pType.getNotNull() ? requiredClazz : clazz%>
949                      type="text" name="<%=inputName%>" value=""
950                      size="20" maxlength="20" onkeypress="return Numbers.numberOnly(event)"
951                      onblur="valueOnBlur(this.value)">
952                    <%
953                  }
954                  else if (pType instanceof DateParameterType)
955                  {
956                    %>
957                    <table>
958                    <tr>
959                    <td>
960                      <b><%=HTML.encodeTags(param.getLabel())%></b> (Date)<br>
961                      <input <%=pType.getNotNull() ? requiredClazz : clazz%>
962                        type="text" name="<%=inputName%>" value=""
963                        size="20" maxlength="20" title="Enter date in format: <%=htmlDateFormat%>"
964                        onblur="valueOnBlur(this.value)">
965                    </td>
966                    <td>
967                      <br>
968                      <base:button 
969                        onclick="<%="Dates.selectDate('Value', 'configure', '"+inputName+"', 'setDateCallback', '"+jsDateFormat+"')"%>" 
970                        image="calendar.png"
971                        title="Calendar&hellip;" 
972                        tooltip="Select a date from a calendar" 
973                      />
974                    </td>
975                    </tr>
976                    </table>
977                    <%
978                  }
979                  else if (pType instanceof BooleanParameterType)
980                  {
981                    %>
982                    <b><%=HTML.encodeTags(param.getLabel())%></b><br>
983                    <input type="radio" name="<%=inputName%>" value="" checked
984                      onclick="setCurrentValue(null)"><a
985                      href="javascript:document.forms['configure'].<%=inputName%>[0].click()"><i>- not specified -</i></a><br>
986                    <input type="radio" name="<%=inputName%>" value="true" 
987                      onclick="setCurrentValue('true')"><a
988                      href="javascript:document.forms['configure'].<%=inputName%>[1].click()">true</a><br>
989                    <input type="radio" name="<%=inputName%>" value="false" 
990                      onclick="setCurrentValue('false')"><a
991                      href="javascript:document.forms['configure'].<%=inputName%>[2].click()">false</a>
992                    <%
993                  }
994                  else if (pType instanceof FileParameterType)
995                  {
996                    %>
997                    <b><%=HTML.encodeTags(param.getLabel())%></b><br>
998                    <table border="0" cellspacing="0" cellpadding="0">
999                    <tr>
1000                    <td><input type="text" class="text" name="<%=inputName%>" 
1001                      size="50" value=""
1002                      onblur="valueOnBlur(this.value)">&nbsp;</td>
1003                    <td><base:button 
1004                        title="Browse&hellip;"
1005                        onclick="<%="browseOnClick('"+inputName+"')"%>"
1006                        />
1007                    </td>
1008                    </tr>
1009                    </table>
1010                    <%
1011                    if (recentFiles != null && recentFiles.size() > 0)
1012                    {
1013                      %>
1014                      <b>Recently used</b><br>
1015                      <select name="recent.<%=inputName%>" onchange="recentOnChange('<%=inputName%>')">
1016                      <option value="">
1017                      <%
1018                      for (File recent : recentFiles)
1019                      {
1020                        %>
1021                        <option value="<%=recent.getId()%>"><%=HTML.encodeTags(recent.getPath().toString())%>
1022                        <%
1023                      }
1024                      %>
1025                      </select>
1026                      <%
1027                    }
1028                  }
1029                  else if (pType instanceof ItemParameterType)
1030                  {
1031                    Item parameterItemType = Item.fromClass(pType.getParameterClass());
1032                    BasicItem item = (BasicItem)pcRequest.getCurrentParameterValue(param.getName());
1033                    if (item == null)
1034                    {
1035                      ItemContext cc = sc.getCurrentContext(parameterItemType, parameterItemType == itemType ? subContext : "");
1036                      if (cc.getId() != 0)
1037                      {
1038                        item = parameterItemType.getById(dc, cc.getId());
1039                      }
1040                    }
1041                    if (item != null)
1042                    {
1043                      String display = "";
1044                      if (item instanceof Nameable)
1045                      {
1046                        Nameable nameable = (Nameable)item;
1047                        display = nameable.getName();
1048                      }
1049                      else 
1050                      {
1051                        display = item.toString();
1052                      }
1053                      %>
1054                      <b><%=HTML.encodeTags(param.getLabel())%></b><br>
1055                      <table border="0" cellspacing="2" cellpadding="0">
1056                      <tr>
1057                      <td><input class="text disabled" size="50" 
1058                        name="<%=inputName%>" type="text" disabled
1059                        value="<%=HTML.encodeTags(display)%>"></td>
1060                      <td><base:button title="Select&hellip;"
1061                          onclick="<%="selectItemOnClick('"+inputName+"', '" + parameterItemType.name() + "')"%>"
1062                          visible="false" /></td>
1063                      <td><base:button title="Clear"
1064                          onclick="<%="clearItemOnClick('"+inputName+"', '" + parameterItemType.name() + "')"%>"
1065                          visible="false" /></td>
1066                      </tr>
1067                      </table>
1068                      <%
1069                    }
1070                  }
1071                  else if (pType instanceof PathParameterType)
1072                  {
1073                    PathParameterType ppType = (PathParameterType)pType;
1074                    String browse = "";
1075                    if (ppType.getPathType() == Path.Type.FILE)
1076                    {
1077                      browse = "saveAsOnClick('" + inputName + "')";
1078                    }
1079                    else
1080                    {
1081                      browse = "selectDirectoryOnClick('" + inputName + "')";
1082                    }
1083                    %>
1084                    <b><%=HTML.encodeTags(param.getLabel())%></b><br>
1085                    <table border="0" cellspacing="0" cellpadding="0">
1086                    <tr>
1087                    <td>
1088                      <input type="text" class="text" name="<%=inputName%>" size="40" value=""
1089                        onblur="valueOnBlur(this.value)">&nbsp;</td>
1090                    <td><base:button 
1091                        title="Browse&hellip;"
1092                        onclick="<%=browse%>"
1093                        />
1094                    </td>
1095                    </tr>
1096                    </table>
1097                    <%
1098                  }
1099                  else
1100                  {
1101                    %>
1102                    <b><%=HTML.encodeTags(param.getLabel())%></b><br>
1103                    <%
1104                  }
1105                  %>
1106                  <br>
1107                  <div class="parameterhelp">
1108                  <%=HTML.niceFormat(param.getDescription())%>
1109                  </div>
1110                  </div>
1111                  <%
1112                }
1113                else
1114                {
1115                  %>
1116                  <div id="<%=inputName%>_div" style="display: none;" class="parameterhelp">
1117                  <%=HTML.niceFormat(param.getDescription())%>
1118                  </div>
1119                  <%
1120                }
1121              }
1122            }
1123          }
1124          %>
1125        </td>
1126      </tr>
1127      </table>
1128      </div>
1129    </form>
1130    <div align="center">
1131    <base:buttongroup>
1132      <base:button onclick="testWithFile()" title="Test with file&hellip;" image="file.gif"
1133        tooltip="Use an uploaded file to create the regular expressions and column mappings"
1134        visible="<%=configureByExample%>" />
1135      <base:button onclick="saveSettings()" title="Next" />
1136      <base:button onclick="window.close()" title="Cancel" />
1137    </base:buttongroup>
1138    </div>
1139  </base:body>
1140  </base:page>
1141  <%
1142}
1143finally
1144{
1145  if (dc != null) dc.close();
1146}
1147%>
Note: See TracBrowser for help on using the repository browser.