Package de.marcusschiesser.dbpendler.server

Source Code of de.marcusschiesser.dbpendler.server.ConnectionServerResource

package de.marcusschiesser.dbpendler.server;

import java.text.ParseException;
import java.util.Collection;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Logger;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

import com.google.appengine.repackaged.com.google.common.base.Function;
import com.google.appengine.repackaged.com.google.common.collect.Collections2;

import de.marcusschiesser.dbpendler.common.resources.ConnectionResource;
import de.marcusschiesser.dbpendler.common.vo.ConnectionVO;
import de.marcusschiesser.dbpendler.common.vo.StationVO;
import de.marcusschiesser.dbpendler.server.storage.ConnectionStorage;
import de.marcusschiesser.dbpendler.server.storage.StationStorage;
import de.marcusschiesser.dbpendler.server.utils.DateUtils;
import de.marcusschiesser.dbpendler.server.utils.ExceptionUtils;
import de.marcusschiesser.dbpendler.server.utils.LogUtils;

/**
* The server side implementation of the Jersey resource.
*/
@Path("/connections")
public class ConnectionServerResource implements ConnectionResource {
 
  private final Logger log = Logger.getLogger(ConnectionServerResource.class.getName());

  @GET
  @Path("/list")
  @Produces("application/json; charset=UTF-8")
  public ConnectionVO[] listDay(@QueryParam("start") String s, @QueryParam("destination") String d, @QueryParam("date") String date ) {
    ExceptionUtils.checkRequiredParamters("start",s,"destination",d,"date",date);
    try {
      Date queryDate = DateUtils.getDateFormat().parse(date);
      StationVO start = StationStorage.getInstance().getStations(s).get(0);
      StationVO destination = StationStorage.getInstance().getStations(d).get(0);
      List<ConnectionVO> result = ConnectionStorage.getInstance().getConnection(start, destination, queryDate);
      return result.toArray(new ConnectionVO[result.size()]);
    } catch (ParseException e) {
      log.warning("Can not parse input date: '" + date + "'");
      ExceptionUtils.throwError(e);
      return null;
    }
  }
 
  @GET
  @Path("/daily")
  @Produces("application/json; charset=UTF-8")
  public ConnectionVO[] listDaily(@QueryParam("start") String s, @QueryParam("destination") String d ) {
      ExceptionUtils.checkRequiredParamters("start",s,"destination",d);
      List<StationVO> starts = StationStorage.getInstance().getStations(s);
      List<StationVO> destinations = StationStorage.getInstance().getStations(d);
      // TODO: this unique check does not work - idea: try to check the weight of the first station instead?
//      if(starts.size()!=1 || destinations.size()!=1) {
//        ExceptionUtils.throwError("Either start or destination is not unique. Use StationService to get a unique station id.");
//      }
      StationVO start = starts.get(0);
      StationVO destination = destinations.get(0);
      // get all connections for this week (7 days)
      Date date = DateUtils.getThisMonday();
      Set<ConnectionVO> result = new LinkedHashSet<ConnectionVO>();
      for (int i = 0; i < 7; i++) {
        Collection<ConnectionVO> connections = ConnectionStorage.getInstance().getConnection(start, destination, date);
        // remove date from result
        connections = Collections2.transform(connections, new Function<ConnectionVO, ConnectionVO>() {
          @Override
          public ConnectionVO apply(ConnectionVO in) {
            in.setDate(null);
            return in;
          }
        });
        if(i==0)
          result.addAll(connections);
        else
          result.retainAll(connections);
        date = DateUtils.addDay(date, 1);
      }
      LogUtils.logConnections(result);
      return result.toArray(new ConnectionVO[result.size()]);
  }


 
}
TOP

Related Classes of de.marcusschiesser.dbpendler.server.ConnectionServerResource

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.