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

Last change on this file since 2446 was 2446, checked in by Nicklas Nordborg, 16 years ago

References #270: Make array lims web gui more user friendly

Updated pages for Plate geometries, Plate type, Plate event types, Plates, Plate events and
wells.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 13.9 KB
Line 
1<%-- $Id: list_events.jsp 2446 2006-06-29 09:43:30Z nicklas $
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="comment"
267        property="comment"
268        datatype="string"
269        title="Comment" 
270        sortable="true" 
271        filterable="true" 
272        exportable="true"
273      />
274      <tbl:columndef 
275        id="user"
276        property="user.name"
277        datatype="string"
278        title="User"
279        sortable="true" 
280        filterable="true"
281        exportable="true"
282      />
283      <tbl:toolbar
284        visible="<%=mode.hasToolbar()%>"
285        >
286        <tbl:button 
287          disabled="<%=createPermission ? false : true%>" 
288          image="<%=createPermission ? "new.gif" : "new_disabled.gif"%>" 
289          onclick="newItem()" 
290          title="New&hellip;" 
291          tooltip="<%=createPermission ? "Create new event" : "You do not have permission to create events"%>" 
292        />
293        <tbl:button 
294          disabled="<%=deletePermission ? false : true%>" 
295          image="<%=deletePermission ? "delete.gif" : "delete_disabled.gif"%>" 
296          title="Delete&hellip;"
297          onclick="deleteItems()" 
298          tooltip="<%=deletePermission ? "Delete the selected events" : "You do not have permission to delete events"%>" 
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      </tbl:toolbar>
328      <tbl:navigator
329        page="<%=cc.getPage()%>" 
330        rowsperpage="<%=cc.getRowsPerPage()%>" 
331        totalrows="<%=events == null ? 0 : events.getTotalCount()%>" 
332        visible="<%=mode.hasNavigator()%>"
333      />
334      <tbl:data>
335        <tbl:columns>
336        <tbl:presetselector 
337          clazz="columnheader"
338          colspan="3"
339          onchange="presetOnChange()"
340        />
341        </tbl:columns>
342         
343        <tr>
344          <tbl:header 
345            clazz="index"
346            >&nbsp;</tbl:header>
347          <tbl:header 
348            clazz="check" 
349            visible="<%=mode.hasCheck()%>"
350            ><base:icon 
351              image="check_uncheck.gif" 
352              tooltip="Check/uncheck all" 
353              onclick="Forms.checkUncheck(document.forms[formId])" style="align: left;"
354            /></tbl:header>
355          <tbl:header 
356            clazz="check" 
357            visible="<%=mode.hasRadio()%>"
358            />
359          <tbl:header 
360            clazz="icons" 
361            visible="<%=mode.hasIcons()%>"
362            >&nbsp;</tbl:header>
363          <tbl:propertyfilter />
364        </tr>
365   
366          <tbl:rows>
367          <%
368          int index = cc.getPage()*cc.getRowsPerPage();
369          int selectedItemId = cc.getId();
370          if (events != null)
371          {
372            String tooltip = mode.isSelectionMode() ? 
373              "Select this item" : "View this item (use CTRL, ALT or SHIFT to edit)";
374            while (events.hasNext())
375            {
376              PlateEvent item = events.next();
377              PlateEventType eventType = item.getPlateEventType();
378              int itemId = item.getId();
379              String name = HTML.encodeTags(eventType.getName());
380              index++;
381              numListed++;
382              %>
383              <tbl:row>
384                <tbl:header 
385                  clazz="index"
386                  ><%=index%></tbl:header>
387                <tbl:header 
388                  clazz="check" 
389                  visible="<%=mode.hasCheck()%>"
390                  ><input 
391                      type="checkbox" 
392                      name="<%=itemId%>" 
393                      value="<%=itemId%>" 
394                      title="<%=name%>" 
395                      <%=cc.getSelected().contains(itemId) ? "checked" : ""%>
396                    ></tbl:header>
397                <tbl:header 
398                  clazz="check" 
399                  visible="<%=mode.hasRadio()%>"
400                  ><input 
401                      type="radio" 
402                      name="item_id" 
403                      value="<%=itemId%>" 
404                      title="<%=name%>" 
405                      <%=selectedItemId == itemId ? "checked" : ""%>
406                    ></tbl:header>
407                <tbl:header 
408                  clazz="icons" 
409                  visible="<%=mode.hasIcons()%>"
410                  >&nbsp;</tbl:header>
411                <tbl:cell column="ordinal"><%=eventType.getOrdinal()%></tbl:cell>
412                <tbl:cell column="eventType"><div class="link" onclick="itemOnClick(event, <%=itemId%>)" 
413                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
414                <tbl:cell column="protocol"
415                  ><base:propertyvalue 
416                    item="<%=item%>" 
417                    property="protocol"
418                    enableEditLink="<%=mode.hasEditLink()%>" 
419                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
420                  /></tbl:cell>
421                <tbl:cell column="entryDate"><%=Values.formatDate(item.getEntryDate())%></tbl:cell>
422                <tbl:cell column="eventDate"><%=Values.formatDate(item.getEventDate())%></tbl:cell>
423                <tbl:cell column="comment"><%=HTML.encodeTags(item.getComment())%></tbl:cell>
424                <tbl:cell column="user"
425                  ><base:propertyvalue 
426                    item="<%=item%>" 
427                    property="user"
428                    enableEditLink="<%=mode.hasEditLink()%>" 
429                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
430                  /></tbl:cell>
431              </tbl:row>
432              <%
433            }
434          }
435          %>
436          </tbl:rows>
437        </tbl:data>
438      <%
439      if (numListed == 0)
440      {
441        %>
442        <tbl:panel><%=events == null || events.getTotalCount() == 0 ? "No events where found" : "No events on this page. Please select another page!" %></tbl:panel>
443        <%
444      }
445      else
446      {
447        %>
448        <tbl:navigator
449          page="<%=cc.getPage()%>" 
450          rowsperpage="<%=cc.getRowsPerPage()%>" 
451          totalrows="<%=events == null ? 0 : events.getTotalCount()%>" 
452          visible="<%=mode.hasNavigator()%>"
453          locked="true"
454        />
455        <%
456      }
457      %>
458    </tbl:table>
459    <base:buttongroup align="center">
460      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
461      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
462      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
463    </base:buttongroup>
464    </t:tab>
465   
466    <t:tab id="wells" title="Wells" />
467    </t:tabcontrol>
468
469 
470  </base:body>
471  </base:page>
472  <%
473}
474finally
475{
476  if (events != null) events.close();
477  if (dc != null) dc.close();
478}
479%>
Note: See TracBrowser for help on using the repository browser.