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

Last change on this file since 3566 was 3566, checked in by Nicklas Nordborg, 15 years ago

Fixes #678, #679, #680

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