www/lims/plates/index.jsp

Code
Comments
Other
Rev Date Author Line
1652 22 Nov 05 nicklas 1 <%-- $Id$
1652 22 Nov 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
1652 22 Nov 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/
1652 22 Nov 05 nicklas 8
1652 22 Nov 05 nicklas 9   BASE is free software; you can redistribute it and/or
1652 22 Nov 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
1652 22 Nov 05 nicklas 12   of the License, or (at your option) any later version.
1652 22 Nov 05 nicklas 13
1652 22 Nov 05 nicklas 14   BASE is distributed in the hope that it will be useful,
1652 22 Nov 05 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
1652 22 Nov 05 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1652 22 Nov 05 nicklas 17   GNU General Public License for more details.
1652 22 Nov 05 nicklas 18
1652 22 Nov 05 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/>.
1652 22 Nov 05 nicklas 21   ------------------------------------------------------------------
1652 22 Nov 05 nicklas 22
1652 22 Nov 05 nicklas 23   @author Nicklas
1652 22 Nov 05 nicklas 24   @version 2.0
1652 22 Nov 05 nicklas 25 --%>
5426 24 Sep 10 nicklas 26 <%@ page pageEncoding="UTF-8" session="false"
1652 22 Nov 05 nicklas 27   import="net.sf.basedb.core.SessionControl"
1652 22 Nov 05 nicklas 28   import="net.sf.basedb.core.DbControl"
1652 22 Nov 05 nicklas 29   import="net.sf.basedb.core.Item"
1847 26 Jan 06 nicklas 30   import="net.sf.basedb.core.Include"
1847 26 Jan 06 nicklas 31   import="net.sf.basedb.core.PlateType"
1652 22 Nov 05 nicklas 32   import="net.sf.basedb.core.Plate"
1847 26 Jan 06 nicklas 33   import="net.sf.basedb.core.PlateMapping"
1652 22 Nov 05 nicklas 34   import="net.sf.basedb.core.ItemQuery"
1652 22 Nov 05 nicklas 35   import="net.sf.basedb.core.ItemResultIterator"
1652 22 Nov 05 nicklas 36   import="net.sf.basedb.core.Permission"
1847 26 Jan 06 nicklas 37   import="net.sf.basedb.core.ItemContext"
1847 26 Jan 06 nicklas 38   import="net.sf.basedb.core.MultiPermissions"
4587 15 Oct 08 martin 39   import="net.sf.basedb.core.OwnedItem"
1847 26 Jan 06 nicklas 40   import="net.sf.basedb.core.PermissionDeniedException"
1847 26 Jan 06 nicklas 41   import="net.sf.basedb.core.ItemAlreadyExistsException"
1847 26 Jan 06 nicklas 42   import="net.sf.basedb.util.RemovableUtil"
1847 26 Jan 06 nicklas 43   import="net.sf.basedb.util.ShareableUtil"
2919 15 Nov 06 nicklas 44   import="net.sf.basedb.util.OwnableUtil"
1652 22 Nov 05 nicklas 45   import="net.sf.basedb.clients.web.Base"
1847 26 Jan 06 nicklas 46   import="net.sf.basedb.clients.web.WebException"
2753 20 Oct 06 nicklas 47   import="net.sf.basedb.util.Values"
1652 22 Nov 05 nicklas 48   import="net.sf.basedb.clients.web.util.HTML"
5498 17 Nov 10 nicklas 49   import="net.sf.basedb.core.plugin.GuiContext"
5498 17 Nov 10 nicklas 50   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
5498 17 Nov 10 nicklas 51   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
5498 17 Nov 10 nicklas 52   import="net.sf.basedb.clients.web.extensions.JspContext"
5498 17 Nov 10 nicklas 53   import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
7604 25 Feb 19 nicklas 54   import="net.sf.basedb.clients.web.extensions.edit.OnSaveAction"
5498 17 Nov 10 nicklas 55   import="net.sf.basedb.clients.web.extensions.edit.OnSaveRenderer"
6039 29 Mar 12 nicklas 56   import="net.sf.basedb.clients.web.extensions.list.ListColumnExportRenderer"
7604 25 Feb 19 nicklas 57   import="net.sf.basedb.clients.web.extensions.list.ListColumnAction"
6039 29 Mar 12 nicklas 58   import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
1847 26 Jan 06 nicklas 59   import="java.util.Enumeration"
1847 26 Jan 06 nicklas 60   import="java.util.Set"
1847 26 Jan 06 nicklas 61   import="java.util.HashSet"
1652 22 Nov 05 nicklas 62   import="java.util.List"
1847 26 Jan 06 nicklas 63   import="java.util.ArrayList"
1847 26 Jan 06 nicklas 64   import="java.util.Collections"
1652 22 Nov 05 nicklas 65 %>
1652 22 Nov 05 nicklas 66 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
1652 22 Nov 05 nicklas 67 <%!
2446 29 Jun 06 nicklas 68   private static final ItemContext defaultContext = Base.createDefaultContext("name", "name,barcode,plateType,parents,children,description");
1847 26 Jan 06 nicklas 69   private static final Item itemType = Item.PLATE;
1652 22 Nov 05 nicklas 70 %>
1652 22 Nov 05 nicklas 71 <%
1847 26 Jan 06 nicklas 72 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
1652 22 Nov 05 nicklas 73 final String ID = sc.getId();
1847 26 Jan 06 nicklas 74 final String cmd = request.getParameter("cmd");
1847 26 Jan 06 nicklas 75 final String root = request.getContextPath()+"/";
1847 26 Jan 06 nicklas 76 final String mode = request.getParameter("mode");
1847 26 Jan 06 nicklas 77 final String callback = request.getParameter("callback");
1847 26 Jan 06 nicklas 78 final String itemId = request.getParameter("item_id");
1847 26 Jan 06 nicklas 79 final String listPage = "list_plates.jsp?ID="+ID
1847 26 Jan 06 nicklas 80   +(mode == null ? "" : "&mode="+mode)
1847 26 Jan 06 nicklas 81   +(callback == null ? "" : "&callback="+callback)
1847 26 Jan 06 nicklas 82   +(itemId == null ? "" : "&item_id="+itemId);
1847 26 Jan 06 nicklas 83 final String viewPage = "view_plate.jsp?ID="+ID;
1847 26 Jan 06 nicklas 84 final String editPage = "edit_plate.jsp?ID="+ID;
1652 22 Nov 05 nicklas 85
1847 26 Jan 06 nicklas 86 String forward = null;
1847 26 Jan 06 nicklas 87 String redirect = null;
1847 26 Jan 06 nicklas 88 String message = null;
1847 26 Jan 06 nicklas 89 DbControl dc = null;
1847 26 Jan 06 nicklas 90
1652 22 Nov 05 nicklas 91 try
1652 22 Nov 05 nicklas 92 {
1847 26 Jan 06 nicklas 93   if (cmd == null || "List".equals(cmd))
1666 25 Nov 05 nicklas 94   {
1847 26 Jan 06 nicklas 95     // Display the list page without updatinging the current context
2811 26 Oct 06 nicklas 96     Base.getAndSetCurrentContext(sc, itemType, null, defaultContext, true);
1847 26 Jan 06 nicklas 97     redirect = listPage;
1666 25 Nov 05 nicklas 98   }
1847 26 Jan 06 nicklas 99   else if ("UpdateContext".equals(cmd))
1847 26 Jan 06 nicklas 100   {
1847 26 Jan 06 nicklas 101     // Display the list page after updating the current context from the request parameters
1847 26 Jan 06 nicklas 102     Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 103     redirect = listPage;
1847 26 Jan 06 nicklas 104   }
1847 26 Jan 06 nicklas 105   else if ("LoadContext".equals(cmd))
1847 26 Jan 06 nicklas 106   {
1847 26 Jan 06 nicklas 107     // Display the list page after loading a saved context
1847 26 Jan 06 nicklas 108     int contextId = Values.getInt(request.getParameter("context"));
1847 26 Jan 06 nicklas 109     Base.loadContext(sc, contextId, defaultContext);
1847 26 Jan 06 nicklas 110     redirect = listPage;
1847 26 Jan 06 nicklas 111   }
1847 26 Jan 06 nicklas 112
1847 26 Jan 06 nicklas 113   else if ("ViewItem".equals(cmd))
1847 26 Jan 06 nicklas 114   {
1847 26 Jan 06 nicklas 115     // Display the view page for a single item 
1847 26 Jan 06 nicklas 116     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 117     forward = viewPage;
1847 26 Jan 06 nicklas 118   }
1847 26 Jan 06 nicklas 119   else if ("EditItem".equals(cmd))
1847 26 Jan 06 nicklas 120   {
1847 26 Jan 06 nicklas 121     // Display the edit page for a single item (should be opened in a popup)
1847 26 Jan 06 nicklas 122     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 123     redirect = editPage;
1847 26 Jan 06 nicklas 124   }
1847 26 Jan 06 nicklas 125   else if ("NewItem".equals(cmd))
1847 26 Jan 06 nicklas 126   {
1847 26 Jan 06 nicklas 127     // Display the edit page for a new item (should be opened in a popup)
1847 26 Jan 06 nicklas 128     if (!sc.hasPermission(Permission.CREATE, itemType))
1652 22 Nov 05 nicklas 129     {
1847 26 Jan 06 nicklas 130       throw new PermissionDeniedException(Permission.CREATE, itemType.toString());
1652 22 Nov 05 nicklas 131     }
1847 26 Jan 06 nicklas 132     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 133     cc.setId(0);
2446 29 Jun 06 nicklas 134     forward = editPage;
1847 26 Jan 06 nicklas 135   }
1847 26 Jan 06 nicklas 136   else if ("UpdateItem".equals(cmd))
1847 26 Jan 06 nicklas 137   {
1847 26 Jan 06 nicklas 138     // Update the properties on an item (will close the popup)
1847 26 Jan 06 nicklas 139     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, defaultContext);
7954 12 May 21 nicklas 140     dc = sc.newDbControl(":Edit "+itemType);
7605 26 Feb 19 nicklas 141     Plate plate = cc.getObject("item");
1847 26 Jan 06 nicklas 142     if (plate == null)
1652 22 Nov 05 nicklas 143     {
1847 26 Jan 06 nicklas 144       int plateTypeId = Values.getInt(request.getParameter("platetype_id"));
1847 26 Jan 06 nicklas 145       plate = Plate.getNew(dc, PlateType.getById(dc, plateTypeId));
1847 26 Jan 06 nicklas 146       message = "Plate created";
1847 26 Jan 06 nicklas 147       dc.saveItem(plate);
1652 22 Nov 05 nicklas 148     }
1847 26 Jan 06 nicklas 149     else
1660 24 Nov 05 nicklas 150     {
5060 19 Aug 09 nicklas 151       dc.reattachItem(plate, false);
1847 26 Jan 06 nicklas 152       message = "Plate updated";
1660 24 Nov 05 nicklas 153     }
5498 17 Nov 10 nicklas 154     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(Item.PLATE), plate);
7604 25 Feb 19 nicklas 155     ExtensionsInvoker<OnSaveAction> invoker = EditUtil.useOnSaveExtensions(jspContext);
5498 17 Nov 10 nicklas 156     try
5498 17 Nov 10 nicklas 157     {
5498 17 Nov 10 nicklas 158       plate.setName(Values.getStringOrNull(request.getParameter("name")));
5498 17 Nov 10 nicklas 159       plate.setDescription(Values.getStringOrNull(request.getParameter("description")));
5498 17 Nov 10 nicklas 160       plate.setBarcode(Values.getStringOrNull(request.getParameter("barcode")));
5498 17 Nov 10 nicklas 161       plate.setDestroyed(Values.getBoolean(request.getParameter("destroyed")));
5498 17 Nov 10 nicklas 162   
5498 17 Nov 10 nicklas 163       // Annotations tab
5498 17 Nov 10 nicklas 164       Base.updateAnnotations(dc, plate, plate, request);
5498 17 Nov 10 nicklas 165       
5498 17 Nov 10 nicklas 166       // OnSave extensions
5498 17 Nov 10 nicklas 167       invoker.render(OnSaveRenderer.ON_SAVE);
5498 17 Nov 10 nicklas 168       dc.commit();
5498 17 Nov 10 nicklas 169       invoker.render(OnSaveRenderer.ON_COMMIT);
5498 17 Nov 10 nicklas 170     }
5498 17 Nov 10 nicklas 171     catch (Exception ex)
5498 17 Nov 10 nicklas 172     {
5498 17 Nov 10 nicklas 173       invoker.render(OnSaveRenderer.onRollback(ex));
5498 17 Nov 10 nicklas 174       throw ex;
5498 17 Nov 10 nicklas 175     }
5498 17 Nov 10 nicklas 176     finally
5498 17 Nov 10 nicklas 177     {
5498 17 Nov 10 nicklas 178       cc.removeObject("item");
5498 17 Nov 10 nicklas 179     }
1847 26 Jan 06 nicklas 180   }
1847 26 Jan 06 nicklas 181   else if ("DeleteItem".equals(cmd))
1847 26 Jan 06 nicklas 182   {
1847 26 Jan 06 nicklas 183     // Delete a single item and then return to the view page
7954 12 May 21 nicklas 184     dc = sc.newDbControl(":Delete "+itemType);
1847 26 Jan 06 nicklas 185     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 186     RemovableUtil.setRemoved(dc, itemType, Collections.singleton(cc.getId()), true);
1847 26 Jan 06 nicklas 187     dc.commit();
1847 26 Jan 06 nicklas 188     redirect = viewPage;
1847 26 Jan 06 nicklas 189   }
1847 26 Jan 06 nicklas 190   else if ("DeleteItems".equals(cmd))
1847 26 Jan 06 nicklas 191   {
1847 26 Jan 06 nicklas 192     // Delete all selected items on the list page
7954 12 May 21 nicklas 193     dc = sc.newDbControl(":Delete "+itemType);
1847 26 Jan 06 nicklas 194     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 195     int numTotal = cc.getSelected().size();
1847 26 Jan 06 nicklas 196     int numRemoved = RemovableUtil.setRemoved(dc, itemType, cc.getSelected(), true);
1847 26 Jan 06 nicklas 197     dc.commit();
1847 26 Jan 06 nicklas 198     if (numTotal != numRemoved)
1652 22 Nov 05 nicklas 199     {
1847 26 Jan 06 nicklas 200       message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be deleted, because you have no DELETE permission";
1652 22 Nov 05 nicklas 201     }
6192 31 Oct 12 nicklas 202     redirect = listPage;
1847 26 Jan 06 nicklas 203   }
1847 26 Jan 06 nicklas 204   else if ("RestoreItem".equals(cmd))
1847 26 Jan 06 nicklas 205   {
1847 26 Jan 06 nicklas 206     // Restore a single item and then return to the view page
7954 12 May 21 nicklas 207     dc = sc.newDbControl(":Restore "+itemType);
1847 26 Jan 06 nicklas 208     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 209     RemovableUtil.setRemoved(dc, itemType, Collections.singleton(cc.getId()), false);
1847 26 Jan 06 nicklas 210     dc.commit();
1847 26 Jan 06 nicklas 211     redirect = viewPage;
1847 26 Jan 06 nicklas 212   }
1847 26 Jan 06 nicklas 213   else if ("RestoreItems".equals(cmd))
1847 26 Jan 06 nicklas 214   {
1847 26 Jan 06 nicklas 215     // Restore all selected items on the list page
7954 12 May 21 nicklas 216     dc = sc.newDbControl(":Restore "+itemType);
1847 26 Jan 06 nicklas 217     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 218     int numTotal = cc.getSelected().size();
1847 26 Jan 06 nicklas 219     int numRemoved = RemovableUtil.setRemoved(dc, itemType, cc.getSelected(), false);
1847 26 Jan 06 nicklas 220     dc.commit();
1847 26 Jan 06 nicklas 221     if (numTotal != numRemoved)
1652 22 Nov 05 nicklas 222     {
2528 15 Aug 06 martin 223       message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be restored, because you have no WRITE permission";
1652 22 Nov 05 nicklas 224     }
6192 31 Oct 12 nicklas 225     redirect = listPage;
1847 26 Jan 06 nicklas 226   }
1847 26 Jan 06 nicklas 227   else if ("ShareItem".equals(cmd))
1847 26 Jan 06 nicklas 228   {
1847 26 Jan 06 nicklas 229     // Display a popup window for sharing a single item
7954 12 May 21 nicklas 230     dc = sc.newDbControl(":Share "+itemType);
1847 26 Jan 06 nicklas 231     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 232     MultiPermissions permissions = ShareableUtil.getMultiPermissions(dc, itemType, Collections.singleton(cc.getId()));
1847 26 Jan 06 nicklas 233     dc.close();
1847 26 Jan 06 nicklas 234     cc.setObject("MultiPermissions", permissions);
1847 26 Jan 06 nicklas 235     redirect = "../../common/share/share.jsp?ID="+ID+"&item_type="+itemType.name();
1847 26 Jan 06 nicklas 236   }
1847 26 Jan 06 nicklas 237   else if ("ShareItems".equals(cmd))
1847 26 Jan 06 nicklas 238   {
1847 26 Jan 06 nicklas 239     // Display a popup window for sharing all selected items on the list page
7954 12 May 21 nicklas 240     dc = sc.newDbControl(":Share "+itemType);
1847 26 Jan 06 nicklas 241     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 242     MultiPermissions permissions = ShareableUtil.getMultiPermissions(dc, itemType, cc.getSelected());
1847 26 Jan 06 nicklas 243     dc.close();
1847 26 Jan 06 nicklas 244     cc.setObject("MultiPermissions", permissions);
1847 26 Jan 06 nicklas 245     redirect = "../../common/share/share.jsp?ID="+ID+"&item_type="+itemType.name();
1847 26 Jan 06 nicklas 246   }
4578 13 Oct 08 martin 247   else if ("SetOwnerOfItem".equals(cmd))
2919 15 Nov 06 nicklas 248   {
4578 13 Oct 08 martin 249     // Change owner of items selected on a list page
7954 12 May 21 nicklas 250     dc = sc.newDbControl(":Set owner of "+itemType);
2919 15 Nov 06 nicklas 251     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
4587 15 Oct 08 martin 252     OwnedItem item = (OwnedItem)itemType.getById(dc, cc.getId());
4587 15 Oct 08 martin 253     cc.setObject("OwnedItems", Collections.singleton(item));
4578 13 Oct 08 martin 254     redirect = "../../common/ownership/ownership.jsp?ID="+ID+"&item_type="+itemType.name();
2919 15 Nov 06 nicklas 255   }
4578 13 Oct 08 martin 256   else if ("SetOwnerOfItems".equals(cmd))
2919 15 Nov 06 nicklas 257   {
4578 13 Oct 08 martin 258     // Change owner of items selected on a list page
7954 12 May 21 nicklas 259     dc = sc.newDbControl(":Set owner of "+itemType);
2919 15 Nov 06 nicklas 260     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
4587 15 Oct 08 martin 261     Set<OwnedItem> items = new HashSet<OwnedItem>();
4587 15 Oct 08 martin 262     for (Integer id : cc.getSelected())
4587 15 Oct 08 martin 263     {
4587 15 Oct 08 martin 264       if (id != null) items.add((OwnedItem)itemType.getById(dc, id));
4587 15 Oct 08 martin 265     }
4587 15 Oct 08 martin 266     dc.close();
4587 15 Oct 08 martin 267     cc.setObject("OwnedItems", items);
4578 13 Oct 08 martin 268     redirect = "../../common/ownership/ownership.jsp?ID="+ID+"&item_type="+itemType.name();
2919 15 Nov 06 nicklas 269   }
1847 26 Jan 06 nicklas 270   else if ("ExportItems".equals(cmd))
1847 26 Jan 06 nicklas 271   {
1847 26 Jan 06 nicklas 272     // Run an export plugin in a list context
1847 26 Jan 06 nicklas 273     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 274     final ItemQuery<Plate> query = Plate.getQuery();
7954 12 May 21 nicklas 275     dc = sc.newDbControl(":Export "+itemType);
7914 23 Feb 21 nicklas 276     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
7914 23 Feb 21 nicklas 277     cc.configureQuery(dc, query, jspContext, true);
6039 29 Mar 12 nicklas 278     cc.setQuery(query);
7604 25 Feb 19 nicklas 279     ExtensionsInvoker<ListColumnAction<Plate,?>> listInvoker = ListColumnUtil.useExtensions(jspContext);
7604 25 Feb 19 nicklas 280     listInvoker.render(new ListColumnExportRenderer<Plate>(cc));
5590 16 Mar 11 nicklas 281     dc.close();
1847 26 Jan 06 nicklas 282     redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&title=Export+plates";
1847 26 Jan 06 nicklas 283   }
1847 26 Jan 06 nicklas 284   else if ("ExportItem".equals(cmd))
1847 26 Jan 06 nicklas 285   {
1847 26 Jan 06 nicklas 286     // Run an export plugin in single-item context
1847 26 Jan 06 nicklas 287     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 288     redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&title=Export+plate";
1847 26 Jan 06 nicklas 289   }
1847 26 Jan 06 nicklas 290   else if ("ImportItems".equals(cmd))
1847 26 Jan 06 nicklas 291   {
1847 26 Jan 06 nicklas 292     // Run an import plugin in a list context
1847 26 Jan 06 nicklas 293     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 294     final ItemQuery<Plate> query = Plate.getQuery();
7954 12 May 21 nicklas 295     dc = sc.newDbControl(":Import "+itemType);
7914 23 Feb 21 nicklas 296     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
7914 23 Feb 21 nicklas 297     cc.configureQuery(dc, query, jspContext, true);
5590 16 Mar 11 nicklas 298     dc.close();
1847 26 Jan 06 nicklas 299     cc.setQuery(query);
1847 26 Jan 06 nicklas 300     redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&title=Import+plates";
1847 26 Jan 06 nicklas 301   }
1847 26 Jan 06 nicklas 302   else if ("ImportItem".equals(cmd))
1847 26 Jan 06 nicklas 303   {
1847 26 Jan 06 nicklas 304     // Run an import plugin in single-item context
1847 26 Jan 06 nicklas 305     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 306     redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&title=Import+plates";
1847 26 Jan 06 nicklas 307   }
1847 26 Jan 06 nicklas 308   else if ("RunListPlugin".equals(cmd))
1847 26 Jan 06 nicklas 309   {
1847 26 Jan 06 nicklas 310     // Run another plugin in a list context
1847 26 Jan 06 nicklas 311     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 312     final ItemQuery<Plate> query = Plate.getQuery();
7954 12 May 21 nicklas 313     dc = sc.newDbControl(":Run plugin "+itemType);
7914 23 Feb 21 nicklas 314     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
7914 23 Feb 21 nicklas 315     cc.configureQuery(dc, query, jspContext, true);
5590 16 Mar 11 nicklas 316     dc.close();
1847 26 Jan 06 nicklas 317     cc.setQuery(query);
1847 26 Jan 06 nicklas 318     redirect = "../../common/plugin/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&main_type=OTHER&title=Run+plugin";
1847 26 Jan 06 nicklas 319   }
1847 26 Jan 06 nicklas 320   else if ("RunPlugin".equals(cmd))
1847 26 Jan 06 nicklas 321   {
1847 26 Jan 06 nicklas 322     // Run another plugin in single-item context
1847 26 Jan 06 nicklas 323     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1847 26 Jan 06 nicklas 324     redirect = "../../common/plugin/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&main_type=OTHER&title=Run+plugin";
1847 26 Jan 06 nicklas 325   }
1847 26 Jan 06 nicklas 326   else if ("MergePlates".equals(cmd))
1847 26 Jan 06 nicklas 327   {
7954 12 May 21 nicklas 328     dc = sc.newDbControl(":Merge plates");
1847 26 Jan 06 nicklas 329     int plateMappingId = Values.getInt(request.getParameter("platemapping_id"));
1847 26 Jan 06 nicklas 330     int plateTypeId = Values.getInt(request.getParameter("platetype_id"));
1847 26 Jan 06 nicklas 331     PlateMapping plateMapping = PlateMapping.getById(dc, plateMappingId);
1847 26 Jan 06 nicklas 332     PlateType plateType = PlateType.getById(dc, plateTypeId);
1847 26 Jan 06 nicklas 333     
1847 26 Jan 06 nicklas 334     List<Plate> sourcePlates = new ArrayList<Plate>(plateMapping.getSourceCount());
6312 28 Aug 13 nicklas 335     for (String pId : request.getParameter("+PLATE").split(","))
1652 22 Nov 05 nicklas 336     {
1847 26 Jan 06 nicklas 337       sourcePlates.add(Plate.getById(dc, Values.getInt(pId)));
1652 22 Nov 05 nicklas 338     }
1847 26 Jan 06 nicklas 339     List<Plate> destinationPlates = plateMapping.apply(sourcePlates, plateType);
1847 26 Jan 06 nicklas 340     String name = Values.getStringOrNull(request.getParameter("name"));
1847 26 Jan 06 nicklas 341     for (Plate plate : destinationPlates)
1652 22 Nov 05 nicklas 342     {
1847 26 Jan 06 nicklas 343       plate.setName(name);
1847 26 Jan 06 nicklas 344       dc.saveItem(plate);
1652 22 Nov 05 nicklas 345     }
1847 26 Jan 06 nicklas 346     dc.commit();
1847 26 Jan 06 nicklas 347     message = "Plates merged successfully";
1847 26 Jan 06 nicklas 348   }
1847 26 Jan 06 nicklas 349   else
1847 26 Jan 06 nicklas 350   {
1847 26 Jan 06 nicklas 351     throw new WebException("popup", "Invalid command", "The command {1} is not recognised as a valid command.", cmd);
1847 26 Jan 06 nicklas 352   }
1652 22 Nov 05 nicklas 353 }
1652 22 Nov 05 nicklas 354 finally
1652 22 Nov 05 nicklas 355 {
1652 22 Nov 05 nicklas 356   if (dc != null) dc.close();
1652 22 Nov 05 nicklas 357 }
1847 26 Jan 06 nicklas 358
1847 26 Jan 06 nicklas 359 if (forward != null)
1847 26 Jan 06 nicklas 360 {
6192 31 Oct 12 nicklas 361   sc.setSessionSetting("alert-message", message);
1847 26 Jan 06 nicklas 362   pageContext.forward(forward);
1847 26 Jan 06 nicklas 363 }
1847 26 Jan 06 nicklas 364 else if (redirect != null)
1847 26 Jan 06 nicklas 365 {
6192 31 Oct 12 nicklas 366   sc.setSessionSetting("alert-message", message);
1847 26 Jan 06 nicklas 367   response.sendRedirect(redirect);
1847 26 Jan 06 nicklas 368 }
1847 26 Jan 06 nicklas 369 else if (message == null)
1847 26 Jan 06 nicklas 370 {
1847 26 Jan 06 nicklas 371   response.sendRedirect(root + "common/close_popup.jsp?refresh_opener=1&wait=0");
1847 26 Jan 06 nicklas 372 }
1847 26 Jan 06 nicklas 373 else
1847 26 Jan 06 nicklas 374 {
1847 26 Jan 06 nicklas 375   response.sendRedirect(root + "common/close_popup.jsp?refresh_opener=1&message="+HTML.urlEncode(message));
1847 26 Jan 06 nicklas 376 }
1847 26 Jan 06 nicklas 377 %>
1847 26 Jan 06 nicklas 378