extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/servlet/SoftwareServlet.java

Code
Comments
Other
Rev Date Author Line
2265 05 Mar 14 nicklas 1 package net.sf.basedb.reggie.servlet;
2265 05 Mar 14 nicklas 2
2265 05 Mar 14 nicklas 3 import java.io.IOException;
3115 06 Feb 15 nicklas 4 import java.util.ArrayList;
3115 06 Feb 15 nicklas 5 import java.util.List;
2265 05 Mar 14 nicklas 6
2265 05 Mar 14 nicklas 7 import javax.servlet.ServletException;
2265 05 Mar 14 nicklas 8 import javax.servlet.http.HttpServlet;
2265 05 Mar 14 nicklas 9 import javax.servlet.http.HttpServletRequest;
2265 05 Mar 14 nicklas 10 import javax.servlet.http.HttpServletResponse;
2265 05 Mar 14 nicklas 11
2265 05 Mar 14 nicklas 12 import org.json.simple.JSONArray;
2265 05 Mar 14 nicklas 13 import org.json.simple.JSONObject;
2265 05 Mar 14 nicklas 14
4482 05 May 17 nicklas 15 import net.sf.basedb.core.AnnotationRestriction;
3616 23 Nov 15 nicklas 16 import net.sf.basedb.core.AnnotationSimpleRestriction;
2265 05 Mar 14 nicklas 17 import net.sf.basedb.core.DbControl;
2265 05 Mar 14 nicklas 18 import net.sf.basedb.core.ItemQuery;
3616 23 Nov 15 nicklas 19 import net.sf.basedb.core.Operator;
3603 16 Nov 15 nicklas 20 import net.sf.basedb.core.Permission;
2265 05 Mar 14 nicklas 21 import net.sf.basedb.core.Project;
2265 05 Mar 14 nicklas 22 import net.sf.basedb.core.SessionControl;
2265 05 Mar 14 nicklas 23 import net.sf.basedb.core.Software;
2265 05 Mar 14 nicklas 24 import net.sf.basedb.core.query.Hql;
2265 05 Mar 14 nicklas 25 import net.sf.basedb.core.query.Orders;
2598 22 Aug 14 nicklas 26 import net.sf.basedb.reggie.JsonUtil;
2265 05 Mar 14 nicklas 27 import net.sf.basedb.reggie.Reggie;
3115 06 Feb 15 nicklas 28 import net.sf.basedb.reggie.dao.Annotationtype;
2265 05 Mar 14 nicklas 29 import net.sf.basedb.reggie.dao.Subtype;
2265 05 Mar 14 nicklas 30 import net.sf.basedb.util.error.ThrowableUtil;
2265 05 Mar 14 nicklas 31
2265 05 Mar 14 nicklas 32 /**
2265 05 Mar 14 nicklas 33   Get information about software.
2265 05 Mar 14 nicklas 34   
2265 05 Mar 14 nicklas 35   @author nicklas
2265 05 Mar 14 nicklas 36    @since 2.156
2265 05 Mar 14 nicklas 37 */
2265 05 Mar 14 nicklas 38 public class SoftwareServlet 
2265 05 Mar 14 nicklas 39   extends HttpServlet 
2265 05 Mar 14 nicklas 40 {
2265 05 Mar 14 nicklas 41
2265 05 Mar 14 nicklas 42
2265 05 Mar 14 nicklas 43   private static final long serialVersionUID = 928631805782071L;
2265 05 Mar 14 nicklas 44
2265 05 Mar 14 nicklas 45   public SoftwareServlet()
2265 05 Mar 14 nicklas 46   {}
2265 05 Mar 14 nicklas 47
2265 05 Mar 14 nicklas 48   @Override
2265 05 Mar 14 nicklas 49   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
2265 05 Mar 14 nicklas 50     throws ServletException, IOException 
2265 05 Mar 14 nicklas 51   {
2265 05 Mar 14 nicklas 52     String cmd = req.getParameter("cmd");
2598 22 Aug 14 nicklas 53     JsonUtil.setJsonResponseHeaders(resp);
2265 05 Mar 14 nicklas 54     
2265 05 Mar 14 nicklas 55     JSONObject json = new JSONObject();
2265 05 Mar 14 nicklas 56     json.put("status", "ok");
2265 05 Mar 14 nicklas 57   
3975 26 May 16 nicklas 58     final SessionControl sc = Reggie.getSessionControl(req);
2265 05 Mar 14 nicklas 59     DbControl dc = null;
2265 05 Mar 14 nicklas 60     try
2265 05 Mar 14 nicklas 61     {
2265 05 Mar 14 nicklas 62       if ("GetSoftware".equals(cmd))
2265 05 Mar 14 nicklas 63       {
2265 05 Mar 14 nicklas 64         /*
2265 05 Mar 14 nicklas 65           Get information about software. Add filter for optional 'subtype' parameter.
2265 05 Mar 14 nicklas 66           Sort by name.
2265 05 Mar 14 nicklas 67         */
6337 16 Jun 21 nicklas 68         dc = sc.newDbControl(":Get software information");
2265 05 Mar 14 nicklas 69         ItemQuery<Software> query = Software.getQuery();
2265 05 Mar 14 nicklas 70         query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
3603 16 Nov 15 nicklas 71         query.setItemPermission(Permission.USE);
2265 05 Mar 14 nicklas 72         Subtype subtype = Subtype.getByCName(req.getParameter("subtype"));
2265 05 Mar 14 nicklas 73         if (subtype != null)
2265 05 Mar 14 nicklas 74         {
2265 05 Mar 14 nicklas 75           subtype.addFilter(dc, query);
2265 05 Mar 14 nicklas 76         }
2265 05 Mar 14 nicklas 77         query.order(Orders.asc(Hql.property("name")));
2265 05 Mar 14 nicklas 78         query.order(Orders.asc(Hql.property("id")));
2265 05 Mar 14 nicklas 79         
3115 06 Feb 15 nicklas 80         String ann = req.getParameter("annotations");
3616 23 Nov 15 nicklas 81         String filter = req.getParameter("filter");
3115 06 Feb 15 nicklas 82         List<Annotationtype> annotations = new ArrayList<Annotationtype>();
3115 06 Feb 15 nicklas 83         if (ann != null)
3115 06 Feb 15 nicklas 84         {
3616 23 Nov 15 nicklas 85           String[] aTypes = ann.split(",");
3616 23 Nov 15 nicklas 86           String[] filters = filter != null ? filter.split(",") : null;
3616 23 Nov 15 nicklas 87           for (int index = 0; index < aTypes.length; index++)
3115 06 Feb 15 nicklas 88           {
3616 23 Nov 15 nicklas 89             Annotationtype a = Annotationtype.getByCName(aTypes[index]);
3616 23 Nov 15 nicklas 90             if (a != null) 
3616 23 Nov 15 nicklas 91             {
3616 23 Nov 15 nicklas 92               annotations.add(a);
3616 23 Nov 15 nicklas 93               if (filters != null && filters.length > index)
3616 23 Nov 15 nicklas 94               {
4482 05 May 17 nicklas 95                 query.restrict(new AnnotationSimpleRestriction((String)null, a.get(dc), Operator.EQ, filters[index], new AnnotationRestriction.Options()));
3616 23 Nov 15 nicklas 96               }
3616 23 Nov 15 nicklas 97             }
3115 06 Feb 15 nicklas 98           }
3115 06 Feb 15 nicklas 99         }
3115 06 Feb 15 nicklas 100         
2265 05 Mar 14 nicklas 101         Project project = sc.getActiveProjectId() == 0 ? null : Project.getById(dc, sc.getActiveProjectId());
2265 05 Mar 14 nicklas 102         
2265 05 Mar 14 nicklas 103         JSONArray jsonSoftware = new JSONArray();
2265 05 Mar 14 nicklas 104         JSONObject jsonDefault = null;
2265 05 Mar 14 nicklas 105         int defaultSoftwareId = -1;
2265 05 Mar 14 nicklas 106         for (Software s : query.list(dc))
2265 05 Mar 14 nicklas 107         {
2265 05 Mar 14 nicklas 108           JSONObject jsonItem = new JSONObject();
2265 05 Mar 14 nicklas 109           jsonItem.put("id", s.getId());
2265 05 Mar 14 nicklas 110           jsonItem.put("name", s.getName());
3115 06 Feb 15 nicklas 111           jsonItem.put("description", s.getDescription());
2265 05 Mar 14 nicklas 112           jsonSoftware.add(jsonItem);
2265 05 Mar 14 nicklas 113           
3115 06 Feb 15 nicklas 114           for (Annotationtype a : annotations)
3115 06 Feb 15 nicklas 115           {
3115 06 Feb 15 nicklas 116             jsonItem.put(a.getName(), a.getAnnotationValue(dc, s));
3115 06 Feb 15 nicklas 117           }
3115 06 Feb 15 nicklas 118           
2265 05 Mar 14 nicklas 119           // Check if the current hardware is the latest default hardware
2265 05 Mar 14 nicklas 120           if (project != null && project.isDefaultItem(s) && s.getId() > defaultSoftwareId)
2265 05 Mar 14 nicklas 121           {
2265 05 Mar 14 nicklas 122             defaultSoftwareId = s.getId();
2265 05 Mar 14 nicklas 123             jsonDefault = jsonItem;
2265 05 Mar 14 nicklas 124           }
2265 05 Mar 14 nicklas 125         }
2265 05 Mar 14 nicklas 126         if (jsonDefault != null)
2265 05 Mar 14 nicklas 127         {
2265 05 Mar 14 nicklas 128           jsonDefault.put("isDefault", true);
2265 05 Mar 14 nicklas 129         }
2265 05 Mar 14 nicklas 130         json.put("software", jsonSoftware);
2265 05 Mar 14 nicklas 131       }
2265 05 Mar 14 nicklas 132       
2265 05 Mar 14 nicklas 133     }
2265 05 Mar 14 nicklas 134     catch (Throwable t)
2265 05 Mar 14 nicklas 135     {
2265 05 Mar 14 nicklas 136       t.printStackTrace();
2265 05 Mar 14 nicklas 137       json.clear();
2265 05 Mar 14 nicklas 138       json.put("status", "error");
2265 05 Mar 14 nicklas 139       json.put("message", t.getMessage());
2265 05 Mar 14 nicklas 140       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
2265 05 Mar 14 nicklas 141     }
2265 05 Mar 14 nicklas 142     finally
2265 05 Mar 14 nicklas 143     {
2265 05 Mar 14 nicklas 144       if (dc != null) dc.close();
2265 05 Mar 14 nicklas 145       json.writeJSONString(resp.getWriter());
2265 05 Mar 14 nicklas 146     }
2265 05 Mar 14 nicklas 147     
2265 05 Mar 14 nicklas 148   }
2265 05 Mar 14 nicklas 149
2265 05 Mar 14 nicklas 150   
2265 05 Mar 14 nicklas 151 }