source: trunk/www/admin/annotationtypes/list_annotationtypes.jsp @ 6706

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

References #1912: Add more filter rows in list pages

Implemented in Administrate->Platforms and Administrate->Types menus.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 21.5 KB
Line 
1<%-- $Id: list_annotationtypes.jsp 6706 2015-02-02 12:42:10Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
4  Copyright (C) 2007 Johan Enell, Nicklas Nordborg, Martin Svensson
5
6  This file is part of BASE - BioArray Software Environment.
7  Available at http://base.thep.lu.se/
8
9  BASE is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License
11  as published by the Free Software Foundation; either version 3
12  of the License, or (at your option) any later version.
13
14  BASE is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.
18
19  You should have received a copy of the GNU General Public License
20  along with BASE. If not, see <http://www.gnu.org/licenses/>.
21  ------------------------------------------------------------------
22
23  @author Nicklas
24  @version 2.0
25--%>
26<%@ page pageEncoding="UTF-8" session="false"
27  import="net.sf.basedb.core.SessionControl"
28  import="net.sf.basedb.core.DbControl"
29  import="net.sf.basedb.core.Item"
30  import="net.sf.basedb.core.AnnotationType"
31  import="net.sf.basedb.core.AnnotationTypeCategory"
32  import="net.sf.basedb.core.Quantity"
33  import="net.sf.basedb.core.ItemQuery"
34  import="net.sf.basedb.core.Include"
35  import="net.sf.basedb.core.Type"
36  import="net.sf.basedb.core.Metadata"
37  import="net.sf.basedb.core.ItemResultIterator"
38  import="net.sf.basedb.core.ItemResultList"
39  import="net.sf.basedb.core.ItemContext"
40  import="net.sf.basedb.core.Nameable"
41  import="net.sf.basedb.core.Permission"
42  import="net.sf.basedb.core.PluginDefinition"
43  import="net.sf.basedb.core.query.Restrictions"
44  import="net.sf.basedb.core.query.Expressions"
45  import="net.sf.basedb.core.query.Orders"
46  import="net.sf.basedb.core.query.Hql"
47  import="net.sf.basedb.core.plugin.GuiContext"
48  import="net.sf.basedb.core.plugin.Plugin"
49  import="net.sf.basedb.util.Enumeration"
50  import="net.sf.basedb.util.ShareableUtil"
51  import="net.sf.basedb.clients.web.Base"
52  import="net.sf.basedb.clients.web.PermissionUtil"
53  import="net.sf.basedb.clients.web.ModeInfo"
54  import="net.sf.basedb.clients.web.util.HTML"
55  import="net.sf.basedb.util.Values"
56  import="net.sf.basedb.util.formatter.Formatter"
57  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
58  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
59  import="net.sf.basedb.clients.web.extensions.JspContext"
60  import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer"
61  import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil"
62  import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
63  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
64  import="java.util.Date"
65  import="java.util.Iterator"
66  import="java.util.List"
67  import="java.util.Map"
68  import="java.util.Set"
69  import="java.util.EnumSet"
70%>
71<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
72<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
73<%@ taglib prefix="m" uri="/WEB-INF/menu.tld" %>
74<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
75<%!
76  private static final Item itemType = Item.ANNOTATIONTYPE;
77  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
78 
79  private static final Enumeration<String, String> items = new Enumeration<String, String>();
80  private static Enumeration<String, String> types = new Enumeration<String, String>();
81  static
82  {
83    items.add("", "- none -");
84    for (Item item : Metadata.getAnnotatableItems())
85    {
86      items.add(Integer.toString(item.getValue()), item.toString());
87    }
88    for (Type v : Type.values())
89    {
90      types.add(Integer.toString(v.getValue()), v.toString());
91    }
92  }
93%>
94<%
95final SessionControl sc = Base.getExistingSessionControl(pageContext, Permission.DENIED, itemType);
96final String ID = sc.getId();
97final boolean createPermission = sc.hasPermission(Permission.CREATE, itemType);
98final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
99
100final ModeInfo mode = ModeInfo.get(request.getParameter("mode"));
101final String callback = request.getParameter("callback");
102final String title = mode.generateTitle("annotation type", "annotation types");
103final DbControl dc = sc.newDbControl();
104ItemResultIterator<AnnotationType> annotationTypes = null;
105try
106{
107  Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
108  // Query for categories of the current annotation type
109  final ItemQuery<AnnotationTypeCategory> categoryQuery = AnnotationTypeCategory.getQuery();
110  categoryQuery.include(cc.getInclude());
111  categoryQuery.join(Hql.innerJoin("annotationTypes", "atp"));
112  categoryQuery.restrict(Restrictions.eq(Hql.alias("atp"), Expressions.parameter("annotationType")));
113  categoryQuery.order(Orders.asc(Hql.property("name"))); 
114
115  // Get all quantities
116  final ItemQuery<Quantity> quantityQuery = Quantity.getQuery();
117  quantityQuery.order(Orders.asc(Hql.property("name")));
118  quantityQuery.setCacheResult(true);
119
120  Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
121  try
122  {
123    final ItemQuery<AnnotationType> query = Base.getConfiguredQuery(dc, cc, true, AnnotationType.getQuery(null), mode);
124    annotationTypes = query.iterate(dc);
125  }
126  catch (Throwable ex)
127  {
128    cc.setMessage(ex.getMessage());
129  }
130  int numListed = 0;
131  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, guiContext, null);
132  ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext);
133  ExtensionsInvoker columnsInvoker = ListColumnUtil.useExtensions(jspContext);
134  %>
135  <base:page title="<%=title==null ? "Annotation types" : title%>" type="<%=mode.getPageType()%>" id="list-page">
136  <base:head scripts="table.js,~annotationtypes.js" styles="table.css,toolbar.css">
137    <ext:scripts context="<%=jspContext%>" />
138    <ext:stylesheets context="<%=jspContext%>" />
139  </base:head>
140 
141  <base:body>
142    <m:menu 
143      id="mnuNewAnnotationType"
144      style="display: none;">
145      <%
146      Set<Type> separator = EnumSet.of(Type.DOUBLE, Type.TEXT, Type.BOOLEAN);
147      for (Type valueType : Type.values())
148      {
149        %>
150        <m:menuitem 
151          title="<%=valueType.toString()+" annotation type"%>" 
152          data-value-type="<%=valueType.name() %>"
153        />
154        <%
155        if (separator.contains(valueType))
156        {
157          %>
158          <m:menuseparator />
159          <%
160        }
161      }
162      %>
163    </m:menu>
164    <h1><%=title==null ? "Annotation types" : title%></h1>
165    <div class="content">
166    <tbl:table 
167      id="annotationTypes" 
168      columns="<%=cc.getSetting("columns")%>"
169      sortby="<%=cc.getSortProperty()%>" 
170      direction="<%=cc.getSortDirection()%>"
171      action="index.jsp"
172      sc="<%=sc%>"
173      item="<%=itemType%>"
174      filterrows="<%=cc.getFilterRows()%>"
175      subclass="fulltable"
176      >
177      <tbl:hidden 
178        name="mode" 
179        value="<%=mode.getName()%>" 
180      />
181      <tbl:hidden 
182        name="callback" 
183        value="<%=callback%>" 
184        skip="<%=callback == null%>" 
185      />
186      <tbl:columndef 
187        id="name"
188        property="name"
189        datatype="string"
190        title="Name"
191        sortable="true" 
192        filterable="true"
193        exportable="true"
194        show="always" 
195      />
196      <tbl:columndef 
197        id="id"
198        clazz="uniquecol"
199        property="id"
200        datatype="int"
201        title="ID"
202        sortable="true"
203        filterable="true"
204        exportable="true"
205      />
206      <tbl:columndef 
207        id="entryDate"
208        property="entryDate"
209        datatype="date"
210        title="Registered"
211        sortable="true" 
212        filterable="true"
213        exportable="true"
214        formatter="<%=dateFormatter%>"
215      />
216      <tbl:columndef 
217        id="externalId"
218        property="externalId"
219        datatype="string"
220        title="External id"
221        sortable="true" 
222        filterable="true"
223        exportable="true"
224      />
225      <tbl:columndef 
226        id="valueType"
227        property="valueType"
228        datatype="int"
229        enumeration="<%=types%>"
230        title="Value type"
231        sortable="true" 
232        filterable="true"
233        exportable="true"
234      />
235      <%
236      Enumeration<String, String> quantities = new Enumeration<String, String>();
237      quantities.add("", "- none -");
238      for (Quantity q : quantityQuery.list(dc))
239      {
240        quantities.add(Integer.toString(q.getId()), q.getName());
241      }
242      %>
243      <tbl:columndef 
244        id="quantity"
245        property="quantity"
246        sortproperty="quantity.name"
247        exportproperty="quantity.name:string"
248        datatype="int"
249        enumeration="<%=quantities%>"
250        title="Quantity"
251        sortable="true" 
252        filterable="true"
253        exportable="true"
254      />
255      <tbl:columndef 
256        id="defaultUnit"
257        property="defaultUnit.name"
258        datatype="string"
259        title="Default unit"
260        sortable="true" 
261        filterable="true"
262        exportable="true"
263      />
264      <tbl:columndef 
265        id="requiredForMiame"
266        property="requiredForMiame"
267        datatype="boolean"
268        title="Required for MIAME"
269        sortable="true" 
270        filterable="true"
271        exportable="true"
272      />
273      <tbl:columndef 
274        id="disableLogOfValues"
275        property="disableLogOfValues"
276        datatype="boolean"
277        title="Disable change log"
278        sortable="true" 
279        filterable="true"
280        exportable="true"
281      />
282      <tbl:columndef 
283        id="isEnumeration"
284        property="enumeration"
285        datatype="boolean"
286        title="Enumeration"
287        sortable="true" 
288        filterable="true"
289        exportable="true"
290      />
291      <tbl:columndef 
292        id="isProtocolParameter"
293        property="protocolParameter"
294        datatype="boolean"
295        title="Protocol parameter"
296        sortable="true" 
297        filterable="true"
298        exportable="true"
299      />
300      <tbl:columndef 
301        id="multiplicity"
302        property="multiplicity"
303        datatype="int"
304        title="Multiplicity"
305        sortable="true" 
306        filterable="true"
307        exportable="true"
308      />
309      <tbl:columndef 
310        id="defaultValue"
311        property="defaultValue"
312        datatype="string"
313        title="Default value"
314        sortable="true" 
315        filterable="true"
316        exportable="true"
317      />
318      <tbl:columndef 
319        id="itemTypes"
320        property="@itemTypes"
321        datatype="int"
322        enumeration="<%=items%>"
323        title="Item types"
324        sortable="false" 
325        filterable="true"
326        exportable="false"
327      />
328      <tbl:columndef 
329        id="categories"
330        title="Categories"
331        property="&categories(name)"
332        datatype="string"
333        filterable="true"
334        exportable="true"
335      />
336      <tbl:columndef 
337        id="owner"
338        property="owner.name"
339        datatype="string"
340        title="Owner"
341        sortable="true" 
342        filterable="true"
343        exportable="true"
344      />
345      <tbl:columndef 
346        id="description"
347        property="description"
348        datatype="string"
349        title="Description" 
350        sortable="true" 
351        filterable="true" 
352        exportable="true"
353      />
354      <tbl:columndef
355        id="permission"
356        title="Permission"
357      />
358      <tbl:columndef
359        id="sharedTo"
360        title="Shared to"
361        filterable="true"
362        filterproperty="!sharedTo.name"
363        datatype="string"
364      />
365      <tbl:columndef 
366        id="xt-columns" 
367        extensions="<%=columnsInvoker%>" 
368        jspcontext="<%=jspContext%>" 
369      />
370      <div class="panelgroup bg-filled-50 bottomborder">
371        <tbl:toolbar
372          subclass="bottomborder"
373          visible="<%=mode.hasToolbar()%>"
374          >
375          <tbl:button 
376            id="btnNewItem"
377            subclass="auto-init"
378            data-auto-init="menu-anchor"
379            data-menu-id="mnuNewAnnotationType"
380            disabled="<%=!createPermission%>" 
381            image="new.png" 
382            title="New&hellip;" 
383            tooltip="<%=createPermission ? "Create new annotation type" : "You do not have permission to create annotation types"%>" 
384          />
385          <tbl:button 
386            id="btnDeleteItems"
387            image="delete.png"
388            title="Delete" 
389            tooltip="Delete the selected items" 
390          />
391          <tbl:button 
392            id="btnRestoreItems"
393            image="restore.png"
394            title="Restore" 
395            tooltip="Restore the selected (deleted) items"
396          />
397          <tbl:button 
398            id="btnShareItems"
399            image="share.png"
400            title="Share&hellip;" 
401            tooltip="Share the selected items"
402          />
403          <tbl:button 
404            id="btnSetOwner"
405            image="take_ownership.png"
406            title="Set owner&hellip;"
407            tooltip="Change owner of the selected items"
408          />
409          <tbl:button 
410            id="btnColumns"
411            image="columns.png" 
412            title="Columns&hellip;" 
413            tooltip="Show, hide and re-order columns" 
414          />
415          <tbl:button 
416            id="btnImport"
417            data-plugin-type="IMPORT"
418            image="import.png" 
419            title="Import&hellip;" 
420            tooltip="Import data" 
421            visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
422          />
423          <tbl:button 
424            id="btnExport"
425            data-plugin-type="EXPORT"
426            image="export.png" 
427            title="Export&hellip;" 
428            tooltip="Export data" 
429            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
430          />
431          <tbl:button 
432            id="btnRunPlugin"
433            data-plugin-type="OTHER"
434            image="runplugin.png" 
435            title="Run plugin&hellip;" 
436            tooltip="Run a plugin" 
437            visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
438          />
439          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
440            wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
441        </tbl:toolbar>
442        <tbl:panel>
443          <tbl:presetselector />
444          <tbl:navigator
445            page="<%=cc.getPage()%>" 
446            rowsperpage="<%=cc.getRowsPerPage()%>" 
447            totalrows="<%=annotationTypes == null ? 0 : annotationTypes.getTotalCount()%>" 
448            visible="<%=mode.hasNavigator()%>"
449          />
450        </tbl:panel>
451      </div>
452      <tbl:data>
453        <tbl:headers>
454          <tbl:headerrow>
455            <tbl:header colspan="3" />
456            <tbl:columnheaders />
457          </tbl:headerrow>
458          <%
459          int numFilters = cc.getNumPropertyFilters();
460          int numRows = cc.getFilterRows();
461          for (int filterNo = 0; filterNo < numRows; filterNo++)
462          {
463            boolean lastRow = filterNo == numRows-1;
464            %>
465            <tbl:headerrow>
466              <tbl:header subclass="index" />
467              <tbl:header 
468                subclass="check" 
469                visible="<%=mode.hasCheck()%>"
470                ><base:icon 
471                  id="check.uncheck"
472                  image="check_uncheck.png" 
473                  tooltip="Check/uncheck all" 
474                  visible="<%=lastRow%>"
475                /></tbl:header>
476              <tbl:header 
477                subclass="check" 
478                visible="<%=mode.hasRadio()%>"
479                />
480              <tbl:header 
481                subclass="icons" 
482                visible="<%=mode.hasIcons()%>"
483                >
484                <base:icon
485                  subclass="link table-filter-row-action"
486                  image="add.png"
487                  tooltip="Add extra filter row"
488                  visible="<%=lastRow%>"
489                /><base:icon
490                  subclass="link table-filter-row-action"
491                  image="remove.png"
492                  tooltip="Remove this filter row"
493                  visible="<%=numRows > 1 || numFilters > 0 %>"
494                  data-remove-row="<%=filterNo%>"
495                />
496              </tbl:header>
497              <tbl:propertyfilter row="<%=filterNo%>" />
498            </tbl:headerrow>
499            <%
500          }
501          %>
502        </tbl:headers>
503        <tbl:rows>
504          <%
505          if (cc.getMessage() != null)
506          {
507            %>
508            <tbl:panel subclass="bg-filled-50">
509              <div class="messagecontainer error"><%=cc.getMessage()%></div>
510            </tbl:panel>
511            <%
512            cc.setMessage(null);
513          }
514          int index = cc.getPage()*cc.getRowsPerPage();
515          int selectedItemId = cc.getId();
516         
517          if (annotationTypes != null)
518          {
519            while (annotationTypes.hasNext())
520            {
521              AnnotationType item = annotationTypes.next();
522              int itemId = item.getId();
523             
524             
525              boolean deletePermission = item.hasPermission(Permission.DELETE);
526              boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
527              boolean writePermission = item.hasPermission(Permission.WRITE);
528              String name = HTML.encodeTags(item.getName());
529              String tooltip = mode.isSelectionMode() ? 
530                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
531              index++;
532              numListed++;
533              Set<Item> itemTypes = item.getEnabledItems();
534              %>
535              <tbl:row>
536                <tbl:header 
537                  clazz="index"
538                  ><%=index%></tbl:header>
539                <tbl:header 
540                  clazz="check" 
541                  visible="<%=mode.hasCheck()%>"
542                  ><input 
543                    type="checkbox" 
544                    name="<%=itemId%>" 
545                    value="<%=itemId%>" 
546                    title="<%=name%>" 
547                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
548                  ></tbl:header>
549                <tbl:header 
550                  clazz="check" 
551                  visible="<%=mode.hasRadio()%>"
552                  ><input 
553                    type="radio" 
554                    name="item_id" 
555                    value="<%=itemId%>" 
556                    title="<%=name%>" 
557                    <%=selectedItemId == itemId ? "checked" : ""%>
558                  ></tbl:header>
559                <tbl:header 
560                  clazz="icons" 
561                  visible="<%=mode.hasIcons()%>"
562                  ><base:icon 
563                    image="deleted.png"
564                    id="<%="delete."+itemId %>"
565                    subclass="<%=deletePermission ? "table-delete-item" : null %>"
566                    data-item-id="<%=itemId%>"
567                    tooltip="This item has been scheduled for deletion" 
568                    visible="<%=item.isRemoved()%>"
569                  /><base:icon 
570                    image="shared.png" 
571                    id="<%="share."+itemId %>"
572                    subclass="<%=sharePermission ? "table-share-item" : null %>"
573                    data-item-id="<%=itemId%>"
574                    tooltip="This item is shared to other users, groups and/or projects" 
575                    visible="<%=item.isShared()%>"
576                  />&nbsp;</tbl:header>
577                <tbl:cell column="name"><div 
578                  class="link table-item"
579                  data-item-id="<%=itemId%>"
580                  data-no-edit="<%=writePermission ? 0 : 1 %>" 
581                  tabindex="0"
582                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
583                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
584                <tbl:cell column="entryDate" value="<%=item.getEntryDate()%>" />
585                <tbl:cell column="externalId"><%=HTML.encodeTags(item.getExternalId())%></tbl:cell>
586                <tbl:cell column="valueType"><%=item.getValueType()%></tbl:cell>
587                <tbl:cell column="quantity"><base:propertyvalue 
588                    item="<%=item%>" 
589                    property="quantity"
590                    enableEditLink="<%=mode.hasEditLink()%>" 
591                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
592                  /></tbl:cell>
593                <tbl:cell column="defaultUnit"><base:propertyvalue 
594                    item="<%=item%>" 
595                    property="defaultUnit"
596                    enableEditLink="<%=mode.hasEditLink()%>" 
597                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
598                  /></tbl:cell>
599                <tbl:cell column="isEnumeration"><%=item.isEnumeration() ? 
600                  HTML.encodeTags(Values.getString((List)item.getValues(), ", ", true, (Formatter)FormatterFactory.getTypeFormatter(sc, item.getValueType()) )) : 
601                  "<i>- no -</i>"%></tbl:cell>
602                <tbl:cell column="requiredForMiame"><%=item.isRequiredForMiame() ? "yes" : "no"%></tbl:cell>
603                <tbl:cell column="isProtocolParameter"><%=item.isProtocolParameter() ? "yes" : "no"%></tbl:cell>
604                <tbl:cell column="disableLogOfValues"><%=item.getDisableLogOfValues() ? "yes" : "no"%></tbl:cell>
605                <tbl:cell column="multiplicity"><%=item.getMultiplicity() == 0 ? "<i>- unlimited -</i>" : item.getMultiplicity()%></tbl:cell>
606                <tbl:cell column="defaultValue"><%=HTML.encodeTags(item.getDefaultValue())%></tbl:cell>
607                <tbl:cell column="itemTypes"><%=itemTypes.isEmpty() ? "<i>- none -</i>" : Values.getString(itemTypes, ", ", true)%></tbl:cell>
608                <tbl:cell column="owner"
609                  ><base:propertyvalue 
610                    item="<%=item%>" 
611                    property="owner"
612                    enableEditLink="<%=mode.hasEditLink()%>" 
613                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
614                  /></tbl:cell>
615                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
616                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
617                <tbl:cell column="categories">
618                  <%
619                  categoryQuery.setParameter("annotationType", itemId, Type.INT);
620                  try
621                  {
622                    String separator = "";
623                    for (AnnotationTypeCategory c : categoryQuery.list(dc))
624                    {
625                      out.write(separator);
626                      if (mode.hasPropertyLink())
627                      {
628                        out.write(Base.getLinkedName(ID, c, false, mode.hasEditLink()));
629                      }
630                      else
631                      {
632                        out.write(HTML.encodeTags(c.getName()));
633                      }
634                      separator = ", ";
635                    }
636                  }
637                  catch (Throwable t)
638                  {
639                    %>
640                    <div class="error"><%=t.getMessage()%></div>
641                    <%
642                  }
643                  %>
644                </tbl:cell>
645                <tbl:cell column="sharedTo">
646                  <%
647                  Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
648                  while(sharees.hasNext())
649                  {
650                    Nameable n = sharees.next();
651                    if (mode.hasPropertyLink())
652                    {
653                      out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
654                    }
655                    else
656                    {
657                      out.write(HTML.encodeTags(n.getName()));
658                    }
659                    out.write(sharees.hasNext() ? ", " : "");
660                  }
661                  %>
662                </tbl:cell>
663                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
664                  <tbl:cell column="xt-columns" />
665                </tbl:xt-cells>
666              </tbl:row>
667              <%
668            }
669          }
670          if (numListed == 0)
671          {
672            %>
673            <tbl:panel subclass="bg-filled-50">
674              <div class="messagecontainer note">
675              <%=annotationTypes == null || annotationTypes.getTotalCount() == 0 ? "No annotation types were found" : "No annotation types on this page. Please select another page!" %>
676              </div>
677            </tbl:panel>
678            <%
679          }
680          %>
681        </tbl:rows>
682      </tbl:data>
683    </tbl:table>
684    </div>
685   
686    <base:buttongroup subclass="dialogbuttons">
687      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
688      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
689      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
690    </base:buttongroup>
691   
692  </base:body>
693  </base:page>
694  <%
695}
696finally
697{
698  if (annotationTypes != null) annotationTypes.close();
699  if (dc != null) dc.close();
700}
701%>
Note: See TracBrowser for help on using the repository browser.