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

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

References #1655: GUI improvements

  • Edit dialogs for bioassay set, bioassay, transformation and some other experiment related dialogs
  • Analysis plug-in that have special jsp forms
  • Change history
  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 11.0 KB
Line 
1<%-- $Id: jep_intensity_transformer.jsp 5923 2012-01-11 14:29:26Z 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    <h1>Transform intensities <base:help helpid="jepintensitytransformer.options"/></h1>
175    <form name="transformation" action="index.jsp" method="post" onsubmit="return false;">
176    <input type="hidden" name="ID" value="<%=ID%>">
177    <input type="hidden" name="requestId" value="<%=request.getParameter("requestId")%>">
178    <input type="hidden" name="cmd" value="SetParameters">
179    <input type="hidden" name="parameter:source" value="<%=source.getId()%>">
180   
181    <div class="content bottomborder">
182      <table class="fullform input100">
183      <%
184      if (errorMessage != null || (errors != null && errors.size() > 0))
185      {
186        %>
187        <tr>
188          <th></th>
189          <td colspan="2">
190          <div id="errors" style="margin-bottom: 12px;">
191            <div class="messagecontainer error" style="margin: 0px;">
192            <%=errorMessage %>
193            <%
194            if (errors != null && errors.size() > 0)
195            {
196              %>
197              <div id="showerrorlist">
198                <base:icon image="gonext.png" 
199                  onclick="showErrorList()" 
200                  style="color: #FFFFFF;"
201                  tooltip="Show more information about the error"
202                />
203              </div>
204              <div id="errorlist" style="display: none; margin: 0px;">
205                <base:icon image="move_down.png" 
206                  onclick="hideErrorList()" 
207                  style="color: #FFFFFF;" 
208                  tooltip="Show less information"
209                />
210                <ol>
211                <%
212                for (Throwable t : errors)
213                {
214                  %>
215                  <li><%=t.getMessage()%>
216                  <%
217                }
218                %>
219                </ol>
220              </div>
221              <%
222            }
223            %>
224          </div>
225          </td>
226        </tr>
227        <%
228      }
229      %>
230      <tr>
231        <th>Source bioassay set</th>
232        <td><%=HTML.encodeTags(source.getName())%></td>
233        <td></td>
234      </tr>     
235      <tr>
236        <th>Child bioassay set</th>
237        <td></td>
238        <td></td>
239      </tr>
240      <tr>
241        <th class="subprompt">Name</th>
242        <td>
243          <input type="text" class="text required" maxlength="255" name="parameter:childName" 
244            value="<%=HTML.encodeTags(childName)%>"></td>
245        <td></td>
246      </tr>
247      <tr class="big">
248        <th class="subprompt">Description</th>
249        <td>
250          <textarea class="text" rows="6" name="parameter:childDescription" 
251            ><%=HTML.encodeTags(childDescription)%></textarea>
252        </td>
253        <td style="width: 20px;">
254          <base:icon image="zoom.png" 
255            onclick="Main.zoom('Description', 'transformation', 'description')"
256            tooltip="Edit in larger window"
257          />
258        </td>
259      </tr>
260      <tr>
261        <th>Transformation</th>
262        <td>
263        <%
264        if (formulas.size() > 0)
265        {
266          %>
267          <select name="presets" style="width: 32em;"
268            onchange="presetOnChange()" 
269            >
270            <option value="">- select from list or enter formula below -
271            <%
272            for (Formula f : formulas)
273            {
274              boolean ok = true;
275              if (maxRawMappings != 1)
276              {
277                for (String formula : f.getFormulas())
278                {
279                  ok &= !formula.contains("raw(");
280                }
281              }
282              if (ok)
283              {
284                %>
285                <option value="<%=f.getId()%>" title="<%=HTML.encodeTags(f.getDescription())%>"
286                  ><%=HTML.encodeTags(f.getName())%>
287                <%
288              }
289            }
290            %>
291          </select>
292          <%
293        }
294        %>
295        </td>
296        <td></td>
297      </tr>
298      <tr>
299        <th class="subprompt">Name</th>
300        <td>
301          <input type="text" class="text" maxlength="255" name="parameter:transformationName" 
302            value="<%=HTML.encodeTags(transformationName)%>"></td>
303        <td></td>
304      </tr>
305      <%
306      for (int ch = 1; ch <= rdt.getChannels(); ++ch)
307      {
308        String inputName = "parameter:ch" + ch + ".expression";
309        String value = (String)job.getParameterValue("ch"+ch+".expression");
310        if (value == null) value = (String)info.getParameter("ch"+ch+".expression").getParameterType().getDefaultValue();
311        %>
312        <tr>
313          <th class="subprompt">Ch <%=ch%></th>
314          <td>
315            <input type="text" class="text required" name="<%=inputName%>"
316              value="<%=HTML.encodeTags(value)%>">
317          </td>
318          <td style="width: 20px;">
319            <base:icon onclick="<%="openExpressionBuilder('Ch "+ch+" expression', '"+inputName+"')"%>" 
320              image="expression_builder.gif"
321              tooltip="A simple utility for building expressions"
322            />
323          </td>
324        </tr>
325        <%
326      }
327      %>
328      <tr>
329        <th class="subprompt">Resulting transform</th>
330        <td>
331          <input type="hidden" name="parameter:resultTransform:emptyIsNull" value="1" />
332          <select name="parameter:resultTransform">
333          <option value="">- same as source data -
334          <%
335          for (IntensityTransform t : IntensityTransform.values())
336          {
337            %>
338            <option value="<%=t.name()%>"><%=t.toString()%>
339            <%
340          }
341          %>
342          </select>
343        </td>
344        <td></td>
345      </tr>
346      <tr class="dynamic">
347        <th></th>
348        <td colspan="2"></td>
349      </tr>
350      </table>
351    </div>
352    </form>
353 
354    <base:buttongroup subclass="dialogbuttons">
355      <base:button onclick="doNext();" title="Next" />
356      <base:button onclick="doCancel();" title="Cancel" />
357    </base:buttongroup>
358
359  </base:body>
360  </base:page>
361  <%
362}
363finally
364{
365  if (dc != null) dc.close();
366}%>
Note: See TracBrowser for help on using the repository browser.