source: trunk/www/views/experiments/bioassays/list_bioassays.jsp @ 3679

Last change on this file since 3679 was 3679, checked in by Jari Häkkinen, 15 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: 17.1 KB
Line 
1<%-- $Id: list_bioassays.jsp 3679 2007-08-17 07:18:29Z jari $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Hakkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell
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 2
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.Item"
32  import="net.sf.basedb.core.ItemContext"
33  import="net.sf.basedb.core.Experiment"
34  import="net.sf.basedb.core.BioAssaySet"
35  import="net.sf.basedb.core.BioAssay"
36  import="net.sf.basedb.core.RawBioAssay"
37  import="net.sf.basedb.core.AnnotationSet"
38  import="net.sf.basedb.core.AnnotationType"
39  import="net.sf.basedb.core.ItemQuery"
40  import="net.sf.basedb.core.ItemResultIterator"
41  import="net.sf.basedb.core.ItemResultList"
42  import="net.sf.basedb.core.Permission"
43  import="net.sf.basedb.core.PluginDefinition"
44  import="net.sf.basedb.core.PermissionDeniedException"
45  import="net.sf.basedb.core.RawDataType"
46  import="net.sf.basedb.core.Type"
47  import="net.sf.basedb.core.Include"
48  import="net.sf.basedb.core.query.Restrictions"
49  import="net.sf.basedb.core.query.Expressions"
50  import="net.sf.basedb.core.query.Orders"
51  import="net.sf.basedb.core.query.Hql"
52  import="net.sf.basedb.core.plugin.GuiContext"
53  import="net.sf.basedb.core.plugin.Plugin"
54  import="net.sf.basedb.util.Tree"
55  import="net.sf.basedb.util.Enumeration"
56  import="net.sf.basedb.clients.web.Base"
57  import="net.sf.basedb.clients.web.ModeInfo"
58  import="net.sf.basedb.clients.web.PermissionUtil"
59  import="net.sf.basedb.clients.web.util.HTML"
60  import="net.sf.basedb.util.Values"
61  import="net.sf.basedb.util.formatter.Formatter"
62  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
63  import="java.util.List"
64  import="java.util.LinkedList"
65  import="java.util.Map"
66  import="java.util.HashMap"
67  import="java.util.Iterator"
68  import="java.util.Collection"
69%>
70<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
71<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
72<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
73<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
74<%!
75  private static final Item itemType = Item.BIOASSAY;
76  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
77%>
78<%
79final int bioAssaySetId = Values.getInt(request.getParameter("bioassayset_id"));
80final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
81final String ID = sc.getId();
82final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
83
84final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
85final String callback = request.getParameter("callback");
86final String title = mode.generateTitle("bioassay", "bioassays");
87final DbControl dc = sc.newDbControl();
88ItemResultIterator<BioAssay> bioAssays = null;
89ItemResultList<AnnotationType> annotationTypes = null;
90try
91{
92  final ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
93  final BioAssaySet bioAssaySet = BioAssaySet.getById(dc, bioAssaySetId);
94  final Experiment experiment = bioAssaySet.getExperiment();
95  final int experimentId = experiment.getId();
96  final RawDataType rawDataType = experiment.getRawDataType();
97  final boolean createPermission = experiment.hasPermission(Permission.WRITE);
98  final boolean deletePermission = createPermission;
99  final boolean writePermission = createPermission;
100
101  // Query for raw bioassays related to the current bioassay
102  final ItemQuery<RawBioAssay> rawQuery = RawBioAssay.getQuery();
103  rawQuery.include(Include.MINE, Include.SHARED, Include.IN_PROJECT, Include.OTHERS);
104  rawQuery.join(Hql.innerJoin("bioAssays", "bas"));
105  rawQuery.restrict(Restrictions.eq(Hql.alias("bas"), Expressions.parameter("bioAssay"))); 
106  rawQuery.order(Orders.asc(Hql.property("name"))); 
107 
108  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
109  annotationTypes = annotationTypeQuery.list(dc);
110  try
111  {
112    final ItemQuery<BioAssay> query = Base.getConfiguredQuery(cc, true, bioAssaySet.getBioAssays(), mode);
113    bioAssays = query.iterate(dc);
114  }
115  catch (Throwable t)
116  {
117    cc.setMessage(t.getMessage());
118  }
119  int numListed = 0;
120  %>
121  <base:page title="<%=title%>" type="<%=mode.getPageType()%>">
122  <base:head scripts="table.js,tabcontrol.js" styles="table.css,headertabcontrol.css,path.css">
123    <script language="JavaScript">
124    var submitPage = 'index.jsp';
125    var formId = 'bioAssaySets';
126    function editItem(itemId)
127    {
128      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
129    }
130    function viewItem(itemId)
131    {
132      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
133    }
134    function itemOnClick(evt, itemId)
135    {
136      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
137    }
138    function configureColumns()
139    {
140      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
141    }
142    function runPlugin(cmd)
143    {
144      Table.submitToPopup(formId, cmd, 740, 540);
145    }
146    function returnSelected()
147    {
148      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
149      window.close();
150    }
151    function presetOnChange()
152    {
153      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
154    }
155    function switchTab(tabControlId, tabId)
156    {
157      if (tabId == 'properties' || tabId == 'overviewplots' || tabId == 'cfplots' || tabId == 'annotations')
158      {
159        location.href = '../bioassaysets/index.jsp?ID=<%=ID%>&cmd=ViewItem&experiment_id=<%=experiment.getId()%>&item_id=<%=bioAssaySetId%>&tab='+tabId;
160      }
161      else if (tabId == 'spotdata')
162      {
163        location.href = '../spotdata/index.jsp?ID=<%=ID%>&experiment_id=<%=experimentId%>&bioassayset_id=<%=bioAssaySetId%>';
164      }
165      else
166      {
167        TabControl.setActiveTab(tabControlId, tabId);
168      }
169    }
170    function openPlotTool(bioAssayId)
171    {
172      Main.openPopup('../plotter/index.jsp?ID=<%=ID%>&bioassay_id='+bioAssayId, 'Plotter', 1000, 700);
173    }
174    function viewSpotData(bioAssayId)
175    {
176      location.href = '../spotdata/index.jsp?ID=<%=ID%>&bioassay_id='+bioAssayId;
177    }
178    </script>
179  </base:head>
180 
181  <base:body>
182    <p>
183    <%
184    if (!mode.isSelectionMode())
185    {
186      %>
187      <p:path>
188        <p:pathelement title="Experiments" href="<%="../index.jsp?ID="+ID%>" />
189        <p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" 
190          href="<%="../bioassaysets/index.jsp?ID="+ID+"&experiment_id="+experiment.getId()%>" />
191        <p:pathelement title="<%=HTML.encodeTags(bioAssaySet.getName())%>" />
192      </p:path>
193      <%
194    }
195    %>
196
197    <t:tabcontrol id="main" active="bioassays" switch="switchTab" notabs="<%=mode.isSelectionMode()%>">
198    <t:tab id="properties" title="Properties" />
199   
200    <t:tab id="annotations" title="Annotations" 
201        tooltip="View annotation values" />
202   
203    <t:tab id="bioassays" title="Bioassays">
204    <%
205    if (cc.getMessage() != null)
206    {
207      %>
208      <div class="error"><%=cc.getMessage()%></div>
209      <%
210      cc.setMessage(null);
211    }
212    %>
213    <tbl:table 
214      id="bioAssaySets" 
215      clazz="itemlist" 
216      columns="<%=cc.getSetting("columns")%>"
217      sortby="<%=cc.getSortProperty()%>" 
218      direction="<%=cc.getSortDirection()%>"
219      title="<%=title%>"
220      action="index.jsp"
221      sc="<%=sc%>"
222      item="<%=itemType%>"
223      >
224      <tbl:hidden 
225        name="mode" 
226        value="<%=mode.getName()%>" 
227      />
228      <tbl:hidden 
229        name="bioassayset_id" 
230        value="<%=String.valueOf(bioAssaySetId)%>" 
231      />
232      <tbl:hidden 
233        name="callback" 
234        value="<%=callback%>" 
235        skip="<%=callback == null%>" 
236      />
237      <tbl:columndef 
238        id="name"
239        property="name"
240        datatype="string"
241        title="Name"
242        sortable="true" 
243        filterable="true"
244        exportable="true"
245        show="always" 
246      />
247      <tbl:columndef 
248        id="spots"
249        property="numSpots"
250        datatype="int"
251        title="Spots"
252        sortable="true" 
253        filterable="true"
254        exportable="true"
255      />
256      <tbl:columndef
257        id="rawBioAssays"
258        title="Raw bioassays"
259      />
260      <tbl:columndef 
261        id="description"
262        property="description"
263        datatype="string"
264        title="Description" 
265        sortable="true" 
266        filterable="true" 
267        exportable="true"
268      />
269      <tbl:columndef 
270        id="tools"
271        title="Tools" 
272        show="<%=mode.isSelectionMode() ? "never" : "auto"%>"
273      />
274      <%
275      for (AnnotationType at : annotationTypes)
276      {
277        Enumeration<String, String> annotationEnum = null;
278        Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
279        if (at.isEnumeration())
280        {
281          annotationEnum = new Enumeration<String, String>();
282          List<?> values = at.getValues();
283          for (Object value : values)
284          {
285            String encoded = formatter.format(value);
286            annotationEnum.add(encoded, encoded);
287          }
288        }
289        %>
290        <tbl:columndef 
291          id="<%="at"+at.getId()%>"
292          title="<%=HTML.encodeTags(at.getName())+" [A]"%>" 
293          property="<%="#"+at.getId()%>"
294          annotation="true"
295          datatype="<%=at.getValueType().getStringValue()%>"
296          enumeration="<%=annotationEnum%>"
297          sortable="false" 
298          filterable="true" 
299          exportable="true"
300          formatter="<%=formatter%>"
301        />
302        <%
303      }
304      %>
305      <tbl:toolbar
306        visible="<%=mode.hasToolbar()%>"
307        >
308        <tbl:button 
309          image="columns.gif" 
310          onclick="configureColumns()" 
311          title="Columns&hellip;" 
312          tooltip="Show, hide and re-order columns" 
313        />
314        <tbl:button 
315          image="import.gif" 
316          onclick="runPlugin('ImportItems')" 
317          title="Import&hellip;" 
318          tooltip="Import data" 
319          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
320        />
321        <tbl:button 
322          image="export.gif" 
323          onclick="runPlugin('ExportItems')" 
324          title="Export&hellip;" 
325          tooltip="Export data" 
326          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
327        />
328        <tbl:button
329          disabled="<%=!createPermission%>"
330          image="<%=createPermission ? "filter.gif" : "filter_disabled.gif"%>"
331          onclick="<%="runPlugin('NewFilteredBioAssaySet')"%>"
332          title="Filter bioassay set&hellip;"
333          tooltip="<%=createPermission ? 
334            "Create a new bioassay set by filtering this bioassayset" :
335            "You do not have permission analyze this experiment"%>"
336          visible="<%=!mode.isSelectionMode()%>"
337        />
338        <tbl:button 
339          image="runplugin.gif" 
340          onclick="runPlugin('RunListPlugin')" 
341          title="Run plugin&hellip;" 
342          tooltip="Run a plugin" 
343          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER) && !mode.isSelectionMode()%>"
344        />
345        <tbl:button 
346          disabled="<%=!createPermission%>"
347          image="<%=createPermission ? "runplugin.gif" : "runplugin_disabled.gif"%>" 
348          onclick="<%="runPlugin('RunListAnalysisPlugin')"%>"
349          title="Run analysis&hellip;" 
350          tooltip="<%=createPermission ? "Run an analysis plugin" : 
351            "You do not have permission to analyze this experiment"%>"
352          visible="<%=pluginCount.containsKey(Plugin.MainType.ANALYZE) && !mode.isSelectionMode()%>"
353        />
354      </tbl:toolbar>
355      <tbl:navigator
356        page="<%=cc.getPage()%>" 
357        rowsperpage="<%=cc.getRowsPerPage()%>" 
358        totalrows="<%=bioAssays == null ? 0 : bioAssays.getTotalCount()%>" 
359        visible="<%=mode.hasNavigator()%>"
360      />
361      <tbl:data>
362        <tbl:columns>
363        <tbl:presetselector 
364          clazz="columnheader"
365          colspan="3"
366          onchange="presetOnChange()"
367        />
368        </tbl:columns>
369        <tr>
370          <tbl:header 
371            clazz="index"
372            >&nbsp;</tbl:header>
373          <tbl:header 
374            clazz="check" 
375            visible="<%=mode.hasCheck()%>"
376            ><base:icon 
377              image="check_uncheck.gif" 
378              tooltip="Check/uncheck all" 
379              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
380            /></tbl:header>
381          <tbl:header 
382            clazz="check" 
383            visible="<%=mode.hasRadio()%>"
384            />
385          <tbl:header 
386            clazz="icons" 
387            visible="<%=mode.hasIcons()%>"
388            >&nbsp;</tbl:header>
389          <tbl:propertyfilter />
390        </tr>
391   
392          <tbl:rows>
393          <%
394          int index = cc.getPage()*cc.getRowsPerPage();
395          int selectedItemId = cc.getId();
396          if (bioAssays != null)
397          {           
398            while (bioAssays.hasNext())
399            {
400              BioAssay item = bioAssays.next();
401              int itemId = item.getId();
402              String name = HTML.encodeTags(item.getName());
403              String tooltip = mode.isSelectionMode() ?
404                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
405              index++;
406              numListed++;         
407              %>
408              <tbl:row>
409                <tbl:header 
410                  clazz="index"
411                  ><%=index%></tbl:header>
412                <tbl:header 
413                  clazz="check" 
414                  visible="<%=mode.hasCheck()%>"
415                  ><input 
416                      type="checkbox" 
417                      name="<%=itemId%>" 
418                      value="<%=itemId%>" 
419                      title="<%=name%>" 
420                      <%=cc.getSelected().contains(itemId) ? "checked" : ""%>
421                    ></tbl:header>
422                <tbl:header 
423                  clazz="check" 
424                  visible="<%=mode.hasRadio()%>"
425                  ><input 
426                      type="radio" 
427                      name="item_id" 
428                      value="<%=itemId%>" 
429                      title="<%=name%>" 
430                      <%=selectedItemId == itemId ? "checked" : ""%>
431                    ></tbl:header>
432                <tbl:header 
433                  clazz="icons" 
434                  visible="<%=mode.hasIcons()%>"
435                  >&nbsp;</tbl:header>
436                <tbl:cell column="name"><div class="link" 
437                  onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
438                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
439                <tbl:cell column="spots"><%=item.getNumSpots()%></tbl:cell>
440                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
441                <tbl:cell column="rawBioAssays">
442                  <%
443                  rawQuery.setParameter("bioAssay", itemId, Type.INT);
444                  try
445                  {
446                    String separator = "";
447                    for (RawBioAssay rba : rawQuery.list(dc))
448                    {
449                      out.write(separator);
450                      if (mode.hasPropertyLink())
451                      {
452                        out.write(Base.getLinkedName(ID, rba, false, mode.hasEditLink()));
453                      }
454                      else
455                      {
456                        out.write(HTML.encodeTags(rba.getName()));
457                      }
458                      separator = ", ";
459                    }
460                  }
461                  catch (Throwable t)
462                  {
463                    %>
464                    <div class="error"><%=t.getMessage()%></div>
465                    <%
466                  }
467                  %>
468                </tbl:cell>
469                <%
470                AnnotationSet as = item.isAnnotated() ? item.getAnnotationSet() : null;
471                if (as != null)
472                {
473                  for (AnnotationType at : annotationTypes)
474                  {
475                    if (as.hasAnnotation(at))
476                    {
477                      %>
478                      <tbl:cell column="<%="at"+at.getId()%>"
479                        ><tbl:cellvalue 
480                        list="<%=as.getAnnotation(at).getValues()%>" 
481                      /></tbl:cell>
482                      <%
483                    }
484                  }
485                }
486                %>
487                <tbl:cell column="tools">
488                  <nobr>
489                  <a href="javascript:openPlotTool(<%=itemId%>)" 
490                    title="A simple plot tool"><img 
491                    src="../../../images/plotter.gif" border="0"></a>
492                  <a href="javascript:viewSpotData(<%=itemId%>)"
493                    title="View spot data as a table"><img 
494                    src="../../../images/table.gif" border="0"></a>
495                  </nobr>
496                </tbl:cell>
497              </tbl:row>
498              <%
499            }
500          }
501          %>
502          </tbl:rows>
503        </tbl:data>
504      <%
505      if (numListed == 0)
506      {
507        %>
508        <tbl:panel><%=bioAssays == null || bioAssays.getTotalCount() == 0 ? "No bioassays were found" : "No bioassays on this page. Please select another page!" %></tbl:panel>
509        <%
510      }
511      else
512      {
513        %>
514        <tbl:navigator
515          page="<%=cc.getPage()%>" 
516          rowsperpage="<%=cc.getRowsPerPage()%>" 
517          totalrows="<%=bioAssays == null ? 0 : bioAssays.getTotalCount()%>" 
518          visible="<%=mode.hasNavigator()%>"
519          locked="true"
520        />
521        <%
522      }
523      %>
524
525    </tbl:table>
526    <base:buttongroup align="center" clazz="fixedatbottom">
527      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
528      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
529      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
530    </base:buttongroup>
531    </t:tab>
532   
533    <t:tab id="spotdata" title="Spot data" />
534   
535    <t:tab id="overviewplots" title="Overview plots" 
536      visible="<%=rawDataType.getChannels() == 2%>" />
537     
538    <t:tab id="cfplots" title="Correction factor plots" 
539      visible="<%=rawDataType.getChannels() == 2 && bioAssaySet.getTransformation().getSource() != null %>" />
540   
541    </t:tabcontrol>
542
543  </base:body>
544  </base:page>
545  <%
546}
547finally
548{
549  if (bioAssays != null) bioAssays.close();
550  if (dc != null) dc.close();
551}
552%>
Note: See TracBrowser for help on using the repository browser.