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

Last change on this file since 3679 was 3679, checked in by Jari Häkkinen, 14 years ago

Changing the pesky "a (ä) character to a.

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