source: branches/2.8-stable/www/plugins/net/sf/basedb/plugins/jep_intensity_transformer.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: 10.1 KB
Line 
1<%-- $Id: jep_intensity_transformer.jsp 4506 2008-09-11 09:29:40Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006, 2007 Nicklas Nordborg
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 3
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.Item"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.RawDataType"
33  import="net.sf.basedb.core.BioAssaySet"
34  import="net.sf.basedb.core.Formula"
35  import="net.sf.basedb.core.Job"
36  import="net.sf.basedb.core.ItemQuery"
37  import="net.sf.basedb.core.ItemResultList"
38  import="net.sf.basedb.core.Include"
39  import="net.sf.basedb.core.PluginConfigurationRequest"
40  import="net.sf.basedb.core.RequestInformation"
41  import="net.sf.basedb.core.query.Orders"
42  import="net.sf.basedb.core.query.Hql"
43  import="net.sf.basedb.clients.web.Base"
44  import="net.sf.basedb.clients.web.WebException"
45  import="net.sf.basedb.clients.web.util.HTML"
46  import="net.sf.basedb.util.Values"
47  import="java.util.List"
48%>
49<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
50<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
51<%
52final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
53final String ID = sc.getId();
54final ItemContext cc = sc.getCurrentContext(Item.BIOASSAYSET);
55DbControl dc = null;
56try
57{
58  String errorMessage = (String)sc.getSessionSetting("plugin.configure.errors.message");
59  List<Throwable> errors = (List<Throwable>)sc.getSessionSetting("plugin.configure.errors.list");
60 
61  PluginConfigurationRequest pcRequest = (PluginConfigurationRequest)sc.getSessionSetting("plugin.configure.request");
62  RequestInformation info = pcRequest.getRequestInformation();
63 
64  dc = sc.newDbControl();
65  Job job = (Job)sc.getSessionSetting("plugin.configure.job");
66  dc.reattachItem(job);
67  BioAssaySet source = null;
68  source = (BioAssaySet)job.getParameterValue("source");
69  if (source == null && cc.getId() != 0) source = BioAssaySet.getById(dc, cc.getId());
70  if (source == null) throw new WebException("popup", "No current bioassay set", 
71    "Could not find any current bioassay set. Please select a bioassay set before trying again");
72  source = BioAssaySet.getById(dc, source.getId());
73  int maxRawMappings = source.getMaxRawMappingsForSpot();
74
75  RawDataType rdt = source.getRawDataType();
76 
77  // Current parameter values
78  String childName = Values.getString((String)job.getParameterValue("childName"), source.getName());
79  String childDescription = (String)job.getParameterValue("childDescription");
80  String transformationName = (String)job.getParameterValue("transformationName");
81 
82  // Predefined formulas
83  ItemQuery<Formula> formulaQuery = Formula.getQuery(Formula.Type.INTENSITY_TRANSFORMATION, rdt);
84  formulaQuery.order(Orders.asc(Hql.property("name")));
85  formulaQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
86  ItemResultList<Formula> formulas = formulaQuery.list(dc);
87  %>
88  <base:page type="popup" title="Transform intensities">
89  <base:head styles="parameters.css">
90    <script language="JavaScript">
91    function hideErrorList()
92    {
93      Main.hide('errorlist');
94      Main.show('showerrorlist');
95    }
96    function showErrorList()
97    {
98      Main.show('errorlist');
99      Main.hide('showerrorlist');
100    }
101    function presetOnChange()
102    {
103      var frm = document.forms['transformation'];
104      var formulaId = frm.presets[frm.presets.selectedIndex].value;
105      frm['parameter:transformationName'].value = frm.presets[frm.presets.selectedIndex].text;
106      for (var ch = 1; ch <= <%=rdt.getChannels()%>; ch++)
107      {
108        frm['parameter:ch'+ch+'.expression'].value = formulas[formulaId+'.'+ch];
109      }
110      frm.presets.selectedIndex = 0;
111    }
112    function openExpressionBuilder(title, inputName)
113    {
114      Main.expressionBuilder('<%=ID%>', title, 'transformation', inputName, 'INTENSITY_TRANSFORMATION', '<%=rdt.getId()%>', <%=rdt.getChannels()%>, false, '<%=source.getId()%>');
115    }
116    function validate()
117    {
118      var frm = document.forms['transformation'];
119      for (var ch = 1; ch <= <%=rdt.getChannels()%>; ch++)
120      {
121        var inputName = 'parameter:ch'+ch+'.expression';
122        if (Main.trimString(frm[inputName].value) == '')
123        {
124          alert('You must enter an expression for channel ' + ch);
125          frm[inputName].focus();
126          return false;
127        }
128        else if (<%=maxRawMappings != 1 ? "true" : "false"%> && frm[inputName].value.search(/raw\(/) != -1)
129        {
130          alert('Can\'t use function raw() for bioassaysets with multiple mappings to raw data');
131          frm[inputName].focus();
132          return false;
133        }
134      }
135      return true;
136    }
137    function doNext()
138    {
139      if (validate())
140      {
141        var frm = document.forms['transformation'];
142        frm.submit();
143      }
144    }
145    function doCancel()
146    {
147      location = 'index.jsp?ID=<%=ID%>&cmd=CancelWizard';
148    }
149   
150    var formulas = new Array();
151    function init()
152    {
153      <%
154      for (Formula f : formulas)
155      {
156        for (int ch = 1; ch <= rdt.getChannels(); ++ch)
157        {
158          String formula = f.getFormula(ch-1);
159          %>
160          formulas['<%=f.getId()%>.<%=ch%>'] = '<%=HTML.javaScriptEncode(formula)%>';
161          <%
162        }
163      }
164      %>
165    }
166    </script>
167  </base:head>
168  <base:body onload="init()">
169    <form name="transformation" action="index.jsp" method="post" onsubmit="return false;">
170    <input type="hidden" name="ID" value="<%=ID%>">
171    <input type="hidden" name="requestId" value="<%=request.getParameter("requestId")%>">
172    <input type="hidden" name="cmd" value="SetParameters">
173    <input type="hidden" name="parameter:source" value="<%=source.getId()%>">
174   
175    <h3 class="docked">Transform intensities <base:help helpid="jepintensitytransformer.options"/></h3>
176    <div class="boxed">
177    <%
178    if (errorMessage != null || (errors != null && errors.size() > 0))
179    {
180      %>
181      <div id="errors" style="margin-bottom: 12px;" class="parameterhelp">
182        <div class="error" style="margin: 0px;">
183        <%=errorMessage %>
184        </div>
185        <%
186        if (errors != null && errors.size() > 0)
187        {
188          %>
189          <div id="showerrorlist" style="display: none;">
190            <base:icon image="bullet.gif" /><a href="javascript:showErrorList()">Show details</a>
191          </div>
192          <div id="errorlist">
193          <ol>
194          <%
195          for (Throwable t : errors)
196          {
197            %>
198            <li><%=t.getMessage()%><br>
199            <%
200          }
201          %>
202          </ol>
203          <base:icon image="bullet.gif" /><a href="javascript:hideErrorList()">Hide details</a>
204          </div>
205          <%
206        }
207        %>
208      </div>
209      <%
210    }
211    %>
212
213      <table class="form" width="100%">
214      <tr valign="top">
215        <td class="prompt">Source bioassay set</td>
216        <td><%=HTML.encodeTags(source.getName())%></td>
217      </tr>     
218      <tr>
219        <td class="prompt" colspan="2">Child bioassay set</td>
220      </tr>
221      <tr>
222        <td style="text-align: right">Name</td>
223        <td>
224          <input type="text" class="text required" size="50" maxlength="255" name="parameter:childName" 
225            value="<%=HTML.encodeTags(childName)%>"></td>
226      </tr>
227      <tr valign="top">
228        <td style="text-align: right">Description</td>
229        <td nowrap>
230          <textarea class="text" rows="4" cols="50" name="parameter:childDescription" wrap="virtual"
231            ><%=HTML.encodeTags(childDescription)%></textarea>
232          <a href="javascript:Main.zoom('Description', 'transformation', 'parameter:childDescription')"
233            title="Edit in larger window"><base:icon image="zoom.gif" /></a>
234        </td>
235      </tr>
236      <tr>
237        <td class="prompt">Transformation</td>
238        <td>
239        <%
240        if (formulas.size() > 0)
241        {
242          %>
243          <select name="presets" style="width: 32em;"
244            onchange="presetOnChange()" 
245            >
246            <option value="">- select from list or enter formula below -
247            <%
248            for (Formula f : formulas)
249            {
250              boolean ok = true;
251              if (maxRawMappings != 1)
252              {
253                for (String formula : f.getFormulas())
254                {
255                  ok &= !formula.contains("raw(");
256                }
257              }
258              if (ok)
259              {
260                %>
261                <option value="<%=f.getId()%>" title="<%=HTML.encodeTags(f.getDescription())%>"
262                  ><%=HTML.encodeTags(f.getName())%>
263                <%
264              }
265            }
266            %>
267          </select>
268          <%
269        }
270        %>
271        </td>
272      </tr>
273      <tr>
274        <td style="text-align: right">Name</td>
275        <td>
276          <input type="text" class="text" size="50" maxlength="255" name="parameter:transformationName" 
277            value="<%=HTML.encodeTags(transformationName)%>"></td>
278      </tr>
279     
280      <%
281      for (int ch = 1; ch <= rdt.getChannels(); ++ch)
282      {
283        String inputName = "parameter:ch" + ch + ".expression";
284        String value = (String)job.getParameterValue("ch"+ch+".expression");
285        if (value == null) value = (String)info.getParameter("ch"+ch+".expression").getParameterType().getDefaultValue();
286        %>
287        <tr valign="top">
288          <td style="text-align: right">Ch <%=ch%></td>
289          <td>
290            <table border="0" cellspacing="0" cellpadding="0">
291            <tr valign="top">
292            <td>
293              <input type="text" class="text required" name="<%=inputName%>"
294                size="50" 
295                value="<%=HTML.encodeTags(value)%>">&nbsp;
296            </td>
297            <td><base:button onclick="<%="openExpressionBuilder('Ch "+ch+" expression', '"+inputName+"')"%>" 
298              title=""
299              image="expression_builder.gif"
300              tooltip="A simple utility for building expressions" />
301            </td>
302            </tr>
303            </table>
304          </td>
305        </tr>
306        <%
307      }
308      %>
309      </table>
310    </div>
311    </form>
312 
313    <table align="center">
314    <tr>
315      <td width="50%"><base:button onclick="doNext();" title="Next" /></td>
316      <td width="50%"><base:button onclick="doCancel();" title="Cancel" /></td>
317    </tr>
318    </table>
319  </base:body>
320  </base:page>
321  <%
322}
323finally
324{
325  if (dc != null) dc.close();
326}%>
Note: See TracBrowser for help on using the repository browser.