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

Code
Comments
Other
Rev Date Author Line
1684 04 Jun 12 nicklas 1 package net.sf.basedb.reggie.servlet;
1684 04 Jun 12 nicklas 2
1684 04 Jun 12 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;
1684 04 Jun 12 nicklas 6
1684 04 Jun 12 nicklas 7 import javax.servlet.ServletException;
1684 04 Jun 12 nicklas 8 import javax.servlet.http.HttpServlet;
1684 04 Jun 12 nicklas 9 import javax.servlet.http.HttpServletRequest;
1684 04 Jun 12 nicklas 10 import javax.servlet.http.HttpServletResponse;
1684 04 Jun 12 nicklas 11
1684 04 Jun 12 nicklas 12 import org.json.simple.JSONArray;
1684 04 Jun 12 nicklas 13 import org.json.simple.JSONObject;
1684 04 Jun 12 nicklas 14
4482 05 May 17 nicklas 15 import net.sf.basedb.core.AnnotationRestriction;
3833 08 Apr 16 nicklas 16 import net.sf.basedb.core.AnnotationSimpleRestriction;
1684 04 Jun 12 nicklas 17 import net.sf.basedb.core.DbControl;
1684 04 Jun 12 nicklas 18 import net.sf.basedb.core.ItemQuery;
3833 08 Apr 16 nicklas 19 import net.sf.basedb.core.Operator;
3603 16 Nov 15 nicklas 20 import net.sf.basedb.core.Permission;
1689 05 Jun 12 nicklas 21 import net.sf.basedb.core.Project;
1684 04 Jun 12 nicklas 22 import net.sf.basedb.core.Protocol;
1684 04 Jun 12 nicklas 23 import net.sf.basedb.core.SessionControl;
5591 04 Sep 19 nicklas 24 import net.sf.basedb.core.Type;
5591 04 Sep 19 nicklas 25 import net.sf.basedb.core.query.Expressions;
1684 04 Jun 12 nicklas 26 import net.sf.basedb.core.query.Hql;
1684 04 Jun 12 nicklas 27 import net.sf.basedb.core.query.Orders;
5591 04 Sep 19 nicklas 28 import net.sf.basedb.core.query.Restrictions;
2598 22 Aug 14 nicklas 29 import net.sf.basedb.reggie.JsonUtil;
1684 04 Jun 12 nicklas 30 import net.sf.basedb.reggie.Reggie;
3115 06 Feb 15 nicklas 31 import net.sf.basedb.reggie.dao.Annotationtype;
1684 04 Jun 12 nicklas 32 import net.sf.basedb.reggie.dao.Subtype;
1684 04 Jun 12 nicklas 33 import net.sf.basedb.util.error.ThrowableUtil;
1684 04 Jun 12 nicklas 34
1684 04 Jun 12 nicklas 35 /**
1684 04 Jun 12 nicklas 36   Get information about protocols.
1684 04 Jun 12 nicklas 37   
1684 04 Jun 12 nicklas 38   @author nicklas
1684 04 Jun 12 nicklas 39    @since 2.7
1684 04 Jun 12 nicklas 40 */
1684 04 Jun 12 nicklas 41 public class ProtocolServlet 
1684 04 Jun 12 nicklas 42   extends HttpServlet 
1684 04 Jun 12 nicklas 43 {
1684 04 Jun 12 nicklas 44
1684 04 Jun 12 nicklas 45
1684 04 Jun 12 nicklas 46   private static final long serialVersionUID = -2033935577320928224L;
1684 04 Jun 12 nicklas 47
1684 04 Jun 12 nicklas 48   public ProtocolServlet()
1684 04 Jun 12 nicklas 49   {}
1684 04 Jun 12 nicklas 50
1684 04 Jun 12 nicklas 51   @Override
1684 04 Jun 12 nicklas 52   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
1684 04 Jun 12 nicklas 53     throws ServletException, IOException 
1684 04 Jun 12 nicklas 54   {
1684 04 Jun 12 nicklas 55     String cmd = req.getParameter("cmd");
2598 22 Aug 14 nicklas 56     JsonUtil.setJsonResponseHeaders(resp);
1684 04 Jun 12 nicklas 57     
1684 04 Jun 12 nicklas 58     JSONObject json = new JSONObject();
1684 04 Jun 12 nicklas 59     json.put("status", "ok");
1684 04 Jun 12 nicklas 60   
3975 26 May 16 nicklas 61     final SessionControl sc = Reggie.getSessionControl(req);
1684 04 Jun 12 nicklas 62     DbControl dc = null;
1684 04 Jun 12 nicklas 63     try
1684 04 Jun 12 nicklas 64     {
1684 04 Jun 12 nicklas 65       if ("GetProtocols".equals(cmd))
1684 04 Jun 12 nicklas 66       {
1684 04 Jun 12 nicklas 67         /*
1684 04 Jun 12 nicklas 68           Get information about protocols. Add filter for optional 'subtype' parameter.
1689 05 Jun 12 nicklas 69           Sort by name.
1684 04 Jun 12 nicklas 70         */
6337 16 Jun 21 nicklas 71         dc = sc.newDbControl(":Get protocol information");
1684 04 Jun 12 nicklas 72         ItemQuery<Protocol> query = Protocol.getQuery();
1684 04 Jun 12 nicklas 73         query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
3603 16 Nov 15 nicklas 74         query.setItemPermission(Permission.USE);
1684 04 Jun 12 nicklas 75         Subtype subtype = Subtype.getByCName(req.getParameter("subtype"));
1684 04 Jun 12 nicklas 76         if (subtype != null)
1684 04 Jun 12 nicklas 77         {
1684 04 Jun 12 nicklas 78           subtype.addFilter(dc, query);
1684 04 Jun 12 nicklas 79         }
1689 05 Jun 12 nicklas 80         query.order(Orders.asc(Hql.property("name")));
1689 05 Jun 12 nicklas 81         query.order(Orders.asc(Hql.property("id")));
3115 06 Feb 15 nicklas 82
3115 06 Feb 15 nicklas 83         String ann = req.getParameter("annotations");
3833 08 Apr 16 nicklas 84         String filter = req.getParameter("filter");
3115 06 Feb 15 nicklas 85         List<Annotationtype> annotations = new ArrayList<Annotationtype>();
3115 06 Feb 15 nicklas 86         if (ann != null)
3115 06 Feb 15 nicklas 87         {
3833 08 Apr 16 nicklas 88           String[] aTypes = ann.split(",");
3833 08 Apr 16 nicklas 89           String[] filters = filter != null ? filter.split(",") : null;
3833 08 Apr 16 nicklas 90           for (int index = 0; index < aTypes.length; index++)
3115 06 Feb 15 nicklas 91           {
3833 08 Apr 16 nicklas 92             Annotationtype a = Annotationtype.getByCName(aTypes[index]);
3833 08 Apr 16 nicklas 93             if (a != null) 
3833 08 Apr 16 nicklas 94             {
3833 08 Apr 16 nicklas 95               annotations.add(a);
3833 08 Apr 16 nicklas 96               if (filters != null && filters.length > index)
3833 08 Apr 16 nicklas 97               {
4482 05 May 17 nicklas 98                 query.restrict(new AnnotationSimpleRestriction(null, a.get(dc), Operator.EQ, filters[index], new AnnotationRestriction.Options()));
3833 08 Apr 16 nicklas 99               }
3833 08 Apr 16 nicklas 100             }
3115 06 Feb 15 nicklas 101           }
3115 06 Feb 15 nicklas 102         }
1684 04 Jun 12 nicklas 103         
1689 05 Jun 12 nicklas 104         Project project = sc.getActiveProjectId() == 0 ? null : Project.getById(dc, sc.getActiveProjectId());
1689 05 Jun 12 nicklas 105         
1684 04 Jun 12 nicklas 106         JSONArray jsonProtocols = new JSONArray();
1689 05 Jun 12 nicklas 107         JSONObject jsonDefault = null;
1689 05 Jun 12 nicklas 108         int defaultProtocolId = -1;
1684 04 Jun 12 nicklas 109         for (Protocol p : query.list(dc))
1684 04 Jun 12 nicklas 110         {
1684 04 Jun 12 nicklas 111           JSONObject jsonProtocol = new JSONObject();
1684 04 Jun 12 nicklas 112           jsonProtocol.put("id", p.getId());
1684 04 Jun 12 nicklas 113           jsonProtocol.put("name", p.getName());
1684 04 Jun 12 nicklas 114           jsonProtocols.add(jsonProtocol);
1689 05 Jun 12 nicklas 115           
3115 06 Feb 15 nicklas 116           for (Annotationtype a : annotations)
3115 06 Feb 15 nicklas 117           {
3115 06 Feb 15 nicklas 118             jsonProtocol.put(a.getName(), a.getAnnotationValue(dc, p));
3115 06 Feb 15 nicklas 119           }
3115 06 Feb 15 nicklas 120           
1689 05 Jun 12 nicklas 121           // Check if the current protocol is the latest default protocol
3316 08 May 15 nicklas 122           if (project != null && project.isDefaultItem(p))
1689 05 Jun 12 nicklas 123           {
3316 08 May 15 nicklas 124             jsonProtocol.put("alternateDefault", true);
3316 08 May 15 nicklas 125             if (p.getId() > defaultProtocolId)
3316 08 May 15 nicklas 126             {
3316 08 May 15 nicklas 127               defaultProtocolId = p.getId();
3316 08 May 15 nicklas 128               jsonDefault = jsonProtocol;
3316 08 May 15 nicklas 129             }
1689 05 Jun 12 nicklas 130           }
1684 04 Jun 12 nicklas 131         }
1689 05 Jun 12 nicklas 132         if (jsonDefault != null)
1689 05 Jun 12 nicklas 133         {
1689 05 Jun 12 nicklas 134           jsonDefault.put("isDefault", true);
1689 05 Jun 12 nicklas 135         }
1684 04 Jun 12 nicklas 136         json.put("protocols", jsonProtocols);
1684 04 Jun 12 nicklas 137       }
5591 04 Sep 19 nicklas 138       else if ("CountProtocols".equals(cmd))
5591 04 Sep 19 nicklas 139       {
5591 04 Sep 19 nicklas 140         /*
5591 04 Sep 19 nicklas 141           Check how many protocols of different subtypes that exists.
5591 04 Sep 19 nicklas 142         */
6337 16 Jun 21 nicklas 143         dc = sc.newDbControl(":Count protocols");
5591 04 Sep 19 nicklas 144         ItemQuery<Protocol> query = Protocol.getQuery();
5591 04 Sep 19 nicklas 145         query.setIncludes(Reggie.INCLUDE_IN_CURRENT_PROJECT);
5591 04 Sep 19 nicklas 146         query.setItemPermission(Permission.USE);
5591 04 Sep 19 nicklas 147         query.restrict(Restrictions.eq(Hql.property("itemSubtype.id"), Expressions.parameter("subtype")));
5591 04 Sep 19 nicklas 148         
5591 04 Sep 19 nicklas 149         String[] subtypes = req.getParameter("subtype").split(",");
5591 04 Sep 19 nicklas 150         for (String subtype : subtypes)
5591 04 Sep 19 nicklas 151         {
5591 04 Sep 19 nicklas 152           Subtype s = Subtype.getByCName(subtype);
5591 04 Sep 19 nicklas 153           query.setParameter("subtype", s.get(dc).getId(), Type.INT);
5591 04 Sep 19 nicklas 154           json.put(subtype, query.count(dc));
5591 04 Sep 19 nicklas 155         }
5591 04 Sep 19 nicklas 156       }
1684 04 Jun 12 nicklas 157       
1684 04 Jun 12 nicklas 158     }
1684 04 Jun 12 nicklas 159     catch (Throwable t)
1684 04 Jun 12 nicklas 160     {
1684 04 Jun 12 nicklas 161       t.printStackTrace();
1684 04 Jun 12 nicklas 162       json.clear();
1684 04 Jun 12 nicklas 163       json.put("status", "error");
1684 04 Jun 12 nicklas 164       json.put("message", t.getMessage());
1684 04 Jun 12 nicklas 165       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
1684 04 Jun 12 nicklas 166     }
1684 04 Jun 12 nicklas 167     finally
1684 04 Jun 12 nicklas 168     {
1684 04 Jun 12 nicklas 169       if (dc != null) dc.close();
1684 04 Jun 12 nicklas 170       json.writeJSONString(resp.getWriter());
1684 04 Jun 12 nicklas 171     }
1684 04 Jun 12 nicklas 172     
1684 04 Jun 12 nicklas 173   }
1684 04 Jun 12 nicklas 174
1684 04 Jun 12 nicklas 175   
1684 04 Jun 12 nicklas 176 }