| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- package cz.hsrs.servlet.provider;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.sql.SQLException;
- import java.util.List;
- import javax.naming.AuthenticationException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.ws.rs.core.HttpHeaders;
- import cz.hsrs.db.DBJsonUtils;
- import cz.hsrs.db.model.UnitPosition;
- import cz.hsrs.db.model.UnitTrack;
- import cz.hsrs.db.model.composite.LastPosition;
- import cz.hsrs.db.model.composite.RealUnit;
- import cz.hsrs.db.model.custom.UnitPositionSimple;
- import cz.hsrs.db.util.UtilFactory;
- import cz.hsrs.servlet.feeder.ServiceParameters;
- import cz.hsrs.servlet.security.LoginUser;
- /**
- * Servlet implementation class DataService
- *
- * /DataService?Operation=GetDataByUserName&user=pepa&limit=100
- * /DataService?Operation=GetUnitsList
- * /DataService?Operation=GetUnits
- */
- public class DataService extends DBServlet {
- private static final long serialVersionUID = 1L;
- private static final String ASC = "ASC";
- private static final String DESC = "DESC";
- public static final String GET_TRACK = "GetTracks";
- public static final String GET_LAST_POSTION = "GetLastPositions";
- public static final String GET_LAST_POSTION_WITH_STATUS = "GetLastPositionsWithStatus";
- public static final String GET_UNITS = "GetUnits";
- public static final String GET_RECENT_TRACK = "GetRecentTracks";
- public static final String GET_POSITIONS = "GetPositions";
- public static final String GET_POSITIONS_RANGE = "GetPositionsDay";
- public static final String GET_UNITS_LIST = "GetUnitsList";
- private UtilFactory db;
- public DataService() {
- super();
- }
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- super.doGet(request, response);
- RequestParameters params = new RequestParameters(request);
-
- /* For FarmTelemetry purpose only temporary authentication */
- /*
- String user = params.getUser();
- if(user == null){
- throw new ServletException("Authentication failure, no user specified for request: "+ request.getQueryString());
- }
- else{
- try {
- String testLang = db.userUtil.getUserLanguage(user);
- if(testLang.isEmpty()){
- throw new ServletException("Authentication failure for request "+ request.getQueryString());
- }
- } catch (SQLException | NoItemFoundException e1) {
- throw new ServletException("Authentication failure for request "+ request.getQueryString());
- }
- }
- */
- /* session authentication method */
- LoginUser loggedUser;
- try {
- loggedUser = getAuthenticatedLoginUser(request);
- String userName = loggedUser.getUserName();
- params.setUser(userName);
- } catch (AuthenticationException e1) {
- throw new ServletException("Authentication failure for request "+ request.getQueryString());
- }
- response.addHeader("Access-Control-Allow-Origin", "*");
- response.addHeader(HttpHeaders.CONTENT_TYPE, "application/json");
- /*
- * /DataService?Operation=GetUnits&user=telemetry&unit_id=356173060488215
- * /DataService?Operation=GetTracks&user=telemetry&limit=500
- * /DataService?Operation=GetLastPositions&user=telemetry
- * /DataService?Operation=GetLastPositionsWithStatus&user=telemetry
- * /DataService?Operation=GetRecentTracks&user=telemetry
- * /DataService?Operation=GetPositions&user=telemetry&limit=500
- * /DataService?Operation=GetPositionsDay&user=telemetry&unit_id=356173060488215&fromTime=2016-02-01&toTime=2016-02-04&ordering=desc
- * /DataService?Operation=GetUnitsList&user=telemetry
- */
- PrintWriter out = response.getWriter();
- try {
- switch (request.getParameter(ServiceParameters.OPERATION)) {
- case GET_UNITS: {
- DBJsonUtils.writeJSON(out, new RealUnit(), db.userUtil.getLastPositionsByUserNameRes(params.getUser(), params.getUnitId()));
- } break;
- case GET_TRACK: {
- DBJsonUtils.writeJSON(out, new UnitTrack(), db.userUtil.getTracksByUserName(params.getUser(), params.limit));
- } break;
- case GET_LAST_POSTION: {
- DBJsonUtils.writeJSON(out, db.userUtil.getLastPositionsByUserName(params.getUser()));
- } break;
- case GET_LAST_POSTION_WITH_STATUS: {
- List<LastPosition> posList = db.userUtil.getLastPositionWithStatus(params.getUser());
- DBJsonUtils.writeJSON(out, posList);
- } break;
- case GET_RECENT_TRACK: {
- DBJsonUtils.writeJSON(out, new UnitTrack(), db.userUtil.getTracksByUserName(params.getUser(), 1000));
- } break;
- case GET_POSITIONS: {
- DBJsonUtils.writeJSON(out, new UnitPosition(), db.userUtil.getPositionsByUserName(params.getUser(), params.limit));
- } break;
- case GET_POSITIONS_RANGE: {
- DBJsonUtils.writeJSON(out, new UnitPositionSimple(), db.userUtil.getPositionsTimeRangeByUserName(params.getUser(), params.fromTime, params.toTime, params.getUnitId(), params.getOrdering()));
- } break;
- case GET_UNITS_LIST: {
- DBJsonUtils.writeJSON(out, db.userUtil.getUnitsByUser(params.getUser()));
- } break;
- default:
- throw new NullPointerException("No operation specified.");
- }
- } catch (SQLException e) {
- solveGetException(e, out);
- }
- }
- @Override
- public void init() throws ServletException {
- super.init();
-
- try {
- db = new UtilFactory();
- } catch (Exception e) {
- throw new ServletException(e);
- }
- }
-
- /**
- * Request Parameter subclass
- * Parses parameter from the request
- * @author jezekjan
- *
- */
- static class RequestParameters {
- private String user;
- private String fromTime;
- private String toTime;
- private Integer limit;
- private Long unitId;
- private String ordering;
- RequestParameters(HttpServletRequest request) throws NullPointerException{
- Object userO = request.getParameter("user");
- if(userO != null){
- user = userO.toString();
- }
- Object limO = request.getParameter("limit");
- if (limO != null) {
- limit = Integer.parseInt(limO.toString());
- }
- Object fromTimeO = request.getParameter("fromTime");
- if (fromTimeO != null) {
- fromTime = fromTimeO.toString();
- }
- Object toTimeO = request.getParameter("toTime");
- if (toTimeO != null) {
- toTime = toTimeO.toString();
- }
- Object orderingO = request.getParameter("ordering");
- if (orderingO != null) {
- String orderingS = orderingO.toString();
- if(orderingS.isEmpty()){
- ordering = ASC;
- } else{
- ordering = orderingS.equalsIgnoreCase(DESC) ? DESC : ASC;
- }
- }else{
- ordering = ASC;
- }
- Object unitO = request.getParameter("unit_id");
- unitId = unitO != null ? Long.parseLong(unitO.toString()) : null;
- }
- public Long getUnitId() {
- return unitId;
- }
- public void setUnitId(long unitId) {
- this.unitId = unitId;
- }
-
- public String getUser() {
- return user;
- }
- public void setUser(String user) {
- this.user = user;
- }
- public Integer getLimit() {
- return limit;
- }
- public void setLimit(Integer limit) {
- this.limit = limit;
- }
- public String getFromTime() {
- return fromTime;
- }
- public void setFromTime(String fromTime) {
- this.fromTime = fromTime;
- }
- public String getToTime() {
- return toTime;
- }
- public void setToTime(String toTime) {
- this.toTime = toTime;
- }
- public String getOrdering() {
- return ordering;
- }
- public void setOrdering(String ordering) {
- this.ordering = ordering;
- }
- @Override
- public String toString() {
- return "RequestParameters [user=" + user + ", fromTime=" + fromTime
- + ", toTime=" + toTime + ", limit=" + limit + ", unit_id="
- + unitId + ", ordering=" + ordering + "]";
- }
- }
- }
|