org.opentripplanner.ext.transmodelapi.support.GqlUtil Maven / Gradle / Ivy
package org.opentripplanner.ext.transmodelapi.support;
import graphql.Scalars;
import graphql.introspection.Introspection.DirectiveLocation;
import graphql.schema.DataFetchingEnvironment;
import graphql.schema.GraphQLDirective;
import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLInputObjectField;
import graphql.schema.GraphQLList;
import graphql.schema.GraphQLNonNull;
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLScalarType;
import java.time.ZoneId;
import java.util.List;
import org.opentripplanner.ext.transmodelapi.TransmodelRequestContext;
import org.opentripplanner.ext.transmodelapi.mapping.TransitIdMapper;
import org.opentripplanner.ext.transmodelapi.model.scalars.DateScalarFactory;
import org.opentripplanner.ext.transmodelapi.model.scalars.DateTimeScalarFactory;
import org.opentripplanner.ext.transmodelapi.model.scalars.DoubleFunctionScalarFactory;
import org.opentripplanner.ext.transmodelapi.model.scalars.LocalTimeScalarFactory;
import org.opentripplanner.ext.transmodelapi.model.scalars.TimeScalarFactory;
import org.opentripplanner.routing.RoutingService;
import org.opentripplanner.transit.service.TransitService;
/**
* Provide some of the commonly used "chain" of methods. Like all ids should be created the same
* wayThis
*/
public class GqlUtil {
public final GraphQLScalarType dateTimeScalar;
public final GraphQLScalarType dateScalar;
public final GraphQLScalarType doubleFunctionScalar;
public final GraphQLScalarType localTimeScalar;
public final GraphQLObjectType timeScalar;
public final GraphQLDirective timingData;
/** private to prevent util class from instantiation */
public GqlUtil(ZoneId timeZone) {
this.dateTimeScalar =
DateTimeScalarFactory.createMillisecondsSinceEpochAsDateTimeStringScalar(timeZone);
this.dateScalar = DateScalarFactory.createDateScalar();
this.doubleFunctionScalar = DoubleFunctionScalarFactory.createDoubleFunctionScalar();
this.localTimeScalar = LocalTimeScalarFactory.createLocalTimeScalar();
this.timeScalar = TimeScalarFactory.createSecondsSinceMidnightAsTimeObject();
this.timingData =
GraphQLDirective
.newDirective()
.name("timingData")
.description("Add timing data to prometheus, if Actuator API is enabled")
.validLocation(DirectiveLocation.FIELD_DEFINITION)
.build();
}
public static RoutingService getRoutingService(DataFetchingEnvironment environment) {
return ((TransmodelRequestContext) environment.getContext()).getRoutingService();
}
public static TransitService getTransitService(DataFetchingEnvironment environment) {
return ((TransmodelRequestContext) environment.getContext()).getTransitService();
}
public static GraphQLFieldDefinition newTransitIdField() {
return GraphQLFieldDefinition
.newFieldDefinition()
.name("id")
.type(new GraphQLNonNull(Scalars.GraphQLID))
.dataFetcher(env -> TransitIdMapper.mapEntityIDToApi(env.getSource()))
.build();
}
public static GraphQLInputObjectField newIdListInputField(String name, String description) {
return GraphQLInputObjectField
.newInputObjectField()
.name(name)
.description(description)
.type(new GraphQLList(Scalars.GraphQLID))
.defaultValue(List.of())
.build();
}
public static boolean hasArgument(DataFetchingEnvironment environment, String name) {
return environment.containsArgument(name) && environment.getArgument(name) != null;
}
public static List listOfNullSafe(T element) {
return element == null ? List.of() : List.of(element);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy