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

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

References #1910: Disable annotation inheritance for annotation types

Added AnnotationType.getDisableInheritance() which is a flag that if set will disable the inheritance. Schema version is updated and all existing annotation types are set to FALSE.

A permission check when calling AnnotationSet.inheritAnnotation has been implemented and setting the flag with AnnotationType.setDisableInheritance() will trigger a removal of existing inherited annotations.

This should complete the core part of the functionality but we also need some supporting functionality (mainly in the gui).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 21.8 KB
Line 
1<%-- $Id: list_annotationtypes.jsp 6728 2015-02-13 08:00:01Z 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="disableInheritance"
284        property="disableInheritance"
285        datatype="boolean"
286        title="Disable inheritance"
287        sortable="true" 
288        filterable="true"
289        exportable="true"
290      />
291      <tbl:columndef 
292        id="isEnumeration"
293        property="enumeration"
294        datatype="boolean"
295        title="Enumeration"
296        sortable="true" 
297        filterable="true"
298        exportable="true"
299      />
300      <tbl:columndef 
301        id="isProtocolParameter"
302        property="protocolParameter"
303        datatype="boolean"
304        title="Protocol parameter"
305        sortable="true" 
306        filterable="true"
307        exportable="true"
308      />
309      <tbl:columndef 
310        id="multiplicity"
311        property="multiplicity"
312        datatype="int"
313        title="Multiplicity"
314        sortable="true" 
315        filterable="true"
316        exportable="true"
317      />
318      <tbl:columndef 
319        id="defaultValue"
320        property="defaultValue"
321        datatype="string"
322        title="Default value"
323        sortable="true" 
324        filterable="true"
325        exportable="true"
326      />
327      <tbl:columndef 
328        id="itemTypes"
329        property="@itemTypes"
330        datatype="int"
331        enumeration="<%=items%>"
332        title="Item types"
333        sortable="false" 
334        filterable="true"
335        exportable="false"
336      />
337      <tbl:columndef 
338        id="categories"
339        title="Categories"
340        property="&categories(name)"
341        datatype="string"
342        filterable="true"
343        exportable="true"
344      />
345      <tbl:columndef 
346        id="owner"
347        property="owner.name"
348        datatype="string"
349        title="Owner"
350        sortable="true" 
351        filterable="true"
352        exportable="true"
353      />
354      <tbl:columndef 
355        id="description"
356        property="description"
357        datatype="string"
358        title="Description" 
359        sortable="true" 
360        filterable="true" 
361        exportable="true"
362      />
363      <tbl:columndef
364        id="permission"
365        title="Permission"
366      />
367      <tbl:columndef
368        id="sharedTo"
369        title="Shared to"
370        filterable="true"
371        filterproperty="!sharedTo.name"
372        datatype="string"
373      />
374      <tbl:columndef 
375        id="xt-columns" 
376        extensions="<%=columnsInvoker%>" 
377        jspcontext="<%=jspContext%>" 
378      />
379      <div class="panelgroup bg-filled-50 bottomborder">
380        <tbl:toolbar
381          subclass="bottomborder"
382          visible="<%=mode.hasToolbar()%>"
383          >
384          <tbl:button 
385            id="btnNewItem"
386            subclass="auto-init"
387            data-auto-init="menu-anchor"
388            data-menu-id="mnuNewAnnotationType"
389            disabled="<%=!createPermission%>" 
390            image="new.png" 
391            title="New&hellip;" 
392            tooltip="<%=createPermission ? "Create new annotation type" : "You do not have permission to create annotation types"%>" 
393          />
394          <tbl:button 
395            id="btnDeleteItems"
396            image="delete.png"
397            title="Delete" 
398            tooltip="Delete the selected items" 
399          />
400          <tbl:button 
401            id="btnRestoreItems"
402            image="restore.png"
403            title="Restore" 
404            tooltip="Restore the selected (deleted) items"
405          />
406          <tbl:button 
407            id="btnShareItems"
408            image="share.png"
409            title="Share&hellip;" 
410            tooltip="Share the selected items"
411          />
412          <tbl:button 
413            id="btnSetOwner"
414            image="take_ownership.png"
415            title="Set owner&hellip;"
416            tooltip="Change owner of the selected items"
417          />
418          <tbl:button 
419            id="btnColumns"
420            image="columns.png" 
421            title="Columns&hellip;" 
422            tooltip="Show, hide and re-order columns" 
423          />
424          <tbl:button 
425            id="btnImport"
426            data-plugin-type="IMPORT"
427            image="import.png" 
428            title="Import&hellip;" 
429            tooltip="Import data" 
430            visible="<%=pluginCount.containsKey(Plugin.MainType.IMPORT)%>"
431          />
432          <tbl:button 
433            id="btnExport"
434            data-plugin-type="EXPORT"
435            image="export.png" 
436            title="Export&hellip;" 
437            tooltip="Export data" 
438            visible="<%=pluginCount.containsKey(Plugin.MainType.EXPORT)%>"
439          />
440          <tbl:button 
441            id="btnRunPlugin"
442            data-plugin-type="OTHER"
443            image="runplugin.png" 
444            title="Run plugin&hellip;" 
445            tooltip="Run a plugin" 
446            visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>"
447          />
448          <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 
449            wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/>
450        </tbl:toolbar>
451        <tbl:panel>
452          <tbl:presetselector />
453          <tbl:navigator
454            page="<%=cc.getPage()%>" 
455            rowsperpage="<%=cc.getRowsPerPage()%>" 
456            totalrows="<%=annotationTypes == null ? 0 : annotationTypes.getTotalCount()%>" 
457            visible="<%=mode.hasNavigator()%>"
458          />
459        </tbl:panel>
460      </div>
461      <tbl:data>
462        <tbl:headers>
463          <tbl:headerrow>
464            <tbl:header colspan="3" />
465            <tbl:columnheaders />
466          </tbl:headerrow>
467          <%
468          int numFilters = cc.getNumPropertyFilters();
469          int numRows = cc.getFilterRows();
470          for (int filterNo = 0; filterNo < numRows; filterNo++)
471          {
472            boolean lastRow = filterNo == numRows-1;
473            %>
474            <tbl:headerrow>
475              <tbl:header subclass="index" />
476              <tbl:header 
477                subclass="check" 
478                visible="<%=mode.hasCheck()%>"
479                ><base:icon 
480                  id="check.uncheck"
481                  image="check_uncheck.png" 
482                  tooltip="Check/uncheck all" 
483                  visible="<%=lastRow%>"
484                /></tbl:header>
485              <tbl:header 
486                subclass="check" 
487                visible="<%=mode.hasRadio()%>"
488                />
489              <tbl:header 
490                subclass="icons" 
491                visible="<%=mode.hasIcons()%>"
492                >
493                <base:icon
494                  subclass="link table-filter-row-action"
495                  image="add.png"
496                  tooltip="Add extra filter row"
497                  visible="<%=lastRow%>"
498                /><base:icon
499                  subclass="link table-filter-row-action"
500                  image="remove.png"
501                  tooltip="Remove this filter row"
502                  visible="<%=numRows > 1 || numFilters > 0 %>"
503                  data-remove-row="<%=filterNo%>"
504                />
505              </tbl:header>
506              <tbl:propertyfilter row="<%=filterNo%>" />
507            </tbl:headerrow>
508            <%
509          }
510          %>
511        </tbl:headers>
512        <tbl:rows>
513          <%
514          if (cc.getMessage() != null)
515          {
516            %>
517            <tbl:panel subclass="bg-filled-50">
518              <div class="messagecontainer error"><%=cc.getMessage()%></div>
519            </tbl:panel>
520            <%
521            cc.setMessage(null);
522          }
523          int index = cc.getPage()*cc.getRowsPerPage();
524          int selectedItemId = cc.getId();
525         
526          if (annotationTypes != null)
527          {
528            while (annotationTypes.hasNext())
529            {
530              AnnotationType item = annotationTypes.next();
531              int itemId = item.getId();
532             
533             
534              boolean deletePermission = item.hasPermission(Permission.DELETE);
535              boolean sharePermission = item.hasPermission(Permission.SET_PERMISSION);
536              boolean writePermission = item.hasPermission(Permission.WRITE);
537              String name = HTML.encodeTags(item.getName());
538              String tooltip = mode.isSelectionMode() ? 
539                  "Select this item" : "View this item" + (writePermission ? " (use CTRL, ALT or SHIFT to edit)" : "");
540              index++;
541              numListed++;
542              Set<Item> itemTypes = item.getEnabledItems();
543              %>
544              <tbl:row>
545                <tbl:header 
546                  clazz="index"
547                  ><%=index%></tbl:header>
548                <tbl:header 
549                  clazz="check" 
550                  visible="<%=mode.hasCheck()%>"
551                  ><input 
552                    type="checkbox" 
553                    name="<%=itemId%>" 
554                    value="<%=itemId%>" 
555                    title="<%=name%>" 
556                    <%=cc.getSelected().contains(itemId) ? "checked" : ""%> 
557                  ></tbl:header>
558                <tbl:header 
559                  clazz="check" 
560                  visible="<%=mode.hasRadio()%>"
561                  ><input 
562                    type="radio" 
563                    name="item_id" 
564                    value="<%=itemId%>" 
565                    title="<%=name%>" 
566                    <%=selectedItemId == itemId ? "checked" : ""%>
567                  ></tbl:header>
568                <tbl:header 
569                  clazz="icons" 
570                  visible="<%=mode.hasIcons()%>"
571                  ><base:icon 
572                    image="deleted.png"
573                    id="<%="delete."+itemId %>"
574                    subclass="<%=deletePermission ? "table-delete-item" : null %>"
575                    data-item-id="<%=itemId%>"
576                    tooltip="This item has been scheduled for deletion" 
577                    visible="<%=item.isRemoved()%>"
578                  /><base:icon 
579                    image="shared.png" 
580                    id="<%="share."+itemId %>"
581                    subclass="<%=sharePermission ? "table-share-item" : null %>"
582                    data-item-id="<%=itemId%>"
583                    tooltip="This item is shared to other users, groups and/or projects" 
584                    visible="<%=item.isShared()%>"
585                  />&nbsp;</tbl:header>
586                <tbl:cell column="name"><div 
587                  class="link table-item"
588                  data-item-id="<%=itemId%>"
589                  data-no-edit="<%=writePermission ? 0 : 1 %>" 
590                  tabindex="0"
591                  title="<%=tooltip%>"><%=name%></div></tbl:cell>
592                <tbl:cell column="id"><%=item.getId()%></tbl:cell>
593                <tbl:cell column="entryDate" value="<%=item.getEntryDate()%>" />
594                <tbl:cell column="externalId"><%=HTML.encodeTags(item.getExternalId())%></tbl:cell>
595                <tbl:cell column="valueType"><%=item.getValueType()%></tbl:cell>
596                <tbl:cell column="quantity"><base:propertyvalue 
597                    item="<%=item%>" 
598                    property="quantity"
599                    enableEditLink="<%=mode.hasEditLink()%>" 
600                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
601                  /></tbl:cell>
602                <tbl:cell column="defaultUnit"><base:propertyvalue 
603                    item="<%=item%>" 
604                    property="defaultUnit"
605                    enableEditLink="<%=mode.hasEditLink()%>" 
606                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
607                  /></tbl:cell>
608                <tbl:cell column="isEnumeration"><%=item.isEnumeration() ? 
609                  HTML.encodeTags(Values.getString((List)item.getValues(), ", ", true, (Formatter)FormatterFactory.getTypeFormatter(sc, item.getValueType()) )) : 
610                  "<i>- no -</i>"%></tbl:cell>
611                <tbl:cell column="requiredForMiame"><%=item.isRequiredForMiame() ? "yes" : "no"%></tbl:cell>
612                <tbl:cell column="isProtocolParameter"><%=item.isProtocolParameter() ? "yes" : "no"%></tbl:cell>
613                <tbl:cell column="disableLogOfValues"><%=item.getDisableLogOfValues() ? "yes" : "no"%></tbl:cell>
614                <tbl:cell column="disableInheritance"><%=item.getDisableInheritance() ? "yes" : "no"%></tbl:cell>
615                <tbl:cell column="multiplicity"><%=item.getMultiplicity() == 0 ? "<i>- unlimited -</i>" : item.getMultiplicity()%></tbl:cell>
616                <tbl:cell column="defaultValue"><%=HTML.encodeTags(item.getDefaultValue())%></tbl:cell>
617                <tbl:cell column="itemTypes"><%=itemTypes.isEmpty() ? "<i>- none -</i>" : Values.getString(itemTypes, ", ", true)%></tbl:cell>
618                <tbl:cell column="owner"
619                  ><base:propertyvalue 
620                    item="<%=item%>" 
621                    property="owner"
622                    enableEditLink="<%=mode.hasEditLink()%>" 
623                    enablePropertyLink="<%=mode.hasPropertyLink()%>"
624                  /></tbl:cell>
625                <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell>
626                <tbl:cell column="permission"><%=PermissionUtil.getShortPermissions(item)%></tbl:cell>
627                <tbl:cell column="categories">
628                  <%
629                  categoryQuery.setParameter("annotationType", itemId, Type.INT);
630                  try
631                  {
632                    String separator = "";
633                    for (AnnotationTypeCategory c : categoryQuery.list(dc))
634                    {
635                      out.write(separator);
636                      if (mode.hasPropertyLink())
637                      {
638                        out.write(Base.getLinkedName(ID, c, false, mode.hasEditLink()));
639                      }
640                      else
641                      {
642                        out.write(HTML.encodeTags(c.getName()));
643                      }
644                      separator = ", ";
645                    }
646                  }
647                  catch (Throwable t)
648                  {
649                    %>
650                    <div class="error"><%=t.getMessage()%></div>
651                    <%
652                  }
653                  %>
654                </tbl:cell>
655                <tbl:cell column="sharedTo">
656                  <%
657                  Iterator<Nameable> sharees = ShareableUtil.getSharedTo(dc, item).iterator();
658                  while(sharees.hasNext())
659                  {
660                    Nameable n = sharees.next();
661                    if (mode.hasPropertyLink())
662                    {
663                      out.write(Base.getLinkedName(ID, n, false, mode.hasEditLink()));
664                    }
665                    else
666                    {
667                      out.write(HTML.encodeTags(n.getName()));
668                    }
669                    out.write(sharees.hasNext() ? ", " : "");
670                  }
671                  %>
672                </tbl:cell>
673                <tbl:xt-cells dc="<%=dc%>" item="<%=item%>">
674                  <tbl:cell column="xt-columns" />
675                </tbl:xt-cells>
676              </tbl:row>
677              <%
678            }
679          }
680          if (numListed == 0)
681          {
682            %>
683            <tbl:panel subclass="bg-filled-50">
684              <div class="messagecontainer note">
685              <%=annotationTypes == null || annotationTypes.getTotalCount() == 0 ? "No annotation types were found" : "No annotation types on this page. Please select another page!" %>
686              </div>
687            </tbl:panel>
688            <%
689          }
690          %>
691        </tbl:rows>
692      </tbl:data>
693    </tbl:table>
694    </div>
695   
696    <base:buttongroup subclass="dialogbuttons">
697      <base:button id="btnOk" title="Ok" visible="<%=mode.hasOkButton()%>" />
698      <base:button id="close" title="Cancel" visible="<%=mode.hasCancelButton()%>" />
699      <base:button id="close" title="Close" visible="<%=mode.hasCloseButton()%>" />
700    </base:buttongroup>
701   
702  </base:body>
703  </base:page>
704  <%
705}
706finally
707{
708  if (annotationTypes != null) annotationTypes.close();
709  if (dc != null) dc.close();
710}
711%>
Note: See TracBrowser for help on using the repository browser.