source: trunk/www/lims/plates/wells/list_wells.jsp @ 7014

Last change on this file since 7014 was 7014, checked in by Nicklas Nordborg, 7 years ago

Merged patch release 3.6.2 to the trunk

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 22.2 KB
Line 
1<%-- $Id: list_wells.jsp 7014 2015-11-12 08:43:25Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Johan Enell, Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell, 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.Item"
30  import="net.sf.basedb.core.ItemContext"
31  import="net.sf.basedb.core.AnnotationType"
32  import="net.sf.basedb.core.AnnotationSet"
33  import="net.sf.basedb.core.Annotation"
34  import="net.sf.basedb.core.Plate"
35  import="net.sf.basedb.core.Well"
36  import="net.sf.basedb.core.ReporterType"
37  import="net.sf.basedb.core.Reporter"
38  import="net.sf.basedb.core.ItemQuery"
39  import="net.sf.basedb.core.ItemResultIterator"
40  import="net.sf.basedb.core.ItemResultList"
41  import="net.sf.basedb.core.Permission"
42  import="net.sf.basedb.core.PluginDefinition"
43  import="net.sf.basedb.core.ExtendedProperty"
44  import="net.sf.basedb.core.ExtendedProperties"
45  import="net.sf.basedb.core.PermissionDeniedException"
46  import="net.sf.basedb.core.query.Restrictions"
47  import="net.sf.basedb.core.query.Expressions"
48  import="net.sf.basedb.core.query.Orders"
49  import="net.sf.basedb.core.query.Hql"
50  import="net.sf.basedb.core.plugin.GuiContext"
51  import="net.sf.basedb.core.plugin.Plugin"
52  import="net.sf.basedb.core.snapshot.AnnotationLoaderUtil"
53  import="net.sf.basedb.core.snapshot.AnnotationTypeFilter"
54  import="net.sf.basedb.core.snapshot.AnnotationSnapshot"
55  import="net.sf.basedb.core.snapshot.AnnotationSetSnapshot"
56  import="net.sf.basedb.core.snapshot.SnapshotManager"
57  import="net.sf.basedb.core.data.ReporterData"
58  import="net.sf.basedb.util.Enumeration"
59  import="net.sf.basedb.clients.web.Base"
60  import="net.sf.basedb.clients.web.ModeInfo"
61  import="net.sf.basedb.clients.web.ChangeHistoryUtil"
62  import="net.sf.basedb.clients.web.PermissionUtil"
63  import="net.sf.basedb.clients.web.util.HTML"
64  import="net.sf.basedb.util.Values"
65  import="net.sf.basedb.util.formatter.Formatter"
66  import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
67  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
68  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
69  import="net.sf.basedb.clients.web.extensions.JspContext"
70  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
71  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
72  import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
73  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
74  import="java.util.ArrayList"
75  import="java.util.List"
76  import="java.util.Map"
77  import="java.util.Date"
78%>
79<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
80<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
81<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
82<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
83<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
84<%!
85  private static final Item itemType = Item.WELL;
86  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
87%>
88<%
89final int plateId = Values.getInt(request.getParameter("plate_id"));
90final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
91final String ID = sc.getId();
92final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
93
94final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
95final String callback = request.getParameter("callback");
96final String title = mode.generateTitle("well", "wells");
97final DbControl dc = sc.newDbControl();
98ItemResultIterator<Well> wells = null;
99List<AnnotationLoaderUtil> annotationLoaders = new ArrayList<AnnotationLoaderUtil>();
100try
101{
102  final boolean readReporter = !sc.hasPermission(Permission.DENIED, Item.REPORTER);
103
104  final ItemQuery<AnnotationType> annotationTypeQuery = Base.getAnnotationTypesQuery(itemType);
105  SnapshotManager manager = new SnapshotManager();
106  for (AnnotationType at : annotationTypeQuery.list(dc))
107  {
108    annotationLoaders.add(new AnnotationLoaderUtil(dc, manager, at));
109  }
110  final Plate plate = Plate.getById(dc, plateId);
111  final boolean createPermission = plate.hasPermission(Permission.WRITE);
112  final boolean deletePermission = createPermission;
113
114  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
115  final ItemQuery<ReporterType> typeQuery = ReporterType.getQuery();
116  typeQuery.order(Orders.asc(Hql.property("name")));
117  typeQuery.setCacheResult(true);
118  List<ExtendedProperty> reporterProperties = ExtendedProperties.getProperties("ReporterData");
119  Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
120  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
121 
122  Enumeration<String,String> rows = new Enumeration<String, String>();
123  WellCoordinateFormatter rowFormatter = new WellCoordinateFormatter(true);
124  for (int i=0; i<plate.getPlateType().getPlateGeometry().getRows() && i < 256; i++)
125  {
126    rows.add(Integer.toString(i), rowFormatter.format(i));
127  }
128 
129  Enumeration<String,String> columns = new Enumeration<String, String>();
130  WellCoordinateFormatter columnFormatter = new WellCoordinateFormatter(false);
131  for (int i=0; i<plate.getPlateType().getPlateGeometry().getColumns() && i < 256; i++)
132  {
133    columns.add(Integer.toString(i), columnFormatter.format(i));
134  }
135 
136  try
137  {
138    final ItemQuery<Well> query = Base.getConfiguredQuery(dc, cc, true, plate.getWells(), mode);
139    query.join(Hql.leftJoin(null, "reporter", "rpt", null, true));
140    if (!"row".equals(cc.getSortProperty())) query.order(Orders.asc(Hql.property("row")));
141    if (!"column".equals(cc.getSortProperty())) query.order(Orders.asc(Hql.property("column")));
142    wells = query.iterate(dc);
143  }
144  catch (Throwable t)
145  {
146    cc.setMessage(t.getMessage());
147    t.printStackTrace();
148  }
149  int numListed = 0;
150  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, plate);
151  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
152  ExtensionsInvoker columnsInvoker = ListColumnUtil.useExtensions(jspContext);
153  %>
154  <base:page title="<%=title%>" type="<%=mode.getPageType()%>" id="list-page">
155  <base:head scripts="table.js,tabcontrol-2.js,~wells.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
156    <ext:scripts context="<%=jspContext%>" />
157    <ext:stylesheets context="<%=jspContext%>" />
158  </base:head>
159 
160  <base:body>
161    <p:path><p:pathelement 
162      title="Plates" href="<%="../index.jsp?ID="+ID%>" 
163      /><p:pathelement title="<%=HTML.encodeTags(plate.getName())%>" 
164      /></p:path>
165
166    <t:tabcontrol 
167      id="main" 
168      subclass="content mastertabcontrol"
169      active="wells">
170    <t:tab id="properties" title="Properties" />
171    <t:tab id="annotations" title="Annotations" />
172    <t:tab id="events" title="Events" />
173   
174    <t:tab id="wells" title="Wells">
175    <tbl:table 
176      id="wells" 
177      columns="<%=cc.getSetting("columns")%>"
178      sortby="<%=cc.getSortProperty()%>" 
179      direction="<%=cc.getSortDirection()%>"
180      action="index.jsp"
181      sc="<%=sc%>"
182      item="<%=itemType%>"
183      filterrows="<%=cc.getFilterRows()%>"
184      subclass="fulltable"
185      >
186      <tbl:hidden 
187        name="mode" 
188        value="<%=mode.getName()%>" 
189      />
190      <tbl:hidden 
191        name="plate_id" 
192        value="<%=String.valueOf(plateId)%>" 
193      />
194      <tbl:hidden 
195        name="callback" 
196        value="<%=callback%>" 
197        skip="<%=callback == null%>" 
198      />
199      <tbl:columndef 
200        id="row"
201        property="row"
202        datatype="int"
203        title="Row"
204        sortable="true" 
205        filterable="true"
206        exportable="true"
207        enumeration="<%=rows%>"
208        show="always"
209        formatter="<%=new WellCoordinateFormatter(true)%>" 
210      />
211      <tbl:columndef 
212        id="column"
213        property="column"
214        datatype="int"
215        title="Column"
216        sortable="true" 
217        filterable="true"
218        exportable="true"
219        enumeration="<%=columns%>"
220        show="always" 
221        formatter="<%=new WellCoordinateFormatter(false)%>" 
222      />
223      <tbl:columndef 
224        id="id"
225        clazz="uniquecol"
226        property="id"
227        datatype="int"
228        title="ID"
229        sortable="true"
230        filterable="true"
231        exportable="true"
232      />
233      <tbl:columndef 
234        id="parent"
235        title="Parent"
236      />
237      <tbl:columndef
238        id="reporterList"
239        property="$rpt.£reporterListScores"
240        datatype="int"
241        title="[Rep] Reporter list"
242        filterable="true"
243        enumeration="<%=Base.getReporterListsEnum(dc)%>"
244        multiple="false"
245      />
246      <tbl:columndef 
247        id="reporter.name"
248        property="$rpt.name"
249        exportproperty="reporter.name"
250        datatype="string"
251        title="[Rep] Name"
252        sortable="<%=readReporter %>" 
253        filterable="<%=readReporter %>"
254        exportable="<%=readReporter %>"
255      />
256      <%
257      if (readReporter)
258      {
259        %>
260        <tbl:columndef 
261          id="reporter.externalId"
262          clazz="uniquecol"
263          property="$rpt.externalId"
264          exportproperty="reporter.externalId"
265          datatype="string"
266          title="[Rep] ID"
267          sortable="true" 
268          filterable="true"
269          exportable="true"
270        />
271        <tbl:columndef 
272          id="reporter.symbol"
273          property="$rpt.symbol"
274          exportproperty="reporter.symbol"
275          datatype="string"
276          title="[Rep] Gene symbol"
277          sortable="true" 
278          filterable="true"
279          exportable="true"
280        />
281        <tbl:columndef 
282          id="reporter.description"
283          property="$rpt.description"
284          exportproperty="reporter.description"
285          datatype="string"
286          title="[Rep] Description" 
287          sortable="true" 
288          filterable="true" 
289          exportable="true"
290        />
291        <tbl:columndef 
292          id="reporter.entryDate"
293          property="$rpt.entryDate"
294          exportproperty="reporter.entryDate"
295          datatype="date"
296          title="[Rep] Registered"
297          sortable="true" 
298          filterable="true"
299          exportable="true"
300          formatter="<%=dateFormatter%>"
301        />
302        <tbl:columndef 
303          id="reporter.lastUpdate"
304          property="$rpt.lastUpdate"
305          exportproperty="reporter.lastUpdate"
306          datatype="timestamp"
307          title="[Rep] Last update" 
308          sortable="true" 
309          filterable="true" 
310          exportable="true"
311          formatter="<%=dateTimeFormatter%>"
312        />
313        <%
314        Enumeration<String, String> types = new Enumeration<String, String>();
315        ItemResultList<ReporterType> reporterTypes = typeQuery.list(dc);
316        types.add("", "- none -");
317        for (ReporterType rt : reporterTypes)
318        {
319          types.add(Integer.toString(rt.getId()), HTML.encodeTags(rt.getName()));
320        }
321        %>
322        <tbl:columndef 
323          id="reporter.reporterType"
324          property="$rpt.reporterType"
325          sortproperty="$rpt.reporterType.name"
326          exportproperty="reporter.reporterType.name:string"
327          datatype="int"
328          enumeration="<%=types%>"
329          title="[Rep] Type"
330          sortable="true" 
331          filterable="true"
332          exportable="true"
333        />
334        <%
335        if (reporterProperties != null)
336        {
337          for (ExtendedProperty ep : reporterProperties)
338          {
339            String name = ep.getName();
340            %>
341            <tbl:columndef
342              id="<%="reporter."+name%>"
343              property="<%="$rpt."+name%>"
344              exportproperty="<%="reporter."+name%>"
345              datatype="<%=ep.getType().getStringValue()%>"
346              title="<%="[Rep] "+HTML.encodeTags(ep.getTitle())%>"
347              sortable="true"
348              filterable="true"
349              exportable="true"
350              formatter="<%=FormatterFactory.getExtendedPropertyFormatter(sc, ep)%>"
351            />
352            <%
353          }
354        }
355      }
356      %>
357      <%
358      for (AnnotationLoaderUtil loader : annotationLoaders)
359      {
360        AnnotationType at = loader.getAnnotationType();
361        Enumeration<String, String> annotationEnum = null;
362        Formatter formatter = FormatterFactory.getTypeFormatter(sc, at.getValueType());
363        if (at.isEnumeration())
364        {
365          annotationEnum = new Enumeration<String, String>();
366          if (!at.getDisplayAsList()) annotationEnum.add("", "-none-");
367          List<?> values = at.getValues();
368          for (Object value : values)
369          {
370            String encoded = formatter.format(value);
371            annotationEnum.add(encoded, encoded);
372          }
373        }
374        %>
375        <tbl:columndef 
376          id="<%="at"+at.getId()%>"
377          title="<%=HTML.encodeTags(at.getName())+" [A]"%>" 
378          property="<%="#"+at.getId()%>"
379          annotation="true"
380          datatype="<%=at.getValueType().getStringValue()%>"
381          enumeration="<%=annotationEnum%>"
382          smartenum="<%=at.getDisplayAsList() %>"
383          sortable="<%=at.getMultiplicity() == 1%>" 
384          filterable="true" 
385          exportable="true"
386          formatter="<%=formatter%>"
387          unit="<%=at.getDefaultUnit()%>"
388        />
389        <%
390      }
391      %>
392      <tbl:columndef
393        id="permission"
394        title="Permission"
395      />
396      <tbl:columndef 
397        id="xt-columns" 
398        extensions="<%=columnsInvoker%>" 
399        jspcontext="<%=jspContext%>" 
400      />
401      <div class="panelgroup bg-filled-50 bottomborder">
402        <tbl:toolbar
403          subclass="bottomborder"
404          visible="<%=mode.hasToolbar()%>"
405          >
406          <tbl:button 
407            id="btnColumns"
408            image="columns.png" 
409            title="Columns&hellip;" 
410            tooltip="Show, hide and re-order columns" 
411          />
412          <tbl:button
413            id="btnNewReporterList"
414            image="add.png"
415            title="New reporter list&hellip;"
416            tooltip="Create a new reporter list from matching wells"
417            visible="<%=sc.hasPermission(Permission.CREATE, Item.REPORTERLIST)%>"
418          />
419          <tbl:button 
420            id="btnImport"
421            data-plugin-type="IMPORT"
422            image="import.png" 
423            title="Import&hellip;" 
424            tooltip="Import data" 
425            visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
426          />
427          <tbl:button 
428            id="btnExport"
429            data-plugin-type="EXPORT"
430            image="export.png" 
431            title="Export&hellip;" 
432            tooltip="Export data" 
433            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
434          />
435          <tbl:button 
436            id="btnRunPlugin"
437            data-plugin-type="OTHER"
438            image="runplugin.png" 
439            title="Run plugin&hellip;" 
440            tooltip="Run a plugin" 
441            visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
442          />
443          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
444            wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
445        </tbl:toolbar>
446        <tbl:panel>
447          <tbl:presetselector />
448          <tbl:navigator
449            page="<%=cc.getPage()%>" 
450            rowsperpage="<%=cc.getRowsPerPage()%>" 
451            totalrows="<%=wells == null ? 0 : wells.getTotalCount()%>" 
452            visible="<%=mode.hasNavigator()%>"
453          />
454        </tbl:panel>
455      </div>
456      <tbl:data>
457        <tbl:headers>
458          <tbl:headerrow>
459            <tbl:header colspan="3" />
460            <tbl:columnheaders />
461          </tbl:headerrow>
462          <%
463          int numFilters = cc.getNumPropertyFilters();
464          int numRows = cc.getFilterRows();
465          for (int filterNo = 0; filterNo < numRows; filterNo++)
466          {
467            boolean lastRow = filterNo == numRows-1;
468            %>
469            <tbl:headerrow>
470              <tbl:header subclass="index" />
471              <tbl:header 
472                subclass="check" 
473                visible="<%=mode.hasCheck()%>"
474                ><base:icon 
475                  subclass="link table-check"
476                  image="check_uncheck.png" 
477                  tooltip="Toggle all (use CTRL, ALT or SHIFT to check/uncheck)" 
478                  visible="<%=lastRow%>"
479                /></tbl:header>
480              <tbl:header 
481                subclass="check" 
482                visible="<%=mode.hasRadio()%>"
483                />
484              <tbl:header 
485                subclass="icons" 
486                visible="<%=mode.hasIcons()%>"
487                >
488                <base:icon
489                  subclass="link table-filter-row-action"
490                  image="add.png"
491                  tooltip="Add extra filter row"
492                  visible="<%=lastRow%>"
493                /><base:icon
494                  subclass="link table-filter-row-action"
495                  image="remove.png"
496                  tooltip="Remove this filter row"
497                  visible="<%=numRows > 1 || numFilters > 0 %>"
498                  data-remove-row="<%=filterNo%>"
499                />
500              </tbl:header>
501              <tbl:propertyfilter row="<%=filterNo%>" />
502            </tbl:headerrow>
503            <%
504          }
505          %>
506        </tbl:headers>
507        <tbl:rows>
508          <%
509          if (cc.getMessage() != null)
510          {
511            %>
512            <tbl:panel subclass="bg-filled-50">
513              <div class="messagecontainer error"><%=cc.getMessage()%></div>
514            </tbl:panel>
515            <%
516            cc.setMessage(null);
517          }
518          int index = cc.getPage()*cc.getRowsPerPage();
519          int selectedItemId = cc.getId();
520          if (wells != null)
521          {           
522            while (wells.hasNext())
523            {
524              Well item = wells.next();
525              int itemId = item.getId();
526              boolean writePermission = item.hasPermission(Permission.WRITE);
527              String tooltip = mode.isSelectionMode() ? 
528                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : ""); 
529              index++;
530              numListed++;
531              %>
532              <tbl:row>
533                <tbl:header 
534                  clazz="index"
535                  ><%=index%></tbl:header>
536                <tbl:header 
537                  clazz="check" 
538                  visible="<%=mode.hasCheck()%>"
539                  ><input 
540                      type="checkbox" 
541                      name="<%=itemId%>" 
542                      value="<%=itemId%>" 
543                      title="TODO" 
544                      <%=cc.getSelected().contains(itemId) ? "checked" : ""%>
545                    ></tbl:header>
546                <tbl:header 
547                  clazz="check" 
548                  visible="<%=mode.hasRadio()%>"
549                  ><input 
550                      type="radio" 
551                      name="item_id" 
552                      value="<%=itemId%>" 
553                      title="TODO" 
554                      <%=selectedItemId == itemId ? "checked" : ""%>
555                    ></tbl:header>
556                <tbl:header 
557                  clazz="icons" 
558                  visible="<%=mode.hasIcons()%>"
559                  >&nbsp;</tbl:header>
560                <tbl:cell column="row"><div 
561                  class="link table-item"
562                  data-item-id="<%=itemId%>"
563                  data-no-edit="<%=writePermission ? 0 : 1 %>"
564                  tabindex="0"
565                  title="<%=tooltip%>"><tbl:cellvalue value="<%=item.getRow()%>" /></div></tbl:cell>
566                <tbl:cell column="column"><tbl:cellvalue value="<%=item.getColumn()%>"/></tbl:cell>
567                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
568                <tbl:cell column="parent">
569                  <%
570                  try
571                  {
572                    Well parent = item.getParent();
573                    if (parent == null)
574                    {
575                      %>
576                      <i>- none -</i>
577                      <%
578                    }
579                    else
580                    {
581                      %>
582                      <%=Base.getLink(ID, 
583                        parent.getPlate().getName() + " [" + parent.getRow() + ", " + parent.getColumn() + "]", 
584                        Item.WELL, parent.getId(), true)%>
585                      <%
586                    }
587                  }
588                  catch (PermissionDeniedException ex)
589                  {
590                    %>
591                    <i>- denied -</i>
592                    <%
593                  }
594                  %>
595                </tbl:cell>
596                <%
597                if (!readReporter)
598                {
599                  %>
600                  <tbl:cell column="reporter.name"><i>- denied -</i></tbl:cell>
601                  <%
602                }
603                else
604                {
605                  ReporterData reporter = item.getReporter();
606                  if (reporter == null)
607                  {
608                    %>
609                    <tbl:cell column="reporter.name"><i>- none -</i></tbl:cell>
610                    <tbl:cell column="reporter.externalId"><i>- none -</i></tbl:cell>
611                    <%
612                  }
613                  else
614                  {
615                    %>
616                    <tbl:cell column="reporter.name"><%=Base.getLink(ID, reporter.getName(), Item.REPORTER, reporter.getId(), true)%></tbl:cell>
617                    <tbl:cell column="reporter.externalId"><%=HTML.encodeTags(reporter.getExternalId())%></tbl:cell>
618                    <tbl:cell column="reporter.symbol"><%=HTML.encodeTags(reporter.getSymbol())%></tbl:cell>
619                    <tbl:cell column="reporter.description"><%=HTML.encodeTags(reporter.getDescription())%></tbl:cell>
620                    <tbl:cell column="reporter.entryDate" value="<%=reporter.getEntryDate()%>" />
621                    <tbl:cell column="reporter.lastUpdate" value="<%=reporter.getLastUpdate()%>" />
622                    <tbl:cell column="reporter.reporterType"
623                      ><base:propertyvalue 
624                        dbcontrol="<%=dc%>" 
625                        item="<%=reporter%>" 
626                        property="reporterType"
627                        enableEditLink="<%=mode.hasEditLink()%>" 
628                        enablePropertyLink="<%=mode.hasPropertyLink()%>"
629                      /></tbl:cell>
630                    <%
631                    if (reporterProperties != null)
632                    {
633                      for (ExtendedProperty ep : reporterProperties)
634                      {
635                        String name = ep.getName();
636                        %>
637                        <tbl:cell column="<%="reporter."+name%>"><tbl:cellvalue value="<%=reporter.getExtended(name)%>" /></tbl:cell>
638                        <%
639                      }
640                    }
641                  }
642                }
643                if (item.isAnnotated())
644                {
645                  AnnotationSetSnapshot snapshot = manager.getSnapshot(dc, item.getAnnotationSet().getId());
646                  for (AnnotationLoaderUtil loader : annotationLoaders)
647                  {
648                    %>
649                    <tbl:cell 
650                      column="<%="at"+loader.getId()%>"
651                      ><%
652                      if (loader.find(snapshot)) 
653                      {
654                        %><tbl:cellvalue 
655                          list="<%=loader.getValues()%>"
656                          suffix="<%=loader.getUnitSymbol()%>"
657                        /><%
658                      }
659                      %></tbl:cell>
660                    <%
661                  }
662                }
663                %>
664                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
665                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
666                  <tbl:cell column="xt-columns" />
667                </tbl:xt-cells>
668              </tbl:row>
669              <%
670            }
671          }
672          if (numListed == 0)
673          {
674            %>
675            <tbl:panel subclass="bg-filled-50">
676              <div class="messagecontainer note">
677              <%=wells == null || wells.getTotalCount() == 0 ? "No wells were found" : "No wells on this page. Please select another page!" %>
678              </div>
679            </tbl:panel>
680            <%
681          }
682          %>
683          </tbl:rows>
684        </tbl:data>
685    </tbl:table>
686 
687    </t:tab>
688    <t:tab id="history" title="Change history" 
689        tooltip="Displays a log of all modifications made to this item"
690        visible="<%=ChangeHistoryUtil.showChangeHistoryTab(sc)%>" />
691    </t:tabcontrol>
692
693
694    <base:buttongroup>
695      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
696      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
697      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
698    </base:buttongroup>
699 
700  </base:body>
701  </base:page>
702  <%
703}
704finally
705{
706  if (wells != null) wells.close();
707  if (dc != null) dc.close();
708}
709%>
Note: See TracBrowser for help on using the repository browser.