www/admin/itemsubtypes/ajax.jsp

Code
Comments
Other
Rev Date Author Line
5631 16 May 11 nicklas 1 <%-- $Id$
5631 16 May 11 nicklas 2   ------------------------------------------------------------------
5631 16 May 11 nicklas 3   Copyright (C) 2011 Nicklas Nordborg
5631 16 May 11 nicklas 4
5631 16 May 11 nicklas 5   This file is part of BASE - BioArray Software Environment.
5631 16 May 11 nicklas 6   Available at http://base.thep.lu.se/
5631 16 May 11 nicklas 7
5631 16 May 11 nicklas 8   BASE is free software; you can redistribute it and/or
5631 16 May 11 nicklas 9   modify it under the terms of the GNU General Public License
5631 16 May 11 nicklas 10   as published by the Free Software Foundation; either version 3
5631 16 May 11 nicklas 11   of the License, or (at your option) any later version.
5631 16 May 11 nicklas 12
5631 16 May 11 nicklas 13   BASE is distributed in the hope that it will be useful,
5631 16 May 11 nicklas 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
5631 16 May 11 nicklas 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5631 16 May 11 nicklas 16   GNU General Public License for more details.
5631 16 May 11 nicklas 17
5631 16 May 11 nicklas 18   You should have received a copy of the GNU General Public License
5631 16 May 11 nicklas 19   along with BASE. If not, see <http://www.gnu.org/licenses/>.
5631 16 May 11 nicklas 20   ------------------------------------------------------------------
5631 16 May 11 nicklas 21
5631 16 May 11 nicklas 22   @author Nicklas
5631 16 May 11 nicklas 23 --%>
5631 16 May 11 nicklas 24 <%@ page pageEncoding="UTF-8" session="false" contentType="application/json"
5631 16 May 11 nicklas 25   import="net.sf.basedb.core.SessionControl"
5631 16 May 11 nicklas 26   import="net.sf.basedb.core.DbControl"
5631 16 May 11 nicklas 27   import="net.sf.basedb.core.Item"
5686 05 Aug 11 nicklas 28   import="net.sf.basedb.core.ItemContext"
5687 09 Aug 11 nicklas 29   import="net.sf.basedb.core.Project"
5631 16 May 11 nicklas 30   import="net.sf.basedb.core.ItemSubtype"
5650 01 Jun 11 nicklas 31   import="net.sf.basedb.core.Subtypable"
5686 05 Aug 11 nicklas 32   import="net.sf.basedb.core.BasicItem"
5686 05 Aug 11 nicklas 33   import="net.sf.basedb.core.Nameable"
5687 09 Aug 11 nicklas 34   import="net.sf.basedb.core.SystemItems"
5687 09 Aug 11 nicklas 35   import="net.sf.basedb.core.Protocol"
5687 09 Aug 11 nicklas 36   import="net.sf.basedb.core.Hardware"
5687 09 Aug 11 nicklas 37   import="net.sf.basedb.core.Software"
5631 16 May 11 nicklas 38   import="net.sf.basedb.core.InvalidDataException"
5631 16 May 11 nicklas 39   import="net.sf.basedb.util.Values"
5631 16 May 11 nicklas 40   import="net.sf.basedb.util.error.ThrowableUtil"
5631 16 May 11 nicklas 41   import="net.sf.basedb.clients.web.Base"
5631 16 May 11 nicklas 42   import="net.sf.basedb.clients.web.WebException"
5631 16 May 11 nicklas 43   import="org.json.simple.JSONObject"
5686 05 Aug 11 nicklas 44   import="org.json.simple.JSONArray"
5686 05 Aug 11 nicklas 45   import="java.util.List"
5631 16 May 11 nicklas 46 %>
5631 16 May 11 nicklas 47 <%
6124 13 Sep 12 nicklas 48 response.setHeader("Cache-Control", "no-cache, max-age=0");
5631 16 May 11 nicklas 49 final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
5631 16 May 11 nicklas 50 final String ID = sc.getId();
5631 16 May 11 nicklas 51 final String cmd = request.getParameter("cmd");
5631 16 May 11 nicklas 52 final String root = request.getContextPath()+"/";
5631 16 May 11 nicklas 53 final int itemId = Values.getInt(request.getParameter("item_id"));
5631 16 May 11 nicklas 54 DbControl dc = null;
5631 16 May 11 nicklas 55 out.clear();
5631 16 May 11 nicklas 56 JSONObject json = new JSONObject();
5631 16 May 11 nicklas 57 json.put("status", "ok");
5631 16 May 11 nicklas 58 try
5631 16 May 11 nicklas 59 {
5631 16 May 11 nicklas 60   if ("GetRelatedSubtype".equals(cmd))
5631 16 May 11 nicklas 61   {
5631 16 May 11 nicklas 62     Item relatedType = Item.valueOf(request.getParameter("relatedType"));
5645 27 May 11 nicklas 63     int defaultRelatedId = Values.getInt(request.getParameter("defaultRelatedId"));
7954 12 May 21 nicklas 64     dc = sc.newDbControl(":Get related subtype");
5645 27 May 11 nicklas 65     ItemSubtype related = null;
5645 27 May 11 nicklas 66     if (itemId > 0)
5645 27 May 11 nicklas 67     {
5645 27 May 11 nicklas 68       ItemSubtype subtype = ItemSubtype.getById(dc, itemId);
5645 27 May 11 nicklas 69       related = subtype.getRelatedSubtype(relatedType);
5645 27 May 11 nicklas 70     }
5645 27 May 11 nicklas 71     if (related == null && defaultRelatedId > 0)
5645 27 May 11 nicklas 72     {
5645 27 May 11 nicklas 73       related = ItemSubtype.getById(dc, defaultRelatedId);
5645 27 May 11 nicklas 74     }
5631 16 May 11 nicklas 75     if (related != null)
5631 16 May 11 nicklas 76     {
5631 16 May 11 nicklas 77       json.put("id", related.getId());
5631 16 May 11 nicklas 78       json.put("name", related.getName());
5631 16 May 11 nicklas 79     }
5631 16 May 11 nicklas 80     dc.close();
5631 16 May 11 nicklas 81   }
5650 01 Jun 11 nicklas 82   else if ("GetSubtypeForItem".equals(cmd))
5650 01 Jun 11 nicklas 83   {
5650 01 Jun 11 nicklas 84     Item itemType = Item.valueOf(request.getParameter("itemType"));
7954 12 May 21 nicklas 85     dc = sc.newDbControl(":Get subtype for item");
5650 01 Jun 11 nicklas 86     Subtypable item = (Subtypable)itemType.getById(dc, itemId);
5650 01 Jun 11 nicklas 87     ItemSubtype subtype = item.getItemSubtype();
5650 01 Jun 11 nicklas 88     if (subtype != null)
5650 01 Jun 11 nicklas 89     {
5650 01 Jun 11 nicklas 90       json.put("id", subtype.getId());
5650 01 Jun 11 nicklas 91       json.put("name", subtype.getName());
5650 01 Jun 11 nicklas 92     }
5650 01 Jun 11 nicklas 93     dc.close();
5650 01 Jun 11 nicklas 94   }
5686 05 Aug 11 nicklas 95   else if ("GetRecentAndRelated".equals(cmd))
5686 05 Aug 11 nicklas 96   {
7954 12 May 21 nicklas 97     dc = sc.newDbControl(":Get recent items");
5686 05 Aug 11 nicklas 98
5687 09 Aug 11 nicklas 99     // The main item's subtype
5686 05 Aug 11 nicklas 100     ItemSubtype subtype = itemId == 0 ? null : ItemSubtype.getById(dc, itemId);
5687 09 Aug 11 nicklas 101     Item mainItemType = null;
5686 05 Aug 11 nicklas 102     if (subtype != null)
5686 05 Aug 11 nicklas 103     {
5687 09 Aug 11 nicklas 104       mainItemType = subtype.getMainItemType();
5686 05 Aug 11 nicklas 105       json.put("id", subtype.getId());
5686 05 Aug 11 nicklas 106       json.put("name", subtype.getName());
5686 05 Aug 11 nicklas 107     }
5687 09 Aug 11 nicklas 108     else
5687 09 Aug 11 nicklas 109     {
5687 09 Aug 11 nicklas 110       mainItemType = Item.valueOf(request.getParameter("itemType"));
5687 09 Aug 11 nicklas 111     }
5687 09 Aug 11 nicklas 112
5687 09 Aug 11 nicklas 113     // Current context for the main item
5687 09 Aug 11 nicklas 114     ItemContext cc = sc.getCurrentContext(mainItemType);
5687 09 Aug 11 nicklas 115
5687 09 Aug 11 nicklas 116     // Active project
5687 09 Aug 11 nicklas 117     Project activeProject = sc.getActiveProjectId() > 0 ? Project.getById(dc, sc.getActiveProjectId()) : null;
5686 05 Aug 11 nicklas 118     
5687 09 Aug 11 nicklas 119     // Related item types
5686 05 Aug 11 nicklas 120     for (String relatedType : request.getParameterValues("relatedType"))
5686 05 Aug 11 nicklas 121     {
5686 05 Aug 11 nicklas 122       JSONObject jsonITEM = new JSONObject();
5686 05 Aug 11 nicklas 123       Item relatedItem = Item.valueOf(relatedType);
5686 05 Aug 11 nicklas 124       
5686 05 Aug 11 nicklas 125       // Load the related subtype
5687 09 Aug 11 nicklas 126       ItemSubtype relatedSubtype = null;
5686 05 Aug 11 nicklas 127       if (subtype != null)
5686 05 Aug 11 nicklas 128       {
5687 09 Aug 11 nicklas 129         relatedSubtype = subtype.getRelatedSubtype(relatedItem);
5686 05 Aug 11 nicklas 130         if (relatedSubtype != null)
5686 05 Aug 11 nicklas 131         {
5686 05 Aug 11 nicklas 132           JSONObject jsonRelated = new JSONObject();
5686 05 Aug 11 nicklas 133           jsonRelated.put("id", relatedSubtype.getId());
5686 05 Aug 11 nicklas 134           jsonRelated.put("name", relatedSubtype.getName());
5686 05 Aug 11 nicklas 135           jsonITEM.put("related", jsonRelated);
5686 05 Aug 11 nicklas 136         }
5686 05 Aug 11 nicklas 137       }
5686 05 Aug 11 nicklas 138       
5687 09 Aug 11 nicklas 139       if (relatedSubtype == null)
5687 09 Aug 11 nicklas 140       {
5687 09 Aug 11 nicklas 141         // Find a default related subtype
5687 09 Aug 11 nicklas 142         String systemId = null;
5687 09 Aug 11 nicklas 143         if (relatedItem == Item.PROTOCOL)
5687 09 Aug 11 nicklas 144         {
5687 09 Aug 11 nicklas 145           systemId = Protocol.getDefaultSystemId(mainItemType);
5687 09 Aug 11 nicklas 146         }
5687 09 Aug 11 nicklas 147         else if (relatedItem == Item.HARDWARE)
5687 09 Aug 11 nicklas 148         {
5687 09 Aug 11 nicklas 149           systemId = Hardware.getDefaultSystemId(mainItemType);
5687 09 Aug 11 nicklas 150         }
5687 09 Aug 11 nicklas 151         else if (relatedItem == Item.SOFTWARE)
5687 09 Aug 11 nicklas 152         {
5687 09 Aug 11 nicklas 153           systemId = Software.getDefaultSystemId(mainItemType);
5687 09 Aug 11 nicklas 154         }
5687 09 Aug 11 nicklas 155         if (systemId != null) 
5687 09 Aug 11 nicklas 156         {
5687 09 Aug 11 nicklas 157           relatedSubtype = ItemSubtype.getById(dc, SystemItems.getId(systemId));
5687 09 Aug 11 nicklas 158         }
5687 09 Aug 11 nicklas 159       }
5687 09 Aug 11 nicklas 160       
5686 05 Aug 11 nicklas 161       // Load the most recently used items
5686 05 Aug 11 nicklas 162       List<? extends BasicItem> recentItems = cc.getRecent(dc, relatedItem, subtype);
5686 05 Aug 11 nicklas 163       if (recentItems != null && recentItems.size() > 0)
5686 05 Aug 11 nicklas 164       {
5686 05 Aug 11 nicklas 165         JSONArray jsonRecent = new JSONArray();
5686 05 Aug 11 nicklas 166         for (BasicItem recent : recentItems)
5686 05 Aug 11 nicklas 167         {
5686 05 Aug 11 nicklas 168           JSONObject jsonRecentItem = new JSONObject();
7703 11 Apr 19 nicklas 169           if (recent != null)
7703 11 Apr 19 nicklas 170           {
7703 11 Apr 19 nicklas 171             jsonRecentItem.put("id", recent.getId());
7703 11 Apr 19 nicklas 172             jsonRecentItem.put("name", ((Nameable)recent).getName());
7703 11 Apr 19 nicklas 173           }
5686 05 Aug 11 nicklas 174           jsonRecent.add(jsonRecentItem);
5686 05 Aug 11 nicklas 175         }
5686 05 Aug 11 nicklas 176         jsonITEM.put("recent", jsonRecent);
5686 05 Aug 11 nicklas 177       }
5687 09 Aug 11 nicklas 178       
5687 09 Aug 11 nicklas 179       // Load project default items
5687 09 Aug 11 nicklas 180       if (activeProject != null)
5687 09 Aug 11 nicklas 181       {
5687 09 Aug 11 nicklas 182         List<? extends BasicItem> defaultItems = relatedSubtype != null ?
5687 09 Aug 11 nicklas 183             activeProject.findDefaultItems(dc, relatedSubtype, false) : activeProject.findDefaultItems(dc, relatedItem, true);
5687 09 Aug 11 nicklas 184             
5687 09 Aug 11 nicklas 185         JSONArray jsonDefault = new JSONArray();
5687 09 Aug 11 nicklas 186         for (BasicItem defaultItem : defaultItems)
5687 09 Aug 11 nicklas 187         {
5687 09 Aug 11 nicklas 188           JSONObject jsonDefaultItem = new JSONObject();
5687 09 Aug 11 nicklas 189           jsonDefaultItem.put("id", defaultItem.getId());
5687 09 Aug 11 nicklas 190           jsonDefaultItem.put("name", ((Nameable)defaultItem).getName());
5687 09 Aug 11 nicklas 191           jsonDefault.add(jsonDefaultItem);
5687 09 Aug 11 nicklas 192         }
5687 09 Aug 11 nicklas 193         jsonITEM.put("default", jsonDefault);
5687 09 Aug 11 nicklas 194       }
5687 09 Aug 11 nicklas 195       
5686 05 Aug 11 nicklas 196       json.put(relatedType, jsonITEM);
5686 05 Aug 11 nicklas 197     }
5686 05 Aug 11 nicklas 198     dc.close();
5686 05 Aug 11 nicklas 199   }
6297 14 Jun 13 nicklas 200   else if ("GetProjectDefaultAndRecentItems".equals(cmd))
6056 12 Jun 12 nicklas 201   {
7954 12 May 21 nicklas 202     dc = sc.newDbControl(":Get project default and recent items");
6056 12 Jun 12 nicklas 203
6058 13 Jun 12 nicklas 204     // The subtype
6058 13 Jun 12 nicklas 205     ItemSubtype subtype = itemId == 0 ? null : ItemSubtype.getById(dc, itemId);
6058 13 Jun 12 nicklas 206     if (subtype != null)
6058 13 Jun 12 nicklas 207     {
6058 13 Jun 12 nicklas 208       json.put("id", subtype.getId());
6058 13 Jun 12 nicklas 209       json.put("name", subtype.getName());
6058 13 Jun 12 nicklas 210     }
6056 12 Jun 12 nicklas 211
6297 14 Jun 13 nicklas 212     Item itemType = request.getParameter("itemType") == null ? 
6297 14 Jun 13 nicklas 213       null : Item.valueOf(request.getParameter("itemType"));
6297 14 Jun 13 nicklas 214     
6056 12 Jun 12 nicklas 215     // Load project default items for active project
6056 12 Jun 12 nicklas 216     if (sc.getActiveProjectId() > 0)
6056 12 Jun 12 nicklas 217     {
6056 12 Jun 12 nicklas 218       Project activeProject = Project.getById(dc, sc.getActiveProjectId());
6056 12 Jun 12 nicklas 219       
6058 13 Jun 12 nicklas 220       List<? extends BasicItem> defaultItems = subtype == null ? 
6297 14 Jun 13 nicklas 221           activeProject.findDefaultItems(dc, itemType, true) :
6058 13 Jun 12 nicklas 222           activeProject.findDefaultItems(dc, subtype, true);
6056 12 Jun 12 nicklas 223           
6056 12 Jun 12 nicklas 224       JSONArray jsonDefault = new JSONArray();
6056 12 Jun 12 nicklas 225       for (BasicItem defaultItem : defaultItems)
6056 12 Jun 12 nicklas 226       {
6056 12 Jun 12 nicklas 227         JSONObject jsonDefaultItem = new JSONObject();
6056 12 Jun 12 nicklas 228         jsonDefaultItem.put("id", defaultItem.getId());
6056 12 Jun 12 nicklas 229         jsonDefaultItem.put("name", ((Nameable)defaultItem).getName());
6056 12 Jun 12 nicklas 230         jsonDefault.add(jsonDefaultItem);
6056 12 Jun 12 nicklas 231       }
6056 12 Jun 12 nicklas 232       json.put("default", jsonDefault);
6056 12 Jun 12 nicklas 233     }
6056 12 Jun 12 nicklas 234     
6297 14 Jun 13 nicklas 235     // Current context for the main item
6297 14 Jun 13 nicklas 236     if (itemType != null)
6297 14 Jun 13 nicklas 237     {
6297 14 Jun 13 nicklas 238       ItemContext cc = sc.getCurrentContext(itemType);
6297 14 Jun 13 nicklas 239   
6297 14 Jun 13 nicklas 240       // Load the most recently used items
6297 14 Jun 13 nicklas 241       List<? extends BasicItem> recentItems = cc.getRecent(dc, subtype == null ? itemType : subtype.getMainItemType(), subtype);
6297 14 Jun 13 nicklas 242       if (recentItems != null && recentItems.size() > 0)
6297 14 Jun 13 nicklas 243       {
6297 14 Jun 13 nicklas 244         JSONArray jsonRecent = new JSONArray();
6297 14 Jun 13 nicklas 245         for (BasicItem recent : recentItems)
6297 14 Jun 13 nicklas 246         {
6297 14 Jun 13 nicklas 247           JSONObject jsonRecentItem = new JSONObject();
7703 11 Apr 19 nicklas 248           if (recent != null)
7703 11 Apr 19 nicklas 249           {
7703 11 Apr 19 nicklas 250             jsonRecentItem.put("id", recent.getId());
7703 11 Apr 19 nicklas 251             jsonRecentItem.put("name", ((Nameable)recent).getName());
7703 11 Apr 19 nicklas 252           }
6297 14 Jun 13 nicklas 253           jsonRecent.add(jsonRecentItem);
6297 14 Jun 13 nicklas 254         }
6297 14 Jun 13 nicklas 255         json.put("recent", jsonRecent);
6297 14 Jun 13 nicklas 256       }
6297 14 Jun 13 nicklas 257     }
6297 14 Jun 13 nicklas 258
6297 14 Jun 13 nicklas 259     
6056 12 Jun 12 nicklas 260     dc.close();
6056 12 Jun 12 nicklas 261   }
6056 12 Jun 12 nicklas 262
5631 16 May 11 nicklas 263   else
5631 16 May 11 nicklas 264   {
5631 16 May 11 nicklas 265     throw new WebException("popup", "Invalid command", "The command {1} is not recognised as a valid command.", cmd);
5631 16 May 11 nicklas 266   }
5631 16 May 11 nicklas 267 }
5631 16 May 11 nicklas 268 catch (Throwable t)
5631 16 May 11 nicklas 269 {
5631 16 May 11 nicklas 270   t.printStackTrace();
5631 16 May 11 nicklas 271   json.clear();
5631 16 May 11 nicklas 272   json.put("status", "error");
5631 16 May 11 nicklas 273   json.put("message", t.getMessage());
5631 16 May 11 nicklas 274   json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
5631 16 May 11 nicklas 275 }
5631 16 May 11 nicklas 276 finally
5631 16 May 11 nicklas 277 {
5631 16 May 11 nicklas 278   json.writeJSONString(out);
5631 16 May 11 nicklas 279   out.flush();
5631 16 May 11 nicklas 280   if (dc != null) dc.close();
5631 16 May 11 nicklas 281 }
5631 16 May 11 nicklas 282 %>