source: trunk/www/biomaterials/bioplateeventtypes/list_eventtypes.jsp @ 5948

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

References #1655: GUI improvements

Started with the list pages. So far the reporters and the biosurce, sample and extract list pages have been done. The other pages have just been modified to not cause any compilation problems and to display almost ok.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 13.1 KB
Line 
1<%-- $Id $
2  ------------------------------------------------------------------
3  Copyright (C) 2010 Nicklas Nordborg
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 3
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 BASE. If not, see <http://www.gnu.org/licenses/>.
20  ------------------------------------------------------------------
21
22  @author Nicklas
23  @version 2.0
24--%>
25<%@ page pageEncoding="UTF-8" session="false"
26  import="net.sf.basedb.core.SessionControl"
27  import="net.sf.basedb.core.DbControl"
28  import="net.sf.basedb.core.Item"
29  import="net.sf.basedb.core.BioPlateEventType"
30  import="net.sf.basedb.core.ItemQuery"
31  import="net.sf.basedb.core.Include"
32  import="net.sf.basedb.core.Type"
33  import="net.sf.basedb.core.ItemResultIterator"
34  import="net.sf.basedb.core.ItemResultList"
35  import="net.sf.basedb.core.ItemContext"
36  import="net.sf.basedb.core.Permission"
37  import="net.sf.basedb.core.PluginDefinition"
38  import="net.sf.basedb.core.query.Hql"
39  import="net.sf.basedb.core.query.Restrictions"
40  import="net.sf.basedb.core.query.Expressions"
41  import="net.sf.basedb.core.query.Orders"
42  import="net.sf.basedb.core.plugin.GuiContext"
43  import="net.sf.basedb.core.plugin.Plugin"
44  import="net.sf.basedb.util.Enumeration"
45  import="net.sf.basedb.clients.web.Base"
46  import="net.sf.basedb.clients.web.ModeInfo"
47  import="net.sf.basedb.clients.web.PermissionUtil"
48  import="net.sf.basedb.clients.web.util.HTML"
49  import="net.sf.basedb.util.Values"
50  import="net.sf.basedb.util.formatter.Formatter"
51  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
52  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
53  import="net.sf.basedb.clients.web.extensions.JspContext"
54  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
55  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
56  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
57  import="java.util.Date"
58  import="java.util.List"
59  import="java.util.Map"
60%>
61<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
62<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
63<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
64<%!
65  private static final Item itemType = Item.BIOPLATEEVENTTYPE;
66  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
67%>
68<%
69final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
70final String ID = sc.getId();
71final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
72final boolean deletePermission = sc.hasPermission(Permission.DELETE, itemType);
73final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
74
75final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
76final String callback = request.getParameter("callback");
77final String title = mode.generateTitle("bioplate event type", "bioplate event types");
78final DbControl dc = sc.newDbControl();
79ItemResultIterator<BioPlateEventType> bioPlateEventTypes = null;
80try
81{
82  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
83  try
84  {
85    final ItemQuery<BioPlateEventType> query = Base.getConfiguredQuery(dc, cc, true, BioPlateEventType.getQuery(), mode);
86    bioPlateEventTypes = query.iterate(dc);
87  }
88  catch (Throwable t)
89  {
90    cc.setMessage(t.getMessage());
91  }
92  int numListed = 0;
93  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
94  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
95  %>
96  <base:page title="<%=title==null ? "Bioplate event types" : title%>" type="<%=mode.getPageType()%>">
97  <base:head scripts="menu.js,table.js" styles="menu.css,table.css,toolbar.css">
98    <ext:scripts context="<%=jspContext%>" />
99    <ext:stylesheets context="<%=jspContext%>" />
100    <script language="JavaScript">
101    var submitPage = 'index.jsp';
102    var formId = 'bioPlateEventTypes';
103    function newItem()
104    {
105      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', 0, true);
106    }
107    function editItem(itemId)
108    {
109      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, true);
110    }
111    function viewItem(itemId)
112    {
113      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', itemId, false);
114    }
115    function itemOnClick(evt, itemId)
116    {
117      Table.itemOnClick(formId, evt, itemId, '<%=mode.getName()%>', viewItem, editItem, returnSelected);
118    }
119    function deleteItems()
120    {
121      var frm = document.forms[formId];
122      if (Forms.numChecked(frm) == 0)
123      {
124        alert('Please select at least one item in the list');
125        return;
126      }
127      frm.action = submitPage;
128      frm.cmd.value = 'DeleteItems';
129      frm.submit();
130    }
131    function restoreItems()
132    {
133      var frm = document.forms[formId];
134      if (Forms.numChecked(frm) == 0)
135      {
136        alert('Please select at least one item in the list');
137        return;
138      }
139      frm.action = submitPage;
140      frm.cmd.value = 'RestoreItems';
141      frm.submit();
142    }
143    function deleteItemPermanently(itemId)
144    {
145      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', itemId);
146    }
147    function configureColumns()
148    {
149      Table.configureColumns('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
150    }
151    function runPlugin(cmd)
152    {
153      Table.submitToPopup(formId, cmd, 750, 500);
154    }
155    function returnSelected()
156    {
157      Table.returnSelected(formId, <%=callback != null ? "window.opener."+callback : "null" %>);
158      window.close();
159    }
160    function presetOnChange()
161    {
162      Table.presetOnChange('<%=ID%>', formId, '<%=itemType.name()%>', '<%=(String)cc.getObject("defaultColumns")%>');
163    }
164    </script>
165  </base:head>
166 
167  <base:body>
168    <%
169    if (cc.getMessage() != null)
170    {
171      %>
172      <div class="error"><%=cc.getMessage()%></div>
173      <%
174      cc.setMessage(null);
175    }
176    %>
177    <tbl:table 
178      id="bioPlateEventTypes" 
179       
180      columns="<%=cc.getSetting("columns")%>"
181      sortby="<%=cc.getSortProperty()%>" 
182      direction="<%=cc.getSortDirection()%>"
183      title="<%=title%>"
184      action="index.jsp"
185      sc="<%=sc%>"
186      item="<%=itemType%>"
187      >
188      <tbl:hidden 
189        name="mode" 
190        value="<%=mode.getName()%>" 
191      />
192      <tbl:hidden 
193        name="callback" 
194        value="<%=callback%>" 
195        skip="<%=callback == null%>" 
196      />
197      <tbl:columndef 
198        id="name"
199        property="name"
200        datatype="string"
201        title="Name"
202        sortable="true" 
203        filterable="true"
204        exportable="true"
205        show="always" 
206      />
207      <tbl:columndef 
208        id="id"
209        clazz="uniquecol"
210        property="id"
211        datatype="int"
212        title="ID"
213        sortable="true"
214        filterable="true"
215        exportable="true"
216      />
217      <tbl:columndef 
218        id="systemId"
219        clazz="uniquecol"
220        property="systemId"
221        datatype="string"
222        title="System ID" 
223        sortable="true" 
224        filterable="true" 
225        exportable="true"
226      />
227      <tbl:columndef 
228        id="description"
229        property="description"
230        datatype="string"
231        title="Description" 
232        sortable="true" 
233        filterable="true" 
234        exportable="true"
235      />
236      <tbl:toolbar
237        visible="<%=mode.hasToolbar()%>"
238        >
239        <tbl:button 
240          disabled="<%=!createPermission%>" 
241          image="new.png" 
242          onclick="newItem()" 
243          title="New&hellip;" 
244          tooltip="<%=createPermission ? "Create new bioplate event type" : "You do not have permission to create bioplate event types"%>" 
245        />
246        <tbl:button 
247          image="delete.png"
248          onclick="deleteItems()" 
249          title="Delete" 
250          tooltip="Delete the selected items" 
251        />
252        <tbl:button 
253          image="restore.png"
254          onclick="restoreItems()" 
255          title="Restore" 
256          tooltip="Restore the selected (deleted) items"
257        />
258        <tbl:button 
259          image="columns.png" 
260          onclick="configureColumns()" 
261          title="Columns&hellip;" 
262          tooltip="Show, hide and re-order columns" 
263        />
264        <tbl:button 
265          image="import.png" 
266          onclick="runPlugin('ImportItems')" 
267          title="Import&hellip;" 
268          tooltip="Import data" 
269          visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
270        />
271        <tbl:button 
272          image="export.png" 
273          onclick="runPlugin('ExportItems')" 
274          title="Export&hellip;" 
275          tooltip="Export data" 
276          visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
277        />
278        <tbl:button 
279          image="runplugin.png" 
280          onclick="runPlugin('RunListPlugin')" 
281          title="Run plugin&hellip;" 
282          tooltip="Run a plugin" 
283          visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
284        />
285        <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
286          wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
287      </tbl:toolbar>
288      <tbl:navigator
289        page="<%=cc.getPage()%>" 
290        rowsperpage="<%=cc.getRowsPerPage()%>" 
291        totalrows="<%=bioPlateEventTypes == null ? 0 : bioPlateEventTypes.getTotalCount()%>" 
292        visible="<%=mode.hasNavigator()%>"
293      />
294      <tbl:data>
295        <tbl:headers>
296          <tbl:headerrow>
297            <tbl:header colspan="3" />
298            <tbl:columnheaders />
299          </tbl:headerrow>
300          <tbl:headerrow>
301            <tbl:header subclass="index" />
302            <tbl:header 
303              subclass="check" 
304              visible="<%=mode.hasCheck()%>"
305              ><base:icon 
306                image="check_uncheck.png" 
307                tooltip="Check/uncheck all" 
308                onclick="Forms.checkUncheck(document.forms[formId])" 
309              /></tbl:header>
310            <tbl:header 
311              subclass="check" 
312              visible="<%=mode.hasRadio()%>"
313              />
314            <tbl:header 
315              subclass="icons" 
316              visible="<%=mode.hasIcons()%>"
317              />
318            <tbl:propertyfilter />
319          </tbl:headerrow>
320        </tbl:headers>
321        <tbl:rows>
322          <%
323          int index = cc.getPage()*cc.getRowsPerPage();
324          int selectedItemId = cc.getId();
325          if (bioPlateEventTypes != null)
326          {           
327            while (bioPlateEventTypes.hasNext())
328            {
329              BioPlateEventType item = bioPlateEventTypes.next();
330              int itemId = item.getId();
331              String name = HTML.encodeTags(item.getName());
332              boolean usePermission = item.hasPermission(Permission.USE);
333              boolean writePermission = item.hasPermission(Permission.WRITE);
334              String deletePermanently = "deleteItemPermanently("+itemId+")";
335              String tooltip = mode.isSelectionMode() ? 
336                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
337              index++;
338              numListed++;
339              %>
340              <tbl:row>
341                <tbl:header 
342                  clazz="index"
343                  ><%=index%></tbl:header>
344                <tbl:header 
345                  clazz="check" 
346                  visible="<%=mode.hasCheck()%>"
347                  ><input 
348                    type="checkbox" 
349                    name="<%=itemId%>" 
350                    value="<%=itemId%>" 
351                    title="<%=name%>" 
352                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
353                  ></tbl:header>
354                <tbl:header 
355                  clazz="check" 
356                  visible="<%=mode.hasRadio()%>"
357                  ><input 
358                    type="radio" 
359                    name="item_id" 
360                    value="<%=itemId%>" 
361                    title="<%=name%>" 
362                    <%=selectedItemId == itemId ? "checked" : ""%>
363                  ></tbl:header>
364                <tbl:header 
365                  clazz="icons" 
366                  visible="<%=mode.hasIcons()%>"
367                  ><base:icon 
368                    image="deleted.png"
369                    onclick="<%=deletePermission ? deletePermanently : null%>"
370                    tooltip="This item has been scheduled for deletion" 
371                    visible="<%=item.isRemoved()%>"
372                  />&nbsp;</tbl:header>
373                <tbl:cell column="name"><div class="link" 
374                  onclick="itemOnClick(<%=writePermission ? "event" : null%>, <%=itemId%>)" 
375                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
376                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
377                <tbl:cell column="systemId"><%=HTML.encodeTags(item.getSystemId())%></tbl:cell>
378                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
379              </tbl:row>
380              <%
381              }
382            }
383          %>
384          </tbl:rows>
385      </tbl:data>
386      <%
387      if (numListed == 0)
388      {
389        %>
390        <tbl:panel><%=bioPlateEventTypes == null || bioPlateEventTypes.getTotalCount() == 0 ? "No bioplate event types were found" : "No bioplate event types on this page. Please select another page!" %></tbl:panel>
391        <%
392      }
393      else
394      {
395        %>
396        <tbl:navigator
397          page="<%=cc.getPage()%>" 
398          rowsperpage="<%=cc.getRowsPerPage()%>" 
399          totalrows="<%=bioPlateEventTypes == null ? 0 : bioPlateEventTypes.getTotalCount()%>" 
400          visible="<%=mode.hasNavigator()%>"
401          locked="true"
402        />
403        <%
404      }
405      %>
406    </tbl:table>
407    <base:buttongroup clazz="fixedatbottom">
408      <base:button onclick="returnSelected();" title="Ok" visible="<%=mode.hasOkButton()%>" />
409      <base:button onclick="window.close();" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
410      <base:button onclick="window.close();" title="Close" visible="<%=mode.hasCloseButton()%>" />
411    </base:buttongroup>
412    <br><br><br>
413  </base:body>
414  </base:page>
415  <%
416}
417finally
418{
419  if (bioPlateEventTypes != null) bioPlateEventTypes.close();
420  if (dc != null) dc.close();
421}
422%>
Note: See TracBrowser for help on using the repository browser.