source: trunk/www/lims/plates/wells/view_well.jsp @ 5943

Last change on this file since 5943 was 5943, checked in by Nicklas Nordborg, 11 years ago

References #1655: GUI improvements

Plate section of Array LIMS.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 10.9 KB
Line 
1<%-- $Id: view_well.jsp 5943 2012-02-01 14:49:04Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Johan Enell, Jari Häkkinen, Nicklas Nordborg
4  Copyright (C) 2007 Nicklas Nordborg
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.Plate"
34  import="net.sf.basedb.core.Well"
35  import="net.sf.basedb.core.Reporter"
36  import="net.sf.basedb.core.ReporterType"
37  import="net.sf.basedb.core.ExtendedProperties"
38  import="net.sf.basedb.core.ExtendedProperty"
39  import="net.sf.basedb.core.PermissionDeniedException"
40  import="net.sf.basedb.core.PluginDefinition"
41  import="net.sf.basedb.core.plugin.GuiContext"
42  import="net.sf.basedb.core.plugin.Plugin"
43  import="net.sf.basedb.core.data.ReporterData"
44  import="net.sf.basedb.clients.web.Base"
45  import="net.sf.basedb.clients.web.util.HTML"
46  import="net.sf.basedb.util.Values"
47  import="net.sf.basedb.util.formatter.Formatter"
48  import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
49  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
50  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
51  import="net.sf.basedb.clients.web.extensions.JspContext"
52  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
53  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
54  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
55  import="java.util.Date"
56  import="java.util.Map"
57  import="java.util.Set"
58  import="java.util.List"
59%>
60<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
61<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
62<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
63<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
64<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
65<%!
66  private static final Item itemType = Item.WELL;
67  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
68%>
69<%
70final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
71final String ID = sc.getId();
72final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
73final int itemId = cc.getId();
74final float scale = Base.getScale(sc);
75final DbControl dc = sc.newDbControl();
76try
77{
78  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
79  Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
80  WellCoordinateFormatter rowFormatter = new WellCoordinateFormatter(true);
81  WellCoordinateFormatter columnFormatter = new WellCoordinateFormatter(false);
82  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
83
84  String title = null;
85  final Well well = Well.getById(dc, itemId);
86  final Plate plate = well.getPlate();
87  ReporterData reporter = well.getReporter();
88  final int plateId = plate.getId();
89
90  Well parentWell = null;
91  boolean readParentWell = true;
92  Plate parentWellPlate = null;
93  boolean readParentWellPlate = true;
94  try
95  {
96    parentWell = well.getParent();
97  }
98  catch (PermissionDeniedException ex)
99  {
100    readParentWell = false;
101    readParentWellPlate = false;
102  }
103  if (parentWell != null)
104  {
105    try
106    {
107      parentWellPlate = parentWell.getPlate();
108    }
109    catch (PermissionDeniedException ex)
110    {
111      readParentWellPlate = false;
112    }
113  }
114 
115  boolean readCurrentReporterType = true;
116  ReporterType currentReporterType = null;
117  if (reporter != null)
118  {
119    reporter = Reporter.getById(dc, reporter.getId());
120    try
121    {
122      currentReporterType = Reporter.getReporterType(dc, reporter);
123    }
124    catch (PermissionDeniedException ex)
125    {
126      readCurrentReporterType = false;
127    }
128  }
129 
130  final boolean writePermission = well.hasPermission(Permission.WRITE);
131  final boolean deletePermission = well.hasPermission(Permission.DELETE);
132  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, well);
133  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
134  %>
135  <base:page title="<%=title%>">
136  <base:head scripts="table.js,tabcontrol.js" styles="toolbar.css,table.css,headertabcontrol.css,path.css">
137    <ext:scripts context="<%=jspContext%>" />
138    <ext:stylesheets context="<%=jspContext%>" />
139    <script language="JavaScript">
140    function editItem()
141    {
142      Main.viewOrEditItem('<%=ID%>', '<%=itemType.name()%>', <%=itemId%>, true);
143    }
144    function runPlugin(cmd)
145    {
146      Main.openPopup('index.jsp?ID=<%=ID%>&cmd='+cmd+'&plate_id=<%=plateId%>&item_id=<%=itemId%>', 'RunPlugin'+cmd, 750, 500);
147    }
148    </script>
149  </base:head>
150  <base:body>
151    <p:path><p:pathelement 
152      title="Plates" href="<%="../index.jsp?ID="+ID%>" 
153      /><p:pathelement 
154        title="<%=HTML.encodeTags(plate.getName())%>" 
155        href="<%="index.jsp?ID="+ID+"&plate_id="+plateId%>" 
156      /><p:pathelement title="<%="Well: "+rowFormatter.format(well.getRow())+columnFormatter.format(well.getColumn())%>" 
157      /></p:path>
158   
159    <t:tabcontrol 
160      id="main" 
161      subclass="content mastertabcontrol" 
162      active="properties">
163    <t:tab id="properties" title="Properties">
164      <div>
165      <table class="fullform bottomborder">
166      <tr>
167        <th class="itemstatus"></th>
168        <td style="padding: 0px;">
169          <tbl:toolbar subclass="bottomborder">
170            <tbl:button 
171              disabled="<%=!writePermission%>" 
172              image="edit.gif" 
173              onclick="editItem()" 
174              title="Edit&hellip;" 
175              tooltip="<%=writePermission ? "Edit this well" : "You do not have permission to edit this well"%>" 
176            />
177            <tbl:button 
178              image="import.gif" 
179              onclick="runPlugin('ImportItem')" 
180              title="Import&hellip;" 
181              tooltip="Import data" 
182              visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
183            />
184            <tbl:button 
185              image="export.gif" 
186              onclick="runPlugin('ExportItem')" 
187              title="Export&hellip;" 
188              tooltip="Export data" 
189              visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
190            />
191            <tbl:button 
192              image="runplugin.gif" 
193              onclick="runPlugin('RunPlugin')" 
194              title="Run plugin&hellip;" 
195              tooltip="Run a plugin" 
196              visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
197            />
198            <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
199              wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
200            <tbl:button
201              image="help.png"
202              onclick="<%="Main.openHelp('" + ID +"', 'well.view.properties')"%>"
203              title="Help&hellip;"
204              tooltip="Get help about this page"
205            />
206          </tbl:toolbar>
207        </td>
208      </tr>
209      <tr>
210        <th>Position</th>
211        <td><%=rowFormatter.format(well.getRow())%><%=columnFormatter.format(well.getColumn())%></td>
212      </tr>
213      <tr>
214        <th>Parent plate/well</th>
215        <td>
216          <%
217          if (!readParentWell)
218          {
219            %>
220            <i>- denied -</i>
221            <%
222          }
223          else if (parentWell == null)
224          {
225            %>
226            <i>- none -</i>
227            <%
228          }
229          else
230          {
231            %>
232            <%=Base.getLink(ID, parentWellPlate.getName() + " [" + parentWell.getRow() + ", " + parentWell.getColumn() + "]",
233              Item.WELL, parentWell.getId(), true) %>
234            <%
235          }
236          %>
237        </td>
238      </tr>
239      <%
240      if (reporter == null)
241      {
242        %>
243        <tr>
244          <th>Reporter</th>
245          <td><i>- none -</i></td>
246        </tr>
247        <%
248      }
249      %>
250      </table>
251      </div>
252     
253      <%
254      if (reporter != null)
255      {
256        %>
257        <table class="fullform bottomborder">
258          <tbody class="sectionheader">
259            <tr>
260              <th colspan="2">Reporter</th>
261            </tr>
262          </tbody>
263          <tr>
264            <th>Name</th>
265            <td><%=Base.getLink(ID, reporter.getName(), Item.REPORTER, reporter.getId(), true) %></td>
266          </tr>
267          <tr>
268            <th>External ID</th>
269            <td><%=HTML.encodeTags(reporter.getExternalId())%></td>
270          </tr>
271          <tr>
272            <th>Type</th>
273            <td><base:propertyvalue dbcontrol="<%=dc%>" item="<%=reporter%>" property="reporterType" /></td>
274          </tr>
275          <tr>
276            <th>Registered</th>
277            <td><%=dateFormatter.format(reporter.getEntryDate())%></td>
278          </tr>
279          <tr>
280            <th>Last update</th>
281            <td><%=dateTimeFormatter.format(reporter.getLastUpdate())%></td>
282          </tr>
283          <tr>
284            <th class="subprompt">- from/by</th>
285            <td><%=HTML.niceFormat(reporter.getLastSource())%></td>
286          </tr>
287          <tr>
288            <th>Gene symbol</th>
289            <td><%=HTML.encodeTags(reporter.getSymbol())%></td>
290          </tr>
291          <tr>
292            <th>Description</th>
293            <td><%=HTML.niceFormat(reporter.getDescription())%></td>
294          </tr>
295        </table>
296       
297        <%
298        List<ExtendedProperty> reporterProperties = ExtendedProperties.getProperties("ReporterData");
299        %>
300        <base:section
301          id="extendedProperties"
302          title="<%="Extended properties (" + reporterProperties.size() + ")"%>"
303          context="<%=cc%>"
304          >
305          <table class="fullform fullborder">
306            <%       
307            if (reporterProperties != null)
308            {
309              boolean needsTr = true;
310              for (ExtendedProperty ep : reporterProperties)
311              {
312                String name = ep.getName();
313                Formatter f = FormatterFactory.getExtendedPropertyFormatter(sc, ep);
314                String value = f.format(reporter.getExtended(name));
315                %>
316                  <%=needsTr ? "<tr><th>" : "<th class=\"leftborder\">" %>
317                  <%=HTML.encodeTags(ep.getTitle())%></th>
318                  <td><%=value%></td>
319                  <%=needsTr ? "" : "</tr>"%>
320                <%
321                needsTr = !needsTr;
322              }
323              %>
324              <%=needsTr ? "" : "<th class=\"leftborder\"></th><td></td></tr>"%>
325              <%
326            }
327            %>
328          </table>
329        </base:section>
330        <%
331      }
332      %>
333
334      <jsp:include page="../../../common/anytoany/list_anytoany.jsp">
335        <jsp:param name="ID" value="<%=ID%>" />
336        <jsp:param name="item_type" value="<%=itemType.name()%>" />
337        <jsp:param name="item_id" value="<%=itemId%>" />
338        <jsp:param name="title" value="Other items related to this well" />
339      </jsp:include>
340      </t:tab>
341      <t:tab id="annotations" title="Annotations" 
342        tooltip="View annotation values" clazz="white">
343        <jsp:include page="../../../common/annotations/list_annotations.jsp">
344          <jsp:param name="item_type" value="<%=itemType.name()%>" />
345          <jsp:param name="item_id" value="<%=itemId%>" />
346          <jsp:param name="ID" value="<%=ID%>" />
347        </jsp:include>
348      </t:tab>
349    </t:tabcontrol>
350
351  </base:body>
352  </base:page>
353  <%
354}
355finally
356{
357  if (dc != null) dc.close();
358}
359
360%>
Note: See TracBrowser for help on using the repository browser.