source: branches/2.8-stable/www/plugins/net/sf/basedb/plugins/jep_extra_value_calculator.jsp @ 4506

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

References #118: Change problematic forms to use POST instead of GET

I have changed most of the forms I could find to use POST instead of GET. Many of them are probably not problematic, but I found some:

  • Form for JEP extra value calculator plug-in
  • Form for JEP intensity transformer plug-in
  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 13.0 KB
Line 
1<%-- $Id: jep_extra_value_calculator.jsp 4506 2008-09-11 09:29:40Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Nicklas Nordborg
4  Copyright (C) 2007 Johan Enell, Nicklas Nordborg, Martin Svensson
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 3
12  of the License, or (at your option) any later version.
13
14  BASE is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with this program; if not, write to the Free Software
21  Foundation, Inc., 59 Temple Place - Suite 330,
22  Boston, MA  02111-1307, USA.
23  ------------------------------------------------------------------
24
25  @author Nicklas
26  @version 2.0
27--%>
28<%@ page session="false"
29  import="net.sf.basedb.core.SessionControl"
30  import="net.sf.basedb.core.DbControl"
31  import="net.sf.basedb.core.BioAssay"
32  import="net.sf.basedb.core.Item"
33  import="net.sf.basedb.core.ItemContext"
34  import="net.sf.basedb.core.RawDataType"
35  import="net.sf.basedb.core.BioAssaySet"
36  import="net.sf.basedb.core.Formula"
37  import="net.sf.basedb.core.Job"
38  import="net.sf.basedb.core.ExtraValueType"
39  import="net.sf.basedb.core.ItemQuery"
40  import="net.sf.basedb.core.ItemResultList"
41  import="net.sf.basedb.core.Include"
42  import="net.sf.basedb.core.Type"
43  import="net.sf.basedb.core.query.Orders"
44  import="net.sf.basedb.core.query.Restrictions"
45  import="net.sf.basedb.core.query.Expressions" 
46  import="net.sf.basedb.core.query.Hql"
47  import="net.sf.basedb.clients.web.Base"
48  import="net.sf.basedb.clients.web.WebException"
49  import="net.sf.basedb.clients.web.util.HTML"
50  import="net.sf.basedb.util.Values"
51  import="java.util.List"
52%>
53<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
54<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
55<%!
56private static void addFormulaOption(StringBuilder options, String formula, String title, String description)
57{
58  options.append("<option value=\"").append(HTML.encodeTags(formula)).append("\"");
59  options.append(" title=\"").append(HTML.encodeTags(description)).append("\"");
60  options.append(">").append(HTML.encodeTags(title)).append("\n");
61}
62%>
63<%
64final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
65final String ID = sc.getId();
66ItemContext cc = sc.getCurrentContext(Item.BIOASSAYSET);
67ItemContext realContext = (ItemContext)sc.getSessionSetting("plugin.configure.currentContext");
68if (realContext == null) realContext = cc;
69DbControl dc = null;
70try
71{
72  String errorMessage = (String)sc.getSessionSetting("plugin.configure.errors.message");
73  List<Throwable> errors = (List<Throwable>)sc.getSessionSetting("plugin.configure.errors.list");
74 
75  dc = sc.newDbControl();
76  Job job = (Job)sc.getSessionSetting("plugin.configure.job");
77  dc.reattachItem(job);
78  BioAssaySet source = null;
79  if (job != null) source = (BioAssaySet)job.getParameterValue("source");
80  if (source == null && cc.getId() != 0) source = BioAssaySet.getById(dc, cc.getId());
81  if (source == null) throw new WebException("popup", "No current bioassay set", 
82    "Could not find any current bioassay set. Please select a bioassay set before trying again");
83  source = BioAssaySet.getById(dc, source.getId());
84  int maxRawMappings = source.getMaxRawMappingsForSpot();
85
86  RawDataType rdt = source.getRawDataType();
87 
88  //Find selected bioassays
89  List<BioAssay> bioAssays = null;
90  if (job != null) bioAssays = (List<BioAssay>)job.getParameterValues("bioAssays");
91  if (bioAssays == null)
92  {
93    ItemContext bioAssayContext = sc.getCurrentContext(Item.BIOASSAY);
94    ItemQuery<BioAssay> bioAssayQuery = null;
95    if (bioAssayContext.getSelected().size() > 0)
96    {
97      bioAssayQuery = source.getBioAssays();
98      bioAssayQuery.restrict(
99        Restrictions.in(Hql.property("id"), Expressions.parameter("selected"))
100      );
101      bioAssayQuery.setParameter("selected", bioAssayContext.getSelected(), Type.INT);
102      bioAssays = bioAssayQuery.list(dc);
103    }
104  }
105 
106  // Current parameter values
107  ExtraValueType currentExtraValueType = (ExtraValueType)job.getParameterValue("extraValueType");
108  String expression = (String)job.getParameterValue("expression");
109 
110 
111  // Predefined formulas
112  ItemQuery<Formula> formulaQuery = Formula.getQuery(Formula.Type.COLUMN_EXPRESSION, rdt);
113  formulaQuery.order(Orders.asc(Hql.property("name")));
114  formulaQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
115  ItemResultList<Formula> formulas = formulaQuery.list(dc);
116  StringBuilder formulaOptions = new StringBuilder();
117  for (Formula f : formulas)
118  {
119    String formula = f.getFormula(0);
120    if (maxRawMappings == 1 || !formula.contains("raw("))
121    {
122      addFormulaOption(formulaOptions, formula, f.getName(), f.getDescription());
123    }
124  }
125 
126  // Load recently used items
127  List<ExtraValueType> recentExtraValueTypes = (List<ExtraValueType>)realContext.getRecent(dc, Item.EXTRAVALUETYPE);
128  %>
129  <base:page type="popup" title="Calculate extra value">
130  <base:head scripts="linkitems.js" styles="parameters.css">
131    <script language="JavaScript">
132    function hideErrorList()
133    {
134      Main.hide('errorlist');
135      Main.show('showerrorlist');
136    }
137    function showErrorList()
138    {
139      Main.show('errorlist');
140      Main.hide('showerrorlist');
141    }
142    function selectExtraValueTypeOnClick()
143    {
144      var frm = document.forms['extraValue'];
145      var url = '../../admin/extravaluetypes/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectone&callback=setExtraValueTypeCallback';
146      if (frm['parameter:extraValueType'].length > 1)
147      {
148        var id = Math.abs(parseInt(frm['parameter:extraValueType'][1].value));
149        url += '&item_id='+id;
150      }
151      Main.openPopup(url, 'SelectExtraValueType', 1000, 700);
152    }
153    function setExtraValueTypeCallback(id, name)
154    {
155      var frm = document.forms['extraValue'];
156      var list = frm['parameter:extraValueType'];
157      if (list.length < 1 || list[0].value == '0') // >
158      {
159        Forms.addListOption(list, 0, new Option());
160      }
161      list[0].value = id;
162      list[0].text = name;
163      list.selectedIndex = 0;
164    }
165   
166    function presetOnChange(list, formula, label)
167    {
168      var index = list.selectedIndex;
169      formula.value = list[index].value;
170      if (list[index].value != '' && label) label.value = list[index].text;
171    }
172    function openExpressionBuilder()
173    {
174      Main.expressionBuilder('<%=ID%>', 'Expression', 'extraValue', 'parameter:expression', 'COLUMN_EXPRESSION', '<%=rdt.getId()%>', <%=rdt.getChannels()%>, false, <%=source.getId()%>);
175    }
176    function validate()
177    {
178      var frm = document.forms['extraValue'];
179      if (!frm.allBioAssays.checked && frm.bioAssays.length == 0)
180      {
181        alert('You have not selected any bioassays');
182        return false;
183      }
184      else if (frm['parameter:extraValueType'].selectedIndex < 0)
185      {
186        alert('You must select a type');
187        return false;
188      }
189      else if (Main.trimString(frm['parameter:expression'].value) == '')
190      {
191        alert('You must enter an expression for the extra value');
192        frm['parameter:expression'].focus();
193        return false;
194      }
195      <%
196      if (maxRawMappings != 1)
197      {
198        %>
199        else if (frm['parameter:expression'].value.search(/raw\(/) != -1)
200        {
201          alert('Can\'t use function raw() for bioassaysets with multiple mappings to raw data');
202          frm['parameter:expression'].focus();
203          return false;
204        }
205        <%
206      }
207      %>
208      return true;
209    }
210    function doNext()
211    {
212      if (validate())
213      {
214        var frm = document.forms['extraValue'];
215        if (!frm.allBioAssays.checked)
216        {
217          var ids = Link.getListIds(frm.bioAssays, 'R');
218          for (var i = 0; i < ids.length; i++)
219          {
220            Forms.createHidden(frm, 'parameter:bioAssays', ids[i]);
221          }
222        }
223        frm.submit();
224      }
225    }   
226    function doCancel()
227    {
228      location = 'index.jsp?ID=<%=ID%>&cmd=CancelWizard';
229    }
230    function allBioAssaysOnClick()
231    {
232      var frm = document.forms['extraValue'];
233      frm.bioAssays.disabled = frm.allBioAssays.checked;
234    }
235    function addBioAssaysOnClick()
236    {
237      var frm = document.forms['extraValue'];
238      if (frm.allBioAssays.checked)
239      {
240        return;
241      }
242      var ids = Link.getListIds(frm.bioAssays, 'R');
243      var excludes = ids.join(',');
244      var url = '../../views/experiments/bioassays/index.jsp?ID=<%=ID%>&cmd=UpdateContext&mode=selectmultiple&callback=addBioAssayCallback&bioassayset_id=<%=source.getId()%>';
245      url += "&exclude="+excludes;
246      Main.openPopup(url, 'AddBioAssays', 1000, 700);
247    }
248    function addBioAssayCallback(bioAssayId, name)
249    {
250      var item = Link.getItem('R', bioAssayId);
251      if (!item) item = new Item('R', bioAssayId, name);
252      Link.addItem(document.forms['extraValue'].bioAssays, item);
253    }
254    function removeBioAssaysOnClick()
255    {
256      var frm = document.forms['extraValue'];
257      if (frm.allBioAssays.checked)
258      {
259        return;
260      }
261      Link.removeSelected(frm.bioAssays);
262    }
263    function init()
264    {
265      initBioAssays();
266    }
267   
268    function initBioAssays()
269    {
270      var frm = document.forms['extraValue'];
271      <%
272      if (bioAssays != null)
273      {
274        for (BioAssay ba : bioAssays)
275        {
276          %>
277          Link.addNewItem(frm.bioAssays, new Item('R', <%=ba.getId()%>, '<%=HTML.javaScriptEncode(ba.getName())%>'));
278          <%
279        }
280      }
281      %>
282      frm.allBioAssays.checked = frm.bioAssays.length == 0;
283      allBioAssaysOnClick();
284    }
285    </script>
286  </base:head>
287  <base:body onload="init()">
288    <form name="extraValue" action="index.jsp" method="post" onsubmit="return false;">
289    <input type="hidden" name="ID" value="<%=ID%>">
290    <input type="hidden" name="requestId" value="<%=request.getParameter("requestId")%>">
291    <input type="hidden" name="cmd" value="SetParameters">
292    <input type="hidden" name="parameter:source" value="<%=source.getId()%>">
293   
294    <h3 class="docked">Calculate extra value <base:help helpid="jepextravaluecalculator.options"/></h3>
295    <div class="boxed">
296   
297    <%
298    if (errorMessage != null || (errors != null && errors.size() > 0))
299    {
300      %>
301      <div id="errors" style="margin-bottom: 12px;" class="parameterhelp">
302        <div class="error" style="margin: 0px;">
303        <%=errorMessage %>
304        </div>
305        <%
306        if (errors != null && errors.size() > 0)
307        {
308          %>
309          <div id="showerrorlist" style="display: none;">
310            <base:icon image="bullet.gif" /><a href="javascript:showErrorList()">Show details</a>
311          </div>
312          <div id="errorlist">
313          <ol>
314          <%
315          for (Throwable t : errors)
316          {
317            %>
318            <li><%=t.getMessage()%><br>
319            <%
320          }
321          %>
322          </ol>
323          <base:icon image="bullet.gif" /><a href="javascript:hideErrorList()">Hide details</a>
324          </div>
325          <%
326        }
327        %>
328      </div>
329      <%
330    }
331    %>
332
333      <table class="form" width="100%">
334      <tr valign="top">
335        <td class="prompt">Source bioassay set</td>
336        <td><%=HTML.encodeTags(source.getName())%></td>
337      </tr>
338      <tr valign="top">
339      <td class="prompt">Bioassays</td>
340        <td>
341          <input type="checkbox" name="allBioAssays" 
342            onclick="allBioAssaysOnClick()"><a 
343            href="javascript:document.forms['extraValue'].allBioAssays.click()">All bioassays</a><br>
344          <table border="0" cellspacing="0" cellpadding="0">
345          <tr valign="top">
346          <td>
347            <select name="bioAssays" size="5" multiple style="width: 20em;">
348            </select>
349          </td>
350          <td>
351            <table border="0">
352            <tr><td width="150"><base:button 
353              onclick="addBioAssaysOnClick()" 
354              title="Add&nbsp;bioassays&hellip;" 
355              tooltip="Add bioassays"
356              /></td></tr>
357            <tr><td width="150"><base:button 
358              onclick="removeBioAssaysOnClick()" 
359              title="Remove" 
360              tooltip="Remove the selected bioassays"
361            /></td></tr>
362            </table>
363          </td>
364          </tr>
365          </table>
366        </td>
367      </tr>
368      <tr>
369        <td class="prompt">Extra value type</td>
370        <td>
371          <base:select 
372            id="parameter:extraValueType"
373            clazz="selectionlist"
374            required="true"
375            current="<%=currentExtraValueType%>"
376            recent="<%=recentExtraValueTypes%>"
377            newitem="true"
378            onselect="selectExtraValueTypeOnClick()"
379          />
380        </td>
381      </tr>
382     
383      <tr>
384        <td class="prompt">Expression</td>
385        <td>
386        <select name="presets" style="width: 32em;"
387          onchange="presetOnChange(this, this.form['parameter:expression'])" 
388          >
389          <option value="">- select from list or enter formula below -
390          <%=formulaOptions.toString()%>
391        </select>
392        </td>
393      </tr>
394     
395      <tr valign="top">
396        <td>&nbsp;</td>
397        <td>
398          <table border="0" cellspacing="0" cellpadding="0">
399          <tr valign="top">
400          <td>
401            <textarea class="text required" name="parameter:expression" 
402              rows="4" cols="50"><%=HTML.encodeTags(expression)%></textarea>&nbsp;
403          </td>
404          <td><base:button onclick="openExpressionBuilder()" 
405            title="Expression builder&hellip;" 
406            image="expression_builder.gif"
407            tooltip="A simple utility for building expressions" />
408          </td>
409          </tr>
410          </table>
411        </td>
412      </tr>
413      </table>
414    </div>
415    </form>
416 
417    <table align="center">
418    <tr>
419      <td width="50%"><base:button onclick="doNext();" title="Next" /></td>
420      <td width="50%"><base:button onclick="doCancel();" title="Cancel" /></td>
421    </tr>
422    </table>
423  </base:body>
424  </base:page>
425  <%
426}
427finally
428{
429  if (dc != null) dc.close();
430}%>
Note: See TracBrowser for help on using the repository browser.