www/lims/plates/events/edit_event.jsp

Code
Comments
Other
Rev Date Author Line
1862 30 Jan 06 nicklas 1 <%-- $Id$
1862 30 Jan 06 nicklas 2   ------------------------------------------------------------------
5425 23 Sep 10 nicklas 3   Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
3675 16 Aug 07 jari 4   Copyright (C) 2007 Nicklas Nordborg
1862 30 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/
1862 30 Jan 06 nicklas 8
1862 30 Jan 06 nicklas 9   BASE is free software; you can redistribute it and/or
1862 30 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
1862 30 Jan 06 nicklas 12   of the License, or (at your option) any later version.
1862 30 Jan 06 nicklas 13
1862 30 Jan 06 nicklas 14   BASE is distributed in the hope that it will be useful,
1862 30 Jan 06 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
1862 30 Jan 06 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1862 30 Jan 06 nicklas 17   GNU General Public License for more details.
1862 30 Jan 06 nicklas 18
1862 30 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/>.
1862 30 Jan 06 nicklas 21   ------------------------------------------------------------------
1862 30 Jan 06 nicklas 22
1862 30 Jan 06 nicklas 23
1862 30 Jan 06 nicklas 24   @author Nicklas
1862 30 Jan 06 nicklas 25   @version 2.0
1862 30 Jan 06 nicklas 26 --%>
5426 24 Sep 10 nicklas 27 <%@ page pageEncoding="UTF-8" session="false"
1862 30 Jan 06 nicklas 28   import="net.sf.basedb.core.SessionControl"
1862 30 Jan 06 nicklas 29   import="net.sf.basedb.core.DbControl"
1862 30 Jan 06 nicklas 30   import="net.sf.basedb.core.Item"
1862 30 Jan 06 nicklas 31   import="net.sf.basedb.core.ItemContext"
1862 30 Jan 06 nicklas 32   import="net.sf.basedb.core.SystemItems"
1862 30 Jan 06 nicklas 33   import="net.sf.basedb.core.Permission"
2486 03 Aug 06 martin 34   import="net.sf.basedb.core.Hardware"
1862 30 Jan 06 nicklas 35   import="net.sf.basedb.core.Include"
1862 30 Jan 06 nicklas 36   import="net.sf.basedb.core.Plate"
1862 30 Jan 06 nicklas 37   import="net.sf.basedb.core.PlateType"
1862 30 Jan 06 nicklas 38   import="net.sf.basedb.core.PlateEvent"
1862 30 Jan 06 nicklas 39   import="net.sf.basedb.core.PlateEventType"
1862 30 Jan 06 nicklas 40   import="net.sf.basedb.core.Protocol"
5630 13 May 11 nicklas 41   import="net.sf.basedb.core.ItemSubtype"
1862 30 Jan 06 nicklas 42   import="net.sf.basedb.core.ItemQuery"
1862 30 Jan 06 nicklas 43   import="net.sf.basedb.core.ItemResultList"
1862 30 Jan 06 nicklas 44   import="net.sf.basedb.core.PermissionDeniedException"
1862 30 Jan 06 nicklas 45   import="net.sf.basedb.core.BaseException"
1862 30 Jan 06 nicklas 46   import="net.sf.basedb.core.query.Hql"
1862 30 Jan 06 nicklas 47   import="net.sf.basedb.core.query.Restrictions"
1862 30 Jan 06 nicklas 48   import="net.sf.basedb.core.query.Expressions"
1862 30 Jan 06 nicklas 49   import="net.sf.basedb.core.query.Orders"
1862 30 Jan 06 nicklas 50   import="net.sf.basedb.clients.web.Base"
1862 30 Jan 06 nicklas 51   import="net.sf.basedb.clients.web.WebException"
1862 30 Jan 06 nicklas 52   import="net.sf.basedb.clients.web.util.HTML"
2753 20 Oct 06 nicklas 53   import="net.sf.basedb.util.Values"
2942 22 Nov 06 nicklas 54   import="net.sf.basedb.util.formatter.Formatter"
2942 22 Nov 06 nicklas 55   import="net.sf.basedb.clients.web.formatter.FormatterFactory"
2942 22 Nov 06 nicklas 56   import="net.sf.basedb.clients.web.formatter.FormatterSettings"
5498 17 Nov 10 nicklas 57   import="net.sf.basedb.core.plugin.GuiContext"
5498 17 Nov 10 nicklas 58   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
5498 17 Nov 10 nicklas 59   import="net.sf.basedb.clients.web.extensions.JspContext"
5498 17 Nov 10 nicklas 60   import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
7604 25 Feb 19 nicklas 61   import="net.sf.basedb.clients.web.extensions.tabcontrol.TabAction"
5498 17 Nov 10 nicklas 62   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
1862 30 Jan 06 nicklas 63   import="java.util.List"
1862 30 Jan 06 nicklas 64   import="java.util.Set"
1862 30 Jan 06 nicklas 65   import="java.util.HashSet"
1862 30 Jan 06 nicklas 66   import="java.util.Date"
1862 30 Jan 06 nicklas 67 %>
1862 30 Jan 06 nicklas 68 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
1862 30 Jan 06 nicklas 69 <%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
6146 21 Sep 12 nicklas 70 <%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
1862 30 Jan 06 nicklas 71 <%
1862 30 Jan 06 nicklas 72 final Item itemType = Item.PLATEEVENT;
1862 30 Jan 06 nicklas 73 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
1862 30 Jan 06 nicklas 74 final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
1862 30 Jan 06 nicklas 75 final int itemId = cc.getId();
1862 30 Jan 06 nicklas 76 final int plateId = Values.getInt(request.getParameter("plate_id"));
1862 30 Jan 06 nicklas 77 final String ID = sc.getId();
1862 30 Jan 06 nicklas 78 final float scale = Base.getScale(sc);
7954 12 May 21 nicklas 79 final DbControl dc = sc.newDbControl(":Edit "+itemType);
1862 30 Jan 06 nicklas 80 try
1862 30 Jan 06 nicklas 81 {
1862 30 Jan 06 nicklas 82   String title = null;
1862 30 Jan 06 nicklas 83   PlateEvent event = null;
1862 30 Jan 06 nicklas 84   Plate plate = null;
1862 30 Jan 06 nicklas 85   PlateEventType eventType = null;
2942 22 Nov 06 nicklas 86   Date eventDate = null;
1862 30 Jan 06 nicklas 87
1862 30 Jan 06 nicklas 88   Protocol currentProtocol = null;
1862 30 Jan 06 nicklas 89   boolean readCurrentProtocol = true;
5630 13 May 11 nicklas 90   ItemSubtype currentProtocolType = null;
1862 30 Jan 06 nicklas 91   boolean readCurrentProtocolType = true;
2486 03 Aug 06 martin 92   Hardware currentHardware = null;
2486 03 Aug 06 martin 93   boolean readCurrentHardware = true;
1862 30 Jan 06 nicklas 94
2598 28 Aug 06 nicklas 95   // Load recently used items
7605 26 Feb 19 nicklas 96   List<Protocol> recentProtocols = cc.getRecent(dc, Item.PROTOCOL);
7605 26 Feb 19 nicklas 97   List<Hardware> recentHardware = cc.getRecent(dc, Item.HARDWARE);
2598 28 Aug 06 nicklas 98
1862 30 Jan 06 nicklas 99   ItemResultList<PlateEventType> eventTypes = null;
1862 30 Jan 06 nicklas 100   if (itemId == 0)
1862 30 Jan 06 nicklas 101   {
1862 30 Jan 06 nicklas 102     title = "Create event";
1862 30 Jan 06 nicklas 103     cc.removeObject("item");
1862 30 Jan 06 nicklas 104     
1862 30 Jan 06 nicklas 105     plate = Plate.getById(dc, plateId);
1862 30 Jan 06 nicklas 106     ItemQuery<PlateEventType> eventTypesQuery = plate.getPlateType().getEventTypes();
1862 30 Jan 06 nicklas 107     eventTypesQuery.order(Orders.asc(Hql.property("ordinal")));
1862 30 Jan 06 nicklas 108     eventTypesQuery.join(Hql.leftJoin(null, "plateEvents", "event", 
3595 24 Jul 07 nicklas 109       Restrictions.eq(Hql.property("event", "plate.id"), Expressions.integer(plate.getId())), false));
1862 30 Jan 06 nicklas 110     eventTypesQuery.restrict(Restrictions.eq(Hql.alias("event"), null));
1862 30 Jan 06 nicklas 111     eventTypes = eventTypesQuery.list(dc);
1862 30 Jan 06 nicklas 112     if (eventTypes.size() == 0)
1862 30 Jan 06 nicklas 113     {
1862 30 Jan 06 nicklas 114       throw new WebException("popup", "No more event types can be created", 
1862 30 Jan 06 nicklas 115         "One event of each event type has already been created for this plate.");
2486 03 Aug 06 martin 116     }    
1862 30 Jan 06 nicklas 117     
1862 30 Jan 06 nicklas 118     if (cc.getPropertyFilter("protocolType.name") != null)
1862 30 Jan 06 nicklas 119     {
1862 30 Jan 06 nicklas 120       currentProtocol = Base.getFirstMatching(dc, Protocol.getQuery(), "name", cc.getPropertyFilter("protocol.name"));
1862 30 Jan 06 nicklas 121     }
2942 22 Nov 06 nicklas 122     
7605 26 Feb 19 nicklas 123     eventDate = cc.getPropertyObject("eventDate");
1862 30 Jan 06 nicklas 124   }
1862 30 Jan 06 nicklas 125   else
1862 30 Jan 06 nicklas 126   {
1862 30 Jan 06 nicklas 127     event = PlateEvent.getById(dc, itemId);
6312 28 Aug 13 nicklas 128     event.checkPermission(Permission.WRITE);
1862 30 Jan 06 nicklas 129     eventType = event.getPlateEventType();
2942 22 Nov 06 nicklas 130     eventDate = event.getEventDate();
1862 30 Jan 06 nicklas 131     cc.setObject("item", event);
1862 30 Jan 06 nicklas 132     title = "Edit event  -- " + HTML.encodeTags(eventType.getName());
1862 30 Jan 06 nicklas 133     try
1862 30 Jan 06 nicklas 134     {
1862 30 Jan 06 nicklas 135       currentProtocol = event.getProtocol();
1862 30 Jan 06 nicklas 136     }
1862 30 Jan 06 nicklas 137     catch (PermissionDeniedException ex)
1862 30 Jan 06 nicklas 138     {
1862 30 Jan 06 nicklas 139       readCurrentProtocol = false;
1862 30 Jan 06 nicklas 140     }
1862 30 Jan 06 nicklas 141     try
1862 30 Jan 06 nicklas 142     {
1862 30 Jan 06 nicklas 143       currentProtocolType = eventType.getProtocolType();
1862 30 Jan 06 nicklas 144     }
1862 30 Jan 06 nicklas 145     catch (PermissionDeniedException ex)
1862 30 Jan 06 nicklas 146     {
1862 30 Jan 06 nicklas 147       readCurrentProtocolType = false;
1862 30 Jan 06 nicklas 148     }
2486 03 Aug 06 martin 149     try
2486 03 Aug 06 martin 150     {
2486 03 Aug 06 martin 151       currentHardware = event.getHardware();
2486 03 Aug 06 martin 152     }
2486 03 Aug 06 martin 153     catch(PermissionDeniedException ex)
2486 03 Aug 06 martin 154     {
2486 03 Aug 06 martin 155       readCurrentHardware = false;
2486 03 Aug 06 martin 156     }
1862 30 Jan 06 nicklas 157   }
6312 28 Aug 13 nicklas 158     
2942 22 Nov 06 nicklas 159   Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
2942 22 Nov 06 nicklas 160   String dateFormat = FormatterSettings.getDateFormat(sc);
2942 22 Nov 06 nicklas 161   String jsDateFormat = HTML.javaScriptEncode(dateFormat);
2942 22 Nov 06 nicklas 162   String htmlDateFormat = HTML.encodeTags(dateFormat);
5498 17 Nov 10 nicklas 163   JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), event);
7604 25 Feb 19 nicklas 164   ExtensionsInvoker<TabAction> invoker = EditUtil.useEditExtensions(jspContext);
1862 30 Jan 06 nicklas 165   %>
6312 28 Aug 13 nicklas 166   <base:page type="popup" title="<%=title%>" id="edit-page">
6312 28 Aug 13 nicklas 167   <base:head scripts="tabcontrol-2.js,~events.js" styles="tabcontrol.css">
5498 17 Nov 10 nicklas 168     <ext:scripts context="<%=jspContext%>" />
5498 17 Nov 10 nicklas 169     <ext:stylesheets context="<%=jspContext%>" />
1862 30 Jan 06 nicklas 170   </base:head>
6312 28 Aug 13 nicklas 171   <base:body>
5920 10 Jan 12 nicklas 172     <h1><%=title%> <base:help tabcontrol="settings" /></h1>
6312 28 Aug 13 nicklas 173     <div id="page-data" class="datacontainer"
6312 28 Aug 13 nicklas 174       data-protocol-type="<%=currentProtocolType == null ? 0 : currentProtocolType.getId() %>"
6312 28 Aug 13 nicklas 175     ></div>
6312 28 Aug 13 nicklas 176     
6162 10 Oct 12 nicklas 177     <form action="index.jsp?ID=<%=ID%>" method="post" name="event">
1862 30 Jan 06 nicklas 178     <input type="hidden" name="cmd" value="UpdateItem">
1862 30 Jan 06 nicklas 179     <input type="hidden" name="plate_id" value="<%=plateId%>">
1862 30 Jan 06 nicklas 180
5920 10 Jan 12 nicklas 181     <t:tabcontrol id="settings" 
5920 10 Jan 12 nicklas 182       subclass="content dialogtabcontrol"
5498 17 Nov 10 nicklas 183       position="bottom" remember="<%=event != null%>"
5498 17 Nov 10 nicklas 184       extensions="<%=invoker%>">
6312 28 Aug 13 nicklas 185     <t:tab id="info" title="Event" helpid="plateevent.edit">
5920 10 Jan 12 nicklas 186       <table class="fullform input100 smaller">
1862 30 Jan 06 nicklas 187       <tr>
5920 10 Jan 12 nicklas 188         <th>Event type</th>
1862 30 Jan 06 nicklas 189         <td>
1862 30 Jan 06 nicklas 190           <%
1862 30 Jan 06 nicklas 191           if (event == null)
1862 30 Jan 06 nicklas 192           {
1862 30 Jan 06 nicklas 193             %>
6312 28 Aug 13 nicklas 194             <select name="plateeventtype_id" class="required">
1862 30 Jan 06 nicklas 195             <%
1862 30 Jan 06 nicklas 196             for (PlateEventType pet : eventTypes)
1862 30 Jan 06 nicklas 197             {
6312 28 Aug 13 nicklas 198               ItemSubtype eventProtocolType = null;
6312 28 Aug 13 nicklas 199               try
6312 28 Aug 13 nicklas 200               {
6312 28 Aug 13 nicklas 201                 eventProtocolType = pet.getProtocolType();
6312 28 Aug 13 nicklas 202               }
6312 28 Aug 13 nicklas 203               catch (Throwable t)
6312 28 Aug 13 nicklas 204               {}
1862 30 Jan 06 nicklas 205               %>
6312 28 Aug 13 nicklas 206               <option value="<%=pet.getId()%>"
6312 28 Aug 13 nicklas 207                 data-protocol-type="<%=eventProtocolType == null ? 0 : eventProtocolType.getId()%>"><%=pet.getOrdinal()%>. <%=HTML.encodeTags(pet.getName())%>
1862 30 Jan 06 nicklas 208               <%
1862 30 Jan 06 nicklas 209             }
1862 30 Jan 06 nicklas 210             %>
1862 30 Jan 06 nicklas 211             </select>
1862 30 Jan 06 nicklas 212             <%
1862 30 Jan 06 nicklas 213           }
1862 30 Jan 06 nicklas 214           else
1862 30 Jan 06 nicklas 215           {
1862 30 Jan 06 nicklas 216             %>
1862 30 Jan 06 nicklas 217             <%=eventType.getOrdinal()%>. <%=HTML.encodeTags(eventType.getName())%>
1862 30 Jan 06 nicklas 218             <%
1862 30 Jan 06 nicklas 219           }
1862 30 Jan 06 nicklas 220           %>
1862 30 Jan 06 nicklas 221         </td>
5920 10 Jan 12 nicklas 222         <td></td>
1862 30 Jan 06 nicklas 223       </tr>
1862 30 Jan 06 nicklas 224       <tr>
5920 10 Jan 12 nicklas 225         <th>Event date</th>
1862 30 Jan 06 nicklas 226         <td>
5920 10 Jan 12 nicklas 227           <table>
1862 30 Jan 06 nicklas 228           <tr>
1862 30 Jan 06 nicklas 229           <td>
6217 14 Dec 12 nicklas 230             <input class="text" type="text" name="event_date" id="event_date"
2942 22 Nov 06 nicklas 231               value="<%=dateFormatter.format(eventDate == null ? new Date() : eventDate)%>" 
2942 22 Nov 06 nicklas 232               size="20" maxlength="20" title="Enter date in format: <%=htmlDateFormat%>">
1862 30 Jan 06 nicklas 233           </td>
1862 30 Jan 06 nicklas 234           <td>
6216 14 Dec 12 nicklas 235             <base:calendar textarea="event_date" title="Event date" />
1862 30 Jan 06 nicklas 236           </td>
1862 30 Jan 06 nicklas 237           </tr>
1862 30 Jan 06 nicklas 238           </table>
1862 30 Jan 06 nicklas 239         </td>
5920 10 Jan 12 nicklas 240         <td></td>
1862 30 Jan 06 nicklas 241       </tr>
1862 30 Jan 06 nicklas 242       <tr>
5920 10 Jan 12 nicklas 243         <th>Entry date</th>
2942 22 Nov 06 nicklas 244         <td><%=dateFormatter.format(event == null ? new Date() : event.getEntryDate())%></td>
5920 10 Jan 12 nicklas 245         <td></td>
1862 30 Jan 06 nicklas 246       </tr>
1862 30 Jan 06 nicklas 247       <tr>
5920 10 Jan 12 nicklas 248         <th>Protocol</th>
1862 30 Jan 06 nicklas 249         <td>
2598 28 Aug 06 nicklas 250           <base:select 
2598 28 Aug 06 nicklas 251             id="protocol_id"
2598 28 Aug 06 nicklas 252             clazz="selectionlist"
2598 28 Aug 06 nicklas 253             required="false"
2598 28 Aug 06 nicklas 254             current="<%=currentProtocol%>"
2598 28 Aug 06 nicklas 255             denied="<%=!readCurrentProtocol%>"
2598 28 Aug 06 nicklas 256             recent="<%=recentProtocols%>"
2598 28 Aug 06 nicklas 257             newitem="<%=event == null%>"
2598 28 Aug 06 nicklas 258           />
1862 30 Jan 06 nicklas 259         </td>
5920 10 Jan 12 nicklas 260         <td></td>
1862 30 Jan 06 nicklas 261       </tr>
2486 03 Aug 06 martin 262       <tr>
5920 10 Jan 12 nicklas 263         <th>Hardware</th>
2486 03 Aug 06 martin 264         <td>
2598 28 Aug 06 nicklas 265           <base:select 
2598 28 Aug 06 nicklas 266             id="hardware_id"
2598 28 Aug 06 nicklas 267             clazz="selectionlist"
2598 28 Aug 06 nicklas 268             required="false"
2598 28 Aug 06 nicklas 269             current="<%=currentHardware%>"
2598 28 Aug 06 nicklas 270             denied="<%=!readCurrentHardware%>"
2598 28 Aug 06 nicklas 271             recent="<%=recentHardware%>"
2598 28 Aug 06 nicklas 272             newitem="<%=event == null%>"
2598 28 Aug 06 nicklas 273           />
2486 03 Aug 06 martin 274         </td>
5920 10 Jan 12 nicklas 275         <td></td>
2486 03 Aug 06 martin 276       </tr>
5920 10 Jan 12 nicklas 277       <tr class="dynamic">
5920 10 Jan 12 nicklas 278         <th>Comment</th>
5920 10 Jan 12 nicklas 279         <td>
6217 14 Dec 12 nicklas 280           <textarea class="text" rows="6" id="comment"
5905 12 Dec 11 nicklas 281             name="comment" ><%=HTML.encodeTags(event == null ? cc.getPropertyValue("comment") : event.getComment())%></textarea>
1862 30 Jan 06 nicklas 282         </td>
5920 10 Jan 12 nicklas 283         <td style="width: 20px;">
6215 13 Dec 12 nicklas 284           <base:zoom textarea="comment" title="Comment" />
5920 10 Jan 12 nicklas 285         </td>
1862 30 Jan 06 nicklas 286       </tr>
1862 30 Jan 06 nicklas 287       </table>
1862 30 Jan 06 nicklas 288     </t:tab>
1862 30 Jan 06 nicklas 289     </t:tabcontrol>
5920 10 Jan 12 nicklas 290     </form>
5920 10 Jan 12 nicklas 291     
5920 10 Jan 12 nicklas 292     <div class="legend">
5946 03 Feb 12 nicklas 293       <base:icon image="required.png" />= required information
5920 10 Jan 12 nicklas 294     </div>
1862 30 Jan 06 nicklas 295
5920 10 Jan 12 nicklas 296     <base:buttongroup subclass="dialogbuttons">
6312 28 Aug 13 nicklas 297       <base:button id="btnSabe" title="Save" />
6312 28 Aug 13 nicklas 298       <base:button id="close" title="Cancel" />
5920 10 Jan 12 nicklas 299     </base:buttongroup>
1862 30 Jan 06 nicklas 300   </base:body>
1862 30 Jan 06 nicklas 301   </base:page>
1862 30 Jan 06 nicklas 302   <%
1862 30 Jan 06 nicklas 303 }
1862 30 Jan 06 nicklas 304 finally
1862 30 Jan 06 nicklas 305 {
1862 30 Jan 06 nicklas 306   if (dc != null) dc.close();
1862 30 Jan 06 nicklas 307 }
1862 30 Jan 06 nicklas 308 %>