Coverage Report - org.apache.shindig.social.opensocial.service.DataServiceServlet
 
Classes in this File Line Coverage Branch Coverage Complexity
DataServiceServlet
94%
58/62
88%
21/24
0
 
 1  
 /*
 2  
  * Licensed to the Apache Software Foundation (ASF) under one
 3  
  * or more contributor license agreements. See the NOTICE file
 4  
  * distributed with this work for additional information
 5  
  * regarding copyright ownership. The ASF licenses this file
 6  
  * to you under the Apache License, Version 2.0 (the
 7  
  * "License"); you may not use this file except in compliance
 8  
  * with the License. You may obtain a copy of the License at
 9  
  *
 10  
  *     http://www.apache.org/licenses/LICENSE-2.0
 11  
  *
 12  
  * Unless required by applicable law or agreed to in writing,
 13  
  * software distributed under the License is distributed on an
 14  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15  
  * KIND, either express or implied. See the License for the
 16  
  * specific language governing permissions and limitations under the License.
 17  
  */
 18  
 package org.apache.shindig.social.opensocial.service;
 19  
 
 20  
 import org.apache.shindig.auth.SecurityToken;
 21  
 import org.apache.shindig.social.opensocial.spi.DataCollection;
 22  
 import org.apache.shindig.social.opensocial.spi.RestfulCollection;
 23  
 
 24  
 import com.google.common.collect.ImmutableMap;
 25  
 import com.google.common.collect.Maps;
 26  
 
 27  
 import java.io.IOException;
 28  
 import java.io.PrintWriter;
 29  
 import java.util.logging.Logger;
 30  
 import javax.servlet.ServletException;
 31  
 import javax.servlet.http.HttpServletRequest;
 32  
 import javax.servlet.http.HttpServletResponse;
 33  
 
 34  34
 public class DataServiceServlet extends ApiServlet {
 35  
 
 36  
   protected static final String FORMAT_PARAM = "format";
 37  
   protected static final String ATOM_FORMAT = "atom";
 38  
   protected static final String XML_FORMAT = "xml";
 39  
 
 40  
   public static final String PEOPLE_ROUTE = "people";
 41  
   public static final String ACTIVITY_ROUTE = "activities";
 42  
   public static final String APPDATA_ROUTE = "appdata";
 43  
 
 44  
   public static final String CONTENT_TYPE = "CONTENT_TYPE";
 45  
 
 46  1
   private static final Logger logger = Logger.getLogger(
 47  
       "org.apache.shindig.social.opensocial.spi");
 48  
 
 49  
   @Override
 50  
   protected void doGet(HttpServletRequest servletRequest,
 51  
       HttpServletResponse servletResponse)
 52  
       throws ServletException, IOException {
 53  36
     doPost(servletRequest, servletResponse);
 54  36
   }
 55  
 
 56  
   @Override
 57  
   protected void doPut(HttpServletRequest servletRequest,
 58  
       HttpServletResponse servletResponse)
 59  
       throws ServletException, IOException {
 60  1
     doPost(servletRequest, servletResponse);
 61  1
   }
 62  
 
 63  
   @Override
 64  
   protected void doDelete(HttpServletRequest servletRequest,
 65  
       HttpServletResponse servletResponse)
 66  
       throws ServletException, IOException {
 67  5
     doPost(servletRequest, servletResponse);
 68  5
   }
 69  
 
 70  
   @Override
 71  
   protected void doPost(HttpServletRequest servletRequest,
 72  
       HttpServletResponse servletResponse)
 73  
       throws ServletException, IOException {
 74  53
     logger.finest("Handling restful request for " + servletRequest.getPathInfo());
 75  
 
 76  53
     setCharacterEncodings(servletRequest, servletResponse);
 77  
 
 78  53
     SecurityToken token = getSecurityToken(servletRequest);
 79  53
     if (token == null) {
 80  0
       sendSecurityError(servletResponse);
 81  0
       return;
 82  
     }
 83  
 
 84  53
     BeanConverter converter = getConverterForRequest(servletRequest);
 85  
 
 86  53
     handleSingleRequest(servletRequest, servletResponse, token, converter);
 87  53
   }
 88  
 
 89  
   @Override
 90  
   protected void sendError(HttpServletResponse servletResponse, ResponseItem responseItem)
 91  
       throws IOException {
 92  1
     servletResponse.sendError(responseItem.getError().getHttpErrorCode(),
 93  
         responseItem.getErrorMessage());
 94  1
   }
 95  
 
 96  
   /**
 97  
    * Handler for non-batch requests.
 98  
    */
 99  
   private void handleSingleRequest(HttpServletRequest servletRequest,
 100  
       HttpServletResponse servletResponse, SecurityToken token,
 101  
       BeanConverter converter) throws IOException {
 102  53
     RestfulRequestItem requestItem = new RestfulRequestItem(servletRequest, token, converter);
 103  53
     ResponseItem responseItem = getResponseItem(handleRequestItem(requestItem, servletRequest));
 104  
 
 105  53
     servletResponse.setContentType(converter.getContentType());
 106  53
     if (responseItem.getError() == null) {
 107  52
       PrintWriter writer = servletResponse.getWriter();
 108  52
       Object response = responseItem.getResponse();
 109  
       // TODO: ugliness resulting from not using RestfulItem
 110  52
       if (!(response instanceof DataCollection) && !(response instanceof RestfulCollection)) {
 111  22
         response = ImmutableMap.of("entry", response);
 112  
       }
 113  
 
 114  52
       writer.write(converter.convertToString(response));
 115  52
     } else {
 116  1
       sendError(servletResponse, responseItem);
 117  
     }
 118  53
   }
 119  
 
 120  
 
 121  
   BeanConverter getConverterForRequest(HttpServletRequest servletRequest) {
 122  63
     String formatString = null;
 123  63
     BeanConverter converter = null;
 124  63
     String contentType = null;
 125  
 
 126  
     try {
 127  63
       formatString = servletRequest.getParameter(FORMAT_PARAM);
 128  5
     } catch (Throwable t) {
 129  
       // this happens while testing
 130  5
       logger.fine("Unexpected error : format param is null " + t.toString());
 131  58
     }
 132  
     try {
 133  63
       contentType = servletRequest.getHeader(CONTENT_TYPE);
 134  58
     } catch (Throwable t) {
 135  
       //this happens while testing
 136  58
       logger.fine("Unexpected error : content type is null " + t.toString());
 137  5
     }
 138  
 
 139  63
     if (contentType != null) {
 140  4
       if (contentType.equals("application/json")) {
 141  0
         converter = jsonConverter;
 142  0
       } else if (contentType.equals("application/atom+xml")) {
 143  1
         converter = atomConverter;
 144  1
       } else if (contentType.equals("application/xml")) {
 145  1
         converter = xmlConverter;
 146  1
       } else if (formatString == null) {
 147  
         // takes care of cases where content!= null but is ""
 148  2
         converter = jsonConverter;
 149  2
       }
 150  59
     } else if (formatString != null) {
 151  25
       if (formatString.equals(ATOM_FORMAT)) {
 152  1
         converter = atomConverter;
 153  1
       } else if (formatString.equals(XML_FORMAT)) {
 154  22
         converter = xmlConverter;
 155  22
       } else {
 156  2
         converter = jsonConverter;
 157  
       }
 158  2
     } else {
 159  34
       converter = jsonConverter;
 160  
     }
 161  63
     return converter;
 162  
   }
 163  
 }