source: trunk/www/views/experiments/explorer/search/list.jsp @ 5885

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

References #1616: Clone reporter information to per-experiment tables in the dynamic database

Updated Experiment explorer to use cloned information when possible. Renamed ClonedProperty to ClonableProperty.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 9.9 KB
Line 
1<%-- $Id: list.jsp 5885 2011-11-22 15:17:37Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Johan Enell, Nicklas Nordborg
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 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 BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page pageEncoding="UTF-8" session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.Item"
30  import="net.sf.basedb.core.ItemContext"
31  import="net.sf.basedb.core.Permission"
32  import="net.sf.basedb.core.BioAssaySet"
33  import="net.sf.basedb.core.Experiment"
34  import="net.sf.basedb.core.RawDataType"
35  import="net.sf.basedb.core.ExtendedProperties"
36  import="net.sf.basedb.core.ExtendedProperty"
37  import="net.sf.basedb.core.DynamicReporterQuery"
38  import="net.sf.basedb.core.DynamicResultIterator"
39  import="net.sf.basedb.core.VirtualColumn"
40  import="net.sf.basedb.core.data.ReporterData"
41  import="net.sf.basedb.core.query.Restrictions"
42  import="net.sf.basedb.core.query.Expressions"
43  import="net.sf.basedb.core.query.Dynamic"
44  import="net.sf.basedb.core.query.Orders"
45  import="net.sf.basedb.core.query.Selects"
46  import="net.sf.basedb.core.query.Aggregations"
47  import="net.sf.basedb.core.query.JoinType"
48  import="net.sf.basedb.core.query.SqlResult"
49  import="net.sf.basedb.clients.web.Base"
50  import="net.sf.basedb.clients.web.DynamicUtil"
51  import="net.sf.basedb.clients.web.ExperimentExplorer"
52  import="net.sf.basedb.clients.web.WebException"
53  import="net.sf.basedb.util.Values"
54  import="net.sf.basedb.clients.web.util.HTML"
55  import="net.sf.basedb.clients.web.taglib.table.TableColumn"
56  import="java.util.Date"
57  import="java.util.Map"
58  import="java.util.HashMap"
59  import="java.util.List"
60  import="java.util.LinkedList"
61%>
62<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
63<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
64<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
65<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
66<%!
67  private static final Item itemType = Item.REPORTER;
68%>
69
70<%
71final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
72final String ID = sc.getId();
73final float scale = Base.getScale(sc);
74final String root = request.getContextPath();
75
76final int bioAssaySetId = Values.getInt(request.getParameter("bioassayset_id"));
77final DbControl dc = sc.newDbControl();
78DynamicResultIterator reporters = null;
79long totalReporters = 0;
80try
81{
82  String title = null;
83  final BioAssaySet bioAssaySet = BioAssaySet.getById(dc, bioAssaySetId);
84  final Experiment experiment = bioAssaySet.getExperiment();
85  final RawDataType rawDataType = experiment.getRawDataType();
86 
87  final ExperimentExplorer explorer = ExperimentExplorer.getExplorer(bioAssaySet);
88  final ItemContext cc = explorer.getAndSetReporterContext(sc, null);
89  final String subContext = cc.getSubContext();
90
91  List<TableColumn> allColumns = new LinkedList<TableColumn>();
92  DynamicUtil.addReporterColumns(allColumns, dc, experiment.getVirtualDb().getReporterCloneTemplate(), "", "@", "");
93 
94  DynamicUtil.SelectedInfo selected = DynamicUtil.getSelectedColumns(cc, allColumns, false);
95  List<TableColumn> selectedColumns = selected.selectedColumns;
96 
97  try
98  {
99    DynamicReporterQuery reporterQuery = explorer.getReporterQuery(dc, selected.selectedProperties);
100    reporterQuery.setFailSafe(true);
101    totalReporters = explorer.getMatchingReporters(dc);
102    reporters = reporterQuery.iterate(dc);
103  }
104  catch (Throwable t)
105  {
106    cc.setMessage(t.getMessage());
107    t.printStackTrace();
108  }
109  int numListed = 0;
110  %>
111
112  <base:page title="<%=title%>">
113  <base:head scripts="table.js,tabcontrol.js,newjoust.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css,newjoust.css">
114  <script language="JavaScript">
115    var submitPage = 'index.jsp';
116    var formId = 'reporters';
117    function editItem(itemId)
118    {
119      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
120    }
121    function viewItem(itemId)
122    {
123      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
124    }
125    function itemOnClick(evt, itemId)
126    {
127      Table.itemOnClick(formId, evt, itemId, 'DEFAULT', viewItem, editItem, null);
128    }   
129    function configureColumns()
130    {
131      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>', '<%=subContext%>');
132    }
133    function presetOnChange()
134    {
135      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>', '<%=subContext%>');
136    }
137    function viewReporter(index)
138    {
139      var url = '../view/index.jsp?ID=<%=ID%>&bioassayset_id=<%=bioAssaySetId%>';
140      if (index >= 0)
141      {
142        url += '&cmd=SetReporterIndex&reporterIndex='+index;
143      }
144      location.href = url;
145    }
146
147    function switchTab(tabControlId, tabId)
148    {
149      if (tabId == 'view')
150      {
151        viewReporter(-1);
152      }
153      else
154      {
155        TabControl.setActiveTab(tabControlId, tabId);
156      }
157    }
158    function newReporterList()
159    {
160      Table.submitToPopup(formId, 'CreateReporterList', 540, 400);
161    }
162  </script>
163  </base:head>
164  <base:body>
165    <p>
166    <p:path>
167      <p:pathelement title="Experiments" href="<%="../../index.jsp?ID="+ID%>" />
168      <p:pathelement title="<%=HTML.encodeTags(experiment.getName())%>" 
169        href="<%="../../bioassaysets/index.jsp?ID="+ID+"&experiment_id="+experiment.getId()%>" />
170      <p:pathelement title="<%=HTML.encodeTags(bioAssaySet.getName())%>" 
171        href="<%="../../bioassaysets/index.jsp?ID="+ID+"&cmd=ViewItem&item_id="+bioAssaySetId%>" />
172      <p:pathelement title="Explorer" />
173    </p:path>
174    <t:tabcontrol id="explorer" switch="switchTab" remember="false" active="search">
175    <t:tab id="search" title="Reporter search">
176    <%
177    if (cc.getMessage() != null)
178    {
179      %>
180      <div class="error"><%=cc.getMessage()%></div>
181      <%
182      cc.setMessage(null);
183    }
184    %>
185    <tbl:table 
186      id="reporters" 
187      clazz="itemlist" 
188      columns="<%=cc.getSetting("columns")%>"
189      sortby="<%=cc.getSortProperty()%>" 
190      direction="<%=cc.getSortDirection()%>"
191      title="<%=title%>"
192      action="index.jsp"
193      sc="<%=sc%>"
194      item="<%=itemType%>"
195      subcontext="<%=subContext%>"
196      >
197      <tbl:hidden 
198        name="bioassayset_id" 
199        value="<%=String.valueOf(bioAssaySetId)%>" 
200      />
201      <%
202      for (TableColumn tc : allColumns)
203      {
204        %>
205        <tbl:columndef
206          id="<%=tc.getId()%>"
207          clazz="<%="externalId".equals(tc.getId()) ? "uniquecol" : "columnheader"%>"
208          property="<%=tc.getProperty()%>"
209          datatype="<%=tc.getDatatype().getStringValue()%>"
210          title="<%=tc.getTitle()%>"
211          sortable="<%=tc.getSortable()%>"
212          filterable="<%=tc.getFilterable()%>"
213          exportable="<%=tc.getExportable()%>"
214          show="<%=tc.getShow()%>"
215          formatter="<%=tc.getFormatter()%>"
216        />
217        <%
218      }
219      %>
220      <tbl:columndef 
221        id="reporterList"
222        property="£reporterList"
223        datatype="int"
224        title="Reporter list"
225        filterable="true"
226        enumeration="<%=Base.getReporterListsEnum(dc)%>"
227        multiple="false"
228      />     
229       
230      <tbl:toolbar>
231        <tbl:button 
232          image="columns.gif" 
233          onclick="configureColumns()" 
234          title="Columns&hellip;" 
235          tooltip="Show, hide and re-order columns" 
236        />
237        <tbl:button
238          image="add.png"
239          onclick="newReporterList()"
240          title="New reporter list&hellip;"
241          tooltip="Create a new reporter list from matching reporters"
242          visible="<%=sc.hasPermission(Permission.CREATE, Item.REPORTERLIST)%>"
243        />
244      </tbl:toolbar>
245      <tbl:navigator
246        page="<%=cc.getPage()%>" 
247        rowsperpage="<%=cc.getRowsPerPage()%>" 
248        totalrows="<%=totalReporters%>" 
249      />
250      <tbl:data>
251        <tbl:columns>
252        <tbl:presetselector 
253          clazz="columnheader"
254          colspan="1"
255          onchange="presetOnChange()"
256        />
257        </tbl:columns>
258        <tr>
259          <tbl:header 
260            clazz="icons"
261            >&nbsp;</tbl:header>
262          <tbl:propertyfilter />
263        </tr>
264        <tbl:rows>
265       
266      <%
267      int rowIndex = cc.getPage()*cc.getRowsPerPage();
268      if (reporters != null)
269      {
270        while (reporters.hasNext())
271        {
272          SqlResult item = reporters.next();
273          int itemId = item.getInt(1);
274          rowIndex++;
275          numListed++;
276          %>
277          <tbl:row>
278            <tbl:header 
279              clazz="icons"
280              ><a href="javascript:viewReporter(<%=rowIndex-1%>)"><%=rowIndex%></a></tbl:header>
281            <%
282            int colIndex = 2;
283            for (TableColumn tc : selectedColumns)
284            {
285              String name = tc.getId();
286              if ("externalId".equals(name))
287              {
288                %>
289                <tbl:cell column="externalId"><div class="link" onclick="itemOnClick(event, <%=itemId%>)" 
290                  title="View this item (use CTRL, ALT or SHIFT to edit)"><%=HTML.encodeTags(item.getString(colIndex))%></div></tbl:cell>
291                <%
292              }
293              else
294              {
295                %>
296                <tbl:cell column="<%=name%>"><tbl:cellvalue value="<%=item.getObject(colIndex)%>" /></tbl:cell>
297                <%
298              }
299              colIndex++;
300            }
301            %>
302          </tbl:row>
303          <%
304        }
305      }
306      %>
307      </tbl:rows>
308      </tbl:data>
309      <%
310      if (numListed == 0)
311      {
312        %>
313        <tbl:panel><%=totalReporters == 0 ? "No reporters were found" : "No reporters on this page. Please select another page!" %></tbl:panel>
314        <%
315      }
316      else
317      {
318        %>
319        <tbl:navigator
320          page="<%=cc.getPage()%>" 
321          rowsperpage="<%=cc.getRowsPerPage()%>" 
322          totalrows="<%=totalReporters%>"
323          locked="true"
324        />
325        <%
326      }
327      %>
328      </tbl:table>
329    </t:tab>
330
331    <t:tab id="view" title="Reporter view" />
332    </t:tabcontrol>
333
334  </base:body>
335  </base:page>
336  <%
337}
338finally
339{
340  if (reporters != null) reporters.close();
341  if (dc != null) dc.close();
342}
343
344%>
Note: See TracBrowser for help on using the repository browser.