www/lims/arrayslides/create_wizard.jsp

Code
Comments
Other
Rev Date Author Line
2231 10 May 06 martin 1 <%-- $Id$
2231 10 May 06 martin 2   ------------------------------------------------------------------
2231 10 May 06 martin 3   BioArray Software Environment (BASE) - http://base.thep.lu.se/
3675 16 Aug 07 jari 4   Copyright (C) 2006 Johan Enell, Nicklas Nordborg, Martin Svensson
2231 10 May 06 martin 5
2231 10 May 06 martin 6   This file is part of BASE.
2231 10 May 06 martin 7
2231 10 May 06 martin 8   BASE is free software; you can redistribute it and/or
2231 10 May 06 martin 9   modify it under the terms of the GNU General Public License
4476 05 Sep 08 jari 10   as published by the Free Software Foundation; either version 3
2231 10 May 06 martin 11   of the License, or (at your option) any later version.
2231 10 May 06 martin 12
2231 10 May 06 martin 13   BASE is distributed in the hope that it will be useful,
2231 10 May 06 martin 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
2231 10 May 06 martin 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2231 10 May 06 martin 16   GNU General Public License for more details.
2231 10 May 06 martin 17
2231 10 May 06 martin 18   You should have received a copy of the GNU General Public License
4511 11 Sep 08 jari 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
2231 10 May 06 martin 20   ------------------------------------------------------------------
2231 10 May 06 martin 21
2231 10 May 06 martin 22   @author Martin
2231 10 May 06 martin 23   @version 2.0
2231 10 May 06 martin 24 --%>
5426 24 Sep 10 nicklas 25 <%@ page pageEncoding="UTF-8" session="false"
2231 10 May 06 martin 26   import="net.sf.basedb.core.SessionControl"
2231 10 May 06 martin 27   import="net.sf.basedb.core.DbControl"
2231 10 May 06 martin 28   import="net.sf.basedb.core.Item"
2231 10 May 06 martin 29   import="net.sf.basedb.core.ItemContext"
2231 10 May 06 martin 30   import="net.sf.basedb.core.SystemItems"
2231 10 May 06 martin 31   import="net.sf.basedb.core.Permission"
2231 10 May 06 martin 32   import="net.sf.basedb.core.Include"
2231 10 May 06 martin 33   import="net.sf.basedb.core.ArraySlide"
2231 10 May 06 martin 34   import="net.sf.basedb.core.ArrayBatch"  
2231 10 May 06 martin 35   import="net.sf.basedb.core.PermissionDeniedException"
2231 10 May 06 martin 36   import="net.sf.basedb.core.BaseException"
2231 10 May 06 martin 37   import="net.sf.basedb.core.query.Orders"
2231 10 May 06 martin 38   import="net.sf.basedb.core.query.Hql"
2231 10 May 06 martin 39   import="net.sf.basedb.clients.web.Base"
2231 10 May 06 martin 40   import="net.sf.basedb.clients.web.util.HTML"
2753 20 Oct 06 nicklas 41   import="net.sf.basedb.util.Values"
2598 28 Aug 06 nicklas 42   import="java.util.List"
2231 10 May 06 martin 43 %>
2231 10 May 06 martin 44 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
2231 10 May 06 martin 45 <%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
4244 23 Apr 08 nicklas 46 <%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
2231 10 May 06 martin 47 <%
2231 10 May 06 martin 48 final Item itemType = Item.ARRAYSLIDE;
2231 10 May 06 martin 49 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
2231 10 May 06 martin 50 final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
2231 10 May 06 martin 51 final int itemId = cc.getId();
2231 10 May 06 martin 52 final String ID = sc.getId();
2231 10 May 06 martin 53 final String cmd = request.getParameter("cmd");
2231 10 May 06 martin 54 final float scale = Base.getScale(sc);
7954 12 May 21 nicklas 55 final DbControl dc = sc.newDbControl(":Batch create array slide wizard");
2231 10 May 06 martin 56
2231 10 May 06 martin 57 try
2231 10 May 06 martin 58 {  
2231 10 May 06 martin 59   String title = null;
2457 30 Jun 06 nicklas 60   String name = "New slides.";
2231 10 May 06 martin 61   
2231 10 May 06 martin 62   boolean readCurrentArrayBatch = true;
2231 10 May 06 martin 63   ArrayBatch currentArrayBatch = null;
2598 28 Aug 06 nicklas 64   
2598 28 Aug 06 nicklas 65   // Load recently used items
7605 26 Feb 19 nicklas 66   List<ArrayBatch> recentArrayBatches = cc.getRecent(dc, Item.ARRAYBATCH);
2231 10 May 06 martin 67
2231 10 May 06 martin 68   title = "Create array slides";
2231 10 May 06 martin 69   cc.removeObject("item");
2449 29 Jun 06 nicklas 70   int arrayBatchId = Values.getInt(request.getParameter("arraybatch_id"));
2449 29 Jun 06 nicklas 71   if (arrayBatchId != 0)
2231 10 May 06 martin 72   {
2449 29 Jun 06 nicklas 73     currentArrayBatch = ArrayBatch.getById(dc, arrayBatchId);
2449 29 Jun 06 nicklas 74   }
2449 29 Jun 06 nicklas 75   else if (cc.getPropertyFilter("arrayBatch.name") != null)
2449 29 Jun 06 nicklas 76   {
2231 10 May 06 martin 77     currentArrayBatch = Base.getFirstMatching(dc, ArrayBatch.getQuery(), "name", cc.getPropertyFilter("arrayBatch.name"));
2231 10 May 06 martin 78   }
2457 30 Jun 06 nicklas 79   if (currentArrayBatch != null)
2457 30 Jun 06 nicklas 80   {
2457 30 Jun 06 nicklas 81     name = HTML.encodeTags(currentArrayBatch.getName()) + ".";
6312 28 Aug 13 nicklas 82   }    
2231 10 May 06 martin 83   %>
6312 28 Aug 13 nicklas 84   <base:page type="popup" title="<%=title%>" id="<%=HTML.encodeTags(cmd)%>">
6312 28 Aug 13 nicklas 85   <base:head scripts="~wizard.js" />
6312 28 Aug 13 nicklas 86   <base:body>
2231 10 May 06 martin 87     <%
2231 10 May 06 martin 88     //Wizard step1
2231 10 May 06 martin 89     if (cmd.equals("WizardStep1"))
2231 10 May 06 martin 90     {
2231 10 May 06 martin 91     %>        
6312 28 Aug 13 nicklas 92       <h1><%=title%> <base:help helpid="arrayslide.createwizard.1" /></h1>
6162 10 Oct 12 nicklas 93       <form action="create_wizard.jsp?ID=<%=ID%>" method="post" name="WizardStep1">
2231 10 May 06 martin 94       <input type="hidden" name="cmd" value="WizardStep2">
2231 10 May 06 martin 95       
5917 19 Dec 11 nicklas 96       <div class="content bottomborder">
5917 19 Dec 11 nicklas 97         <table class="fullform input100">
2231 10 May 06 martin 98         <tr>
5917 19 Dec 11 nicklas 99           <th>Name</th>
6312 28 Aug 13 nicklas 100           <td><input class="text required auto-init" data-auto-init="focus-select"
6312 28 Aug 13 nicklas 101             type="text" name="name"
2457 30 Jun 06 nicklas 102             value="<%=name%>"
5917 19 Dec 11 nicklas 103             maxlength="<%=ArraySlide.MAX_NAME_LENGTH%>"></td>
5917 19 Dec 11 nicklas 104           <td></td>
2231 10 May 06 martin 105         </tr>
2231 10 May 06 martin 106         <tr>
5917 19 Dec 11 nicklas 107           <th>Array batch</th>
2231 10 May 06 martin 108           <td>
2598 28 Aug 06 nicklas 109             <base:select 
2598 28 Aug 06 nicklas 110               id="arraybatch_id"
2598 28 Aug 06 nicklas 111               clazz="selectionlist required"
2598 28 Aug 06 nicklas 112               required="true"
2598 28 Aug 06 nicklas 113               current="<%=currentArrayBatch%>"
2598 28 Aug 06 nicklas 114               denied="<%=!readCurrentArrayBatch%>"
2598 28 Aug 06 nicklas 115               recent="<%=recentArrayBatches%>"
2598 28 Aug 06 nicklas 116               newitem="true"
2598 28 Aug 06 nicklas 117             />
2231 10 May 06 martin 118           </td>
5917 19 Dec 11 nicklas 119           <td></td>
2231 10 May 06 martin 120         </tr>
2231 10 May 06 martin 121         <tr>
5917 19 Dec 11 nicklas 122           <th>Quantity</th>
6312 28 Aug 13 nicklas 123           <td><input class="text required" type="text" name="quantity" id="quantity" 
6312 28 Aug 13 nicklas 124             value="50" maxlength="3" style="width: 5em;"><i> (1-999)</i></td>
5917 19 Dec 11 nicklas 125           <td></td>
2231 10 May 06 martin 126         </tr>
2231 10 May 06 martin 127         <tr>
5917 19 Dec 11 nicklas 128           <th>Start at</th>
6312 28 Aug 13 nicklas 129           <td><input class="text" type="text" name="start_at" id="start_at" 
6312 28 Aug 13 nicklas 130             value="1" maxlength="10" style="width: 10em;">
5917 19 Dec 11 nicklas 131           </td>
5917 19 Dec 11 nicklas 132           <td></td>
5917 19 Dec 11 nicklas 133         </tr>
5917 19 Dec 11 nicklas 134         <tr>
5917 19 Dec 11 nicklas 135           <th class="subprompt">- pad size</th>
5917 19 Dec 11 nicklas 136           <td>
6312 28 Aug 13 nicklas 137             <input class="text" type="text" name="pad_length" id="pad_length" 
6312 28 Aug 13 nicklas 138             value="" maxlength="1" style="width: 10em;">
5917 19 Dec 11 nicklas 139           </td>
5917 19 Dec 11 nicklas 140           <td>
5917 19 Dec 11 nicklas 141         </tr>
5917 19 Dec 11 nicklas 142         <tr>
5917 19 Dec 11 nicklas 143           <th class="subprompt"></th>
5917 19 Dec 11 nicklas 144           <td>
5917 19 Dec 11 nicklas 145             <div class="messagecontainer help">
2992 01 Dec 06 enell 146             The index number will be padded with zeroes to this length 
5917 19 Dec 11 nicklas 147             (ie, 1 --&gt; Slide.001; 10 --&gt; Slide.010). Leave empty 
5917 19 Dec 11 nicklas 148             for automatic selection. 
5917 19 Dec 11 nicklas 149             </div>
2992 01 Dec 06 enell 150           </td>
5917 19 Dec 11 nicklas 151           <td></td>
2457 30 Jun 06 nicklas 152         </tr>
5917 19 Dec 11 nicklas 153         <tr class="dynamic">
5917 19 Dec 11 nicklas 154           <th>Description</th>
5917 19 Dec 11 nicklas 155           <td>
6217 14 Dec 12 nicklas 156             <textarea class="text" rows="6" name="description" id="description"
2231 10 May 06 martin 157               ><%=HTML.encodeTags(cc.getPropertyValue("description"))%></textarea>
2231 10 May 06 martin 158           </td>
5917 19 Dec 11 nicklas 159           <td style="width: 20px;">
6215 13 Dec 12 nicklas 160             <base:zoom textarea="description" title="Description" />
5917 19 Dec 11 nicklas 161           </td>
2231 10 May 06 martin 162         </tr>
2231 10 May 06 martin 163         </table>
5917 19 Dec 11 nicklas 164         </div>
2231 10 May 06 martin 165       </form>
2231 10 May 06 martin 166     <%
2231 10 May 06 martin 167     }
2231 10 May 06 martin 168     //Wizard step 2
2231 10 May 06 martin 169     else if (cmd.equals("WizardStep2"))
2231 10 May 06 martin 170     {
2457 30 Jun 06 nicklas 171       name = Values.getStringOrNull(request.getParameter("name"));
2231 10 May 06 martin 172       String description = Values.getString(request.getParameter("description"), "");
2449 29 Jun 06 nicklas 173       arrayBatchId = Values.getInt(request.getParameter("arraybatch_id"));
2231 10 May 06 martin 174       int quantity = Values.getInt(request.getParameter("quantity"));
2457 30 Jun 06 nicklas 175       int startAt = Values.getInt(request.getParameter("start_at"), 1);
5917 19 Dec 11 nicklas 176       %>  
6312 28 Aug 13 nicklas 177       <h1><%=title%> <base:help helpid="arrayslide.createwizard.2" /></h1>
6162 10 Oct 12 nicklas 178       <form action="index.jsp?ID=<%=ID%>" method="post" name="WizardStep2">        
2231 10 May 06 martin 179       <input type="hidden" name="cmd" value="CreateItems">
2267 17 May 06 nicklas 180       <input type="hidden" name="description" value="<%=HTML.encodeTags(description)%>">
2267 17 May 06 nicklas 181       <input type="hidden" name="arraybatch_id" value="<%=arrayBatchId%>">
2231 10 May 06 martin 182       <input type="hidden" name="quantity" value="<%=quantity%>">
5136 15 Oct 09 nicklas 183       <input type="hidden" name="start_at" value="<%=startAt%>">
5917 19 Dec 11 nicklas 184       
5917 19 Dec 11 nicklas 185       <div class="content bottomborder">
5917 19 Dec 11 nicklas 186
5917 19 Dec 11 nicklas 187         <table class="fullform input100">
5917 19 Dec 11 nicklas 188           <colgroup>
5917 19 Dec 11 nicklas 189             <col style="max-width: 5em;">
5917 19 Dec 11 nicklas 190             <col span="2" style="width: 47%;">
5917 19 Dec 11 nicklas 191           </colgroup>
5924 13 Jan 12 nicklas 192           <tbody class="sectionheader">
2231 10 May 06 martin 193           <tr>
6684 14 Jan 15 nicklas 194             <th style="border-top-width: 0;">&nbsp;</th>
6684 14 Jan 15 nicklas 195             <th style="border-top-width: 0;">Name: 
6312 28 Aug 13 nicklas 196               <base:icon 
6312 28 Aug 13 nicklas 197                 id="pasteMultipleName"
6312 28 Aug 13 nicklas 198                 data-form-prefix="name"
6312 28 Aug 13 nicklas 199                 image="paste.png" 
6312 28 Aug 13 nicklas 200                 tooltip="Paste multiple values in a single large textarea" 
6312 28 Aug 13 nicklas 201               />
6312 28 Aug 13 nicklas 202               <base:icon 
6312 28 Aug 13 nicklas 203                 id="clearAllNames" 
6312 28 Aug 13 nicklas 204                 data-form-prefix="name"
6312 28 Aug 13 nicklas 205                 image="clear_down.png" 
6312 28 Aug 13 nicklas 206                 tooltip="Clear all values" 
6312 28 Aug 13 nicklas 207               />
5917 19 Dec 11 nicklas 208             </th>
6684 14 Jan 15 nicklas 209             <th style="border-top-width: 0;">Barcode:
6312 28 Aug 13 nicklas 210               <base:icon 
6312 28 Aug 13 nicklas 211                 id="pasteMultipleBarcode"
6312 28 Aug 13 nicklas 212                 data-form-prefix="barcode"
6312 28 Aug 13 nicklas 213                 image="paste.png"
6312 28 Aug 13 nicklas 214                 tooltip="Paste multiple values in a single large textarea" 
6312 28 Aug 13 nicklas 215               />
6312 28 Aug 13 nicklas 216               <base:icon 
6312 28 Aug 13 nicklas 217                 id="clearAllBarcodes" 
6312 28 Aug 13 nicklas 218                 data-form-prefix="barcode"
6312 28 Aug 13 nicklas 219                 image="clear_down.png"
6312 28 Aug 13 nicklas 220                 tooltip="Clear all values" 
6312 28 Aug 13 nicklas 221               />
5917 19 Dec 11 nicklas 222             </th>
2231 10 May 06 martin 223           </tr>
5917 19 Dec 11 nicklas 224           </tbody>
5917 19 Dec 11 nicklas 225           <tbody>
2231 10 May 06 martin 226           <%
2992 01 Dec 06 enell 227           int padLength = Values.getInt(request.getParameter("pad_length"));
2992 01 Dec 06 enell 228           if (padLength == 0)
2992 01 Dec 06 enell 229           {
2992 01 Dec 06 enell 230             int lastIndex = startAt + quantity - 1;
2992 01 Dec 06 enell 231             padLength = (int)Math.log10(lastIndex) + 1;
2992 01 Dec 06 enell 232           }
2457 30 Jun 06 nicklas 233           for (int i = 0; i < quantity; i++)
2231 10 May 06 martin 234           {
2457 30 Jun 06 nicklas 235             int index = startAt + i;
2457 30 Jun 06 nicklas 236             String paddedName = name + net.sf.basedb.util.MD5.leftPad(String.valueOf(index), '0', padLength);
2457 30 Jun 06 nicklas 237             %>
2231 10 May 06 martin 238             <tr>
5917 19 Dec 11 nicklas 239               <th><%=index%></th>
6217 14 Dec 12 nicklas 240               <td><input type="text" class="text required" name="name<%=i%>" 
2457 30 Jun 06 nicklas 241                 value="<%=paddedName%>" size="40" maxlength="<%=ArraySlide.MAX_NAME_LENGTH%>"></td>
6217 14 Dec 12 nicklas 242               <td><input class="text" type="text" name="barcode<%=i%>"  
2231 10 May 06 martin 243                 size="40" maxlength="<%=ArraySlide.MAX_BARCODE_LENGTH%>">
2231 10 May 06 martin 244               </td>              
2231 10 May 06 martin 245             </tr>
2457 30 Jun 06 nicklas 246             <%
2231 10 May 06 martin 247           }
2231 10 May 06 martin 248           %>
5917 19 Dec 11 nicklas 249           <tr class="dynamic">
5917 19 Dec 11 nicklas 250             <th></th>
5917 19 Dec 11 nicklas 251             <td></td>
5917 19 Dec 11 nicklas 252             <td></td>
5917 19 Dec 11 nicklas 253           </tr>
5917 19 Dec 11 nicklas 254           </tbody>
2231 10 May 06 martin 255         </table>
5917 19 Dec 11 nicklas 256         </div>
2231 10 May 06 martin 257       </form>
5917 19 Dec 11 nicklas 258       
2231 10 May 06 martin 259     <%
2231 10 May 06 martin 260     }
2231 10 May 06 martin 261     %>    
5917 19 Dec 11 nicklas 262     <div class="legend" style="height: 2em;">
5946 03 Feb 12 nicklas 263       <base:icon image="required.png" />= required information
5917 19 Dec 11 nicklas 264     </div>
5917 19 Dec 11 nicklas 265     
5917 19 Dec 11 nicklas 266     <base:buttongroup subclass="dialogbuttons">
6312 28 Aug 13 nicklas 267       <base:button id="btnSave" title="Save" visible="<%=cmd.equals("WizardStep2")%>" />
6312 28 Aug 13 nicklas 268       <base:button id="btnNext" title="Next" image="gonext.png" visible="<%=cmd.equals("WizardStep1")%>" />
6312 28 Aug 13 nicklas 269       <base:button id="close" title="Cancel" />
2231 10 May 06 martin 270     </base:buttongroup>
2231 10 May 06 martin 271   </base:body>
2231 10 May 06 martin 272   </base:page>
2231 10 May 06 martin 273 <%
2231 10 May 06 martin 274 }
2231 10 May 06 martin 275 finally
2231 10 May 06 martin 276 {
2231 10 May 06 martin 277   if (dc != null) dc.close();
2231 10 May 06 martin 278 }
2231 10 May 06 martin 279 %>