www/lims/arraydesigns/features/view_feature.jsp

Code
Comments
Other
Rev Date Author Line
1820 24 Jan 06 nicklas 1 <%-- $Id$
1820 24 Jan 06 nicklas 2   ------------------------------------------------------------------
5425 23 Sep 10 nicklas 3   Copyright (C) 2006 Johan Enell, Jari Häkkinen, Nicklas Nordborg
3675 16 Aug 07 jari 4   Copyright (C) 2007 Nicklas Nordborg
1820 24 Jan 06 nicklas 5
2304 22 May 06 jari 6   This file is part of BASE - BioArray Software Environment.
2304 22 May 06 jari 7   Available at http://base.thep.lu.se/
1820 24 Jan 06 nicklas 8
1820 24 Jan 06 nicklas 9   BASE is free software; you can redistribute it and/or
1820 24 Jan 06 nicklas 10   modify it under the terms of the GNU General Public License
4476 05 Sep 08 jari 11   as published by the Free Software Foundation; either version 3
1820 24 Jan 06 nicklas 12   of the License, or (at your option) any later version.
1820 24 Jan 06 nicklas 13
1820 24 Jan 06 nicklas 14   BASE is distributed in the hope that it will be useful,
1820 24 Jan 06 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
1820 24 Jan 06 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1820 24 Jan 06 nicklas 17   GNU General Public License for more details.
1820 24 Jan 06 nicklas 18
1820 24 Jan 06 nicklas 19   You should have received a copy of the GNU General Public License
4511 11 Sep 08 jari 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
1820 24 Jan 06 nicklas 21   ------------------------------------------------------------------
1820 24 Jan 06 nicklas 22
1820 24 Jan 06 nicklas 23   @author Nicklas
1820 24 Jan 06 nicklas 24   @version 2.0
1820 24 Jan 06 nicklas 25 --%>
5426 24 Sep 10 nicklas 26 <%@ page pageEncoding="UTF-8" session="false"
1820 24 Jan 06 nicklas 27   import="net.sf.basedb.core.SessionControl"
1820 24 Jan 06 nicklas 28   import="net.sf.basedb.core.DbControl"
1820 24 Jan 06 nicklas 29   import="net.sf.basedb.core.SystemItems"
1820 24 Jan 06 nicklas 30   import="net.sf.basedb.core.Item"
1820 24 Jan 06 nicklas 31   import="net.sf.basedb.core.ItemContext"
1820 24 Jan 06 nicklas 32   import="net.sf.basedb.core.Permission"
1820 24 Jan 06 nicklas 33   import="net.sf.basedb.core.ExtendedProperties"
1820 24 Jan 06 nicklas 34   import="net.sf.basedb.core.ExtendedProperty"
1820 24 Jan 06 nicklas 35   import="net.sf.basedb.core.ArrayDesign"
1820 24 Jan 06 nicklas 36   import="net.sf.basedb.core.ArrayDesignBlock"
1820 24 Jan 06 nicklas 37   import="net.sf.basedb.core.Feature"
1941 08 Feb 06 nicklas 38   import="net.sf.basedb.core.ReporterType"
1941 08 Feb 06 nicklas 39   import="net.sf.basedb.core.Reporter"
1941 08 Feb 06 nicklas 40   import="net.sf.basedb.core.Plate"
1941 08 Feb 06 nicklas 41   import="net.sf.basedb.core.Well"
1820 24 Jan 06 nicklas 42   import="net.sf.basedb.core.PermissionDeniedException"
1820 24 Jan 06 nicklas 43   import="net.sf.basedb.core.PluginDefinition"
1820 24 Jan 06 nicklas 44   import="net.sf.basedb.core.data.FeatureData"
1941 08 Feb 06 nicklas 45   import="net.sf.basedb.core.data.ReporterData"
1820 24 Jan 06 nicklas 46   import="net.sf.basedb.core.plugin.GuiContext"
1820 24 Jan 06 nicklas 47   import="net.sf.basedb.core.plugin.Plugin"
1820 24 Jan 06 nicklas 48   import="net.sf.basedb.clients.web.Base"
1820 24 Jan 06 nicklas 49   import="net.sf.basedb.clients.web.util.HTML"
2753 20 Oct 06 nicklas 50   import="net.sf.basedb.util.Values"
2942 22 Nov 06 nicklas 51   import="net.sf.basedb.util.formatter.Formatter"
4860 27 Mar 09 martin 52   import="net.sf.basedb.util.formatter.WellCoordinateFormatter"
2942 22 Nov 06 nicklas 53   import="net.sf.basedb.clients.web.formatter.FormatterFactory"
1820 24 Jan 06 nicklas 54   import="java.util.Date"
1820 24 Jan 06 nicklas 55   import="java.util.Map"
1820 24 Jan 06 nicklas 56   import="java.util.Set"
2747 19 Oct 06 enell 57   import="java.util.List"
1820 24 Jan 06 nicklas 58 %>
1820 24 Jan 06 nicklas 59 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
1820 24 Jan 06 nicklas 60 <%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
1820 24 Jan 06 nicklas 61 <%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
1820 24 Jan 06 nicklas 62 <%!
1820 24 Jan 06 nicklas 63   private static final Item itemType = Item.FEATURE;
1820 24 Jan 06 nicklas 64   private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.ITEM);
1820 24 Jan 06 nicklas 65 %>
1820 24 Jan 06 nicklas 66 <%
1820 24 Jan 06 nicklas 67 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
1820 24 Jan 06 nicklas 68 final String ID = sc.getId();
1820 24 Jan 06 nicklas 69 final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
1820 24 Jan 06 nicklas 70 final int itemId = cc.getId();
1820 24 Jan 06 nicklas 71 final int arrayDesignId = Values.getInt(request.getParameter("arraydesign_id"));
1820 24 Jan 06 nicklas 72 final float scale = Base.getScale(sc);
7954 12 May 21 nicklas 73 final DbControl dc = sc.newDbControl(":View "+itemType);
1820 24 Jan 06 nicklas 74 try
1820 24 Jan 06 nicklas 75 {
7014 12 Nov 15 nicklas 76   final boolean readReporter = !sc.hasPermission(Permission.DENIED, Item.REPORTER);
4698 10 Dec 08 nicklas 77   Formatter<Date> dateTimeFormatter = FormatterFactory.getDateTimeFormatter(sc);
4698 10 Dec 08 nicklas 78   Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
4860 27 Mar 09 martin 79   WellCoordinateFormatter rowFormatter = new WellCoordinateFormatter(true);
4860 27 Mar 09 martin 80   WellCoordinateFormatter columnFormatter = new WellCoordinateFormatter(false);
1820 24 Jan 06 nicklas 81   Map<Plugin.MainType, Integer> pluginCount = PluginDefinition.countPlugins(dc, guiContext);
1820 24 Jan 06 nicklas 82
1820 24 Jan 06 nicklas 83   final ArrayDesign design = ArrayDesign.getById(dc, arrayDesignId);
5319 20 Apr 10 nicklas 84   FeatureData feature = design.getFeatureById(itemId, true);
7014 12 Nov 15 nicklas 85   ReporterData reporter = readReporter ? feature.getReporter() : null;
5917 19 Dec 11 nicklas 86
1820 24 Jan 06 nicklas 87   ArrayDesignBlock block = Feature.getArrayDesignBlock(dc, feature);
1941 08 Feb 06 nicklas 88   
5917 19 Dec 11 nicklas 89   Well well = null;
5917 19 Dec 11 nicklas 90   boolean readWell = true;
5917 19 Dec 11 nicklas 91   try
5917 19 Dec 11 nicklas 92   {
5917 19 Dec 11 nicklas 93     well = Feature.getWell(dc, feature);
5917 19 Dec 11 nicklas 94   }
5917 19 Dec 11 nicklas 95   catch (PermissionDeniedException ex)
5917 19 Dec 11 nicklas 96   {
5917 19 Dec 11 nicklas 97     readWell = false;
5917 19 Dec 11 nicklas 98   }
5917 19 Dec 11 nicklas 99
1941 08 Feb 06 nicklas 100   String title = "Feature of "+HTML.encodeTags(design.getName()) + " at position " + feature.getPosition();
1820 24 Jan 06 nicklas 101   %>
6307 15 Aug 13 nicklas 102   <base:page title="<%=title%>" type="popup" id="view-page">
6307 15 Aug 13 nicklas 103   <base:head scripts="tabcontrol-2.js,~features.js" styles="tabcontrol.css">
1820 24 Jan 06 nicklas 104   </base:head>
6520 18 Aug 14 nicklas 105   <base:body data-read-only="1">
5917 19 Dec 11 nicklas 106     <h1><%=title%> <base:help helpid="feature.view.properties" /></h1>
5917 19 Dec 11 nicklas 107
5917 19 Dec 11 nicklas 108     <t:tabcontrol id="feature" 
5917 19 Dec 11 nicklas 109       subclass="content dialogtabcontrol"
5917 19 Dec 11 nicklas 110       position="bottom">
5917 19 Dec 11 nicklas 111     <t:tab id="feat" title="Feature">
5917 19 Dec 11 nicklas 112     
5917 19 Dec 11 nicklas 113       <table class="fullform outlined">
5924 13 Jan 12 nicklas 114       <tbody class="sectionheader">
5917 19 Dec 11 nicklas 115         <tr>
5917 19 Dec 11 nicklas 116           <th colspan="6">Array design</th>
5917 19 Dec 11 nicklas 117         </tr>
5917 19 Dec 11 nicklas 118       </tbody>
5917 19 Dec 11 nicklas 119       <tbody>
1820 24 Jan 06 nicklas 120       <tr>
5917 19 Dec 11 nicklas 121         <th>Name</th>
5917 19 Dec 11 nicklas 122         <td colspan="5"><%=HTML.encodeTags(design.getName())%></td>
1820 24 Jan 06 nicklas 123       </tr>
1820 24 Jan 06 nicklas 124       <tr>
5917 19 Dec 11 nicklas 125         <th>Platform / Variant</th>
6146 21 Sep 12 nicklas 126         <td colspan="5"><base:propertyvalue item="<%=design%>" property="platform" enablePropertyLink="false"/> / <base:propertyvalue item="<%=design%>" property="variant" enablePropertyLink="false"/></td>
1820 24 Jan 06 nicklas 127       </tr>
4093 18 Jan 08 enell 128       <tr>
5917 19 Dec 11 nicklas 129         <th>Feature identification method</th>
5917 19 Dec 11 nicklas 130         <td colspan="5"><%=design.getFeatureIdentificationMethod()%></td>
4093 18 Jan 08 enell 131       </tr>
5917 19 Dec 11 nicklas 132       </tbody>
1820 24 Jan 06 nicklas 133       
5924 13 Jan 12 nicklas 134       <tbody class="sectionheader">
5917 19 Dec 11 nicklas 135         <tr>
5917 19 Dec 11 nicklas 136           <th colspan="6">Feature / block</th>
5917 19 Dec 11 nicklas 137         </tr>
5917 19 Dec 11 nicklas 138       </tbody>
5917 19 Dec 11 nicklas 139       
5917 19 Dec 11 nicklas 140       <tbody>
1820 24 Jan 06 nicklas 141       <tr>
6146 21 Sep 12 nicklas 142         <th>Feature ID</th>
5917 19 Dec 11 nicklas 143         <td><%=HTML.encodeTags(feature.getExternalId())%></td>
5917 19 Dec 11 nicklas 144         <th class="leftborder">Reporter</th>
5917 19 Dec 11 nicklas 145         <td><%=reporter == null ? "<i>- none -</i>" : HTML.encodeTags(reporter.getName())%></td>
5917 19 Dec 11 nicklas 146         <th class="leftborder">Diameter</th>
5917 19 Dec 11 nicklas 147         <td><%=block.getFeatureDiameter()%></td>
4093 18 Jan 08 enell 148       </tr>
4093 18 Jan 08 enell 149       <tr>
5917 19 Dec 11 nicklas 150         <th>Position</th>
1820 24 Jan 06 nicklas 151         <td><%=feature.getPosition()%></td>
5917 19 Dec 11 nicklas 152         <th class="leftborder">Meta grid X</th>
1820 24 Jan 06 nicklas 153         <td><%=block.getMetaGridX()%></td>
5917 19 Dec 11 nicklas 154         <th class="leftborder">Meta grid Y</th>
1820 24 Jan 06 nicklas 155         <td><%=block.getMetaGridY()%></td>
1820 24 Jan 06 nicklas 156       </tr>
1820 24 Jan 06 nicklas 157       <tr>
5917 19 Dec 11 nicklas 158         <th>Block number</th>
5917 19 Dec 11 nicklas 159         <td><%=block.getBlockNumber()%></td>
5917 19 Dec 11 nicklas 160         <th class="leftborder">Block size X</th>
1820 24 Jan 06 nicklas 161         <td><%=block.getBlockSizeX()%></td>
5917 19 Dec 11 nicklas 162         <th class="leftborder">Block size Y</th>
1820 24 Jan 06 nicklas 163         <td><%=block.getBlockSizeY()%></td>
1820 24 Jan 06 nicklas 164       </tr>
1820 24 Jan 06 nicklas 165       <tr>
5917 19 Dec 11 nicklas 166         <th>Row</th>
5917 19 Dec 11 nicklas 167         <td><%=feature.getRow()%></td>
5917 19 Dec 11 nicklas 168         <th class="leftborder">Origin X</th>
1820 24 Jan 06 nicklas 169         <td><%=block.getOriginX()%></td>
5917 19 Dec 11 nicklas 170         <th class="leftborder">Origin Y</th>
1820 24 Jan 06 nicklas 171         <td><%=block.getOriginY()%></td>
1820 24 Jan 06 nicklas 172       </tr>
1820 24 Jan 06 nicklas 173       <tr>
5917 19 Dec 11 nicklas 174         <th>Column</th>
5917 19 Dec 11 nicklas 175         <td><%=feature.getColumn()%></td>
5917 19 Dec 11 nicklas 176         <th class="leftborder">Spacing X</th>
1820 24 Jan 06 nicklas 177         <td><%=block.getSpacingX()%></td>
5917 19 Dec 11 nicklas 178         <th class="leftborder">Spacing Y</th>
1820 24 Jan 06 nicklas 179         <td><%=block.getSpacingY()%></td>
1820 24 Jan 06 nicklas 180       </tr>
5917 19 Dec 11 nicklas 181       </tbody>
1820 24 Jan 06 nicklas 182       
5924 13 Jan 12 nicklas 183       <tbody class="sectionheader">
1941 08 Feb 06 nicklas 184         <tr>
5917 19 Dec 11 nicklas 185           <th colspan="6">Plage / well</th>
1941 08 Feb 06 nicklas 186         </tr>
5917 19 Dec 11 nicklas 187       </tbody>
5917 19 Dec 11 nicklas 188       
5917 19 Dec 11 nicklas 189       <tbody>
1941 08 Feb 06 nicklas 190         <%
5917 19 Dec 11 nicklas 191         if (!readWell)
1941 08 Feb 06 nicklas 192         {
5917 19 Dec 11 nicklas 193           %>
5917 19 Dec 11 nicklas 194           <tr>
5917 19 Dec 11 nicklas 195             <th>Plate</th>
5917 19 Dec 11 nicklas 196             <td colspan="5"><i>- denied -</i></td>
5917 19 Dec 11 nicklas 197           </tr>
5917 19 Dec 11 nicklas 198           <%
1941 08 Feb 06 nicklas 199         }
5917 19 Dec 11 nicklas 200         else if (well == null)
1941 08 Feb 06 nicklas 201         {
5917 19 Dec 11 nicklas 202           %>
1941 08 Feb 06 nicklas 203           <tr>
5917 19 Dec 11 nicklas 204             <th>Plate</th>
5917 19 Dec 11 nicklas 205             <td colspan="5"><i>- none -</i></td>
1941 08 Feb 06 nicklas 206           </tr>
5917 19 Dec 11 nicklas 207           <%
5917 19 Dec 11 nicklas 208         }
5917 19 Dec 11 nicklas 209         else
5917 19 Dec 11 nicklas 210         {
5917 19 Dec 11 nicklas 211           Plate plate = well.getPlate();
5917 19 Dec 11 nicklas 212           %>
1941 08 Feb 06 nicklas 213           <tr>
5917 19 Dec 11 nicklas 214             <th>Plate</th>
5917 19 Dec 11 nicklas 215             <td colspan="5"><%=HTML.encodeTags(plate.getName())%></td>
1941 08 Feb 06 nicklas 216           </tr>
1941 08 Feb 06 nicklas 217           <tr>
5917 19 Dec 11 nicklas 218             <th>Well</th>
5917 19 Dec 11 nicklas 219             <td colspan="5"><%=rowFormatter.format(well.getRow())%><%=columnFormatter.format(well.getColumn())%></td>
1941 08 Feb 06 nicklas 220           </tr>
5917 19 Dec 11 nicklas 221           <%
5917 19 Dec 11 nicklas 222         }
5917 19 Dec 11 nicklas 223         %>
5917 19 Dec 11 nicklas 224         <tr class="dynamic">
5917 19 Dec 11 nicklas 225           <th></th>
5917 19 Dec 11 nicklas 226           <td colspan="5"></td>
5917 19 Dec 11 nicklas 227         </tr>
5917 19 Dec 11 nicklas 228       </tbody>
5917 19 Dec 11 nicklas 229       </table>
5917 19 Dec 11 nicklas 230     </t:tab>
7014 12 Nov 15 nicklas 231     <t:tab id="reporter" title="Reporter" >
7014 12 Nov 15 nicklas 232       <%
7014 12 Nov 15 nicklas 233       if (reporter == null)
5917 19 Dec 11 nicklas 234       {
7014 12 Nov 15 nicklas 235         %>
7014 12 Nov 15 nicklas 236         <table class="fullcc bg-filled-50"><tr><td>
7014 12 Nov 15 nicklas 237         <b><%=readReporter ? "No reporter" : "Denied" %></b>
7014 12 Nov 15 nicklas 238         </td></tr></table>
7014 12 Nov 15 nicklas 239         <%
5917 19 Dec 11 nicklas 240       }
7014 12 Nov 15 nicklas 241       else
5917 19 Dec 11 nicklas 242       {
7014 12 Nov 15 nicklas 243         boolean readCurrentReporterType = true;
7014 12 Nov 15 nicklas 244         ReporterType currentReporterType = null;
7014 12 Nov 15 nicklas 245         try
7014 12 Nov 15 nicklas 246         {
7014 12 Nov 15 nicklas 247           currentReporterType = Reporter.getReporterType(dc, reporter);
7014 12 Nov 15 nicklas 248         }
7014 12 Nov 15 nicklas 249         catch (PermissionDeniedException ex)
7014 12 Nov 15 nicklas 250         {
7014 12 Nov 15 nicklas 251           readCurrentReporterType = false;
7014 12 Nov 15 nicklas 252         }
7014 12 Nov 15 nicklas 253         %>
5917 19 Dec 11 nicklas 254         <table class="fullform outlined">
5924 13 Jan 12 nicklas 255         <tbody class="sectionheader">
1941 08 Feb 06 nicklas 256           <tr>
5917 19 Dec 11 nicklas 257             <th colspan="4">Common reporter properties</th>
1941 08 Feb 06 nicklas 258           </tr>
5917 19 Dec 11 nicklas 259         </tbody>
5917 19 Dec 11 nicklas 260         <tbody>
5917 19 Dec 11 nicklas 261         
5917 19 Dec 11 nicklas 262         <tr>
5917 19 Dec 11 nicklas 263           <th>Name</th>
5917 19 Dec 11 nicklas 264           <td><%=HTML.encodeTags(reporter.getName())%></td>
5917 19 Dec 11 nicklas 265           <th class="leftborder">External ID</th>
5917 19 Dec 11 nicklas 266           <td><%=HTML.encodeTags(reporter.getExternalId())%></td>
5917 19 Dec 11 nicklas 267         </tr>
5917 19 Dec 11 nicklas 268         <tr>
6146 21 Sep 12 nicklas 269           <th>Gene symbol</th>
5917 19 Dec 11 nicklas 270           <td><%=HTML.encodeTags(reporter.getSymbol())%></td>
5917 19 Dec 11 nicklas 271           <th class="leftborder">Type</th>
5917 19 Dec 11 nicklas 272           <td><%=Base.getEncodedName(currentReporterType, !readCurrentReporterType)%></td>
5917 19 Dec 11 nicklas 273         </tr>
5917 19 Dec 11 nicklas 274         <tr>
5917 19 Dec 11 nicklas 275           <th>Last update</th>
5917 19 Dec 11 nicklas 276           <td><%=dateFormatter.format(reporter.getLastUpdate())%></td>
5917 19 Dec 11 nicklas 277           <th class="leftborder">from/by</th>
5917 19 Dec 11 nicklas 278           <td><%=reporter.getLastSource() %></td>
5917 19 Dec 11 nicklas 279         </tr>
5917 19 Dec 11 nicklas 280         <tr>
5917 19 Dec 11 nicklas 281           <th>Description</th>
5917 19 Dec 11 nicklas 282           <td colspan="3"><%=HTML.niceFormat(reporter.getDescription())%></td>
5917 19 Dec 11 nicklas 283         </tr>
5917 19 Dec 11 nicklas 284         </tbody>
5917 19 Dec 11 nicklas 285         
5924 13 Jan 12 nicklas 286         <tbody class="sectionheader">
1941 08 Feb 06 nicklas 287           <tr>
5917 19 Dec 11 nicklas 288             <th colspan="4">Extended reporter properties</th>
4698 10 Dec 08 nicklas 289           </tr>
5917 19 Dec 11 nicklas 290         </tbody>
5917 19 Dec 11 nicklas 291         <tbody>
2747 19 Oct 06 enell 292           <%
5917 19 Dec 11 nicklas 293             List<ExtendedProperty> reporterProperties = ExtendedProperties.getProperties("ReporterData");
5917 19 Dec 11 nicklas 294             if (reporterProperties != null)
1941 08 Feb 06 nicklas 295             {
5917 19 Dec 11 nicklas 296               boolean needsTr = true;
5917 19 Dec 11 nicklas 297               for (ExtendedProperty ep : reporterProperties)
5917 19 Dec 11 nicklas 298               {
5917 19 Dec 11 nicklas 299                 String name = ep.getName();
7605 26 Feb 19 nicklas 300                 Formatter<Object> f = FormatterFactory.getExtendedPropertyFormatter(sc, ep);
5917 19 Dec 11 nicklas 301                 String value = f.format(reporter.getExtended(name));
5917 19 Dec 11 nicklas 302                 %>
6146 21 Sep 12 nicklas 303                   <%=needsTr ? "<tr><th>" : "<th class=\"leftborder\">" %><%=HTML.encodeTags(ep.getTitle())%></th>
5917 19 Dec 11 nicklas 304                   <td><%=value%></td>
5917 19 Dec 11 nicklas 305                   <%=needsTr ? "" : "</tr>"%>
5917 19 Dec 11 nicklas 306                 <%
5917 19 Dec 11 nicklas 307                 needsTr = !needsTr;
5917 19 Dec 11 nicklas 308               }
1941 08 Feb 06 nicklas 309               %>
5917 19 Dec 11 nicklas 310               <%=needsTr ? "" : "<th class=\"leftborder\"></th><td></td></tr>"%>
1941 08 Feb 06 nicklas 311               <%
1941 08 Feb 06 nicklas 312             }
1941 08 Feb 06 nicklas 313             %>
5917 19 Dec 11 nicklas 314           <tr class="dynamic">
5917 19 Dec 11 nicklas 315             <th></th>
5917 19 Dec 11 nicklas 316             <td></td>
5917 19 Dec 11 nicklas 317             <th class="leftborder"></th>
5917 19 Dec 11 nicklas 318             <td></td>
5917 19 Dec 11 nicklas 319           </tr>
5917 19 Dec 11 nicklas 320         </tbody>
1941 08 Feb 06 nicklas 321         </table>
7014 12 Nov 15 nicklas 322         <%
7014 12 Nov 15 nicklas 323       }
7014 12 Nov 15 nicklas 324       %>
7014 12 Nov 15 nicklas 325     </t:tab>
5917 19 Dec 11 nicklas 326     </t:tabcontrol>
1820 24 Jan 06 nicklas 327
5917 19 Dec 11 nicklas 328     <base:buttongroup subclass="dialogbuttons">
6307 15 Aug 13 nicklas 329       <base:button id="close" title="Close" />
5917 19 Dec 11 nicklas 330     </base:buttongroup>
1820 24 Jan 06 nicklas 331     
1820 24 Jan 06 nicklas 332   </base:body>
1820 24 Jan 06 nicklas 333   </base:page>
1820 24 Jan 06 nicklas 334   <%
1820 24 Jan 06 nicklas 335 }
1820 24 Jan 06 nicklas 336 finally
1820 24 Jan 06 nicklas 337 {
1820 24 Jan 06 nicklas 338   if (dc != null) dc.close();
1820 24 Jan 06 nicklas 339 }
1820 24 Jan 06 nicklas 340
1820 24 Jan 06 nicklas 341 %>