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

org.opentripplanner.ext.transmodelapi.model.network.JourneyPatternType Maven / Gradle / Ivy

package org.opentripplanner.ext.transmodelapi.model.network;

import graphql.Scalars;
import graphql.schema.GraphQLArgument;
import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLList;
import graphql.schema.GraphQLNamedOutputType;
import graphql.schema.GraphQLNonNull;
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLOutputType;
import graphql.schema.GraphQLTypeReference;
import org.locationtech.jts.geom.LineString;
import org.opentripplanner.ext.transmodelapi.model.EnumTypes;
import org.opentripplanner.ext.transmodelapi.support.GqlUtil;
import org.opentripplanner.model.TripPattern;
import org.opentripplanner.util.PolylineEncoder;

import java.util.BitSet;
import java.util.stream.Collectors;

public class JourneyPatternType {
  private static final String NAME = "JourneyPattern";
  public static final GraphQLTypeReference REF = new GraphQLTypeReference(NAME);

  public static GraphQLObjectType create(
      GraphQLOutputType linkGeometryType,
      GraphQLOutputType noticeType,
      GraphQLOutputType quayType,
      GraphQLOutputType lineType,
      GraphQLOutputType serviceJourneyType,
      GraphQLNamedOutputType ptSituationElementType,
      GqlUtil gqlUtil
  ) {
    return GraphQLObjectType.newObject()
        .name("JourneyPattern")
        .field(GqlUtil.newTransitIdField())
        .field(GraphQLFieldDefinition.newFieldDefinition()
            .name("line")
            .type(new GraphQLNonNull(lineType))
            .dataFetcher(environment -> ((TripPattern) environment.getSource()).route)
            .build())
        .field(GraphQLFieldDefinition.newFieldDefinition()
            .name("directionType")
            .type(EnumTypes.DIRECTION_TYPE)
            .dataFetcher(environment -> ((TripPattern) environment.getSource()).directionId)
            .build())
        .field(GraphQLFieldDefinition.newFieldDefinition()
            .name("name")
            .type(Scalars.GraphQLString)
            .dataFetcher(environment -> ((TripPattern) environment.getSource()).name)
            .build())
        .field(GraphQLFieldDefinition.newFieldDefinition()
            .name("serviceJourneys")
            .type(new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(serviceJourneyType))))
            .dataFetcher(environment -> ((TripPattern) environment.getSource()).getTrips())
            .build())
        .field(GraphQLFieldDefinition.newFieldDefinition()
            .name("serviceJourneysForDate")
            .description("List of service journeys for the journey pattern for a given date")
            .argument(GraphQLArgument.newArgument()
                .name("date")
                .type(gqlUtil.dateScalar)
                .build())
            .type(new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(serviceJourneyType))))
            .dataFetcher(environment -> {

              BitSet services = GqlUtil.getRoutingService(environment)
                  .getServicesRunningForDate(
                      gqlUtil.serviceDateMapper.secondsSinceEpochToServiceDate(
                          environment.getArgument("date")
                      )
                  );
              return ((TripPattern) environment.getSource()).scheduledTimetable.tripTimes
                  .stream()
                  .filter(times -> services.get(times.serviceCode))
                  .map(times -> times.trip)
                  .collect(Collectors.toList());
            })
            .build())
        .field(GraphQLFieldDefinition.newFieldDefinition()
            .name("quays")
            .description("Quays visited by service journeys for this journey patterns")
            .type(new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(quayType))))
            .dataFetcher(environment -> ((TripPattern) environment.getSource()).getStops())
            .build())
        .field(GraphQLFieldDefinition.newFieldDefinition()
            .name("pointsOnLink")
            .type(linkGeometryType)
            .dataFetcher(environment -> {
              LineString geometry = ((TripPattern) environment.getSource()).getGeometry();
              if (geometry == null) {
                return null;
              } else {
                return PolylineEncoder.createEncodings(geometry);
              }
            })
            .build())
        .field(GraphQLFieldDefinition.newFieldDefinition()
            .name("situations")
            .description("Get all situations active for the journey pattern.")
            .type(new GraphQLNonNull(new GraphQLList(ptSituationElementType)))
            .dataFetcher(environment -> {
              return GqlUtil.getRoutingService(environment).getTransitAlertService().getTripPatternAlerts(
                  environment.getSource());
            })
            .build())
        .field(GraphQLFieldDefinition.newFieldDefinition()
            .name("notices")
            .type(new GraphQLNonNull(new GraphQLList(noticeType)))
            .dataFetcher(environment -> {
              TripPattern tripPattern = environment.getSource();
              return GqlUtil.getRoutingService(environment).getNoticesByEntity(tripPattern);
            })
            .build())
        .build();
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy