www/admin/annotationtypes/index.jsp

Code
Comments
Other
Rev Date Author Line
827 27 Jun 05 nicklas 1 <%-- $Id$
827 27 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
827 27 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/
827 27 Jun 05 nicklas 8
827 27 Jun 05 nicklas 9   BASE is free software; you can redistribute it and/or
827 27 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
827 27 Jun 05 nicklas 12   of the License, or (at your option) any later version.
827 27 Jun 05 nicklas 13
827 27 Jun 05 nicklas 14   BASE is distributed in the hope that it will be useful,
827 27 Jun 05 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
827 27 Jun 05 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
827 27 Jun 05 nicklas 17   GNU General Public License for more details.
827 27 Jun 05 nicklas 18
827 27 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/>.
827 27 Jun 05 nicklas 21   ------------------------------------------------------------------
827 27 Jun 05 nicklas 22
827 27 Jun 05 nicklas 23   @author Nicklas
827 27 Jun 05 nicklas 24   @version 2.0
827 27 Jun 05 nicklas 25 --%>
5426 24 Sep 10 nicklas 26 <%@ page pageEncoding="UTF-8" session="false"
827 27 Jun 05 nicklas 27   import="net.sf.basedb.core.SessionControl"
827 27 Jun 05 nicklas 28   import="net.sf.basedb.core.DbControl"
827 27 Jun 05 nicklas 29   import="net.sf.basedb.core.Item"
1980 14 Feb 06 nicklas 30   import="net.sf.basedb.core.Include"
827 27 Jun 05 nicklas 31   import="net.sf.basedb.core.AnnotationType"
2515 14 Aug 06 nicklas 32   import="net.sf.basedb.core.AnnotationTypeCategory"
4544 25 Sep 08 nicklas 33   import="net.sf.basedb.core.Quantity"
4544 25 Sep 08 nicklas 34   import="net.sf.basedb.core.Unit"
1418 07 Oct 05 nicklas 35   import="net.sf.basedb.core.ItemQuery"
827 27 Jun 05 nicklas 36   import="net.sf.basedb.core.Permission"
1980 14 Feb 06 nicklas 37   import="net.sf.basedb.core.ItemContext"
827 27 Jun 05 nicklas 38   import="net.sf.basedb.core.Metadata"
1980 14 Feb 06 nicklas 39   import="net.sf.basedb.core.Type"
1980 14 Feb 06 nicklas 40   import="net.sf.basedb.core.MultiPermissions"
4587 15 Oct 08 martin 41   import="net.sf.basedb.core.OwnedItem"
1980 14 Feb 06 nicklas 42   import="net.sf.basedb.core.PermissionDeniedException"
1980 14 Feb 06 nicklas 43   import="net.sf.basedb.core.ItemAlreadyExistsException"
4907 28 Apr 09 martin 44   import="net.sf.basedb.core.query.Expressions"
4907 28 Apr 09 martin 45   import="net.sf.basedb.core.query.Hql"
4907 28 Apr 09 martin 46   import="net.sf.basedb.core.query.Orders"
4907 28 Apr 09 martin 47   import="net.sf.basedb.core.query.Restrictions"
1980 14 Feb 06 nicklas 48   import="net.sf.basedb.util.RemovableUtil"
1980 14 Feb 06 nicklas 49   import="net.sf.basedb.util.ShareableUtil"
2921 15 Nov 06 nicklas 50   import="net.sf.basedb.util.OwnableUtil"
827 27 Jun 05 nicklas 51   import="net.sf.basedb.clients.web.Base"
1980 14 Feb 06 nicklas 52   import="net.sf.basedb.clients.web.WebException"
2753 20 Oct 06 nicklas 53   import="net.sf.basedb.util.Values"
4907 28 Apr 09 martin 54   import="net.sf.basedb.clients.web.plugins.ItemQueryLoader"
7088 03 Mar 16 nicklas 55   import="net.sf.basedb.clients.web.plugins.AnnotationTypeItemTypesLoader"
7089 03 Mar 16 nicklas 56   import="net.sf.basedb.clients.web.plugins.AnnotationTypeEnumerationLoader"
827 27 Jun 05 nicklas 57   import="net.sf.basedb.clients.web.util.HTML"
2942 22 Nov 06 nicklas 58   import="net.sf.basedb.util.formatter.Formatter"
4907 28 Apr 09 martin 59   import="net.sf.basedb.util.formatter.NameableFormatter"
7087 03 Mar 16 nicklas 60   import="net.sf.basedb.util.formatter.ValueTypeFormatter"
7088 03 Mar 16 nicklas 61   import="net.sf.basedb.util.formatter.EnumFormatter"
7089 03 Mar 16 nicklas 62   import="net.sf.basedb.util.formatter.ToStringFormatter"
2942 22 Nov 06 nicklas 63   import="net.sf.basedb.clients.web.formatter.FormatterFactory"
5510 19 Nov 10 nicklas 64   import="net.sf.basedb.core.plugin.GuiContext"
5510 19 Nov 10 nicklas 65   import="net.sf.basedb.util.extensions.ExtensionsInvoker"
5510 19 Nov 10 nicklas 66   import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
5510 19 Nov 10 nicklas 67   import="net.sf.basedb.clients.web.extensions.JspContext"
5510 19 Nov 10 nicklas 68   import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
7604 25 Feb 19 nicklas 69   import="net.sf.basedb.clients.web.extensions.edit.OnSaveAction"
5510 19 Nov 10 nicklas 70   import="net.sf.basedb.clients.web.extensions.edit.OnSaveRenderer"
6045 03 Apr 12 nicklas 71   import="net.sf.basedb.clients.web.extensions.list.ListColumnExportRenderer"
7604 25 Feb 19 nicklas 72   import="net.sf.basedb.clients.web.extensions.list.ListColumnAction"
6045 03 Apr 12 nicklas 73   import="net.sf.basedb.clients.web.extensions.list.ListColumnUtil"
1980 14 Feb 06 nicklas 74   import="java.util.Enumeration"
845 29 Jun 05 nicklas 75   import="java.util.Set"
1980 14 Feb 06 nicklas 76   import="java.util.HashSet"
1980 14 Feb 06 nicklas 77   import="java.util.List"
1980 14 Feb 06 nicklas 78   import="java.util.ArrayList"
1980 14 Feb 06 nicklas 79   import="java.util.Collections"
1980 14 Feb 06 nicklas 80   import="java.util.Collection"
1980 14 Feb 06 nicklas 81   import="java.util.Arrays"
1980 14 Feb 06 nicklas 82   import="java.util.Date"
827 27 Jun 05 nicklas 83 %>
827 27 Jun 05 nicklas 84 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
827 27 Jun 05 nicklas 85 <%!
1980 14 Feb 06 nicklas 86   private static final ItemContext defaultContext = Base.createDefaultContext("name", "name,valueType,requiredForMiame,itemTypes,description");
1980 14 Feb 06 nicklas 87   private static final Item itemType = Item.ANNOTATIONTYPE;
4907 28 Apr 09 martin 88   
4907 28 Apr 09 martin 89   private static void registerExportUtils(ItemContext cc)
4907 28 Apr 09 martin 90   {
4907 28 Apr 09 martin 91     // Register formatter
4907 28 Apr 09 martin 92     cc.setObject("export.formatter.&categories(name)", new NameableFormatter());
7087 03 Mar 16 nicklas 93     cc.setObject("export.formatter.valueType", new ValueTypeFormatter());
4907 28 Apr 09 martin 94     
4907 28 Apr 09 martin 95     // Register dataloader
4907 28 Apr 09 martin 96     String typeParameter = "annotationType";
4907 28 Apr 09 martin 97     ItemQuery<AnnotationTypeCategory> categoryQuery = AnnotationTypeCategory.getQuery();
4907 28 Apr 09 martin 98     categoryQuery.include(cc.getInclude());
4907 28 Apr 09 martin 99     categoryQuery.join(Hql.innerJoin("annotationTypes", "atp"));
4907 28 Apr 09 martin 100     categoryQuery.restrict(Restrictions.eq(Hql.alias("atp"), Expressions.parameter(typeParameter)));
4907 28 Apr 09 martin 101     categoryQuery.order(Orders.asc(Hql.property("name")));
7604 25 Feb 19 nicklas 102     cc.setObject("export.dataloader.&categories(name)", new ItemQueryLoader<AnnotationType>(categoryQuery, typeParameter));
7088 03 Mar 16 nicklas 103
7088 03 Mar 16 nicklas 104     // The item types collection -- loader return Set<Item> which need EnumFormatter -> Item.name()
7088 03 Mar 16 nicklas 105     cc.setObject("export.dataloader.@itemTypes", new AnnotationTypeItemTypesLoader());
7088 03 Mar 16 nicklas 106     cc.setObject("export.formatter.@itemTypes", new EnumFormatter<Item>(Item.class));
7089 03 Mar 16 nicklas 107     
7089 03 Mar 16 nicklas 108     // Enumeration values
7089 03 Mar 16 nicklas 109     cc.setObject("export.dataloader.enumeration", new AnnotationTypeEnumerationLoader());
7604 25 Feb 19 nicklas 110     cc.setObject("export.formatter.enumeration", new ToStringFormatter<Object>());
7089 03 Mar 16 nicklas 111     
4907 28 Apr 09 martin 112   }
827 27 Jun 05 nicklas 113 %>
827 27 Jun 05 nicklas 114 <%
1980 14 Feb 06 nicklas 115 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
827 27 Jun 05 nicklas 116 final String ID = sc.getId();
1980 14 Feb 06 nicklas 117 final String cmd = request.getParameter("cmd");
1980 14 Feb 06 nicklas 118 final String root = request.getContextPath()+"/";
1980 14 Feb 06 nicklas 119 final String mode = request.getParameter("mode");
1980 14 Feb 06 nicklas 120 final String callback = request.getParameter("callback");
1980 14 Feb 06 nicklas 121 final String itemId = request.getParameter("item_id");
1980 14 Feb 06 nicklas 122 final String listPage = "list_annotationtypes.jsp?ID="+ID
1980 14 Feb 06 nicklas 123   +(mode == null ? "" : "&mode="+mode)
1980 14 Feb 06 nicklas 124   +(callback == null ? "" : "&callback="+callback)
1980 14 Feb 06 nicklas 125   +(itemId == null ? "" : "&item_id="+itemId);
1980 14 Feb 06 nicklas 126 final String viewPage = "view_annotationtype.jsp?ID="+ID;
1980 14 Feb 06 nicklas 127 final String editPage = "edit_annotationtype.jsp?ID="+ID;
827 27 Jun 05 nicklas 128
1980 14 Feb 06 nicklas 129 String forward = null;
1980 14 Feb 06 nicklas 130 String redirect = null;
1980 14 Feb 06 nicklas 131 String message = null;
1980 14 Feb 06 nicklas 132 DbControl dc = null;
1980 14 Feb 06 nicklas 133
827 27 Jun 05 nicklas 134 try
827 27 Jun 05 nicklas 135 {
1980 14 Feb 06 nicklas 136   if (cmd == null || "List".equals(cmd))
1980 14 Feb 06 nicklas 137   {
1980 14 Feb 06 nicklas 138     // Display the list page without updatinging the current context
2811 26 Oct 06 nicklas 139     Base.getAndSetCurrentContext(sc, itemType, null, defaultContext, true);
1980 14 Feb 06 nicklas 140     redirect = listPage;
1980 14 Feb 06 nicklas 141   }
1980 14 Feb 06 nicklas 142   else if ("UpdateContext".equals(cmd))
1980 14 Feb 06 nicklas 143   {
1980 14 Feb 06 nicklas 144     // Display the list page after updating the current context from the request parameters
1980 14 Feb 06 nicklas 145     Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 146     redirect = listPage;
1980 14 Feb 06 nicklas 147   }
1980 14 Feb 06 nicklas 148   else if ("LoadContext".equals(cmd))
1980 14 Feb 06 nicklas 149   {
1980 14 Feb 06 nicklas 150     // Display the list page after loading a saved context
1980 14 Feb 06 nicklas 151     int contextId = Values.getInt(request.getParameter("context"));
1980 14 Feb 06 nicklas 152     Base.loadContext(sc, contextId, defaultContext);
1980 14 Feb 06 nicklas 153     redirect = listPage;
1980 14 Feb 06 nicklas 154   }
1980 14 Feb 06 nicklas 155
1980 14 Feb 06 nicklas 156   else if ("ViewItem".equals(cmd))
1980 14 Feb 06 nicklas 157   {
1980 14 Feb 06 nicklas 158     // Display the view page for a single item 
1980 14 Feb 06 nicklas 159     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 160     forward = viewPage;
1980 14 Feb 06 nicklas 161   }
1980 14 Feb 06 nicklas 162   else if ("EditItem".equals(cmd))
1980 14 Feb 06 nicklas 163   {
1980 14 Feb 06 nicklas 164     // Display the edit page for a single item (should be opened in a popup)
1980 14 Feb 06 nicklas 165     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 166     redirect = editPage;
1980 14 Feb 06 nicklas 167   }
1980 14 Feb 06 nicklas 168   else if ("NewItem".equals(cmd))
1980 14 Feb 06 nicklas 169   {
1980 14 Feb 06 nicklas 170     // Display the edit page for a new item (should be opened in a popup)
1980 14 Feb 06 nicklas 171     if (!sc.hasPermission(Permission.CREATE, itemType))
827 27 Jun 05 nicklas 172     {
1980 14 Feb 06 nicklas 173       throw new PermissionDeniedException(Permission.CREATE, itemType.toString());
827 27 Jun 05 nicklas 174     }
1980 14 Feb 06 nicklas 175     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 176     cc.setId(0);
1980 14 Feb 06 nicklas 177     redirect = editPage+"&value_type="+request.getParameter("value_type");
1980 14 Feb 06 nicklas 178   }
1980 14 Feb 06 nicklas 179   else if ("UpdateItem".equals(cmd))
1980 14 Feb 06 nicklas 180   {
1980 14 Feb 06 nicklas 181     // Update the properties on an item (will close the popup)
1980 14 Feb 06 nicklas 182     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, defaultContext);
4544 25 Sep 08 nicklas 183     final int maxRecent = Base.getMaxRecent(sc);
7954 12 May 21 nicklas 184     dc = sc.newDbControl(":Edit "+itemType);
7605 26 Feb 19 nicklas 185     AnnotationType annotationType = cc.getObject("item");
1980 14 Feb 06 nicklas 186     if (annotationType == null)
827 27 Jun 05 nicklas 187     {
1980 14 Feb 06 nicklas 188       Type valueType = Type.valueOf(request.getParameter("value_type"));
1980 14 Feb 06 nicklas 189       annotationType = AnnotationType.getNew(dc, valueType);
1980 14 Feb 06 nicklas 190       message = "Annotation type created";
1980 14 Feb 06 nicklas 191       dc.saveItem(annotationType);
827 27 Jun 05 nicklas 192     }
1980 14 Feb 06 nicklas 193     else
827 27 Jun 05 nicklas 194     {
5060 19 Aug 09 nicklas 195       dc.reattachItem(annotationType, false);
1980 14 Feb 06 nicklas 196       message = "Annotation type updated";
1980 14 Feb 06 nicklas 197     }
5510 19 Nov 10 nicklas 198     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(Item.ANNOTATIONTYPE), annotationType);
7604 25 Feb 19 nicklas 199     ExtensionsInvoker<OnSaveAction> invoker = EditUtil.useOnSaveExtensions(jspContext);
5510 19 Nov 10 nicklas 200     try
1980 14 Feb 06 nicklas 201     {
5510 19 Nov 10 nicklas 202       annotationType.setName(Values.getStringOrNull(request.getParameter("name")));
5510 19 Nov 10 nicklas 203       annotationType.setDescription(Values.getStringOrNull(request.getParameter("description")));
5510 19 Nov 10 nicklas 204       annotationType.setExternalId(Values.getStringOrNull(request.getParameter("external_id")));
5510 19 Nov 10 nicklas 205       annotationType.setMultiplicity(Values.getInt(request.getParameter("multiplicity"), 0));
5510 19 Nov 10 nicklas 206       annotationType.setDefaultValue(request.getParameter("defaultValue"));
5510 19 Nov 10 nicklas 207       annotationType.setRequiredForMiame(Values.getBoolean(request.getParameter("required_for_miame")));
5510 19 Nov 10 nicklas 208       annotationType.setProtocolParameter(Values.getBoolean(request.getParameter("is_protocol_parameter")));
6358 27 Nov 13 nicklas 209       annotationType.setDisableLogOfValues(Values.getBoolean(request.getParameter("disable_log")));
6728 13 Feb 15 nicklas 210       annotationType.setDisableInheritance(Values.getBoolean(request.getParameter("disable_inheritance")));
7244 01 Dec 16 nicklas 211       annotationType.setProjectAnnotations(Values.getBoolean(request.getParameter("project_annotations")));
7616 04 Mar 19 nicklas 212       annotationType.setIdentifier(Values.getBoolean(request.getParameter("identifier")));
5510 19 Nov 10 nicklas 213       if (annotationType.getValueType().canEnumerate())
827 27 Jun 05 nicklas 214       {
5510 19 Nov 10 nicklas 215         annotationType.setEnumeration(!"box".equals(request.getParameter("interface")));
5510 19 Nov 10 nicklas 216       }
5510 19 Nov 10 nicklas 217       
5510 19 Nov 10 nicklas 218       // Options tab
5510 19 Nov 10 nicklas 219       Type valueType = annotationType.getValueType();
5510 19 Nov 10 nicklas 220       if (valueType == Type.INT || valueType == Type.LONG)
5510 19 Nov 10 nicklas 221       {
5510 19 Nov 10 nicklas 222         annotationType.setMinValueLong(Values.getLong(request.getParameter("minValue"), null));
5510 19 Nov 10 nicklas 223         annotationType.setMaxValueLong(Values.getLong(request.getParameter("maxValue"), null));
5510 19 Nov 10 nicklas 224         annotationType.setWidth(Values.getInt(request.getParameter("width"), 40));
5510 19 Nov 10 nicklas 225         if (annotationType.isEnumeration())
1980 14 Feb 06 nicklas 226         {
5510 19 Nov 10 nicklas 227           Object[] values = null;
5510 19 Nov 10 nicklas 228           if (valueType == Type.INT)
5510 19 Nov 10 nicklas 229           {
5510 19 Nov 10 nicklas 230             values = Values.getInt(request.getParameter("values").split("[\n\r]+"));
5510 19 Nov 10 nicklas 231           }
5510 19 Nov 10 nicklas 232           else
5510 19 Nov 10 nicklas 233           {
5510 19 Nov 10 nicklas 234             values = Values.getLong(request.getParameter("values").split("[\n\r]+"));
5510 19 Nov 10 nicklas 235           }
5510 19 Nov 10 nicklas 236           annotationType.setValues(Arrays.asList(values));
5510 19 Nov 10 nicklas 237           annotationType.setDisplayAsList("list".equals(request.getParameter("interface")));
1980 14 Feb 06 nicklas 238         }
5510 19 Nov 10 nicklas 239       }
5510 19 Nov 10 nicklas 240       else if (valueType == Type.FLOAT || valueType == Type.DOUBLE)
5510 19 Nov 10 nicklas 241       {
5510 19 Nov 10 nicklas 242         annotationType.setMinValueDouble(Values.getDouble(request.getParameter("minValue"), null));
5510 19 Nov 10 nicklas 243         annotationType.setMaxValueDouble(Values.getDouble(request.getParameter("maxValue"), null));
5510 19 Nov 10 nicklas 244         annotationType.setWidth(Values.getInt(request.getParameter("width"), 40));
5510 19 Nov 10 nicklas 245         if (annotationType.isEnumeration())
1980 14 Feb 06 nicklas 246         {
5510 19 Nov 10 nicklas 247           Object[] values = null;
5510 19 Nov 10 nicklas 248           if (valueType == Type.FLOAT)
5510 19 Nov 10 nicklas 249           {
5510 19 Nov 10 nicklas 250             values = Values.getFloat(request.getParameter("values").split("[\n\r]+"));
5510 19 Nov 10 nicklas 251           }
5510 19 Nov 10 nicklas 252           else
5510 19 Nov 10 nicklas 253           {
5510 19 Nov 10 nicklas 254             values = Values.getDouble(request.getParameter("values").split("[\n\r]+"));
5510 19 Nov 10 nicklas 255           }
5510 19 Nov 10 nicklas 256           annotationType.setValues(Arrays.asList(values));
5510 19 Nov 10 nicklas 257           annotationType.setDisplayAsList("list".equals(request.getParameter("interface")));
1980 14 Feb 06 nicklas 258         }
827 27 Jun 05 nicklas 259       }
5510 19 Nov 10 nicklas 260       else if (valueType == Type.STRING)
827 27 Jun 05 nicklas 261       {
5510 19 Nov 10 nicklas 262         annotationType.setMaxLength(Values.getInteger(request.getParameter("maxLength"), null));
5510 19 Nov 10 nicklas 263         annotationType.setWidth(Values.getInt(request.getParameter("width"), 40));
5510 19 Nov 10 nicklas 264         if (annotationType.isEnumeration())
1980 14 Feb 06 nicklas 265         {
5510 19 Nov 10 nicklas 266           String[] values = request.getParameter("values").split("[\n\r]+");
5510 19 Nov 10 nicklas 267           annotationType.setValues(Arrays.asList(values));
5510 19 Nov 10 nicklas 268           annotationType.setDisplayAsList("list".equals(request.getParameter("interface")));
1980 14 Feb 06 nicklas 269         }
827 27 Jun 05 nicklas 270       }
5510 19 Nov 10 nicklas 271       else if (valueType == Type.TEXT)
1980 14 Feb 06 nicklas 272       {
5510 19 Nov 10 nicklas 273         annotationType.setWidth(Values.getInt(request.getParameter("width"), 40));
5510 19 Nov 10 nicklas 274         annotationType.setHeight(Values.getInt(request.getParameter("height"), 10));
1980 14 Feb 06 nicklas 275       }
5510 19 Nov 10 nicklas 276       else if (valueType == Type.DATE)
1980 14 Feb 06 nicklas 277       {
5510 19 Nov 10 nicklas 278         annotationType.setWidth(Values.getInt(request.getParameter("width"), 40));
5510 19 Nov 10 nicklas 279         if (annotationType.isEnumeration())
5510 19 Nov 10 nicklas 280         {
5510 19 Nov 10 nicklas 281           Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc);
5510 19 Nov 10 nicklas 282           Date[] values = Values.getDate(request.getParameter("values").split("[\n\r]+"), dateFormatter);
5510 19 Nov 10 nicklas 283           annotationType.setValues(Arrays.asList(values));
5510 19 Nov 10 nicklas 284           annotationType.setDisplayAsList("list".equals(request.getParameter("interface")));
5510 19 Nov 10 nicklas 285         }
1980 14 Feb 06 nicklas 286       }
5510 19 Nov 10 nicklas 287       
5510 19 Nov 10 nicklas 288       // Item types tab
5510 19 Nov 10 nicklas 289       Set<Item> allItems = Metadata.getAnnotatableItems();
5510 19 Nov 10 nicklas 290       String[] enabled = request.getParameterValues("enabled");
5510 19 Nov 10 nicklas 291       Collection<String> enabledItems = enabled != null ? Arrays.asList(enabled) : new ArrayList<String>();
5510 19 Nov 10 nicklas 292       for (Item item : allItems)
836 28 Jun 05 nicklas 293       {
5510 19 Nov 10 nicklas 294         if (enabledItems.contains(item.name()))
5510 19 Nov 10 nicklas 295         {
5510 19 Nov 10 nicklas 296           annotationType.enableForItem(item);
5510 19 Nov 10 nicklas 297         }
5510 19 Nov 10 nicklas 298         else
5510 19 Nov 10 nicklas 299         {
5510 19 Nov 10 nicklas 300           annotationType.disableForItem(item);
5510 19 Nov 10 nicklas 301         }
836 28 Jun 05 nicklas 302       }
5510 19 Nov 10 nicklas 303       
5510 19 Nov 10 nicklas 304       // Units tab
5510 19 Nov 10 nicklas 305       if (valueType.isNumerical())
827 27 Jun 05 nicklas 306       {
5510 19 Nov 10 nicklas 307         int unitId = Values.getInt(request.getParameter("unit_id"), -1);
5510 19 Nov 10 nicklas 308         if (unitId >= 0) // < 0 = denied or unchanged
5510 19 Nov 10 nicklas 309         {
5510 19 Nov 10 nicklas 310           Unit unit = unitId == 0 ? null : Unit.getById(dc, unitId);
5510 19 Nov 10 nicklas 311           annotationType.setDefaultUnit(unit);
5510 19 Nov 10 nicklas 312         }
5510 19 Nov 10 nicklas 313         
6294 13 Jun 13 nicklas 314         String[] removeUnits = Values.getString(request.getParameter("-UNIT")).split(",");
5510 19 Nov 10 nicklas 315         for (int i = 0; i < removeUnits.length; ++i)
5510 19 Nov 10 nicklas 316         {
5510 19 Nov 10 nicklas 317           int uId = Values.getInt(removeUnits[i], -1);
5510 19 Nov 10 nicklas 318           if (uId != -1) annotationType.removeUsableUnit(Unit.getById(dc, uId));
5510 19 Nov 10 nicklas 319         }
5510 19 Nov 10 nicklas 320         
6294 13 Jun 13 nicklas 321         String[] addUnits = Values.getString(request.getParameter("+UNIT")).split(",");
5510 19 Nov 10 nicklas 322         for (int i = 0; i < addUnits.length; ++i)
5510 19 Nov 10 nicklas 323         {
5510 19 Nov 10 nicklas 324           int uId = Values.getInt(addUnits[i], -1);
5510 19 Nov 10 nicklas 325           if (uId != -1) annotationType.addUsableUnit(Unit.getById(dc, uId));
5510 19 Nov 10 nicklas 326         }
827 27 Jun 05 nicklas 327       }
5510 19 Nov 10 nicklas 328       
5510 19 Nov 10 nicklas 329       // Categories tab
6294 13 Jun 13 nicklas 330       String[] removeCategories = Values.getString(request.getParameter("-ANNOTATIONTYPECATEGORY")).split(",");
5510 19 Nov 10 nicklas 331       for (int i = 0; i < removeCategories.length; ++i)
4544 25 Sep 08 nicklas 332       {
5510 19 Nov 10 nicklas 333         int categoryId = Values.getInt(removeCategories[i], -1);
5510 19 Nov 10 nicklas 334         if (categoryId != -1) annotationType.removeCategory(AnnotationTypeCategory.getById(dc, categoryId));
4544 25 Sep 08 nicklas 335       }
4544 25 Sep 08 nicklas 336       
6294 13 Jun 13 nicklas 337       String[] addCategories = Values.getString(request.getParameter("+ANNOTATIONTYPECATEGORY")).split(",");
5510 19 Nov 10 nicklas 338       for (int i = 0; i < addCategories.length; ++i)
4544 25 Sep 08 nicklas 339       {
5510 19 Nov 10 nicklas 340         int categoryId = Values.getInt(addCategories[i], -1);
5510 19 Nov 10 nicklas 341         if (categoryId != -1) annotationType.addCategory(AnnotationTypeCategory.getById(dc, categoryId));
4544 25 Sep 08 nicklas 342       }
4544 25 Sep 08 nicklas 343       
5510 19 Nov 10 nicklas 344       // OnSave extensions
5510 19 Nov 10 nicklas 345       invoker.render(OnSaveRenderer.ON_SAVE);
5510 19 Nov 10 nicklas 346       dc.commit();
5510 19 Nov 10 nicklas 347       invoker.render(OnSaveRenderer.ON_COMMIT);
4544 25 Sep 08 nicklas 348     }
5510 19 Nov 10 nicklas 349     catch (Exception ex)
2515 14 Aug 06 nicklas 350     {
5510 19 Nov 10 nicklas 351       invoker.render(OnSaveRenderer.onRollback(ex));
5510 19 Nov 10 nicklas 352       throw ex;
2515 14 Aug 06 nicklas 353     }
5510 19 Nov 10 nicklas 354     finally
2515 14 Aug 06 nicklas 355     {
5510 19 Nov 10 nicklas 356       cc.removeObject("item");
2515 14 Aug 06 nicklas 357     }
1980 14 Feb 06 nicklas 358   }
1980 14 Feb 06 nicklas 359   else if ("DeleteItem".equals(cmd))
1980 14 Feb 06 nicklas 360   {
1980 14 Feb 06 nicklas 361     // Delete a single item and then return to the view page
7954 12 May 21 nicklas 362     dc = sc.newDbControl(":Delete "+itemType);
1980 14 Feb 06 nicklas 363     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 364     RemovableUtil.setRemoved(dc, itemType, Collections.singleton(cc.getId()), true);
1980 14 Feb 06 nicklas 365     dc.commit();
1980 14 Feb 06 nicklas 366     redirect = viewPage;
1980 14 Feb 06 nicklas 367   }
1980 14 Feb 06 nicklas 368   else if ("DeleteItems".equals(cmd))
1980 14 Feb 06 nicklas 369   {
1980 14 Feb 06 nicklas 370     // Delete all selected items on the list page
7954 12 May 21 nicklas 371     dc = sc.newDbControl(":Delete "+itemType);
1980 14 Feb 06 nicklas 372     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 373     int numTotal = cc.getSelected().size();
1980 14 Feb 06 nicklas 374     int numRemoved = RemovableUtil.setRemoved(dc, itemType, cc.getSelected(), true);
1980 14 Feb 06 nicklas 375     dc.commit();
1980 14 Feb 06 nicklas 376     if (numTotal != numRemoved)
1980 14 Feb 06 nicklas 377     {
1980 14 Feb 06 nicklas 378       message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be deleted, because you have no DELETE permission";
1980 14 Feb 06 nicklas 379     }
6192 31 Oct 12 nicklas 380     redirect = listPage;
1980 14 Feb 06 nicklas 381   }
1980 14 Feb 06 nicklas 382   else if ("RestoreItem".equals(cmd))
1980 14 Feb 06 nicklas 383   {
1980 14 Feb 06 nicklas 384     // Restore a single item and then return to the view page
7954 12 May 21 nicklas 385     dc = sc.newDbControl(":Restore "+itemType);
1980 14 Feb 06 nicklas 386     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 387     RemovableUtil.setRemoved(dc, itemType, Collections.singleton(cc.getId()), false);
1980 14 Feb 06 nicklas 388     dc.commit();
1980 14 Feb 06 nicklas 389     redirect = viewPage;
1980 14 Feb 06 nicklas 390   }
1980 14 Feb 06 nicklas 391   else if ("RestoreItems".equals(cmd))
1980 14 Feb 06 nicklas 392   {
1980 14 Feb 06 nicklas 393     // Restore all selected items on the list page
7954 12 May 21 nicklas 394     dc = sc.newDbControl(":Restore "+itemType);
1980 14 Feb 06 nicklas 395     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 396     int numTotal = cc.getSelected().size();
1980 14 Feb 06 nicklas 397     int numRemoved = RemovableUtil.setRemoved(dc, itemType, cc.getSelected(), false);
1980 14 Feb 06 nicklas 398     dc.commit();
1980 14 Feb 06 nicklas 399     if (numTotal != numRemoved)
1980 14 Feb 06 nicklas 400     {
2528 15 Aug 06 martin 401       message = (numRemoved == 0 ? "No" : "Only "+numRemoved+" of "+numTotal) + " items could be restored, because you have no WRITE permission";
1980 14 Feb 06 nicklas 402     }
6192 31 Oct 12 nicklas 403     redirect = listPage;
1980 14 Feb 06 nicklas 404   }
1980 14 Feb 06 nicklas 405   else if ("ShareItem".equals(cmd))
1980 14 Feb 06 nicklas 406   {
1980 14 Feb 06 nicklas 407     // Display a popup window for sharing a single item
7954 12 May 21 nicklas 408     dc = sc.newDbControl(":Share "+itemType);
1980 14 Feb 06 nicklas 409     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 410     MultiPermissions permissions = ShareableUtil.getMultiPermissions(dc, itemType, Collections.singleton(cc.getId()));
1980 14 Feb 06 nicklas 411     dc.close();
1980 14 Feb 06 nicklas 412     cc.setObject("MultiPermissions", permissions);
1980 14 Feb 06 nicklas 413     redirect = "../../common/share/share.jsp?ID="+ID+"&item_type="+itemType.name();
1980 14 Feb 06 nicklas 414   }
1980 14 Feb 06 nicklas 415   else if ("ShareItems".equals(cmd))
1980 14 Feb 06 nicklas 416   {
1980 14 Feb 06 nicklas 417     // Display a popup window for sharing all selected items on the list page
7954 12 May 21 nicklas 418     dc = sc.newDbControl(":Share "+itemType);
1980 14 Feb 06 nicklas 419     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 420     MultiPermissions permissions = ShareableUtil.getMultiPermissions(dc, itemType, cc.getSelected());
1980 14 Feb 06 nicklas 421     dc.close();
1980 14 Feb 06 nicklas 422     cc.setObject("MultiPermissions", permissions);
1980 14 Feb 06 nicklas 423     redirect = "../../common/share/share.jsp?ID="+ID+"&item_type="+itemType.name();
1980 14 Feb 06 nicklas 424   }
4573 10 Oct 08 martin 425   else if ("SetOwnerOfItem".equals(cmd))
2921 15 Nov 06 nicklas 426   {
4573 10 Oct 08 martin 427     // Change owner of items selected on a list page
7954 12 May 21 nicklas 428     dc = sc.newDbControl(":Set owner of "+itemType);
2921 15 Nov 06 nicklas 429     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
4587 15 Oct 08 martin 430     OwnedItem item = (OwnedItem)itemType.getById(dc, cc.getId());
4587 15 Oct 08 martin 431     cc.setObject("OwnedItems", Collections.singleton(item));
4573 10 Oct 08 martin 432     redirect = "../../common/ownership/ownership.jsp?ID="+ID+"&item_type="+itemType.name();
2921 15 Nov 06 nicklas 433   }
4573 10 Oct 08 martin 434   else if ("SetOwnerOfItems".equals(cmd))
2921 15 Nov 06 nicklas 435   {
4573 10 Oct 08 martin 436     // Change owner of items selected on a list page
7954 12 May 21 nicklas 437     dc = sc.newDbControl(":Set owner of "+itemType);
2921 15 Nov 06 nicklas 438     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
4587 15 Oct 08 martin 439     Set<OwnedItem> items = new HashSet<OwnedItem>();
4587 15 Oct 08 martin 440     for (Integer id : cc.getSelected())
4587 15 Oct 08 martin 441     {
4587 15 Oct 08 martin 442       if (id != null) items.add((OwnedItem)itemType.getById(dc, id));
4587 15 Oct 08 martin 443     }
4587 15 Oct 08 martin 444     dc.close();
4587 15 Oct 08 martin 445     cc.setObject("OwnedItems", items);
4573 10 Oct 08 martin 446     redirect = "../../common/ownership/ownership.jsp?ID="+ID+"&item_type="+itemType.name();
2921 15 Nov 06 nicklas 447   }
1980 14 Feb 06 nicklas 448   else if ("ExportItems".equals(cmd))
1980 14 Feb 06 nicklas 449   {
1980 14 Feb 06 nicklas 450     // Run an export plugin in a list context
1980 14 Feb 06 nicklas 451     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 452     final ItemQuery<AnnotationType> query = AnnotationType.getQuery(null);
7954 12 May 21 nicklas 453     dc = sc.newDbControl(":Export "+itemType);
7914 23 Feb 21 nicklas 454     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
7914 23 Feb 21 nicklas 455     cc.configureQuery(dc, query, jspContext, true);
1980 14 Feb 06 nicklas 456     cc.setQuery(query);
4907 28 Apr 09 martin 457     registerExportUtils(cc);
7604 25 Feb 19 nicklas 458     ExtensionsInvoker<ListColumnAction<AnnotationType,?>> listInvoker = ListColumnUtil.useExtensions(jspContext);
7604 25 Feb 19 nicklas 459     listInvoker.render(new ListColumnExportRenderer<AnnotationType>(cc));
6045 03 Apr 12 nicklas 460     dc.close();
1980 14 Feb 06 nicklas 461     redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&title=Export+annotation+types";
1980 14 Feb 06 nicklas 462   }
1980 14 Feb 06 nicklas 463   else if ("ExportItem".equals(cmd))
1980 14 Feb 06 nicklas 464   {
1980 14 Feb 06 nicklas 465     // Run an export plugin in single-item context
1980 14 Feb 06 nicklas 466     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
4907 28 Apr 09 martin 467     registerExportUtils(cc);
1980 14 Feb 06 nicklas 468     redirect = "../../common/export/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&title=Export+annotation+type";
1980 14 Feb 06 nicklas 469   }
1980 14 Feb 06 nicklas 470   else if ("ImportItems".equals(cmd))
1980 14 Feb 06 nicklas 471   {
1980 14 Feb 06 nicklas 472     // Run an import plugin in a list context
1980 14 Feb 06 nicklas 473     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 474     final ItemQuery<AnnotationType> query = AnnotationType.getQuery(null);
7954 12 May 21 nicklas 475     dc = sc.newDbControl(":Import "+itemType);
7914 23 Feb 21 nicklas 476     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
7914 23 Feb 21 nicklas 477     cc.configureQuery(dc, query, jspContext, true);
5590 16 Mar 11 nicklas 478     dc.close();
1980 14 Feb 06 nicklas 479     cc.setQuery(query);
1980 14 Feb 06 nicklas 480     redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&title=Import+annotation+types";
1980 14 Feb 06 nicklas 481   }
1980 14 Feb 06 nicklas 482   else if ("ImportItem".equals(cmd))
1980 14 Feb 06 nicklas 483   {
1980 14 Feb 06 nicklas 484     // Run an import plugin in single-item context
1980 14 Feb 06 nicklas 485     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 486     redirect = "../../common/import/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&title=Import+annotation+typey";
1980 14 Feb 06 nicklas 487   }
1980 14 Feb 06 nicklas 488   else if ("RunListPlugin".equals(cmd))
1980 14 Feb 06 nicklas 489   {
1980 14 Feb 06 nicklas 490     // Run another plugin in a list context
1980 14 Feb 06 nicklas 491     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 492     final ItemQuery<AnnotationType> query = AnnotationType.getQuery(null);
7954 12 May 21 nicklas 493     dc = sc.newDbControl(":Run plugin "+itemType);
7914 23 Feb 21 nicklas 494     JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.list(itemType), null);
7914 23 Feb 21 nicklas 495     cc.configureQuery(dc, query, jspContext, true);
5590 16 Mar 11 nicklas 496     dc.close();
1980 14 Feb 06 nicklas 497     cc.setQuery(query);
1980 14 Feb 06 nicklas 498     redirect = "../../common/plugin/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=LIST&main_type=OTHER&title=Run+plugin";
1980 14 Feb 06 nicklas 499   }
1980 14 Feb 06 nicklas 500   else if ("RunPlugin".equals(cmd))
1980 14 Feb 06 nicklas 501   {
1980 14 Feb 06 nicklas 502     // Run another plugin in single-item context
1980 14 Feb 06 nicklas 503     ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, pageContext, defaultContext);
1980 14 Feb 06 nicklas 504     redirect = "../../common/plugin/index.jsp?ID="+ID+"&cmd=SelectPlugin&item_type="+itemType.name()+"&context_type=ITEM&main_type=OTHER&title=Run+plugin";
1980 14 Feb 06 nicklas 505   }
1980 14 Feb 06 nicklas 506   else
1980 14 Feb 06 nicklas 507   {
1980 14 Feb 06 nicklas 508     throw new WebException("popup", "Invalid command", "The command {1} is not recognised as a valid command.", cmd);
1980 14 Feb 06 nicklas 509   }
827 27 Jun 05 nicklas 510 }
827 27 Jun 05 nicklas 511 finally
827 27 Jun 05 nicklas 512 {
827 27 Jun 05 nicklas 513   if (dc != null) dc.close();
827 27 Jun 05 nicklas 514 }
1980 14 Feb 06 nicklas 515
1980 14 Feb 06 nicklas 516 if (forward != null)
1980 14 Feb 06 nicklas 517 {
6192 31 Oct 12 nicklas 518   sc.setSessionSetting("alert-message", message);
1980 14 Feb 06 nicklas 519   pageContext.forward(forward);
1980 14 Feb 06 nicklas 520 }
1980 14 Feb 06 nicklas 521 else if (redirect != null)
1980 14 Feb 06 nicklas 522 {
6192 31 Oct 12 nicklas 523   sc.setSessionSetting("alert-message", message);
1980 14 Feb 06 nicklas 524   response.sendRedirect(redirect);
1980 14 Feb 06 nicklas 525 }
1980 14 Feb 06 nicklas 526 else if (message == null)
1980 14 Feb 06 nicklas 527 {
1980 14 Feb 06 nicklas 528   response.sendRedirect(root + "common/close_popup.jsp?refresh_opener=1&wait=0");
1980 14 Feb 06 nicklas 529 }
1980 14 Feb 06 nicklas 530 else
1980 14 Feb 06 nicklas 531 {
1980 14 Feb 06 nicklas 532   response.sendRedirect(root + "common/close_popup.jsp?refresh_opener=1&message="+HTML.urlEncode(message));
1980 14 Feb 06 nicklas 533 }
1980 14 Feb 06 nicklas 534 %>
1980 14 Feb 06 nicklas 535