All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentripplanner.apis.transmodel.model.timetable.DatedServiceJourneyQuery Maven / Gradle / Ivy

The newest version!
package org.opentripplanner.apis.transmodel.model.timetable;

import static org.opentripplanner.apis.transmodel.mapping.TransitIdMapper.mapIDsToDomainNullSafe;

import graphql.Scalars;
import graphql.schema.GraphQLArgument;
import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLList;
import graphql.schema.GraphQLNonNull;
import graphql.schema.GraphQLOutputType;
import java.time.LocalDate;
import java.util.List;
import java.util.stream.Stream;
import org.opentripplanner.apis.transmodel.mapping.TransitIdMapper;
import org.opentripplanner.apis.transmodel.model.EnumTypes;
import org.opentripplanner.apis.transmodel.support.GqlUtil;
import org.opentripplanner.transit.model.framework.FeedScopedId;
import org.opentripplanner.transit.model.timetable.TripAlteration;
import org.opentripplanner.transit.model.timetable.TripOnServiceDate;

/**
 * A GraphQL query for retrieving data on DatedServiceJourneys
 */
public class DatedServiceJourneyQuery {

  public static GraphQLFieldDefinition createGetById(GraphQLOutputType datedServiceJourneyType) {
    return GraphQLFieldDefinition
      .newFieldDefinition()
      .name("datedServiceJourney")
      .type(datedServiceJourneyType)
      .description("Get a single dated service journey based on its id")
      .argument(GraphQLArgument.newArgument().name("id").type(Scalars.GraphQLString))
      .dataFetcher(environment -> {
        FeedScopedId id = TransitIdMapper.mapIDToDomain(environment.getArgument("id"));

        return GqlUtil.getTransitService(environment).getTripOnServiceDateById(id);
      })
      .build();
  }

  public static GraphQLFieldDefinition createQuery(
    GraphQLOutputType datedServiceJourneyType,
    GqlUtil gqlUtil
  ) {
    return GraphQLFieldDefinition
      .newFieldDefinition()
      .name("datedServiceJourneys")
      .type(new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(datedServiceJourneyType))))
      .description("Get all dated service journeys, matching the filters")
      .argument(
        GraphQLArgument
          .newArgument()
          .name("lines")
          .type(new GraphQLList(new GraphQLNonNull(Scalars.GraphQLString)))
      )
      .argument(
        GraphQLArgument
          .newArgument()
          .name("serviceJourneys")
          .type(new GraphQLList(new GraphQLNonNull(Scalars.GraphQLString)))
      )
      .argument(
        GraphQLArgument
          .newArgument()
          .name("privateCodes")
          .type(new GraphQLList(new GraphQLNonNull(Scalars.GraphQLString)))
      )
      .argument(
        GraphQLArgument
          .newArgument()
          .name("operatingDays")
          .type(new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(gqlUtil.dateScalar))))
      )
      .argument(
        GraphQLArgument
          .newArgument()
          .name("alterations")
          .type(new GraphQLList(new GraphQLNonNull(EnumTypes.SERVICE_ALTERATION)))
      )
      .argument(
        GraphQLArgument
          .newArgument()
          .name("authorities")
          .type(new GraphQLList(new GraphQLNonNull(Scalars.GraphQLString)))
      )
      .argument(
        GraphQLArgument
          .newArgument()
          .name("replacementFor")
          .description(
            "Get all DatedServiceJourneys, which are replacing any of the given DatedServiceJourneys ids"
          )
          .type(new GraphQLList(new GraphQLNonNull(Scalars.GraphQLString)))
      )
      .dataFetcher(environment -> {
        Stream stream = GqlUtil
          .getTransitService(environment)
          .getAllTripOnServiceDates()
          .stream();

        var lines = mapIDsToDomainNullSafe(environment.getArgument("lines"));
        var serviceJourneys = mapIDsToDomainNullSafe(environment.getArgument("serviceJourneys"));
        var privateCodes = environment.>getArgument("privateCodes");
        var operatingDays = environment.>getArgument("operatingDays");
        var alterations = environment.>getArgument("alterations");
        var authorities = mapIDsToDomainNullSafe(environment.getArgument("authorities"));
        var replacementFor = mapIDsToDomainNullSafe(environment.getArgument("replacementFor"));

        if (!lines.isEmpty()) {
          stream =
            stream.filter(tripOnServiceDate ->
              lines.contains(tripOnServiceDate.getTrip().getRoute().getId())
            );
        }

        if (!serviceJourneys.isEmpty()) {
          stream =
            stream.filter(tripOnServiceDate ->
              serviceJourneys.contains(tripOnServiceDate.getTrip().getId())
            );
        }

        if (privateCodes != null && !privateCodes.isEmpty()) {
          stream =
            stream.filter(tripOnServiceDate ->
              privateCodes.contains(tripOnServiceDate.getTrip().getNetexInternalPlanningCode())
            );
        }

        // At least one operationg day is required
        var days = operatingDays.stream().toList();

        stream =
          stream.filter(tripOnServiceDate -> days.contains(tripOnServiceDate.getServiceDate()));

        if (alterations != null && !alterations.isEmpty()) {
          stream =
            stream.filter(tripOnServiceDate ->
              alterations.contains(tripOnServiceDate.getTripAlteration())
            );
        }

        if (!authorities.isEmpty()) {
          stream =
            stream.filter(tripOnServiceDate ->
              authorities.contains(tripOnServiceDate.getTrip().getRoute().getAgency().getId())
            );
        }

        if (!replacementFor.isEmpty()) {
          stream =
            stream.filter(tripOnServiceDate ->
              !tripOnServiceDate.getReplacementFor().isEmpty() &&
              tripOnServiceDate
                .getReplacementFor()
                .stream()
                .anyMatch(replacement -> replacementFor.contains(replacement.getId()))
            );
        }

        return stream.toList();
      })
      .build();
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy