source: trunk/www/biomaterials/bioplates/wells/list_biowells.jsp @ 4882

Last change on this file since 4882 was 4882, checked in by Nicklas Nordborg, 13 years ago

References #1271: Add extension points to all toolbars

Added code for displaying extensions to all biomaterial pages.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 15.2 KB
Line 
1<%-- $Id: list_biowells.jsp 4882 2009-04-03 10:53:42Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Hakkinen, Nicklas Nordborg, Martin Svensson
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 Martin
24  @version 2.10
25--%>
26<%@ page 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.Include"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.BioPlate"
33  import="net.sf.basedb.core.BioWell"
34  import="net.sf.basedb.core.MeasuredBioMaterial"
35  import="net.sf.basedb.core.ItemQuery"
36  import="net.sf.basedb.core.ItemResultIterator"
37  import="net.sf.basedb.core.ItemResultList"
38  import="net.sf.basedb.core.Permission"
39  import="net.sf.basedb.core.PluginDefinition"
40  import="net.sf.basedb.core.PermissionDeniedException"
41  import="net.sf.basedb.core.query.Restrictions"
42  import="net.sf.basedb.core.query.Expressions"
43  import="net.sf.basedb.core.query.Orders"
44  import="net.sf.basedb.core.query.Hql"
45  import="net.sf.basedb.core.plugin.GuiContext"
46  import="net.sf.basedb.core.plugin.Plugin"
47  import="net.sf.basedb.core.data.ReporterData"
48  import="net.sf.basedb.util.Enumeration"
49  import="net.sf.basedb.clients.web.Base"
50  import="net.sf.basedb.clients.web.ModeInfo"
51  import="net.sf.basedb.clients.web.PermissionUtil"
52  import="net.sf.basedb.clients.web.util.HTML"
53  import="net.sf.basedb.util.Values"
54  import="net.sf.basedb.util.formatter.Formatter"
55  import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
56  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
57  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
58  import="net.sf.basedb.clients.web.extensions.JspContext"
59  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
60  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
61  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
62  import="java.util.List"
63  import="java.util.Map"
64  import="java.util.Date"
65%>
66<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
67<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
68<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
69<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
70<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
71<%!
72  private static final Item itemType = Item.BIOWELL;
73  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
74%>
75<%
76final int bioplateId = Values.getInt(request.getParameter("bioplate_id"));
77final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
78final String ID = sc.getId();
79final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
80
81final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
82final String callback = request.getParameter("callback");
83final String title = mode.generateTitle("biowell", "biowells");
84final DbControl dc = sc.newDbControl();
85ItemResultIterator<BioWell> biowells = null;
86
87Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
88Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
89
90WellCoordinateFormatter rowFormatter = new WellCoordinateFormatter(true);
91WellCoordinateFormatter columnFormatter = new WellCoordinateFormatter(false);
92
93try
94{
95  final BioPlate bioplate = BioPlate.getById(dc, bioplateId);
96  final boolean createPermission = bioplate.hasPermission(Permission.WRITE);
97  final boolean deletePermission = createPermission;
98
99  Enumeration<String, String> rows = new Enumeration<String,String>();
100  for (int r = 0; r < bioplate.getPlateGeometry().getRows(); r++)
101  {
102    rows.add(Integer.toString(r), rowFormatter.format(r));
103  }
104 
105  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
106 
107  try
108  {
109    final ItemQuery<BioWell> query = Base.getConfiguredQuery(dc, cc, true, bioplate.getBioWells(), mode);
110    query.join(Hql.leftJoin(null, "bioMaterial", "mbm", null, false));
111    if (!"row".equals(cc.getSortProperty())) query.order(Orders.asc(Hql.property("row")));
112    if (!"column".equals(cc.getSortProperty())) query.order(Orders.asc(Hql.property("column")));
113    biowells = query.iterate(dc);
114  }
115  catch (Throwable t)
116  {
117    cc.setMessage(t.getMessage());
118    t.printStackTrace();
119  }
120  int numListed = 0;
121  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, bioplate);
122  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
123  %>
124  <base:page title="<%=title%>" type="<%=mode.getPageType()%>">
125  <base:head scripts="table.js,tabcontrol.js" styles="table.css,headertabcontrol.css,path.css">
126    <ext:scripts context="<%=jspContext%>" />
127    <ext:stylesheets context="<%=jspContext%>" />
128    <script language="JavaScript">
129    var submitPage = 'index.jsp';
130    var formId = 'biowells';
131
132    function editItem(itemId)
133    {
134      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
135    }
136    function itemOnClick(itemId)
137    {
138      Table.itemOnClick(formId, null, itemId, '<%=mode.getName()%>', null, null, returnSelected);
139    }
140    function configureColumns()
141    {
142      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
143    }
144    function runPlugin(cmd)
145    {
146      Table.submitToPopup(formId, cmd, 740, 540);
147    }
148    function returnSelected()
149    {
150      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
151      window.close();
152    }
153    function presetOnChange()
154    {
155      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
156    }
157    function switchTab(tabControlId, tabId)
158    {
159      if (tabId == 'properties' || tabId == 'annotations')
160      {
161        location.href = '../index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=bioplateId%>&tab='+tabId;
162      }     
163      else
164      {
165        TabControl.setActiveTab(tabControlId, tabId);
166      }
167    }
168    </script>
169  </base:head>
170 
171  <base:body>
172    <%
173    if (!mode.isSelectionMode())
174    {
175      %>
176      <p>
177      <p:path>
178        <p:pathelement title="Bioplates" href="<%="../index.jsp?ID="+ID%>" />
179        <p:pathelement title="<%=HTML.encodeTags(bioplate.getName())%>" />
180      </p:path>
181      <%
182    }
183    %>
184
185    <t:tabcontrol id="main" active="biowells" switch="switchTab" notabs="<%=mode.isSelectionMode()%>">
186    <t:tab id="properties" title="Properties" />
187    <t:tab id="annotations" title="Annotations" />       
188    <t:tab id="biowells" title="Biowells">
189   
190    <%
191    if (cc.getMessage() != null)
192    {
193      %>
194      <div class="error"><%=cc.getMessage()%></div>
195      <%
196      cc.setMessage(null);
197    }
198    %>
199    <tbl:table 
200      id="biowells" 
201      clazz="itemlist" 
202      columns="<%=cc.getSetting("columns")%>"
203      sortby="<%=cc.getSortProperty()%>" 
204      direction="<%=cc.getSortDirection()%>"
205      title="<%=title%>"
206      action="index.jsp"
207      sc="<%=sc%>"
208      item="<%=itemType%>"
209      >
210      <tbl:hidden 
211        name="mode" 
212        value="<%=mode.getName()%>" 
213      />
214      <tbl:hidden 
215        name="bioplate_id" 
216        value="<%=String.valueOf(bioplateId)%>" 
217      />
218      <tbl:hidden 
219        name="callback" 
220        value="<%=callback%>" 
221        skip="<%=callback == null%>" 
222      />
223      <tbl:columndef 
224        id="row"
225        property="row"
226        datatype="int"
227        title="Row"
228        sortable="true" 
229        filterable="true"
230        enumeration="<%=rows%>"
231        exportable="true"
232        show="always" 
233        formatter="<%=rowFormatter%>"
234      />
235      <tbl:columndef 
236        id="column"
237        property="column"
238        datatype="int"
239        title="Column"
240        sortable="true" 
241        filterable="true"
242        exportable="true"
243        show="always" 
244        formatter="<%=columnFormatter%>"
245      />
246      <tbl:columndef 
247        id="id"
248        clazz="uniquecol"
249        property="id"
250        datatype="int"
251        title="ID"
252        sortable="true"
253        filterable="true"
254        exportable="true"
255      /> 
256      <tbl:columndef 
257        id="bioMaterial.name"
258        property="bioMaterial.name"
259        datatype="string"
260        title="[Biomtrl] Name"
261        sortable="true" 
262        filterable="true"
263        exportable="true"
264      />
265      <tbl:columndef 
266        id="bioMaterial.description"
267        property="bioMaterial.description"
268        datatype="string"
269        title="[Biomtrl] Description" 
270        sortable="true" 
271        filterable="true" 
272        exportable="true"
273      />
274      <tbl:columndef 
275        id="bioMaterial.entryDate"
276        property="bioMaterial.entryDate"
277        datatype="date"
278        title="[Biomtrl] Registered"
279        sortable="true" 
280        filterable="true"
281        exportable="true"
282        formatter="<%=dateFormatter%>"
283      />
284      <tbl:columndef
285        id="bioMaterialList"
286        property="@bioMaterial.bioMaterialLists"
287        datatype="int"
288        title="[Biomtrl] Biomaterial list"
289        filterable="true"
290        enumeration="<%=Base.getBioMaterialListsEnum(dc, null, Include.ALL)%>"
291        multiple="false"
292      />
293      <tbl:columndef
294        id="permission"
295        title="Permission"
296      />
297      <tbl:toolbar
298        visible="<%=mode.hasToolbar()%>"
299        >
300        <tbl:button 
301          image="columns.gif" 
302          onclick="configureColumns()" 
303          title="Columns&hellip;" 
304          tooltip="Show, hide and re-order columns" 
305        />
306        <tbl:button 
307          image="import.gif" 
308          onclick="runPlugin('ImportItems')" 
309          title="Import&hellip;" 
310          tooltip="Import data" 
311          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
312        />
313        <tbl:button 
314          image="export.gif" 
315          onclick="runPlugin('ExportItems')" 
316          title="Export&hellip;" 
317          tooltip="Export data" 
318          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
319        />
320        <tbl:button 
321          image="runplugin.gif" 
322          onclick="runPlugin('RunListPlugin')" 
323          title="Run plugin&hellip;" 
324          tooltip="Run a plugin" 
325          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
326        />
327        <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
328          wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
329      </tbl:toolbar>
330      <tbl:navigator
331        page="<%=cc.getPage()%>" 
332        rowsperpage="<%=cc.getRowsPerPage()%>" 
333        totalrows="<%=biowells == null ? 0 : biowells.getTotalCount()%>" 
334        visible="<%=mode.hasNavigator()%>"
335      />
336      <tbl:data>
337        <tbl:columns>
338        <tbl:presetselector 
339          clazz="columnheader"
340          colspan="3"
341          onchange="presetOnChange()"
342        />
343        </tbl:columns>
344         
345        <tr>
346          <tbl:header 
347            clazz="index"
348            >&nbsp;</tbl:header>
349          <tbl:header 
350            clazz="check" 
351            visible="<%=mode.hasCheck()%>"
352            ><base:icon 
353              image="check_uncheck.gif" 
354              tooltip="Check/uncheck all" 
355              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
356            /></tbl:header>
357          <tbl:header 
358            clazz="check" 
359            visible="<%=mode.hasRadio()%>"
360            />
361          <tbl:header 
362            clazz="icons" 
363            visible="<%=mode.hasIcons()%>"
364            >&nbsp;</tbl:header>
365          <tbl:propertyfilter />
366        </tr>
367   
368          <tbl:rows>
369          <%
370          int index = cc.getPage()*cc.getRowsPerPage();
371          int selectedItemId = cc.getId();
372          if (biowells != null)
373          {           
374            while (biowells.hasNext())
375            {
376              BioWell item = biowells.next();
377              int itemId = item.getId();
378              index++;
379              numListed++;
380              %>
381              <tbl:row>
382                <tbl:header 
383                  clazz="index"
384                  ><%=index%></tbl:header>
385                <tbl:header 
386                  clazz="check" 
387                  visible="<%=mode.hasCheck()%>"
388                  ><input 
389                    type="checkbox" 
390                    name="<%=itemId%>" 
391                    value="<%=itemId%>" 
392                    title="[<%=rowFormatter.format(item.getRow())%>,<%=columnFormatter.format(item.getColumn())%>]" 
393                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
394                  ></tbl:header>
395                <tbl:header 
396                  clazz="check" 
397                  visible="<%=mode.hasRadio()%>"
398                  ><input 
399                    type="radio" 
400                    name="item_id" 
401                    value="<%=itemId%>" 
402                    title="[<%=rowFormatter.format(item.getRow())%>,<%=columnFormatter.format(item.getColumn())%>]" 
403                    <%=selectedItemId == itemId ? "checked" : ""%>
404                  ></tbl:header>
405                <tbl:header 
406                  clazz="icons" 
407                  visible="<%=mode.hasIcons()%>"
408                  >&nbsp;</tbl:header>
409               
410                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
411                <tbl:cell column="row">
412                  <%
413                  if (mode.isSelectionMode())
414                  {
415                    %>
416                    <div class="link" onclick="itemOnClick(<%=itemId%>)" title="Select this item">
417                      <tbl:cellvalue value="<%=item.getRow()%>" />
418                    </div>
419                  <%
420                  }
421                  else
422                  {
423                    %><tbl:cellvalue value="<%=item.getRow()%>" /><%
424                  }
425                  %>
426                </tbl:cell>
427                <tbl:cell column="column" value="<%=item.getColumn()%>" />
428                <tbl:cell column="bioMaterial.name">                 
429                <%
430                MeasuredBioMaterial bioMaterial = null;
431                boolean bmWritePermission = true;
432                try
433                {
434                  bioMaterial = item.getBioMaterial();
435                  if (bioMaterial != null)
436                  {
437                    bmWritePermission = bioMaterial.hasPermission(Permission.WRITE);                   
438                  }
439                }
440                catch (PermissionDeniedException ex)
441                {
442                  bmWritePermission = false;
443                }
444                %>
445                  <base:propertyvalue 
446                      item="<%=item%>" 
447                      property="bioMaterial"
448                      enableEditLink="<%=mode.hasEditLink() && bmWritePermission%>" 
449                      enablePropertyLink="<%=mode.hasPropertyLink()%>"
450                  />
451                  <base:icon 
452                    image="<%=bmWritePermission ? "edit.gif" : "edit_disabled.gif" %>" 
453                    tooltip="<%=bmWritePermission ? "Change the biomaterial in this biowell" : 
454                      "You have not permission to change the current biomaterial"%>"
455                    onclick="<%=bmWritePermission ? "editItem("+item.getId()+")" : ""%>"
456                  />               
457                </tbl:cell>
458                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
459              </tbl:row>
460              <%
461            }
462          }
463          %>
464          </tbl:rows>
465        </tbl:data>
466      <%
467      if (numListed == 0)
468      {
469        %>
470        <tbl:panel><%=biowells == null || biowells.getTotalCount() == 0 ? "No biowells were found" : "No biowells on this page. Please select another page!" %></tbl:panel>
471        <%
472      }
473      else
474      {
475        %>
476        <tbl:navigator
477          page="<%=cc.getPage()%>" 
478          rowsperpage="<%=cc.getRowsPerPage()%>" 
479          totalrows="<%=biowells == null ? 0 : biowells.getTotalCount()%>" 
480          visible="<%=mode.hasNavigator()%>"
481          locked="true"
482        />
483        <%
484      }
485      %>
486    </tbl:table>
487    <base:buttongroup align="center" clazz="fixedatbottom">
488      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
489      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
490      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
491    </base:buttongroup>
492 
493    </t:tab>
494    </t:tabcontrol>
495
496 
497  </base:body>
498  </base:page>
499  <%
500}
501finally
502{
503  if (biowells != null) biowells.close();
504  if (dc != null) dc.close();
505}
506%>
Note: See TracBrowser for help on using the repository browser.