www/admin/itemsubtypes/index.jsp

Code
Comments
Other
Rev Date Author Line
5630 13 May 11 nicklas 1 <%-- $Id$
5630 13 May 11 nicklas 2   ------------------------------------------------------------------
5630 13 May 11 nicklas 3   Copyright (C) 2011 Nicklas Nordborg
5630 13 May 11 nicklas 4
5630 13 May 11 nicklas 5   This file is part of BASE - BioArray Software Environment.
5630 13 May 11 nicklas 6   Available at http://base.thep.lu.se/
5630 13 May 11 nicklas 7
5630 13 May 11 nicklas 8   BASE is free software; you can redistribute it and/or
5630 13 May 11 nicklas 9   modify it under the terms of the GNU General Public License
5630 13 May 11 nicklas 10   as published by the Free Software Foundation; either version 3
5630 13 May 11 nicklas 11   of the License, or (at your option) any later version.
5630 13 May 11 nicklas 12
5630 13 May 11 nicklas 13   BASE is distributed in the hope that it will be useful,
5630 13 May 11 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
5630 13 May 11 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5630 13 May 11 nicklas 16   GNU General Public License for more details.
5630 13 May 11 nicklas 17
5630 13 May 11 nicklas 18   You should have received a copy of the GNU General Public License
5630 13 May 11 nicklas 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5630 13 May 11 nicklas 20   ------------------------------------------------------------------
5630 13 May 11 nicklas 21
5630 13 May 11 nicklas 22   @author Nicklas
5630 13 May 11 nicklas 23   @since 3.0
5630 13 May 11 nicklas 24 --%>
5630 13 May 11 nicklas 25 <%@ page pageEncoding="UTF-8" session="false"
5630 13 May 11 nicklas 26   import="net.sf.basedb.core.SessionControl"
5630 13 May 11 nicklas 27   import="net.sf.basedb.core.DbControl"
5630 13 May 11 nicklas 28   import="net.sf.basedb.core.Item"
5630 13 May 11 nicklas 29   import="net.sf.basedb.core.Include"
5630 13 May 11 nicklas 30   import="net.sf.basedb.core.ItemSubtype"
5698 15 Aug 11 nicklas 31   import="net.sf.basedb.core.DataFileType"
5713 02 Sep 11 nicklas 32   import="net.sf.basedb.core.ItemSubtypeFileType"
5630 13 May 11 nicklas 33   import="net.sf.basedb.core.ItemQuery"
5630 13 May 11 nicklas 34   import="net.sf.basedb.core.Permission"
5630 13 May 11 nicklas 35   import="net.sf.basedb.core.ItemContext"
5630 13 May 11 nicklas 36   import="net.sf.basedb.core.MultiPermissions"
5630 13 May 11 nicklas 37   import="net.sf.basedb.core.PermissionDeniedException"
5630 13 May 11 nicklas 38   import="net.sf.basedb.core.ItemAlreadyExistsException"
5630 13 May 11 nicklas 39   import="net.sf.basedb.core.query.Expressions"
5630 13 May 11 nicklas 40   import="net.sf.basedb.core.query.Hql"
5630 13 May 11 nicklas 41   import="net.sf.basedb.core.query.Orders"
5630 13 May 11 nicklas 42   import="net.sf.basedb.core.query.Restrictions"
5630 13 May 11 nicklas 43   import="net.sf.basedb.util.RemovableUtil"
5630 13 May 11 nicklas 44   import="net.sf.basedb.util.formatter.NameableFormatter"
5630 13 May 11 nicklas 45   import="net.sf.basedb.clients.web.Base"
5630 13 May 11 nicklas 46   import="net.sf.basedb.clients.web.WebException"
5630 13 May 11 nicklas 47   import="net.sf.basedb.util.Values"
5630 13 May 11 nicklas 48   import="net.sf.basedb.clients.web.plugins.ItemQueryLoader"
5630 13 May 11 nicklas 49   import="net.sf.basedb.clients.web.util.HTML"
5630 13 May 11 nicklas 50   import="net.sf.basedb.core.plugin.GuiContext"
5630 13 May 11 nicklas 51   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
5630 13 May 11 nicklas 52   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
5630 13 May 11 nicklas 53   import="net.sf.basedb.clients.web.extensions.JspContext"
5630 13 May 11 nicklas 54   import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
7604 25 Feb 19 nicklas 55   import="net.sf.basedb.clients.web.extensions.edit.OnSaveAction"
5630 13 May 11 nicklas 56   import="net.sf.basedb.clients.web.extensions.edit.OnSaveRenderer"
6045 03 Apr 12 nicklas 57   import="net.sf.basedb.clients.web.extensions.list.ListColumnExportRenderer"
7604 25 Feb 19 nicklas 58   import="net.sf.basedb.clients.web.extensions.list.ListColumnAction"
6045 03 Apr 12 nicklas 59   import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
5630 13 May 11 nicklas 60   import="java.util.Enumeration"
5630 13 May 11 nicklas 61   import="java.util.Set"
5630 13 May 11 nicklas 62   import="java.util.HashSet"
5630 13 May 11 nicklas 63   import="java.util.List"
5630 13 May 11 nicklas 64   import="java.util.ArrayList"
5630 13 May 11 nicklas 65   import="java.util.Collections"
5630 13 May 11 nicklas 66 %>
5630 13 May 11 nicklas 67 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
5630 13 May 11 nicklas 68 <%!
5630 13 May 11 nicklas 69   private static final ItemContext defaultContext = Base.createDefaultContext("name", "name,itemType,description");
5630 13 May 11 nicklas 70   private static final Item itemType = Item.ITEMSUBTYPE;
5630 13 May 11 nicklas 71
6319 09 Sep 13 nicklas 72   private static void registerExportUtils(ItemContext cc)
6319 09 Sep 13 nicklas 73   {
6319 09 Sep 13 nicklas 74     // Register formatters
6319 09 Sep 13 nicklas 75     cc.setObject("export.formatter.&fileTypes(dataFileType.name)", new NameableFormatter());
6319 09 Sep 13 nicklas 76     
6319 09 Sep 13 nicklas 77     // Register dataloaders
6319 09 Sep 13 nicklas 78     String subtypeParameter = "subtype";
6319 09 Sep 13 nicklas 79     // File types
6319 09 Sep 13 nicklas 80     final ItemQuery<DataFileType> fileTypesQuery = DataFileType.getQuery();
6319 09 Sep 13 nicklas 81     fileTypesQuery.include(cc.getInclude());
6319 09 Sep 13 nicklas 82     fileTypesQuery.join(Hql.innerJoin("itemSubtypes", "ist"));
6319 09 Sep 13 nicklas 83     fileTypesQuery.join(Hql.innerJoin("ist", "itemSubtype", "ist2"));
6319 09 Sep 13 nicklas 84     fileTypesQuery.restrict(Restrictions.eq(Hql.alias("ist2"), Expressions.parameter("subtype")));
6319 09 Sep 13 nicklas 85     fileTypesQuery.order(Orders.asc(Hql.property("name"))); 
7604 25 Feb 19 nicklas 86     cc.setObject("export.dataloader.&fileTypes(dataFileType.name)", new ItemQueryLoader<ItemSubtype>(fileTypesQuery, subtypeParameter));
6319 09 Sep 13 nicklas 87   }
6319 09 Sep 13 nicklas 88
5630 13 May 11 nicklas 89 %>
5630 13 May 11 nicklas 90 <%
5630 13 May 11 nicklas 91 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
5630 13 May 11 nicklas 92 final String ID = sc.getId();
5630 13 May 11 nicklas 93 final String cmd = request.getParameter("cmd");
5630 13 May 11 nicklas 94 final String root = request.getContextPath()+"/";
5630 13 May 11 nicklas 95 final String mode = request.getParameter("mode");
5630 13 May 11 nicklas 96 final String callback = request.getParameter("callback");
5630 13 May 11 nicklas 97 final String itemId = request.getParameter("item_id");
5630 13 May 11 nicklas 98 final String listPage = "list_subtypes.jsp?ID="+ID
5630 13 May 11 nicklas 99   +(mode == null ? "" : "&mode="+mode)
5630 13 May 11 nicklas 100   +(callback == null ? "" : "&callback="+callback)
5630 13 May 11 nicklas 101   +(itemId == null ? "" : "&item_id="+itemId);
5630 13 May 11 nicklas 102 final String viewPage = "view_subtype.jsp?ID="+ID;
5630 13 May 11 nicklas 103 final String editPage = "edit_subtype.jsp?ID="+ID;
5630 13 May 11 nicklas 104
5630 13 May 11 nicklas 105 String forward = null;
5630 13 May 11 nicklas 106 String redirect = null;
5630 13 May 11 nicklas 107 String message = null;
5630 13 May 11 nicklas 108 DbControl dc = null;
5630 13 May 11 nicklas 109
5630 13 May 11 nicklas 110 try
5630 13 May 11 nicklas 111 {
5630 13 May 11 nicklas 112   if (cmd == null || "List".equals(cmd))
5630 13 May 11 nicklas 113   {
5630 13 May 11 nicklas 114     // Display the list page without updatinging the current context
5630 13 May 11 nicklas 115     Base.getAndSetCurrentContext(sc, itemType, null, defaultContext, true);
5630 13 May 11 nicklas 116     redirect = listPage;
5630 13 May 11 nicklas 117   }
5630 13 May 11 nicklas 118   else if ("UpdateContext".equals(cmd))
5630 13 May 11 nicklas 119   {
5630 13 May 11 nicklas 120     // Display the list page after updating the current context from the request parameters
5630 13 May 11 nicklas 121     Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 122     redirect = listPage;
5630 13 May 11 nicklas 123   }
5630 13 May 11 nicklas 124   else if ("LoadContext".equals(cmd))
5630 13 May 11 nicklas 125   {
5630 13 May 11 nicklas 126     // Display the list page after loading a saved context
5630 13 May 11 nicklas 127     int contextId = Values.getInt(request.getParameter("context"));
5630 13 May 11 nicklas 128     Base.loadContext(sc, contextId, defaultContext);
5630 13 May 11 nicklas 129     redirect = listPage;
5630 13 May 11 nicklas 130   }
5630 13 May 11 nicklas 131
5630 13 May 11 nicklas 132   else if ("ViewItem".equals(cmd))
5630 13 May 11 nicklas 133   {
5630 13 May 11 nicklas 134     // Display the view page for a single item 
5630 13 May 11 nicklas 135     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 136     forward = viewPage;
5630 13 May 11 nicklas 137   }
5630 13 May 11 nicklas 138   else if ("EditItem".equals(cmd))
5630 13 May 11 nicklas 139   {
5630 13 May 11 nicklas 140     // Display the edit page for a single item (should be opened in a popup)
5630 13 May 11 nicklas 141     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 142     redirect = editPage;
5630 13 May 11 nicklas 143   }
5630 13 May 11 nicklas 144   else if ("NewItem".equals(cmd))
5630 13 May 11 nicklas 145   {
5630 13 May 11 nicklas 146     // Display the edit page for a new item (should be opened in a popup)
5630 13 May 11 nicklas 147     if (!sc.hasPermission(Permission.CREATE, itemType))
5630 13 May 11 nicklas 148     {
5630 13 May 11 nicklas 149       throw new PermissionDeniedException(Permission.CREATE, itemType.toString());
5630 13 May 11 nicklas 150     }
5630 13 May 11 nicklas 151     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 152     cc.setId(0);
5630 13 May 11 nicklas 153     redirect = editPage;
5630 13 May 11 nicklas 154   }
5630 13 May 11 nicklas 155   else if ("UpdateItem".equals(cmd))
5630 13 May 11 nicklas 156   {
5630 13 May 11 nicklas 157     // Update the properties on an item (will close the popup)
5630 13 May 11 nicklas 158     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, defaultContext);
5630 13 May 11 nicklas 159     final int maxRecent = Base.getMaxRecent(sc);
7954 12 May 21 nicklas 160     dc = sc.newDbControl(":Edit "+itemType);
7605 26 Feb 19 nicklas 161     ItemSubtype subtype = cc.getObject("item");
5630 13 May 11 nicklas 162     if (subtype == null)
5630 13 May 11 nicklas 163     {
5630 13 May 11 nicklas 164       Item mainItemType = Item.valueOf(request.getParameter("itemType"));
5630 13 May 11 nicklas 165       subtype = ItemSubtype.getNew(dc, mainItemType);
5630 13 May 11 nicklas 166       message = "Item subtype created";
5630 13 May 11 nicklas 167       dc.saveItem(subtype);
5630 13 May 11 nicklas 168     }
5630 13 May 11 nicklas 169     else
5630 13 May 11 nicklas 170     {
5630 13 May 11 nicklas 171       dc.reattachItem(subtype, false);
5630 13 May 11 nicklas 172       message = "Item subtype updated";
5630 13 May 11 nicklas 173     }
5630 13 May 11 nicklas 174     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), subtype);
7604 25 Feb 19 nicklas 175     ExtensionsInvoker<OnSaveAction> invoker = EditUtil.useOnSaveExtensions(jspContext);
5630 13 May 11 nicklas 176     try
5630 13 May 11 nicklas 177     {
5630 13 May 11 nicklas 178       subtype.setName(Values.getStringOrNull(request.getParameter("name")));
5630 13 May 11 nicklas 179       subtype.setDescription(Values.getStringOrNull(request.getParameter("description")));
5983 23 Feb 12 nicklas 180       subtype.setPushAnnotations(Values.getBoolean(request.getParameter("pushAnnotations")));
5631 16 May 11 nicklas 181       
5631 16 May 11 nicklas 182       for (Item related : ItemSubtype.getRelatedItems(subtype.getMainItemType()))
5631 16 May 11 nicklas 183       {
5631 16 May 11 nicklas 184         int relatedId = Values.getInt(request.getParameter("related." + related.name()), -1);
5631 16 May 11 nicklas 185         if (relatedId >= 0) // < 0 = denied or unchanged
5631 16 May 11 nicklas 186         {
5631 16 May 11 nicklas 187           if (relatedId == 0)
5631 16 May 11 nicklas 188           {
5631 16 May 11 nicklas 189             subtype.removeRelatedSubtype(related);
5631 16 May 11 nicklas 190           }
5631 16 May 11 nicklas 191           else
5631 16 May 11 nicklas 192           {
5631 16 May 11 nicklas 193             subtype.setRelatedSubtype(ItemSubtype.getById(dc, relatedId));
5631 16 May 11 nicklas 194           }
5631 16 May 11 nicklas 195         }
5631 16 May 11 nicklas 196       }
5698 15 Aug 11 nicklas 197
5713 02 Sep 11 nicklas 198       // Data file types
6300 19 Jun 13 nicklas 199       String[] modifiedFileTypes = Values.getString(request.getParameter("+DATAFILETYPE")).split(",");
5713 02 Sep 11 nicklas 200       for (int i = 0; i < modifiedFileTypes.length; ++i)
5698 15 Aug 11 nicklas 201       {
5713 02 Sep 11 nicklas 202         int ftId = Values.getInt(modifiedFileTypes[i], -1);
5713 02 Sep 11 nicklas 203         if (ftId != -1) 
5713 02 Sep 11 nicklas 204         {
5713 02 Sep 11 nicklas 205           DataFileType dft = DataFileType.getById(dc, ftId);
6300 19 Jun 13 nicklas 206           int options = Values.getInt(request.getParameter("DATAFILETYPE."+ftId));
5713 02 Sep 11 nicklas 207           ItemSubtypeFileType sft = subtype.getAssociatedDataFileType(dft, true);
5713 02 Sep 11 nicklas 208           sft.setRequired((options & 1) > 0);
5713 02 Sep 11 nicklas 209           sft.setAllowMultiple((options & 2) > 0);
5713 02 Sep 11 nicklas 210         }
5698 15 Aug 11 nicklas 211       }
6300 19 Jun 13 nicklas 212       String[] removedFileTypes = Values.getString(request.getParameter("-DATAFILETYPE")).split(",");
5713 02 Sep 11 nicklas 213       for (int i = 0; i < removedFileTypes.length; ++i)
5698 15 Aug 11 nicklas 214       {
5713 02 Sep 11 nicklas 215         int ftId = Values.getInt(removedFileTypes[i], -1);
5713 02 Sep 11 nicklas 216         if (ftId != -1) 
5713 02 Sep 11 nicklas 217         {
5713 02 Sep 11 nicklas 218           DataFileType dft = DataFileType.getById(dc, ftId);
5713 02 Sep 11 nicklas 219           subtype.removeAssociatedDataFileType(dft);
5713 02 Sep 11 nicklas 220         }
5698 15 Aug 11 nicklas 221       }
5698 15 Aug 11 nicklas 222
5631 16 May 11 nicklas 223       cc.removeAllTemporaryFilters();
5631 16 May 11 nicklas 224       
5630 13 May 11 nicklas 225       // OnSave extensions
5630 13 May 11 nicklas 226       invoker.render(OnSaveRenderer.ON_SAVE);
5630 13 May 11 nicklas 227       dc.commit();
5630 13 May 11 nicklas 228       invoker.render(OnSaveRenderer.ON_COMMIT);
5630 13 May 11 nicklas 229     }
5630 13 May 11 nicklas 230     catch (Exception ex)
5630 13 May 11 nicklas 231     {
5630 13 May 11 nicklas 232       invoker.render(OnSaveRenderer.onRollback(ex));
5630 13 May 11 nicklas 233       throw ex;
5630 13 May 11 nicklas 234     }
5630 13 May 11 nicklas 235     finally
5630 13 May 11 nicklas 236     {
5630 13 May 11 nicklas 237       cc.removeObject("item");
5630 13 May 11 nicklas 238     }
5630 13 May 11 nicklas 239   }
5630 13 May 11 nicklas 240   else if ("DeleteItem".equals(cmd))
5630 13 May 11 nicklas 241   {
5630 13 May 11 nicklas 242     // Delete a single item and then return to the view page
7954 12 May 21 nicklas 243     dc = sc.newDbControl(":Delete "+itemType);
5630 13 May 11 nicklas 244     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 245     RemovableUtil.setRemoved(dc, itemType, Collections.singleton(cc.getId()), true);
5630 13 May 11 nicklas 246     dc.commit();
5630 13 May 11 nicklas 247     redirect = viewPage;
5630 13 May 11 nicklas 248   }
5630 13 May 11 nicklas 249   else if ("DeleteItems".equals(cmd))
5630 13 May 11 nicklas 250   {
5630 13 May 11 nicklas 251     // Delete all selected items on the list page
7954 12 May 21 nicklas 252     dc = sc.newDbControl(":Delete "+itemType);
5630 13 May 11 nicklas 253     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 254     int numTotal = cc.getSelected().size();
5630 13 May 11 nicklas 255     int numRemoved = RemovableUtil.setRemoved(dc, itemType, cc.getSelected(), true);
5630 13 May 11 nicklas 256     dc.commit();
5630 13 May 11 nicklas 257     if (numTotal != numRemoved)
5630 13 May 11 nicklas 258     {
5630 13 May 11 nicklas 259       message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be deleted, because you have no DELETE permission";
5630 13 May 11 nicklas 260     }
6192 31 Oct 12 nicklas 261     redirect = listPage;
5630 13 May 11 nicklas 262   }
5630 13 May 11 nicklas 263   else if ("RestoreItem".equals(cmd))
5630 13 May 11 nicklas 264   {
5630 13 May 11 nicklas 265     // Restore a single item and then return to the view page
7954 12 May 21 nicklas 266     dc = sc.newDbControl(":Restore "+itemType);
5630 13 May 11 nicklas 267     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 268     RemovableUtil.setRemoved(dc, itemType, Collections.singleton(cc.getId()), false);
5630 13 May 11 nicklas 269     dc.commit();
5630 13 May 11 nicklas 270     redirect = viewPage;
5630 13 May 11 nicklas 271   }
5630 13 May 11 nicklas 272   else if ("RestoreItems".equals(cmd))
5630 13 May 11 nicklas 273   {
5630 13 May 11 nicklas 274     // Restore all selected items on the list page
7954 12 May 21 nicklas 275     dc = sc.newDbControl(":Restore "+itemType);
5630 13 May 11 nicklas 276     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 277     int numTotal = cc.getSelected().size();
5630 13 May 11 nicklas 278     int numRemoved = RemovableUtil.setRemoved(dc, itemType, cc.getSelected(), false);
5630 13 May 11 nicklas 279     dc.commit();
5630 13 May 11 nicklas 280     if (numTotal != numRemoved)
5630 13 May 11 nicklas 281     {
5630 13 May 11 nicklas 282       message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be restored, because you have no WRITE permission";
5630 13 May 11 nicklas 283     }
6192 31 Oct 12 nicklas 284     redirect = listPage;
5630 13 May 11 nicklas 285   }
5630 13 May 11 nicklas 286   else if ("ExportItems".equals(cmd))
5630 13 May 11 nicklas 287   {
5630 13 May 11 nicklas 288     // Run an export plugin in a list context
5630 13 May 11 nicklas 289     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 290     final ItemQuery<ItemSubtype> query = ItemSubtype.getQuery(null);
7954 12 May 21 nicklas 291     dc = sc.newDbControl(":Export "+itemType);
7914 23 Feb 21 nicklas 292     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
7914 23 Feb 21 nicklas 293     cc.configureQuery(dc, query, jspContext, true);
6045 03 Apr 12 nicklas 294     cc.setQuery(query);
6319 09 Sep 13 nicklas 295     registerExportUtils(cc);
7604 25 Feb 19 nicklas 296     ExtensionsInvoker<ListColumnAction<ItemSubtype,?>> listInvoker = ListColumnUtil.useExtensions(jspContext);
7604 25 Feb 19 nicklas 297     listInvoker.render(new ListColumnExportRenderer<ItemSubtype>(cc));
5630 13 May 11 nicklas 298     dc.close();
5630 13 May 11 nicklas 299     redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&title=Export+item+subtypes";
5630 13 May 11 nicklas 300   }
5630 13 May 11 nicklas 301   else if ("ExportItem".equals(cmd))
5630 13 May 11 nicklas 302   {
5630 13 May 11 nicklas 303     // Run an export plugin in single-item context
5630 13 May 11 nicklas 304     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
6319 09 Sep 13 nicklas 305     registerExportUtils(cc);
5630 13 May 11 nicklas 306     redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&title=Export+item+subtype";
5630 13 May 11 nicklas 307   }
5630 13 May 11 nicklas 308   else if ("ImportItems".equals(cmd))
5630 13 May 11 nicklas 309   {
5630 13 May 11 nicklas 310     // Run an import plugin in a list context
5630 13 May 11 nicklas 311     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 312     final ItemQuery<ItemSubtype> query = ItemSubtype.getQuery(null);
7954 12 May 21 nicklas 313     dc = sc.newDbControl(":Import "+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);
5630 13 May 11 nicklas 316     dc.close();
5630 13 May 11 nicklas 317     cc.setQuery(query);
5630 13 May 11 nicklas 318     redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&title=Import+item+subtypes";
5630 13 May 11 nicklas 319   }
5630 13 May 11 nicklas 320   else if ("ImportItem".equals(cmd))
5630 13 May 11 nicklas 321   {
5630 13 May 11 nicklas 322     // Run an import plugin in single-item context
5630 13 May 11 nicklas 323     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 324     redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&title=Import+item+subtype";
5630 13 May 11 nicklas 325   }
5630 13 May 11 nicklas 326   else if ("RunListPlugin".equals(cmd))
5630 13 May 11 nicklas 327   {
5630 13 May 11 nicklas 328     // Run another plugin in a list context
5630 13 May 11 nicklas 329     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 330     final ItemQuery<ItemSubtype> query = ItemSubtype.getQuery(null);
7954 12 May 21 nicklas 331     dc = sc.newDbControl(":Run plugin "+itemType);
7914 23 Feb 21 nicklas 332     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
7914 23 Feb 21 nicklas 333     cc.configureQuery(dc, query, jspContext, true);
5630 13 May 11 nicklas 334     dc.close();
5630 13 May 11 nicklas 335     cc.setQuery(query);
5630 13 May 11 nicklas 336     redirect = "../../common/plugin/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&main_type=OTHER&title=Run+plugin";
5630 13 May 11 nicklas 337   }
5630 13 May 11 nicklas 338   else if ("RunPlugin".equals(cmd))
5630 13 May 11 nicklas 339   {
5630 13 May 11 nicklas 340     // Run another plugin in single-item context
5630 13 May 11 nicklas 341     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
5630 13 May 11 nicklas 342     redirect = "../../common/plugin/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&main_type=OTHER&title=Run+plugin";
5630 13 May 11 nicklas 343   }
5630 13 May 11 nicklas 344   else
5630 13 May 11 nicklas 345   {
5630 13 May 11 nicklas 346     throw new WebException("popup", "Invalid command", "The command {1} is not recognised as a valid command.", cmd);
5630 13 May 11 nicklas 347   }
5630 13 May 11 nicklas 348 }
5630 13 May 11 nicklas 349 finally
5630 13 May 11 nicklas 350 {
5630 13 May 11 nicklas 351   if (dc != null) dc.close();
5630 13 May 11 nicklas 352 }
5630 13 May 11 nicklas 353
5630 13 May 11 nicklas 354 if (forward != null)
5630 13 May 11 nicklas 355 {
6192 31 Oct 12 nicklas 356   sc.setSessionSetting("alert-message", message);
5630 13 May 11 nicklas 357   pageContext.forward(forward);
5630 13 May 11 nicklas 358 }
5630 13 May 11 nicklas 359 else if (redirect != null)
5630 13 May 11 nicklas 360 {
6192 31 Oct 12 nicklas 361   sc.setSessionSetting("alert-message", message);
5630 13 May 11 nicklas 362   response.sendRedirect(redirect);
5630 13 May 11 nicklas 363 }
5630 13 May 11 nicklas 364 else if (message == null)
5630 13 May 11 nicklas 365 {
5630 13 May 11 nicklas 366   response.sendRedirect(root + "common/close_popup.jsp?refresh_opener=1&wait=0");
5630 13 May 11 nicklas 367 }
5630 13 May 11 nicklas 368 else
5630 13 May 11 nicklas 369 {
5630 13 May 11 nicklas 370   response.sendRedirect(root + "common/close_popup.jsp?refresh_opener=1&message="+HTML.urlEncode(message));
5630 13 May 11 nicklas 371 }
5630 13 May 11 nicklas 372 %>
5630 13 May 11 nicklas 373