Package org.gsm.oneapi.server.location

Source Code of org.gsm.oneapi.server.location.LocationServlet

package org.gsm.oneapi.server.location;

import java.io.IOException;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.codehaus.jackson.map.ObjectMapper;
import org.gsm.oneapi.responsebean.RequestError;
import org.gsm.oneapi.responsebean.location.LocationResponse;
import org.gsm.oneapi.responsebean.location.TerminalLocation;
import org.gsm.oneapi.server.OneAPIServlet;
import org.gsm.oneapi.server.ValidationRule;

/**
* Servlet implementing the OneAPI function for locating one or more mobile terminals
*/
public class LocationServlet extends OneAPIServlet {
  static Logger logger=Logger.getLogger(LocationServlet.class);

  private static final long serialVersionUID = 68103504439958479L;

  public void init() throws ServletException {
    logger.debug("LocationServlet initialised");
    }
 
  private final String[] validationRules={"1", "location", "queries", "location"};

  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{
    String contentType=request.getContentType();
   
    dumpRequestDetails(request, logger);

    String[] requestParts=getRequestParts(request);
   
    if (validateRequest(request, response, requestParts, validationRules)) {
     
      /*
       * Decode the service parameters - in this case it is an HTTP GET request
       */
      Double requestedAccuracy=parseDouble(request.getParameter("requestedAccuracy"));
      String[] addresses=request.getParameterValues("address")// Note there can be multiple addresses specified
     
      ValidationRule[] rules={
          new ValidationRule(ValidationRule.VALIDATION_TYPE_MANDATORY_DOUBLE_GT_ZERO, "requestedAccuracy", requestedAccuracy),
          new ValidationRule(ValidationRule.VALIDATION_TYPE_MANDATORY_TEL, "address", addresses)
      };
     
      logger.debug("requestedAccuracy = "+requestedAccuracy);
      if (addresses!=null) for (String add:addresses) logger.debug("address = "+add);     
     
      if (checkRequestParameters(response, rules)) {
         
        /*
         * Generate response
         */
 
        LocationResponse.TerminalLocationList rd=new LocationResponse.TerminalLocationList();
             
        if (addresses!=null) {
          TerminalLocation[] locations=new TerminalLocation[addresses.length];
          Random rng=new Random();
          rng.setSeed(System.currentTimeMillis());
         
          for (int i=0; i<addresses.length; i++) {
            TerminalLocation loc=new TerminalLocation();
            locations[i]=loc;
            loc.setAddress(addresses[i]);
           
            logger.debug("Processing address="+addresses[i]);
           
            // Simulate erroneous response
            if (addresses[i]==null || addresses[i].trim().length()==0) {
              TerminalLocation.RequestError err=new TerminalLocation.RequestError("LOC001", "Missing terminal address parameter", String.valueOf(i));
              loc.setErrorInformation(err);
              loc.setLocationRetrievalStatus("Error");
            } else if (rng.nextDouble()<0.4) {
              TerminalLocation.RequestError err=new TerminalLocation.RequestError("LOC001", "Terminal is not opted for location finding", addresses[i]);
              loc.setErrorInformation(err);
              loc.setLocationRetrievalStatus("Error");
            } else {
              TerminalLocation.CurrentLocation currentLocation=new TerminalLocation.CurrentLocation();
              currentLocation.setAccuracy(requestedAccuracy);
              currentLocation.setAltitude(75.0);
              currentLocation.setLatitude(41.3833333);
              currentLocation.setLongitude(2.1833333);
              currentLocation.setTimestampAsDate(new java.util.Date());
              loc.setCurrentLocation(currentLocation);
              loc.setLocationRetrievalStatus("Retrieved");
            }
          }
         
          rd.setTerminalLocation(locations);
        }
     
        ObjectMapper mapper=new ObjectMapper();     
        String jsonResponse="{\"terminalLocationList\":"+mapper.writeValueAsString(rd)+"}";
 
        sendJSONResponse(response, jsonResponse, OK, null);
      }
    }
   
  }

}
TOP

Related Classes of org.gsm.oneapi.server.location.LocationServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.