Package is.bokun.dtos.transport

Source Code of is.bokun.dtos.transport.AvailablePathDto

package is.bokun.dtos.transport;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.common.collect.Iterables;
import org.joda.time.Duration;
import org.joda.time.LocalTime;
import org.joda.time.Minutes;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
* Created by ogg on 17/7/14.
*/
public class AvailablePathDto {

    public List<AvailableLegDto> legs = new ArrayList<>();

    @JsonIgnore
    public AvailableLegDto getFirst() {
        return Iterables.getFirst(legs, null);
    }

    @JsonIgnore
    public AvailableLegDto getLast() {
        return Iterables.getLast(legs, null);
    }

    @JsonIgnore
    public RouteStationDto getSourceStation() {
        AvailableLegDto leg = Iterables.getFirst(legs, null);
        return leg != null ? leg.leg.from : null;
    }

    @JsonIgnore
    public RouteStationDto getDestinationStation() {
        AvailableLegDto leg = Iterables.getLast(legs, null);
        return leg != null ? leg.leg.to : null;
    }

    @JsonIgnore
    public List<RouteDto> getRoutes() {
        List<RouteDto> routes = new ArrayList<>();
        for (AvailableLegDto avLeg : legs) {
            if ( !routes.contains(avLeg.route) ) {
                routes.add(avLeg.route);
            }
        }
        return routes;
    }

    @JsonIgnore
    public long getDuration(TimeUnit timeUnit) {
        Duration d = new Duration(0);
        for (int i = 0; i < legs.size(); i++) {
            RouteScheduleDto current = legs.get(i).departure.getSchedule();
            d = d.plus(getDifference(current.getDepartureTime(), current.getArrivalTime()));
            if ( i < legs.size()-1 ) {
                RouteScheduleDto next = legs.get(i+1).departure.getSchedule();
                d = d.plus(getDifference(current.getArrivalTime(), next.getDepartureTime()));
            }
        }
        return timeUnit.convert(d.getMillis(), TimeUnit.MILLISECONDS);
    }

    @JsonIgnore
    public static Duration getDifference(LocalTime departure, LocalTime arrival) {
        if ( departure.isAfter(arrival) ) {
            return Minutes.minutesBetween(departure, new LocalTime(23, 59)).plus(1).plus(Minutes.minutesBetween(LocalTime.MIDNIGHT, arrival)).toStandardDuration();
        } else {
            return Minutes.minutesBetween(departure, arrival).toStandardDuration();
        }
    }

    @JsonIgnore
    public int getStops() {
        return legs.size() - 1;
    }
}
TOP

Related Classes of is.bokun.dtos.transport.AvailablePathDto

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.