source: trunk/www/lims/plates/events/list_events.jsp @ 2486

Last change on this file since 2486 was 2486, checked in by Martin Svensson, 16 years ago

References #173. Possible to attach a hardware to a PlateEvent? in the GUI

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 14.4 KB
Line 
1<%-- $Id: list_events.jsp 2486 2006-08-03 15:20:10Z martin $
2  ------------------------------------------------------------------
3  Copyright (C) Authors contributing to this file.
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 2
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 this program; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place - Suite 330,
21  Boston, MA  02111-1307, USA.
22  ------------------------------------------------------------------
23
24  @author Nicklas
25  @version 2.0
26--%>
27<%@ page
28  import="net.sf.basedb.core.SessionControl"
29  import="net.sf.basedb.core.DbControl"
30  import="net.sf.basedb.core.Item"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.Plate"
33  import="net.sf.basedb.core.PlateEvent"
34  import="net.sf.basedb.core.PlateEventType"
35  import="net.sf.basedb.core.ItemQuery"
36  import="net.sf.basedb.core.ItemResultIterator"
37  import="net.sf.basedb.core.Permission"
38  import="net.sf.basedb.core.PluginDefinition"
39  import="net.sf.basedb.core.PermissionDeniedException"
40  import="net.sf.basedb.core.query.Restrictions"
41  import="net.sf.basedb.core.query.Expressions"
42  import="net.sf.basedb.core.query.Orders"
43  import="net.sf.basedb.core.query.Hql"
44  import="net.sf.basedb.core.plugin.GuiContext"
45  import="net.sf.basedb.core.plugin.Plugin"
46  import="net.sf.basedb.clients.web.Base"
47  import="net.sf.basedb.clients.web.ModeInfo"
48  import="net.sf.basedb.clients.web.PermissionUtil"
49  import="net.sf.basedb.clients.web.util.HTML"
50  import="net.sf.basedb.clients.web.util.Values"
51  import="java.util.List"
52  import="java.util.Map"
53%>
54<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
55<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
56<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
57<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
58<%!
59  private static final Item itemType = Item.PLATEEVENT;
60  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
61%>
62<%
63final int plateId = Values.getInt(request.getParameter("plate_id"));
64final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
65final String ID = sc.getId();
66final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
67
68final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
69final String callback = request.getParameter("callback");
70final String title = mode.generateTitle("event", "events");
71final DbControl dc = sc.newDbControl();
72ItemResultIterator<PlateEvent> events = null;
73try
74{
75  final Plate plate = Plate.getById(dc, plateId);
76  final boolean createPermission = plate.hasPermission(Permission.WRITE);
77  final boolean deletePermission = createPermission;
78
79  final ItemQuery<PlateEvent> query = Base.getConfiguredQuery(cc, true, plate.getEvents(), mode);
80
81  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
82  try
83  {
84    events = query.iterate(dc);
85  }
86  catch (Throwable t)
87  {
88    cc.setMessage(t.getMessage());
89  }
90  int numListed = 0;
91  %>
92  <base:page title="<%=title%>" type="<%=mode.getPageType()%>">
93  <base:head scripts="table.js,tabcontrol.js" styles="table.css,headertabcontrol.css,path.css">
94    <script language="JavaScript">
95    var submitPage = 'index.jsp';
96    var formId = 'events';
97    function newItem()
98    {
99      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true, '&plate_id=<%=plateId%>');
100//      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=NewItem&plate_id=<%=plateId%>', 'NewEvent', 600, 380);
101    }
102    function editItem(itemId)
103    {
104      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
105//      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=EditItem&plate_id=<%=plateId%>&item_id='+itemId, 'EditEvent', 600, 380);
106    }
107    function viewItem(itemId)
108    {
109      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
110//      location.href = 'index.jsp?ID=<%=ID%>&cmd=ViewItem&plate_id=<%=plateId%>&item_id='+itemId;
111    }
112    function itemOnClick(evt, itemId)
113    {
114      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
115    }
116    function deleteItems()
117    {
118      var frm = document.forms[formId];
119      var numChecked = Forms.numChecked(frm);
120      if (numChecked == 0)
121      {
122        alert('Please select at least one item in the list');
123        return;
124      }
125      else
126      {
127        var rep = numChecked == 1 ? 'event' : 'events';
128        if (!confirm('You are about to delete '+numChecked+' '+rep+'. This can\'t be undone. Continue?'))
129        {
130          return;
131        }
132      }
133      frm.action = submitPage;
134      frm.cmd.value = 'DeleteItems';
135      frm.submit();
136    }
137    function configureColumns()
138    {
139      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
140    }
141    function runPlugin(cmd)
142    {
143      Table.submitToPopup(formId, cmd, 540, 460);
144    }
145    function returnSelected()
146    {
147      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
148      window.close();
149    }
150    function presetOnChange()
151    {
152      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
153    }
154    function switchTab(tabControlId, tabId)
155    {
156      if (tabId == 'properties' || tabId == 'annotations')
157      {
158        location.href = '../index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=plateId%>&tab='+tabId;
159      }
160      else if (tabId == 'wells')
161      {
162        location.href = '../wells/index.jsp?ID=<%=ID%>&plate_id=<%=plateId%>';
163      }
164      else
165      {
166        TabControl.setActiveTab(tabControlId, tabId);
167      }
168    }
169    </script>
170  </base:head>
171 
172  <base:body>
173    <p>
174    <p:path>
175      <p:pathelement title="Plates" href="<%="../index.jsp?ID="+ID%>" />
176      <p:pathelement title="<%=HTML.encodeTags(plate.getName())%>" />
177    </p:path>
178
179    <t:tabcontrol id="main" active="events" switch="switchTab">
180    <t:tab id="properties" title="Properties" />
181    <t:tab id="annotations" title="Annotations" />
182   
183    <t:tab id="events" title="Events">
184   
185    <%
186    if (cc.getMessage() != null)
187    {
188      %>
189      <div class="error"><%=cc.getMessage()%></div>
190      <%
191      cc.setMessage(null);
192    }
193    %>
194    <tbl:table 
195      id="events" 
196      clazz="itemlist" 
197      columns="<%=cc.getSetting("columns")%>"
198      sortby="<%=cc.getSortProperty()%>" 
199      direction="<%=cc.getSortDirection()%>"
200      title="<%=title%>"
201      action="index.jsp"
202      sc="<%=sc%>"
203      item="<%=itemType%>"
204      >
205      <tbl:hidden 
206        name="mode" 
207        value="<%=mode.getName()%>" 
208      />
209      <tbl:hidden 
210        name="plate_id" 
211        value="<%=String.valueOf(plateId)%>" 
212      />
213      <tbl:hidden 
214        name="callback" 
215        value="<%=callback%>" 
216        skip="<%=callback == null%>" 
217      />
218      <tbl:columndef 
219        id="ordinal"
220        property="plateEventType.ordinal"
221        datatype="int"
222        title="Ordinal"
223        sortable="true" 
224        filterable="true"
225        exportable="true"
226        show="always" 
227      />
228      <tbl:columndef 
229        id="eventType"
230        property="plateEventType.name"
231        datatype="string"
232        title="Event type"
233        sortable="true" 
234        filterable="true"
235        exportable="true"
236        show="always" 
237      />
238      <tbl:columndef 
239        id="eventDate"
240        property="eventDate"
241        datatype="date"
242        title="Created"
243        sortable="true" 
244        filterable="true"
245        exportable="true"
246      />
247      <tbl:columndef 
248        id="entryDate"
249        property="entryDate"
250        datatype="date"
251        title="Registered"
252        sortable="true" 
253        filterable="true"
254        exportable="true"
255      />
256      <tbl:columndef 
257        id="protocol"
258        property="protocol.name"
259        datatype="string"
260        title="Protocol"
261        sortable="true" 
262        filterable="true"
263        exportable="true"
264      />
265      <tbl:columndef
266        id="hardware"
267        property="hardware.name"
268        datatype="string"
269        title="Hardware"
270        sortable="true"
271        filterable="true"
272        exportable="true"
273      />
274      <tbl:columndef 
275        id="comment"
276        property="comment"
277        datatype="string"
278        title="Comment" 
279        sortable="true" 
280        filterable="true" 
281        exportable="true"
282      />
283      <tbl:columndef 
284        id="user"
285        property="user.name"
286        datatype="string"
287        title="User"
288        sortable="true" 
289        filterable="true"
290        exportable="true"
291      />
292      <tbl:toolbar
293        visible="<%=mode.hasToolbar()%>"
294        >
295        <tbl:button 
296          disabled="<%=createPermission ? false : true%>" 
297          image="<%=createPermission ? "new.gif" : "new_disabled.gif"%>" 
298          onclick="newItem()" 
299          title="New&hellip;" 
300          tooltip="<%=createPermission ? "Create new event" : "You do not have permission to create events"%>" 
301        />
302        <tbl:button 
303          disabled="<%=deletePermission ? false : true%>" 
304          image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
305          title="Delete&hellip;"
306          onclick="deleteItems()" 
307          tooltip="<%=deletePermission ? "Delete the selected events" : "You do not have permission to delete events"%>" 
308        />
309        <tbl:button 
310          image="columns.gif" 
311          onclick="configureColumns()" 
312          title="Columns&hellip;" 
313          tooltip="Show, hide and re-order columns" 
314        />
315        <tbl:button 
316          image="import.gif" 
317          onclick="runPlugin('ImportItems')" 
318          title="Import&hellip;" 
319          tooltip="Import data" 
320          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
321        />
322        <tbl:button 
323          image="export.gif" 
324          onclick="runPlugin('ExportItems')" 
325          title="Export&hellip;" 
326          tooltip="Export data" 
327          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
328        />
329        <tbl:button 
330          image="runplugin.gif" 
331          onclick="runPlugin('RunListPlugin')" 
332          title="Run plugin&hellip;" 
333          tooltip="Run a plugin" 
334          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
335        />
336      </tbl:toolbar>
337      <tbl:navigator
338        page="<%=cc.getPage()%>" 
339        rowsperpage="<%=cc.getRowsPerPage()%>" 
340        totalrows="<%=events == null ? 0 : events.getTotalCount()%>" 
341        visible="<%=mode.hasNavigator()%>"
342      />
343      <tbl:data>
344        <tbl:columns>
345        <tbl:presetselector 
346          clazz="columnheader"
347          colspan="3"
348          onchange="presetOnChange()"
349        />
350        </tbl:columns>
351         
352        <tr>
353          <tbl:header 
354            clazz="index"
355            >&nbsp;</tbl:header>
356          <tbl:header 
357            clazz="check" 
358            visible="<%=mode.hasCheck()%>"
359            ><base:icon 
360              image="check_uncheck.gif" 
361              tooltip="Check/uncheck all" 
362              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
363            /></tbl:header>
364          <tbl:header 
365            clazz="check" 
366            visible="<%=mode.hasRadio()%>"
367            />
368          <tbl:header 
369            clazz="icons" 
370            visible="<%=mode.hasIcons()%>"
371            >&nbsp;</tbl:header>
372          <tbl:propertyfilter />
373        </tr>
374   
375          <tbl:rows>
376          <%
377          int index = cc.getPage()*cc.getRowsPerPage();
378          int selectedItemId = cc.getId();
379          if (events != null)
380          {
381            String tooltip = mode.isSelectionMode() ? 
382              "Select this item" : "View this item (use CTRL, ALT or SHIFT to edit)";
383            while (events.hasNext())
384            {
385              PlateEvent item = events.next();
386              PlateEventType eventType = item.getPlateEventType();
387              int itemId = item.getId();
388              String name = HTML.encodeTags(eventType.getName());
389              index++;
390              numListed++;
391              %>
392              <tbl:row>
393                <tbl:header 
394                  clazz="index"
395                  ><%=index%></tbl:header>
396                <tbl:header 
397                  clazz="check" 
398                  visible="<%=mode.hasCheck()%>"
399                  ><input 
400                      type="checkbox" 
401                      name="<%=itemId%>" 
402                      value="<%=itemId%>" 
403                      title="<%=name%>" 
404                      <%=cc.getSelected().contains(itemId) ? "checked" : ""%>
405                    ></tbl:header>
406                <tbl:header 
407                  clazz="check" 
408                  visible="<%=mode.hasRadio()%>"
409                  ><input 
410                      type="radio" 
411                      name="item_id" 
412                      value="<%=itemId%>" 
413                      title="<%=name%>" 
414                      <%=selectedItemId == itemId ? "checked" : ""%>
415                    ></tbl:header>
416                <tbl:header 
417                  clazz="icons" 
418                  visible="<%=mode.hasIcons()%>"
419                  >&nbsp;</tbl:header>
420                <tbl:cell column="ordinal"><%=eventType.getOrdinal()%></tbl:cell>
421                <tbl:cell column="eventType"><div class="link" onclick="itemOnClick(event, <%=itemId%>)" 
422                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
423                <tbl:cell column="protocol"
424                  ><base:propertyvalue 
425                    item="<%=item%>" 
426                    property="protocol"
427                    enableEditLink="<%=mode.hasEditLink()%>" 
428                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
429                  /></tbl:cell>
430                <tbl:cell column="hardware"
431                  ><base:propertyvalue 
432                    item="<%=item%>"
433                    property="hardware"
434                    enableEditLink="<%=mode.hasEditLink()%>"
435                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
436                  /></tbl:cell>
437                <tbl:cell column="entryDate"><%=Values.formatDate(item.getEntryDate())%></tbl:cell>
438                <tbl:cell column="eventDate"><%=Values.formatDate(item.getEventDate())%></tbl:cell>
439                <tbl:cell column="comment"><%=HTML.encodeTags(item.getComment())%></tbl:cell>
440                <tbl:cell column="user"
441                  ><base:propertyvalue 
442                    item="<%=item%>" 
443                    property="user"
444                    enableEditLink="<%=mode.hasEditLink()%>" 
445                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
446                  /></tbl:cell>
447              </tbl:row>
448              <%
449            }
450          }
451          %>
452          </tbl:rows>
453        </tbl:data>
454      <%
455      if (numListed == 0)
456      {
457        %>
458        <tbl:panel><%=events == null || events.getTotalCount() == 0 ? "No events where found" : "No events on this page. Please select another page!" %></tbl:panel>
459        <%
460      }
461      else
462      {
463        %>
464        <tbl:navigator
465          page="<%=cc.getPage()%>" 
466          rowsperpage="<%=cc.getRowsPerPage()%>" 
467          totalrows="<%=events == null ? 0 : events.getTotalCount()%>" 
468          visible="<%=mode.hasNavigator()%>"
469          locked="true"
470        />
471        <%
472      }
473      %>
474    </tbl:table>
475    <base:buttongroup align="center">
476      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
477      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
478      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
479    </base:buttongroup>
480    </t:tab>
481   
482    <t:tab id="wells" title="Wells" />
483    </t:tabcontrol>
484
485 
486  </base:body>
487  </base:page>
488  <%
489}
490finally
491{
492  if (events != null) events.close();
493  if (dc != null) dc.close();
494}
495%>
Note: See TracBrowser for help on using the repository browser.