source: trunk/www/lims/arraydesigns/features/list_features.jsp @ 6604

Last change on this file since 6604 was 6604, checked in by Nicklas Nordborg, 8 years ago

References #1890: Improve skinnability of BASE

Updated table listings with some new css classes to make it easier to modify background color.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 24.2 KB
Line 
1<%-- $Id: list_features.jsp 6604 2014-11-18 10:39:22Z 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.data.FeatureData"
32  import="net.sf.basedb.core.data.ReporterData"
33  import="net.sf.basedb.core.ArrayDesign"
34  import="net.sf.basedb.core.ArrayDesignBlock"
35  import="net.sf.basedb.core.Feature"
36  import="net.sf.basedb.core.FeatureIdentificationMethod"
37  import="net.sf.basedb.core.ReporterType"
38  import="net.sf.basedb.core.Reporter"
39  import="net.sf.basedb.core.Well"
40  import="net.sf.basedb.core.ItemQuery"
41  import="net.sf.basedb.core.ItemResultIterator"
42  import="net.sf.basedb.core.DataQuery"
43  import="net.sf.basedb.core.DataResultIterator"
44  import="net.sf.basedb.core.ItemResultList"
45  import="net.sf.basedb.core.Permission"
46  import="net.sf.basedb.core.PluginDefinition"
47  import="net.sf.basedb.core.PermissionDeniedException"
48  import="net.sf.basedb.core.PlateGeometry"
49  import="net.sf.basedb.core.ExtendedProperty"
50  import="net.sf.basedb.core.ExtendedProperties"
51  import="net.sf.basedb.core.query.Aggregations" 
52  import="net.sf.basedb.core.query.Restrictions"
53  import="net.sf.basedb.core.query.Expressions"
54  import="net.sf.basedb.core.query.Orders"
55  import="net.sf.basedb.core.query.Hql"
56  import="net.sf.basedb.core.query.Selects"
57  import="net.sf.basedb.core.plugin.GuiContext"
58  import="net.sf.basedb.core.plugin.Plugin"
59  import="net.sf.basedb.util.Enumeration"
60  import="net.sf.basedb.clients.web.Base"
61  import="net.sf.basedb.clients.web.ModeInfo"
62  import="net.sf.basedb.clients.web.ChangeHistoryUtil"
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.List"
75  import="java.util.Map"
76  import="java.util.Date"
77%>
78<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
79<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
80<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
81<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
82<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
83<%!
84  private static final Item itemType = Item.FEATURE;
85  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
86%>
87<%
88final int arrayDesignId = Values.getInt(request.getParameter("arraydesign_id"));
89final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
90final String ID = sc.getId();
91final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
92
93final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
94final String callback = request.getParameter("callback");
95final String title = mode.generateTitle("feature", "features");
96final DbControl dc = sc.newDbControl();
97DataResultIterator<FeatureData> features = null;
98try
99{
100  final ArrayDesign design = ArrayDesign.getById(dc, arrayDesignId);
101  final FeatureIdentificationMethod fiMethod = design.getFeatureIdentificationMethod();
102  Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
103  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
104 
105  WellCoordinateFormatter rowFormatter = new WellCoordinateFormatter(true);
106  WellCoordinateFormatter columnFormatter = new WellCoordinateFormatter(false);
107 
108  final DataQuery<FeatureData> query = design.getFeatures();
109
110  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
111  final ItemQuery<ReporterType> typeQuery = ReporterType.getQuery();
112  typeQuery.order(Orders.asc(Hql.property("name")));
113  typeQuery.setCacheResult(true);
114 
115  List<ExtendedProperty> reporterProperties = ExtendedProperties.getProperties("ReporterData");
116 
117  Enumeration<String, String> plateRows = new Enumeration<String, String>();
118  final ItemQuery<PlateGeometry> geometryQuery = PlateGeometry.getQuery();
119  geometryQuery.order(Orders.desc(Hql.property("rows")));
120  ItemResultIterator<PlateGeometry> result = geometryQuery.iterate(dc);
121  int maxRows = result.next().getRows();
122  for (int row = 0; row < maxRows && row < 256; row++)
123  {
124    plateRows.add(Integer.toString(row), rowFormatter.format(row));
125  }
126 
127  Enumeration<String, String> plateColumns = new Enumeration<String, String>();
128  final ItemQuery<PlateGeometry> columnsGeometryQuery = PlateGeometry.getQuery();
129  columnsGeometryQuery.order(Orders.desc(Hql.property("columns")));
130  ItemResultIterator<PlateGeometry> columnsResult = columnsGeometryQuery.iterate(dc);
131  int maxColumns = columnsResult.next().getColumns();
132  for (int column = 0; column < maxColumns && column < 256; column++)
133  {
134    plateColumns.add(Integer.toString(column), columnFormatter.format(column));
135  }
136 
137  try
138  {
139    query.join(Hql.leftJoin(null, "reporter", "rpt", null, true));
140    cc.configureQuery(dc, query, true);
141    if (!"row".equals(cc.getSortProperty())) query.order(Orders.asc(Hql.property("row")));
142    if (!"column".equals(cc.getSortProperty())) query.order(Orders.asc(Hql.property("column")));
143    features = query.iterate(dc);
144  }
145  catch (Throwable t)
146  {
147    cc.setMessage(t.getMessage());
148    t.printStackTrace();
149  }
150  int numListed = 0;
151  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
152  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
153  ExtensionsInvoker columnsInvoker = ListColumnUtil.useExtensions(jspContext);
154  %>
155  <base:page title="<%=title%>" id="list-page">
156  <base:head scripts="table.js,tabcontrol-2.js,~features.js" styles="table.css,toolbar.css,headertabcontrol.css,path.css">
157    <ext:scripts context="<%=jspContext%>" />
158    <ext:stylesheets context="<%=jspContext%>" />
159  </base:head>
160 
161  <base:body>
162    <p:path><p:pathelement 
163      title="Array designs" href="<%="../index.jsp?ID="+ID%>" 
164      /><p:pathelement title="<%=HTML.encodeTags(design.getName())%>" 
165      /></p:path>
166
167    <t:tabcontrol 
168      id="main" 
169      subclass="content mastertabcontrol"
170      active="images">
171    <t:tab id="properties" title="Properties" />
172    <t:tab id="annotations" title="Annotations" />
173   
174    <t:tab id="images" title="Features">
175    <tbl:table 
176      id="features" 
177      columns="<%=cc.getSetting("columns")%>"
178      sortby="<%=cc.getSortProperty()%>" 
179      direction="<%=cc.getSortDirection()%>"
180      action="index.jsp"
181      sc="<%=sc%>"
182      item="<%=itemType%>"
183      subclass="fulltable"
184      >
185      <tbl:hidden 
186        name="mode" 
187        value="<%=mode.getName()%>" 
188      />
189      <tbl:hidden 
190        name="arraydesign_id" 
191        value="<%=String.valueOf(arrayDesignId)%>" 
192      />
193      <tbl:hidden 
194        name="callback" 
195        value="<%=callback%>" 
196        skip="<%=callback == null%>" 
197      />
198      <tbl:columndef 
199        id="position"
200        clazz="uniquecol"
201        property="position"
202        datatype="int"
203        title="Position"
204        sortable="true" 
205        filterable="true"
206        exportable="true"
207        show="<%=fiMethod == FeatureIdentificationMethod.FEATURE_ID ? "auto" : "always"%>"
208      />
209      <tbl:columndef 
210        id="id"
211        clazz="uniquecol"
212        property="id"
213        datatype="int"
214        title="ID"
215        sortable="true"
216        filterable="true"
217        exportable="true"
218      />
219      <tbl:columndef 
220        id="externalId"
221        clazz="uniquecol"
222        property="externalId"
223        datatype="string"
224        title="Feature ID"
225        sortable="true" 
226        filterable="true"
227        exportable="true"
228        show="<%=fiMethod == FeatureIdentificationMethod.FEATURE_ID ? "always" : "auto"%>"
229      />
230      <tbl:columndef 
231        id="block"
232        property="arrayDesignBlock.blockNumber"
233        datatype="int"
234        title="Block"
235        sortable="true" 
236        filterable="true"
237        exportable="true"
238      />
239      <tbl:columndef 
240        id="metaGridX"
241        property="arrayDesignBlock.metaGridX"
242        datatype="int"
243        title="Meta grid X"
244        sortable="true" 
245        filterable="true"
246        exportable="true"
247      />
248      <tbl:columndef 
249        id="metaGridY"
250        property="arrayDesignBlock.metaGridY"
251        datatype="int"
252        title="Meta grid Y"
253        sortable="true" 
254        filterable="true"
255        exportable="true"
256      />
257      <tbl:columndef 
258        id="row"
259        property="row"
260        datatype="int"
261        title="Row"
262        sortable="true" 
263        filterable="true"
264        exportable="true"       
265      />
266      <tbl:columndef 
267        id="column"
268        property="column"
269        datatype="int"
270        title="Column"
271        sortable="true" 
272        filterable="true"
273        exportable="true"
274      />
275      <tbl:columndef 
276        id="blockSizeX"
277        property="arrayDesignBlock.blockSizeX"
278        datatype="int"
279        title="Block size X"
280        sortable="true" 
281        filterable="true"
282        exportable="true"
283      />
284      <tbl:columndef 
285        id="blockSizeY"
286        property="arrayDesignBlock.blockSizeY"
287        datatype="int"
288        title="Block size Y"
289        sortable="true" 
290        filterable="true"
291        exportable="true"
292      />
293      <tbl:columndef 
294        id="originX"
295        property="arrayDesignBlock.originX"
296        datatype="int"
297        title="Origin X"
298        sortable="true" 
299        filterable="true"
300        exportable="true"
301      />
302      <tbl:columndef 
303        id="originY"
304        property="arrayDesignBlock.originY"
305        datatype="int"
306        title="Origin Y"
307        sortable="true" 
308        filterable="true"
309        exportable="true"
310      />
311      <tbl:columndef 
312        id="spacingX"
313        property="arrayDesignBlock.spacingX"
314        datatype="int"
315        title="Spacing X"
316        sortable="true" 
317        filterable="true"
318        exportable="true"
319      />
320      <tbl:columndef 
321        id="spacingY"
322        property="arrayDesignBlock.spacingY"
323        datatype="int"
324        title="Spacing Y"
325        sortable="true" 
326        filterable="true"
327        exportable="true"
328      />
329      <tbl:columndef 
330        id="diameter"
331        property="arrayDesignBlock.featureDiameter"
332        datatype="int"
333        title="Diameter"
334        sortable="true" 
335        filterable="true"
336        exportable="true"
337      />
338      <tbl:columndef
339        id="reporterList"
340        property="$rpt.£reporterListScores"
341        datatype="int"
342        title="[Rep] Reporter list"
343        filterable="true"
344        enumeration="<%=Base.getReporterListsEnum(dc)%>"
345        multiple="false"
346      />
347      <tbl:columndef 
348        id="reporter.name"
349        property="reporter.name"
350        datatype="string"
351        title="[Rep] Name"
352        sortable="true" 
353        filterable="true"
354        exportable="true"
355      />
356      <tbl:columndef 
357        id="reporter.externalId"
358        clazz="uniquecol"
359        property="reporter.externalId"
360        datatype="string"
361        title="[Rep] ID"
362        sortable="true" 
363        filterable="true"
364        exportable="true"
365      />
366      <tbl:columndef 
367        id="reporter.symbol"
368        property="reporter.symbol"
369        datatype="string"
370        title="[Rep] Gene symbol"
371        sortable="true" 
372        filterable="true"
373        exportable="true"
374      />
375      <tbl:columndef 
376        id="reporter.description"
377        property="reporter.description"
378        datatype="string"
379        title="[Rep] Description" 
380        sortable="true" 
381        filterable="true" 
382        exportable="true"
383      />
384      <tbl:columndef 
385        id="reporter.entryDate"
386        property="reporter.entryDate"
387        datatype="date"
388        title="[Rep] Registered"
389        sortable="true" 
390        filterable="true"
391        exportable="true"
392        formatter="<%=dateFormatter%>"
393      />
394      <tbl:columndef 
395        id="reporter.lastUpdate"
396        property="reporter.lastUpdate"
397        datatype="timestamp"
398        title="[Rep] Last update" 
399        sortable="true" 
400        filterable="true" 
401        exportable="true"
402        formatter="<%=dateTimeFormatter%>"
403      />
404      <%
405      Enumeration<String, String> types = new Enumeration<String, String>();
406      ItemResultList<ReporterType> reporterTypes = typeQuery.list(dc);
407      types.add("", "- none -");
408      for (ReporterType rt : reporterTypes)
409      {
410        types.add(Integer.toString(rt.getId()), HTML.encodeTags(rt.getName()));
411      }
412      %>
413      <tbl:columndef 
414        id="reporter.reporterType"
415        property="reporter.reporterType"
416        sortproperty="reporter.reporterType.name"
417        exportproperty="reporter.reporterType.name:string"
418        datatype="int"
419        enumeration="<%=types%>"
420        title="[Rep] Type"
421        sortable="true" 
422        filterable="true"
423        exportable="true"
424      />
425      <%
426      if (reporterProperties != null)
427      {
428        for (ExtendedProperty ep : reporterProperties)
429        {
430          String name = ep.getName();
431          %>
432          <tbl:columndef
433            id="<%="reporter."+name%>"
434            property="<%="reporter."+name%>"
435            datatype="<%=ep.getType().getStringValue()%>"
436            title="<%="[Rep] "+HTML.encodeTags(ep.getTitle())%>"
437            sortable="true"
438            filterable="true"
439            exportable="true"
440            formatter="<%=FormatterFactory.getExtendedPropertyFormatter(sc, ep)%>"
441          />
442          <%
443        }
444      }
445      %>
446      <tbl:columndef 
447        id="well.row"
448        property="well.row"
449        datatype="int"
450        title="[Well] Row" 
451        sortable="true" 
452        filterable="true" 
453        enumeration="<%=plateRows%>"
454        exportable="true"
455        formatter="<%=rowFormatter%>"
456      />
457      <tbl:columndef 
458        id="well.column"
459        property="well.column"
460        datatype="int"
461        title="[Well] Column" 
462        sortable="true" 
463        filterable="true" 
464        enumeration="<%=plateColumns%>"
465        exportable="true"
466        formatter="<%=columnFormatter%>"
467      />
468      <tbl:columndef 
469        id="well.plate"
470        property="well.plate.name"
471        datatype="string"
472        title="[Well] Plate" 
473        sortable="true" 
474        filterable="true" 
475        exportable="true"
476      />
477      <tbl:columndef 
478        id="xt-columns" 
479        extensions="<%=columnsInvoker%>" 
480        jspcontext="<%=jspContext%>" 
481      />
482      <div class="panelgroup bg-filled-50 bottomborder">
483        <tbl:toolbar
484          subclass="bottomborder"
485          visible="<%=mode.hasToolbar()%>"
486          >
487          <tbl:button 
488            id="btnColumns"
489            image="columns.png" 
490            title="Columns&hellip;" 
491            tooltip="Show, hide and re-order columns" 
492          />
493          <tbl:button
494            id="btnNewReporterList"
495            image="add.png"
496            title="New reporter list&hellip;"
497            tooltip="Create a new reporter list from matching features"
498            visible="<%=sc.hasPermission(Permission.CREATE, Item.REPORTERLIST)%>"
499          />
500          <tbl:button 
501            id="btnImport"
502            data-plugin-type="IMPORT"
503            image="import.png" 
504            title="Import&hellip;" 
505            tooltip="Import data" 
506            visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
507          />
508          <tbl:button 
509            id="btnExport"
510            data-plugin-type="EXPORT"
511            image="export.png" 
512            title="Export&hellip;" 
513            tooltip="Export data" 
514            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
515          />
516          <tbl:button 
517            id="btnRunPlugin"
518            data-plugin-type="OTHER"
519            image="runplugin.png" 
520            title="Run plugin&hellip;" 
521            tooltip="Run a plugin" 
522            visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
523          />
524          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
525            wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
526        </tbl:toolbar>
527        <tbl:panel>
528          <tbl:presetselector />
529          <tbl:navigator
530            page="<%=cc.getPage()%>" 
531            rowsperpage="<%=cc.getRowsPerPage()%>" 
532            totalrows="<%=features == null ? 0 : features.getTotalCount()%>" 
533            visible="<%=mode.hasNavigator()%>"
534          />
535        </tbl:panel>
536      </div>
537      <tbl:data>
538        <tbl:headers>
539          <tbl:headerrow>
540            <tbl:header colspan="3" />
541            <tbl:columnheaders />
542          </tbl:headerrow>
543          <tbl:headerrow>
544            <tbl:header subclass="index" />
545            <tbl:header 
546              subclass="check" 
547              visible="<%=mode.hasCheck()%>"
548              ><base:icon 
549                id="check.uncheck"
550                image="check_uncheck.png" 
551                tooltip="Check/uncheck all" 
552                 
553              /></tbl:header>
554            <tbl:header 
555              subclass="check" 
556              visible="<%=mode.hasRadio()%>"
557              />
558            <tbl:header 
559              subclass="icons" 
560              visible="<%=mode.hasIcons()%>"
561              />
562            <tbl:propertyfilter />
563          </tbl:headerrow>
564        </tbl:headers>
565        <tbl:rows>
566          <%
567          if (cc.getMessage() != null)
568          {
569            %>
570            <tbl:panel subclass="bg-filled-50">
571              <div class="messagecontainer error"><%=cc.getMessage()%></div>
572            </tbl:panel>
573            <%
574            cc.setMessage(null);
575          }
576          int index = cc.getPage()*cc.getRowsPerPage();
577          int selectedItemId = Values.getInt(request.getParameter("item_id"));
578          if (features != null)
579          {
580            String tooltip = mode.isSelectionMode() ? 
581              "Select this item" : "View this item";
582            while (features.hasNext())
583            {
584              FeatureData item = features.next();
585              ArrayDesignBlock block = Feature.getArrayDesignBlock(dc, item);
586              int itemId = item.getId();
587              index++;
588              numListed++;
589              %>
590              <tbl:row>
591                <tbl:header 
592                  clazz="index"
593                  ><%=index%></tbl:header>
594                <tbl:header 
595                  clazz="check" 
596                  visible="<%=mode.hasCheck()%>"
597                  ><input 
598                      type="checkbox" 
599                      name="<%=itemId%>" 
600                      value="<%=itemId%>" 
601                      title="TODO" 
602                      <%=request.getParameter(Integer.toString(itemId)) == null ? "" : "checked"%> 
603                    ></tbl:header>
604                <tbl:header 
605                  clazz="check" 
606                  visible="<%=mode.hasRadio()%>"
607                  ><input 
608                      type="radio" 
609                      name="item_id" 
610                      value="<%=itemId%>" 
611                      title="TODO" 
612                      <%=selectedItemId == itemId ? "checked" : ""%>
613                    ></tbl:header>
614                <tbl:header 
615                  clazz="icons" 
616                  visible="<%=mode.hasIcons()%>"
617                  ></tbl:header>
618                <tbl:cell column="position"><div
619                    class="link table-item"
620                    data-item-id="<%=itemId%>"
621                    data-no-edit="1" 
622                    data-extra-url="&arraydesign_id=<%=arrayDesignId%>"
623                    tabindex="0"
624                    title="<%=tooltip%>"><%=item.getPosition()%></div></tbl:cell>
625                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
626                <tbl:cell column="externalId"><div
627                    class="link table-item"
628                    data-item-id="<%=itemId%>"
629                    data-no-edit="1" 
630                    data-extra-url="&arraydesign_id=<%=arrayDesignId%>"
631                    tabindex="0"
632                    title="<%=tooltip%>"><%=HTML.encodeTags(item.getExternalId())%></div></tbl:cell>
633                <tbl:cell column="block"><%=block.getBlockNumber()%></tbl:cell>
634                <tbl:cell column="row"><%=item.getRow()%></tbl:cell>
635                <tbl:cell column="column"><%=item.getColumn()%></tbl:cell>
636                <tbl:cell column="metaGridX"><%=block.getMetaGridX()%></tbl:cell>
637                <tbl:cell column="metaGridY"><%=block.getMetaGridY()%></tbl:cell>
638                <tbl:cell column="blockSizeX"><%=block.getBlockSizeX()%></tbl:cell>
639                <tbl:cell column="blockSizeY"><%=block.getBlockSizeY()%></tbl:cell>
640                <tbl:cell column="originX"><%=block.getOriginX()%></tbl:cell>
641                <tbl:cell column="originY"><%=block.getOriginY()%></tbl:cell>
642                <tbl:cell column="spacingX"><%=block.getSpacingX()%></tbl:cell>
643                <tbl:cell column="spacingY"><%=block.getSpacingY()%></tbl:cell>
644                <tbl:cell column="diameter"><%=block.getFeatureDiameter()%></tbl:cell>
645                <%
646                ReporterData reporter = item.getReporter();
647                if (reporter == null)
648                {
649                  %>
650                  <tbl:cell column="reporter.name"><i>- none -</i></tbl:cell>
651                  <tbl:cell column="reporter.externalId"><i>- none -</i></tbl:cell>
652                  <tbl:cell column="reporter.symbol"><i>- none -</i></tbl:cell>
653                  <tbl:cell column="reporter.description"><i>- none -</i></tbl:cell>
654                  <tbl:cell column="entryDate"><i>- none -</i></tbl:cell>
655                  <tbl:cell column="reporter.lastUpdate"><i>- none -</i></tbl:cell>
656                  <tbl:cell column="reporter.reporterType"><i>- none -</i></tbl:cell>
657                  <%
658                  if (reporterProperties != null)
659                  {
660                    for (ExtendedProperty ep : reporterProperties)
661                    {
662                      String name = ep.getName();
663                      %>
664                      <tbl:cell column="<%="reporter."+name%>"><i>- none -</i></tbl:cell>
665                      <%
666                    }
667                  }
668                }
669                else
670                {
671                  %>
672                  <tbl:cell column="reporter.name"><%=Base.getLink(ID, reporter.getName(), Item.REPORTER, reporter.getId(), true)%></tbl:cell>
673                  <tbl:cell column="reporter.externalId"><%=HTML.encodeTags(reporter.getExternalId())%></tbl:cell>
674                  <tbl:cell column="reporter.symbol"><%=HTML.encodeTags(reporter.getSymbol())%></tbl:cell>
675                  <tbl:cell column="reporter.description"><%=HTML.encodeTags(reporter.getDescription())%></tbl:cell>
676                  <tbl:cell column="reporter.entryDate" value="<%=reporter.getEntryDate()%>" />
677                  <tbl:cell column="reporter.lastUpdate" value="<%=reporter.getLastUpdate()%>" />
678                  <tbl:cell column="reporter.reporterType"
679                    ><base:propertyvalue 
680                      dbcontrol="<%=dc%>" 
681                      item="<%=reporter%>" 
682                      property="reporterType"
683                      enableEditLink="<%=mode.hasEditLink()%>" 
684                      enablePropertyLink="<%=mode.hasPropertyLink()%>"
685                    /></tbl:cell>
686                  <%
687                  if (reporterProperties != null)
688                  {
689                    for (ExtendedProperty ep : reporterProperties)
690                    {
691                      String name = ep.getName();
692                      %>
693                      <tbl:cell column="<%="reporter."+name%>"><tbl:cellvalue value="<%=reporter.getExtended(name)%>" /></tbl:cell>
694                      <%
695                    }
696                  }
697                }
698                %>
699                <%
700                Well well = null;
701                boolean readWell = true;
702                try
703                {
704                  well = Feature.getWell(dc, item);
705                }
706                catch (PermissionDeniedException ex)
707                {
708                  readWell = false;
709                }
710                if (!readWell)
711                {
712                  %>
713                  <tbl:cell column="well.row"><i>- denied -</i></tbl:cell>
714                  <tbl:cell column="well.column"><i>- denied -</i></tbl:cell>
715                  <tbl:cell column="well.plate"><i>- denied -</i></tbl:cell>
716                  <%
717                }
718                else if (well == null)
719                {
720                  %>
721                  <tbl:cell column="well.row"><i>- none -</i></tbl:cell>
722                  <tbl:cell column="well.column"><i>- none -</i></tbl:cell>
723                  <tbl:cell column="well.plate"><i>- none -</i></tbl:cell>
724                  <%
725                }
726                else
727                {
728                  %>
729                  <tbl:cell column="well.row"><tbl:cellvalue value="<%=well.getRow()%>"/></tbl:cell>
730                  <tbl:cell column="well.column"><tbl:cellvalue value="<%=well.getColumn()%>"/></tbl:cell>
731                  <tbl:cell column="well.plate"><%=Base.getLinkedName(ID, well.getPlate(), false, true)%></tbl:cell>
732                  <%
733                }
734                %>
735                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
736                  <tbl:cell column="xt-columns" />
737                </tbl:xt-cells>
738              </tbl:row>
739              <%
740            }
741          }
742          if (numListed == 0)
743          {
744            %>
745            <tbl:panel subclass="bg-filled-50">
746              <div class="messagecontainer note">
747              <%=features == null || features.getTotalCount() == 0 ? "No features were found" : "No features on this page. Please select another page!" %>
748              </div>
749            </tbl:panel>
750            <%
751          }
752          %>
753          </tbl:rows>
754        </tbl:data>
755    </tbl:table>
756    </t:tab>
757    <t:tab id="overview" title="Overview" 
758      tooltip="Display a tree overview of related items" />
759    <t:tab id="history" title="Change history" 
760        tooltip="Displays a log of all modifications made to this item"
761        visible="<%=ChangeHistoryUtil.showChangeHistoryTab(sc)%>" />
762    </t:tabcontrol>
763
764    <base:buttongroup>
765      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
766      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
767      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
768    </base:buttongroup>
769 
770  </base:body>
771  </base:page>
772  <%
773}
774finally
775{
776  if (features != null) features.close();
777  if (dc != null) dc.close();
778}
779%>
Note: See TracBrowser for help on using the repository browser.