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

Last change on this file since 4866 was 4866, checked in by Martin Svensson, 13 years ago

Fixes #1282 Change display-format of well coordinates.

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