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