source: trunk/www/plugins/net/sf/basedb/plugins/jep_intensity_transformer.jsp @ 5908

Last change on this file since 5908 was 5908, checked in by Nicklas Nordborg, 10 years ago

References #1655: GUI improvements

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