source: trunk/www/lims/arraybatches/view_batch.jsp @ 5944

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

References #1655: GUI improvements

Array section of Array LIMS. This should complete the view pages for all items. Now, it is only the list pages left.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 15.4 KB
Line 
1<%-- $Id: view_batch.jsp 5944 2012-02-02 13:10:37Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 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 Nicklas
24  @version 2.0
25--%>
26<%@ page pageEncoding="UTF-8" session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.SystemItems"
30  import="net.sf.basedb.core.Item"
31  import="net.sf.basedb.core.ItemContext"
32  import="net.sf.basedb.core.Permission"
33  import="net.sf.basedb.core.AnnotationType"
34  import="net.sf.basedb.core.AnnotationSet"
35  import="net.sf.basedb.core.ArrayBatch"
36  import="net.sf.basedb.core.ArraySlide"
37  import="net.sf.basedb.core.ArrayDesign"
38  import="net.sf.basedb.core.Protocol"
39  import="net.sf.basedb.core.Hardware"
40  import="net.sf.basedb.core.User"
41  import="net.sf.basedb.core.Group"
42  import="net.sf.basedb.core.ItemQuery"
43  import="net.sf.basedb.core.Include"
44  import="net.sf.basedb.core.ItemResultList"
45  import="net.sf.basedb.core.ItemResultList"
46  import="net.sf.basedb.core.MultiPermissions"
47  import="net.sf.basedb.core.PermissionDeniedException"
48  import="net.sf.basedb.core.PluginDefinition"
49  import="net.sf.basedb.core.plugin.GuiContext"
50  import="net.sf.basedb.core.plugin.Plugin"
51  import="net.sf.basedb.core.Project"
52  import="net.sf.basedb.core.query.Orders"
53  import="net.sf.basedb.core.query.Hql"
54  import="net.sf.basedb.clients.web.Base"
55  import="net.sf.basedb.clients.web.ChangeHistoryUtil"
56  import="net.sf.basedb.clients.web.PermissionUtil"
57  import="net.sf.basedb.clients.web.util.HTML"
58  import="net.sf.basedb.util.Values"
59  import="net.sf.basedb.util.formatter.Formatter"
60  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
61  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
62  import="net.sf.basedb.clients.web.extensions.JspContext"
63  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
64  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
65  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
66  import="java.util.Collections"
67  import="java.util.Date"
68  import="java.util.Map"
69  import="java.util.Set"
70  import="java.util.List"
71%>
72<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
73<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
74<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
75<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
76<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
77<%!
78  private static final Item itemType = Item.ARRAYBATCH;
79  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
80%>
81<%
82final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
83final String ID = sc.getId();
84final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
85final int itemId = cc.getId();
86final String tab = Values.getString(request.getParameter("tab"), "properties");
87final float scale = Base.getScale(sc);
88final DbControl dc = sc.newDbControl();
89try
90{
91  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
92  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
93
94  String title = null;
95  ArrayBatch batch = ArrayBatch.getById(dc, itemId);
96 
97  final boolean usePermission = batch.hasPermission(Permission.USE);
98  final boolean writePermission = batch.hasPermission(Permission.WRITE);
99  final boolean deletePermission = batch.hasPermission(Permission.DELETE);
100  final boolean sharePermission = batch.hasPermission(Permission.SET_PERMISSION);
101  final boolean setOwnerPermission = batch.hasPermission(Permission.SET_OWNER);
102  final boolean isRemoved = batch.isRemoved();
103  final boolean isUsed = isRemoved && batch.isUsed();
104  final boolean deletePermanentlyPermission = deletePermission && !isUsed;
105  final boolean isOwner = batch.isOwner();
106  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, batch);
107  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
108  %>
109  <base:page title="<%=title%>">
110  <base:head scripts="tabcontrol.js,table.js" styles="toolbar.css,table.css,headertabcontrol.css,path.css">
111    <ext:scripts context="<%=jspContext%>" />
112    <ext:stylesheets context="<%=jspContext%>" />
113    <script language="JavaScript">
114    function editItem()
115    {
116      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
117    }
118    function shareItem()
119    {
120      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=ShareItem&item_id=<%=itemId%>', 'ShareArrayBatch', 600, 400);
121    }
122    function deleteItem()
123    {
124      location.replace('index.jsp?ID=<%=ID%>&cmd=DeleteItem&item_id=<%=itemId%>');
125    }
126    function restoreItem()
127    {
128      location.replace('index.jsp?ID=<%=ID%>&cmd=RestoreItem&item_id=<%=itemId%>');
129    }
130    function deleteItemPermanently()
131    {
132      Main.deleteItemPermanently('<%=ID%>', true, '<%=itemType.name()%>', <%=itemId%>, '&callback=itemDeleted');
133    }
134    function itemDeleted()
135    {
136      Main.listItems('<%=ID%>', '<%=itemType.name()%>');
137    }
138    function showUsingItems()
139    {
140      Main.showUsingItems('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>);
141    }
142    function setOwner()
143    {
144      Main.openPopup('index.jsp?ID=<%=ID%>&cmd=SetOwnerOfItem&item_id=<%=itemId%>', 'SetOwnerOfItem', 450, 300);
145    }
146    function runPlugin(cmd)
147    {
148      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
149    }
150    function newSlide()
151    {
152      Main.viewOrEditItem('<%=ID%>', 'ARRAYSLIDE', 0, true, '&arraybatch_id=<%=itemId%>');
153    }
154    function multipleNewSlides()
155    {     
156      Main.openPopup('../arrayslides/index.jsp?ID=<%=ID%>&cmd=NewItems&arraybatch_id=<%=itemId%>', 'NewArraySlides', 750, 500);
157    }
158    function switchTab(tabControlId, tabId)
159    {
160      if (TabControl.isActive(tabControlId, tabId)) return;
161      if ((tabId == 'overview' || tabId == 'history') && tabId != '<%=tab%>')
162      {
163        location.href = 'index.jsp?ID=<%=ID%>&cmd=ViewItem&item_id=<%=itemId%>&tab='+tabId;
164      }
165      else
166      {
167        TabControl.setActiveTab(tabControlId, tabId);
168      }
169    }
170    </script>
171  </base:head>
172  <base:body>
173    <p:path><p:pathelement 
174      title="Array batches" href="<%="index.jsp?ID="+ID%>" 
175      /><p:pathelement title="<%=HTML.encodeTags(batch.getName())%>" 
176      /></p:path>
177   
178    <t:tabcontrol 
179      id="main" 
180      subclass="content mastertabcontrol" 
181      active="<%=tab%>" switch="switchTab" remember="false">
182    <t:tab id="properties" title="Properties">
183      <div>
184      <table class="fullform bottomborder">
185      <tr>
186        <th class="itemstatus">
187          <base:icon 
188            image="shared.gif" 
189            visible="<%=batch.isShared()%>"
190            tooltip="This item is shared to other users, groups and/or projects"
191          />
192          <base:icon 
193            image="deleted.gif"
194            onclick="deleteItemPermanently()"
195            tooltip="This item has been flagged for deletion. Click to delete it now."
196            enabled="<%=deletePermanentlyPermission %>"
197            visible="<%=isRemoved%>" 
198          />
199          <base:icon image="used.gif" 
200            onclick="showUsingItems()"
201            tooltip="This item is used by other items and can't be permanently deleted. Show the items that are using this one"
202            visible="<%=isRemoved && isUsed%>" />
203        </th>
204        <td style="padding: 0px;">
205          <tbl:toolbar subclass="bottomborder">
206            <tbl:button 
207              disabled="<%=!writePermission%>" 
208              image="edit.gif" 
209              onclick="editItem()" 
210              title="Edit&hellip;" 
211              tooltip="<%=writePermission ? "Edit this array batch" : "You do not have permission to edit this array batch"%>" 
212            />
213            <tbl:button 
214              disabled="<%=!deletePermission%>" 
215              image="delete.gif" 
216              onclick="deleteItem()" 
217              title="Delete"
218              visible="<%=!batch.isRemoved()%>"
219              tooltip="<%=deletePermission ? "Delete this array batch" : "You do not have permission to delete this array batch"%>" 
220            />
221            <tbl:button 
222              disabled="<%=!writePermission%>" 
223              image="restore.gif" 
224              onclick="restoreItem()" 
225              title="Restore"
226              visible="<%=batch.isRemoved()%>"
227              tooltip="<%=writePermission ? "Restore this array batch" : "You do not have permission to restore this array batch"%>" 
228            />
229            <tbl:button
230              image="add.png"
231              onclick="newSlide()"
232              title="New slide&hellip;"
233              tooltip="Create a new array slide in this batch"
234              visible="<%=sc.hasPermission(Permission.CREATE, Item.ARRAYSLIDE) && usePermission%>"
235            />
236            <tbl:button
237              image="new_wizard.gif"
238              onclick="multipleNewSlides()"
239              title="Create slides&hellip;"
240              tooltip="Create multiple new array slides in this batch using a wizard" 
241              visible="<%=sc.hasPermission(Permission.CREATE, Item.ARRAYSLIDE) && usePermission%>"
242            />
243            <tbl:button 
244              disabled="<%=!sharePermission%>"
245              image="share.gif"
246              onclick="shareItem()" 
247              title="Share&hellip;" 
248              tooltip="<%=sharePermission ? "Share this array batch to other user, groups and projects" : "You do not have permission to share this array batch"%>"
249            />
250            <tbl:button 
251              disabled="<%=!setOwnerPermission%>"
252              image="take_ownership.png"
253              onclick="setOwner()" 
254              title="Set owner&hellip;"
255              tooltip="<%=setOwnerPermission ? "Change owner of this item" : "You do not have permission to change ownership of this item"%>"
256            />
257            <tbl:button 
258              image="import.gif" 
259              onclick="runPlugin('ImportItem')" 
260              title="Import&hellip;" 
261              tooltip="Import data" 
262              visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
263            />
264            <tbl:button 
265              image="export.gif" 
266              onclick="runPlugin('ExportItem')" 
267              title="Export&hellip;" 
268              tooltip="Export data" 
269              visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
270            />
271            <tbl:button 
272              image="runplugin.gif" 
273              onclick="runPlugin('RunPlugin')" 
274              title="Run plugin&hellip;" 
275              tooltip="Run a plugin" 
276              visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
277            />
278            <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
279              wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
280            <tbl:button
281              image="help.png"
282              onclick="<%="Main.openHelp('" + ID +"', 'arraybatch.view.properties')"%>"
283              title="Help&hellip;"
284              tooltip="Get help about this page"
285            />
286          </tbl:toolbar>
287        </td>
288      </tr>
289      <tr>
290        <th>Name</th>
291        <td><%=HTML.encodeTags(batch.getName())%></td>
292      </tr>
293      <tr>
294        <th>Registered</th>
295        <td><%=dateFormatter.format(batch.getEntryDate())%></td>
296      </tr>
297      <tr>
298        <th>Array design</th>
299        <td><base:propertyvalue item="<%=batch%>" property="arrayDesign" /></td>
300      </tr>
301      <tr>
302        <th>Print robot</th>
303        <td><base:propertyvalue item="<%=batch%>" property="printRobot" /></td>
304      </tr>
305      <tr>
306        <th>Protocol</th>
307        <td><base:propertyvalue item="<%=batch%>" property="protocol" /></td>
308      </tr>
309      <tr>
310        <th>Owner</th>
311        <td><base:propertyvalue item="<%=batch%>" property="owner" /></td>
312      </tr>
313      <tr>
314        <th>Permissions</th>
315        <td><%=PermissionUtil.getFullPermissionNames(batch)%></td>
316      </tr>
317      <tr>
318        <th>Description</th>
319        <td><%=HTML.niceFormat(batch.getDescription())%></td>
320      </tr>
321      </table>
322      </div>
323      <%
324      ItemQuery<ArraySlide> slideQuery = batch.getArraySlides();
325      slideQuery.include(Include.ALL);
326      slideQuery.order(Orders.asc(Hql.property("name")));
327      ItemResultList<ArraySlide> slides = slideQuery.list(dc);
328      %>
329      <base:section 
330        id="batchSection" 
331        title="<%="Array slides (" + slides.size() + ")"%>"
332        context="<%=cc %>"
333        >
334        <%
335        if (slides.size() == 0)
336        {
337          %>
338          <div class="messagecontainer note">
339          No slides exists in this batch
340          (or, you don't have permission to view them).
341          </div>
342          <%
343        }
344        else
345        {
346          %>
347          <tbl:table
348            id="batches"
349            columns="all"
350            >
351          <tbl:columndef 
352            id="name"
353            title="Name"
354          />
355          <tbl:columndef
356            id="physicalBioAssay"
357            title="Physical bioassay"
358          />
359          <tbl:columndef 
360            id="description"
361            title="Description"
362          />
363          <tbl:data>
364            <tbl:headers>
365              <tbl:headerrow>
366                <tbl:columnheaders />
367              </tbl:headerrow>
368            </tbl:headers>
369            <tbl:rows>
370            <%
371            for (ArraySlide item : slides)
372            {
373              %>
374              <tbl:row>
375                <tbl:cell column="name"><base:icon 
376                    image="deleted.gif" 
377                    tooltip="This item has been scheduled for deletion" 
378                    visible="<%=item.isRemoved()%>"
379                  /><%=Base.getLinkedName(ID, item, false, true)%></tbl:cell>
380                <tbl:cell column="physicalBioAssay"><base:propertyvalue item="<%=item%>" property="physicalBioAssay" /></tbl:cell>
381                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
382              </tbl:row>
383              <%
384            }
385            %>
386            </tbl:rows>
387          </tbl:data>
388          </tbl:table>
389          <%
390        }
391        %>
392      </base:section>
393      <jsp:include page="../../common/anytoany/list_anytoany.jsp">
394        <jsp:param name="ID" value="<%=ID%>" />
395        <jsp:param name="item_type" value="<%=itemType.name()%>" />
396        <jsp:param name="item_id" value="<%=itemId%>" />
397        <jsp:param name="title" value="Other items related to this batch" />
398      </jsp:include>
399      <jsp:include page="../../common/share/list_share.jsp">
400        <jsp:param name="ID" value="<%=ID%>" />
401        <jsp:param name="item_type" value="<%=itemType.name()%>" />
402        <jsp:param name="item_id" value="<%=itemId%>" />
403        <jsp:param name="title" value="Shared to" />
404      </jsp:include>
405      </t:tab>
406     
407      <t:tab id="annotations" title="Annotations &amp; parameters" 
408        tooltip="View annotation values and protocol parameters" clazz="white">
409        <jsp:include page="../../common/annotations/list_annotations.jsp">
410          <jsp:param name="item_type" value="<%=itemType.name()%>" />
411          <jsp:param name="item_id" value="<%=itemId%>" />
412          <jsp:param name="ID" value="<%=ID%>" />
413        </jsp:include>
414      </t:tab>
415
416      <t:tab id="overview" title="Overview" 
417        tooltip="Display a tree overview of related items">
418        <%
419        if ("overview".equals(tab))
420        {
421          %>
422          <jsp:include page="../../common/overview/overview.jsp">
423            <jsp:param name="item_type" value="<%=itemType.name()%>" />
424            <jsp:param name="item_id" value="<%=itemId%>" />
425            <jsp:param name="ID" value="<%=ID%>" />
426          </jsp:include>
427          <%
428        }
429        %>
430      </t:tab>
431      <t:tab id="history" title="Change history" 
432        tooltip="Displays a log of all modifications made to this item"
433        visible="<%=ChangeHistoryUtil.showChangeHistoryTab(sc)%>">
434        <%
435        if ("history".equals(tab))
436        {
437          %>
438          <jsp:include page="../../common/history/frameset.jsp">
439            <jsp:param name="source_type" value="<%=itemType.name()%>" />
440            <jsp:param name="source_id" value="<%=itemId%>" />
441            <jsp:param name="ID" value="<%=ID%>" />
442          </jsp:include>
443          <%
444        }
445        %>
446      </t:tab>
447    </t:tabcontrol>
448
449  </base:body>
450  </base:page>
451  <%
452}
453finally
454{
455  if (dc != null) dc.close();
456}
457%>
Note: See TracBrowser for help on using the repository browser.