package org.croudtrip.trips; import org.croudtrip.api.trips.JoinTripRequest; import org.croudtrip.api.trips.JoinTripStatus; import org.croudtrip.api.trips.TripQuery; import org.croudtrip.gcm.GcmManager; import org.croudtrip.logs.LogManager; import org.croudtrip.utils.AbstractScheduledTaskExecutor; import org.hibernate.SessionFactory; import java.util.concurrent.TimeUnit; import javax.inject.Inject; /** * Cancels {@link org.croudtrip.api.trips.JoinTripRequest}s after their * max waiting time has passed. */ public class ExpireJoinTripRequestsExecutor extends AbstractScheduledTaskExecutor { private TripsManager tripsManager; private GcmManager gcmManager; @Inject ExpireJoinTripRequestsExecutor(TripsManager tripsManager, GcmManager gcmManager, SessionFactory sessionFactory, LogManager logManager) { super( sessionFactory, logManager, 15, TimeUnit.MINUTES); this.tripsManager = tripsManager; this.gcmManager = gcmManager; } @Override protected void doRun() throws Exception { long currentTimestamp = System.currentTimeMillis() / 1000; for (JoinTripRequest joinTripRequest : tripsManager.findAllJoinRequests()) { if (!joinTripRequest.getStatus().equals(JoinTripStatus.PASSENGER_ACCEPTED)) continue; TripQuery query = joinTripRequest.getSuperTrip().getQuery(); if (currentTimestamp > query.getCreationTimestamp() + query.getMaxWaitingTimeInSeconds()) { tripsManager.updateJoinRequestPassengerCancel(joinTripRequest); gcmManager.sendJoinTripRequestExpiredToPassenger(joinTripRequest); } } } }