www/admin/protocols/edit_protocol.jsp

Code
Comments
Other
Rev Date Author Line
706 01 Jun 05 nicklas 1 <%-- $Id$
706 01 Jun 05 nicklas 2   ------------------------------------------------------------------
3675 16 Aug 07 jari 3   Copyright (C) 2005 Nicklas Nordborg
5425 23 Sep 10 nicklas 4   Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
706 01 Jun 05 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/
706 01 Jun 05 nicklas 8
706 01 Jun 05 nicklas 9   BASE is free software; you can redistribute it and/or
706 01 Jun 05 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
706 01 Jun 05 nicklas 12   of the License, or (at your option) any later version.
706 01 Jun 05 nicklas 13
706 01 Jun 05 nicklas 14   BASE is distributed in the hope that it will be useful,
706 01 Jun 05 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
706 01 Jun 05 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
706 01 Jun 05 nicklas 17   GNU General Public License for more details.
706 01 Jun 05 nicklas 18
706 01 Jun 05 nicklas 19   You should have received a copy of the GNU General Public License
4510 11 Sep 08 jari 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
706 01 Jun 05 nicklas 21   ------------------------------------------------------------------
706 01 Jun 05 nicklas 22
706 01 Jun 05 nicklas 23
706 01 Jun 05 nicklas 24   @author Nicklas
706 01 Jun 05 nicklas 25   @version 2.0
706 01 Jun 05 nicklas 26 --%>
5426 24 Sep 10 nicklas 27 <%@ page pageEncoding="UTF-8" session="false"
706 01 Jun 05 nicklas 28   import="net.sf.basedb.core.SessionControl"
706 01 Jun 05 nicklas 29   import="net.sf.basedb.core.DbControl"
706 01 Jun 05 nicklas 30   import="net.sf.basedb.core.Item"
1777 17 Jan 06 nicklas 31   import="net.sf.basedb.core.ItemContext"
706 01 Jun 05 nicklas 32   import="net.sf.basedb.core.Permission"
706 01 Jun 05 nicklas 33   import="net.sf.basedb.core.Protocol"
5630 13 May 11 nicklas 34   import="net.sf.basedb.core.ItemSubtype"
2875 08 Nov 06 nicklas 35   import="net.sf.basedb.core.AnnotationType"
708 01 Jun 05 nicklas 36   import="net.sf.basedb.core.File"
1803 23 Jan 06 nicklas 37   import="net.sf.basedb.core.SystemItems"
1418 07 Oct 05 nicklas 38   import="net.sf.basedb.core.ItemQuery"
1418 07 Oct 05 nicklas 39   import="net.sf.basedb.core.ItemResultList"
2875 08 Nov 06 nicklas 40   import="net.sf.basedb.core.Include"
1777 17 Jan 06 nicklas 41   import="net.sf.basedb.core.PermissionDeniedException"
706 01 Jun 05 nicklas 42   import="net.sf.basedb.core.query.Orders"
1418 07 Oct 05 nicklas 43   import="net.sf.basedb.core.query.Hql"
706 01 Jun 05 nicklas 44   import="net.sf.basedb.clients.web.Base"
706 01 Jun 05 nicklas 45   import="net.sf.basedb.clients.web.util.HTML"
2753 20 Oct 06 nicklas 46   import="net.sf.basedb.util.Values"
6305 09 Aug 13 nicklas 47   import="net.sf.basedb.util.json.JsonUtil"
6305 09 Aug 13 nicklas 48   import="net.sf.basedb.util.json.NameableConverter"
5506 19 Nov 10 nicklas 49   import="net.sf.basedb.core.plugin.GuiContext"
5506 19 Nov 10 nicklas 50   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
5506 19 Nov 10 nicklas 51   import="net.sf.basedb.clients.web.extensions.JspContext"
5506 19 Nov 10 nicklas 52   import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
7604 25 Feb 19 nicklas 53   import="net.sf.basedb.clients.web.extensions.tabcontrol.TabAction"
5506 19 Nov 10 nicklas 54   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
2598 28 Aug 06 nicklas 55   import="java.util.List"
6305 09 Aug 13 nicklas 56   import="org.json.simple.JSONObject"
706 01 Jun 05 nicklas 57 %>
706 01 Jun 05 nicklas 58 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
706 01 Jun 05 nicklas 59 <%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
6147 21 Sep 12 nicklas 60 <%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
706 01 Jun 05 nicklas 61 <%
1777 17 Jan 06 nicklas 62 final Item itemType = Item.PROTOCOL;
1777 17 Jan 06 nicklas 63 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
1777 17 Jan 06 nicklas 64 final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
1777 17 Jan 06 nicklas 65 final int itemId = cc.getId();
706 01 Jun 05 nicklas 66 final String ID = sc.getId();
706 01 Jun 05 nicklas 67 final float scale = Base.getScale(sc);
7954 12 May 21 nicklas 68 final DbControl dc = sc.newDbControl(":Edit "+itemType);
706 01 Jun 05 nicklas 69 try
706 01 Jun 05 nicklas 70 {
706 01 Jun 05 nicklas 71   String title = null;
706 01 Jun 05 nicklas 72   Protocol protocol = null;
5643 26 May 11 nicklas 73   boolean readCurrentSubtype = true;
5643 26 May 11 nicklas 74   int currentSubtypeId = 0;
1803 23 Jan 06 nicklas 75   boolean readCurrentFile = true;
1803 23 Jan 06 nicklas 76   File currentFile = null;
2875 08 Nov 06 nicklas 77   ItemQuery<AnnotationType> parameterQuery = null;
1777 17 Jan 06 nicklas 78
2598 28 Aug 06 nicklas 79   // Load recently used items
7605 26 Feb 19 nicklas 80   List<File> recentFiles = cc.getRecent(dc, Item.FILE);
2598 28 Aug 06 nicklas 81
1777 17 Jan 06 nicklas 82   if (itemId == 0)
706 01 Jun 05 nicklas 83   {
706 01 Jun 05 nicklas 84     title = "Create protocol";
2441 28 Jun 06 nicklas 85
5643 26 May 11 nicklas 86     currentSubtypeId = Values.getInt(request.getParameter("subtype_id"));
5643 26 May 11 nicklas 87     if (currentSubtypeId == 0) 
2441 28 Jun 06 nicklas 88     {
5643 26 May 11 nicklas 89       int recentSubtypeId = Values.getInt(cc.getRecent(Item.ITEMSUBTYPE.name(), 0));
5643 26 May 11 nicklas 90       currentSubtypeId = Values.getInt(cc.getPropertyValue("itemSubtype"), recentSubtypeId);
2441 28 Jun 06 nicklas 91     }
1777 17 Jan 06 nicklas 92     cc.removeObject("item");
706 01 Jun 05 nicklas 93   }
706 01 Jun 05 nicklas 94   else
706 01 Jun 05 nicklas 95   {
1777 17 Jan 06 nicklas 96     protocol = Protocol.getById(dc, itemId);
5643 26 May 11 nicklas 97     protocol.checkPermission(Permission.WRITE);
5643 26 May 11 nicklas 98     
2875 08 Nov 06 nicklas 99     parameterQuery = protocol.getParameters();
6305 09 Aug 13 nicklas 100     parameterQuery.include(Include.ALL);
6305 09 Aug 13 nicklas 101     parameterQuery.order(Orders.asc(Hql.property("name")));
1777 17 Jan 06 nicklas 102     cc.setObject("item", protocol);
706 01 Jun 05 nicklas 103     title = "Edit protocol -- " + HTML.encodeTags(protocol.getName());
1777 17 Jan 06 nicklas 104     try
1777 17 Jan 06 nicklas 105     {
5643 26 May 11 nicklas 106       ItemSubtype subtype = protocol.getItemSubtype();
5643 26 May 11 nicklas 107       if (subtype != null) currentSubtypeId = subtype.getId();
1777 17 Jan 06 nicklas 108     }
1777 17 Jan 06 nicklas 109     catch (PermissionDeniedException ex)
1777 17 Jan 06 nicklas 110     {
5643 26 May 11 nicklas 111       readCurrentSubtype = false;
1777 17 Jan 06 nicklas 112     }
1803 23 Jan 06 nicklas 113     try
1803 23 Jan 06 nicklas 114     {
1803 23 Jan 06 nicklas 115       currentFile = protocol.getFile();
1803 23 Jan 06 nicklas 116     }
1803 23 Jan 06 nicklas 117     catch (PermissionDeniedException ex)
1803 23 Jan 06 nicklas 118     {
1803 23 Jan 06 nicklas 119       readCurrentFile = false;
1803 23 Jan 06 nicklas 120     }
706 01 Jun 05 nicklas 121   }
706 01 Jun 05 nicklas 122   
1777 17 Jan 06 nicklas 123   // Query to retrieve protocol types
5643 26 May 11 nicklas 124   final ItemQuery<ItemSubtype> subtypesQuery = Base.getSubtypesQuery(itemType);
5643 26 May 11 nicklas 125   subtypesQuery.include(Include.ALL);
6254 22 Mar 13 nicklas 126
6305 09 Aug 13 nicklas 127   JSONObject jsonParameters = new JSONObject();
6305 09 Aug 13 nicklas 128   jsonParameters.put("itemType", "ANNOTATIONTYPE");
6305 09 Aug 13 nicklas 129   if (parameterQuery != null)
6305 09 Aug 13 nicklas 130   {
7604 25 Feb 19 nicklas 131     jsonParameters.put("items", JsonUtil.toArray(parameterQuery.iterate(dc), new NameableConverter<AnnotationType>()));
6305 09 Aug 13 nicklas 132   }
6305 09 Aug 13 nicklas 133
5506 19 Nov 10 nicklas 134   JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), protocol);
7604 25 Feb 19 nicklas 135   ExtensionsInvoker<TabAction> invoker = EditUtil.useEditExtensions(jspContext);
706 01 Jun 05 nicklas 136   %>
6305 09 Aug 13 nicklas 137   <base:page type="popup" title="<%=title%>" id="edit-page">
6305 09 Aug 13 nicklas 138   <base:head scripts="tabcontrol-2.js,linkitems-2.js,subtypes.js,~protocols.js" styles="tabcontrol.css">
5506 19 Nov 10 nicklas 139     <ext:scripts context="<%=jspContext%>" />
5506 19 Nov 10 nicklas 140     <ext:stylesheets context="<%=jspContext%>" />
706 01 Jun 05 nicklas 141   </base:head>
6305 09 Aug 13 nicklas 142   <base:body>
5921 10 Jan 12 nicklas 143     <h1><%=title%> <base:help tabcontrol="settings" /></h1>
6162 10 Oct 12 nicklas 144     <form action="index.jsp?ID=<%=ID%>" method="post" name="protocol">
1777 17 Jan 06 nicklas 145     <input type="hidden" name="cmd" value="UpdateItem">
1777 17 Jan 06 nicklas 146
6305 09 Aug 13 nicklas 147     <div id="page-data" class="datacontainer"
6305 09 Aug 13 nicklas 148       data-protocol-filetype-id="<%=SystemItems.getId(File.PROTOCOL)%>"
6305 09 Aug 13 nicklas 149     ></div>
6305 09 Aug 13 nicklas 150
5921 10 Jan 12 nicklas 151     <t:tabcontrol id="settings"
5921 10 Jan 12 nicklas 152       subclass="content dialogtabcontrol"
6254 22 Mar 13 nicklas 153       position="bottom"  remember="<%=protocol != null%>" 
5506 19 Nov 10 nicklas 154       extensions="<%=invoker%>">
6305 09 Aug 13 nicklas 155     <t:tab id="info" title="Protocol" helpid="protocol.edit">
5921 10 Jan 12 nicklas 156       <table class="fullform input100 smaller">
706 01 Jun 05 nicklas 157       <tr>
5921 10 Jan 12 nicklas 158         <th>Name</th>
6305 09 Aug 13 nicklas 159         <td><input class="text required auto-init" data-auto-init="<%=protocol == null ? "focus-select" : "focus" %>"
6305 09 Aug 13 nicklas 160           type="text" name="name" 
1777 17 Jan 06 nicklas 161           value="<%=HTML.encodeTags(protocol == null ? Values.getString(cc.getPropertyValue("name"), "New protocol") : protocol.getName())%>" 
5921 10 Jan 12 nicklas 162           maxlength="<%=Protocol.MAX_NAME_LENGTH%>"></td>
5921 10 Jan 12 nicklas 163         <td></td>
706 01 Jun 05 nicklas 164       </tr>
5921 10 Jan 12 nicklas 165       <tr>
5921 10 Jan 12 nicklas 166         <th>Type</th>
5921 10 Jan 12 nicklas 167         <td>
6297 14 Jun 13 nicklas 168           <select name="subtype_id" id="subtype_id"
6058 13 Jun 12 nicklas 169             <%=!readCurrentSubtype ? "disabled readonly class=\"disabled selectionlist\"" : "class=\"selectionlist\""%>
6058 13 Jun 12 nicklas 170             >
706 01 Jun 05 nicklas 171           <%
5643 26 May 11 nicklas 172           if (!readCurrentSubtype)
706 01 Jun 05 nicklas 173           {
706 01 Jun 05 nicklas 174             %>
706 01 Jun 05 nicklas 175             <option value="-1">- denied -
706 01 Jun 05 nicklas 176             <%
706 01 Jun 05 nicklas 177           }
706 01 Jun 05 nicklas 178           else
706 01 Jun 05 nicklas 179           {
5643 26 May 11 nicklas 180             %>
5643 26 May 11 nicklas 181             <option value="0">-none-
5643 26 May 11 nicklas 182             <%
5643 26 May 11 nicklas 183             for (ItemSubtype subtype : subtypesQuery.list(dc))
706 01 Jun 05 nicklas 184             {
5643 26 May 11 nicklas 185               int id = subtype.getId();
5643 26 May 11 nicklas 186               if (id != currentSubtypeId && subtype.isRemoved()) continue;
706 01 Jun 05 nicklas 187               %>
5643 26 May 11 nicklas 188               <option value="<%=id == currentSubtypeId && protocol != null ? -id : id%>" 
5643 26 May 11 nicklas 189                 <%=id == currentSubtypeId ? "selected" : ""%>
5643 26 May 11 nicklas 190                 title="<%=HTML.encodeTags(subtype.getDescription()) %>"
5643 26 May 11 nicklas 191                 ><%=HTML.encodeTags(subtype.getName())%>
706 01 Jun 05 nicklas 192               <%
706 01 Jun 05 nicklas 193             }
706 01 Jun 05 nicklas 194           }
706 01 Jun 05 nicklas 195           %>
706 01 Jun 05 nicklas 196           </select>
706 01 Jun 05 nicklas 197         </td>
5921 10 Jan 12 nicklas 198         <td></td>
706 01 Jun 05 nicklas 199       </tr>
1803 23 Jan 06 nicklas 200       <tr>
5921 10 Jan 12 nicklas 201         <th>External ID</th>
6217 14 Dec 12 nicklas 202         <td><input class="text" type="text" name="external_id" 
5249 17 Feb 10 nicklas 203           value="<%=HTML.encodeTags(protocol == null ? Values.getString(cc.getPropertyValue("externalId"), "") : protocol.getExternalId())%>" 
5921 10 Jan 12 nicklas 204           maxlength="<%=Protocol.MAX_EXTERNAL_ID_LENGTH%>"></td>
5921 10 Jan 12 nicklas 205         <td></td>
5249 17 Feb 10 nicklas 206       </tr>
5249 17 Feb 10 nicklas 207       <tr>
5921 10 Jan 12 nicklas 208         <th>File</th>
1803 23 Jan 06 nicklas 209         <td>
2598 28 Aug 06 nicklas 210           <base:select 
2598 28 Aug 06 nicklas 211             id="file_id"
2598 28 Aug 06 nicklas 212             clazz="selectionlist"
2598 28 Aug 06 nicklas 213             required="false"
2598 28 Aug 06 nicklas 214             current="<%=currentFile%>"
2598 28 Aug 06 nicklas 215             denied="<%=!readCurrentFile%>"
2598 28 Aug 06 nicklas 216             recent="<%=recentFiles%>"
2598 28 Aug 06 nicklas 217             newitem="<%=protocol == null%>"
2598 28 Aug 06 nicklas 218           />
1803 23 Jan 06 nicklas 219         </td>
5921 10 Jan 12 nicklas 220         <td></td>
1803 23 Jan 06 nicklas 221       </tr>
5921 10 Jan 12 nicklas 222       <tr class="dynamic">
5921 10 Jan 12 nicklas 223         <th>Description</th>
5921 10 Jan 12 nicklas 224         <td>
6217 14 Dec 12 nicklas 225           <textarea class="text" rows="6" name="description" id="description"
1777 17 Jan 06 nicklas 226             ><%=HTML.encodeTags(protocol == null ? cc.getPropertyValue("description") : protocol.getDescription())%></textarea>
706 01 Jun 05 nicklas 227         </td>
5921 10 Jan 12 nicklas 228         <td style="width: 20px;">
6215 13 Dec 12 nicklas 229           <base:zoom textarea="description" title="Description" />
5921 10 Jan 12 nicklas 230         </td>
706 01 Jun 05 nicklas 231       </tr>
5964 15 Feb 12 nicklas 232       <%
5964 15 Feb 12 nicklas 233       if (sc.getActiveProjectId() != 0 && protocol == null && sc.getActiveProjectPermissions().contains(Permission.WRITE))
5964 15 Feb 12 nicklas 234       {
5964 15 Feb 12 nicklas 235         %>
5964 15 Feb 12 nicklas 236         <tr>
5964 15 Feb 12 nicklas 237           <th></th>
6058 13 Jun 12 nicklas 238           <td style="white-space: nowrap; overflow: hidden; padding-bottom: 2px;">
5964 15 Feb 12 nicklas 239             <input type="checkbox" id="setAsProjectDefault" name="setAsProjectDefault" value="1" 
6058 13 Jun 12 nicklas 240               checked><label for="setAsProjectDefault">Add as project default</label><br>
6058 13 Jun 12 nicklas 241             <input type="checkbox" id="replaceExistingDefault" name="replaceExistingDefault" value="1"
6058 13 Jun 12 nicklas 242               checked><label for="replaceExistingDefault">Replace existing default</label>
6058 13 Jun 12 nicklas 243               <span id="currentDefault" style="font-style: italic;"></span>
5964 15 Feb 12 nicklas 244           </td>
5964 15 Feb 12 nicklas 245           <td></td>
5964 15 Feb 12 nicklas 246         </tr>
5964 15 Feb 12 nicklas 247         <%
5964 15 Feb 12 nicklas 248       }
5964 15 Feb 12 nicklas 249       %>
706 01 Jun 05 nicklas 250       </table>
706 01 Jun 05 nicklas 251     </t:tab>
2875 08 Nov 06 nicklas 252     
2875 08 Nov 06 nicklas 253     <t:tab id="parameters" title="Parameters" 
6305 09 Aug 13 nicklas 254       helpid="protocol.edit.parameters">
5921 10 Jan 12 nicklas 255       <table class="fullform input100">
5921 10 Jan 12 nicklas 256       <tr class="big">
5921 10 Jan 12 nicklas 257         <th>Annotation types</th>
2875 08 Nov 06 nicklas 258         <td>
5921 10 Jan 12 nicklas 259         <div class="selectionlist">
5921 10 Jan 12 nicklas 260           <table>
5921 10 Jan 12 nicklas 261           <tr>
5921 10 Jan 12 nicklas 262             <td>
6305 09 Aug 13 nicklas 263             <select name="annotationTypes" id="annotationTypes" 
6305 09 Aug 13 nicklas 264               class="auto-init" 
6305 09 Aug 13 nicklas 265               data-auto-init="link-container"
6305 09 Aug 13 nicklas 266               data-initial-items="[<%=HTML.encodeTags(jsonParameters.toJSONString()) %>]"
6305 09 Aug 13 nicklas 267               size="20" multiple>
5921 10 Jan 12 nicklas 268             </select>
5921 10 Jan 12 nicklas 269             </td>
5921 10 Jan 12 nicklas 270             <td style="vertical-align: top;">
5921 10 Jan 12 nicklas 271               <base:buttongroup vertical="true">
5921 10 Jan 12 nicklas 272                 <base:button 
6305 09 Aug 13 nicklas 273                   id="btnAddProtocolParameters"
5921 10 Jan 12 nicklas 274                   subclass="leftaligned"
5921 10 Jan 12 nicklas 275                   style="width: 15em;"
5921 10 Jan 12 nicklas 276                   title="Add annotation types&hellip;" 
5921 10 Jan 12 nicklas 277                   tooltip="Add annotation types"
5921 10 Jan 12 nicklas 278                   />
5921 10 Jan 12 nicklas 279                 <base:button 
6305 09 Aug 13 nicklas 280                   subclass="leftaligned auto-init"
6305 09 Aug 13 nicklas 281                   data-auto-init="remove-link"
6305 09 Aug 13 nicklas 282                   data-list-id="annotationTypes"
5921 10 Jan 12 nicklas 283                   style="width: 15em;"
5921 10 Jan 12 nicklas 284                   title="Remove" 
5921 10 Jan 12 nicklas 285                   tooltip="Remove the selected annotation types"
5921 10 Jan 12 nicklas 286                 />
5921 10 Jan 12 nicklas 287               </base:buttongroup>
5921 10 Jan 12 nicklas 288             </td>
5921 10 Jan 12 nicklas 289           </tr>
2875 08 Nov 06 nicklas 290           </table>
5921 10 Jan 12 nicklas 291         </div>
2875 08 Nov 06 nicklas 292         </td>
5921 10 Jan 12 nicklas 293       </tr>
5921 10 Jan 12 nicklas 294       <tr class="dynamic">
5921 10 Jan 12 nicklas 295         <th></th>
5921 10 Jan 12 nicklas 296         <td></td>
5921 10 Jan 12 nicklas 297       </tr>
5921 10 Jan 12 nicklas 298       </table>
2875 08 Nov 06 nicklas 299     </t:tab>
4938 19 May 09 nicklas 300     
6305 09 Aug 13 nicklas 301     <t:tab id="annotations" title="Annotations" helpid="annotations.edit">
6254 22 Mar 13 nicklas 302       <jsp:include page="../../common/annotations/annotate_frameset.jsp">
6254 22 Mar 13 nicklas 303         <jsp:param name="item_type" value="<%=itemType.name()%>" />
6254 22 Mar 13 nicklas 304         <jsp:param name="item_id" value="<%=itemId%>" />
6254 22 Mar 13 nicklas 305         <jsp:param name="ID" value="<%=ID%>" />
6254 22 Mar 13 nicklas 306       </jsp:include>
6254 22 Mar 13 nicklas 307     </t:tab>
5921 10 Jan 12 nicklas 308     </t:tabcontrol>
5921 10 Jan 12 nicklas 309     </form>
4938 19 May 09 nicklas 310     
5921 10 Jan 12 nicklas 311     <div class="legend">
5946 03 Feb 12 nicklas 312       <base:icon image="required.png" />= required information
5921 10 Jan 12 nicklas 313     </div>
706 01 Jun 05 nicklas 314
5921 10 Jan 12 nicklas 315     <base:buttongroup subclass="dialogbuttons">
6305 09 Aug 13 nicklas 316       <base:button id="btnSave" title="Save" />
6305 09 Aug 13 nicklas 317       <base:button id="close" title="Cancel" />
5921 10 Jan 12 nicklas 318     </base:buttongroup>
706 01 Jun 05 nicklas 319   </base:body>
706 01 Jun 05 nicklas 320   </base:page>
706 01 Jun 05 nicklas 321   <%
706 01 Jun 05 nicklas 322 }
706 01 Jun 05 nicklas 323 finally
706 01 Jun 05 nicklas 324 {
706 01 Jun 05 nicklas 325   if (dc != null) dc.close();
706 01 Jun 05 nicklas 326 }
706 01 Jun 05 nicklas 327 %>