/** * This helps you transform the current GraphQLFieldDefinition into another one by starting a builder with all * the current values and allows you to transform it how you want. * * @param builderConsumer the consumer code that will be given a builder to transform * * @return a new field based on calling build on that builder */ public GraphQLFieldDefinition transform(Consumer<Builder> builderConsumer) { Builder builder = newFieldDefinition(this); builderConsumer.accept(builder); return builder.build(); }
/** * Take a field builder in a function definition and apply. Can be used in a jdk8 lambda * e.g.: * <pre> * {@code * field(f -> f.name("fieldName")) * } * </pre> * * @param builderFunction a supplier for the builder impl * * @return this */ public Builder field(UnaryOperator<GraphQLFieldDefinition.Builder> builderFunction) { assertNotNull(builderFunction, "builderFunction can't be null"); GraphQLFieldDefinition.Builder builder = GraphQLFieldDefinition.newFieldDefinition(); builder = builderFunction.apply(builder); return field(builder.build()); }
private FieldDefAndDirectiveParams buildField(BuildContext buildCtx, TypeDefinition parentType, FieldDefinition fieldDef) { buildCtx.enterNode(fieldDef); GraphQLFieldDefinition.Builder builder = GraphQLFieldDefinition.newFieldDefinition(); builder.definition(fieldDef); builder.name(fieldDef.getName()); builder.description(schemaGeneratorHelper.buildDescription(fieldDef, fieldDef.getDescription())); builder.deprecate(schemaGeneratorHelper.buildDeprecationReason(fieldDef.getDirectives())); GraphQLDirective[] directives = buildDirectives(fieldDef.getDirectives(), Collections.emptyList(), DirectiveLocation.FIELD_DEFINITION, buildCtx.getDirectiveDefinitions()); builder.withDirectives( directives ); fieldDef.getInputValueDefinitions().forEach(inputValueDefinition -> builder.argument(buildArgument(buildCtx, inputValueDefinition))); GraphQLOutputType fieldType = buildOutputType(buildCtx, fieldDef.getType()); builder.type(fieldType); GraphQLFieldDefinition fieldDefinition = builder.build(); // if they have already wired in a fetcher - then leave it alone FieldCoordinates coordinates = FieldCoordinates.coordinates(parentType.getName(), fieldDefinition.getName()); if (!buildCtx.codeRegistry.hasDataFetcher(coordinates)) { DataFetcherFactory dataFetcherFactory = buildDataFetcherFactory(buildCtx, parentType, fieldDef, fieldType, Arrays.asList(directives)); buildCtx.getCodeRegistry().dataFetcher(coordinates, dataFetcherFactory); } return buildCtx.exitNode(new FieldDefAndDirectiveParams(fieldDefinition, buildCtx.mkBehaviourParams())); }
private GraphQLFieldDefinition getidField() { FetcherFactory fetcherFactory = new FetcherFactory(hgqlSchema); return newFieldDefinition() .type(GraphQLID) .name("_id") .description("The URI of this resource.") .dataFetcher(fetcherFactory.idFetcher()).build(); }
/** * Same effect as the field(GraphQLFieldDefinition). Builder.build() is called * from within * * @param builder an un-built/incomplete GraphQLFieldDefinition * * @return this */ public Builder field(GraphQLFieldDefinition.Builder builder) { return field(builder.build()); }
public GraphQLFieldDefinition createBinaryDef(FieldSchema schema) { return newFieldDefinition().name(schema.getName()).description(schema.getLabel()).type(new GraphQLTypeReference(BINARY_FIELD_TYPE_NAME)) .dataFetcher(env -> { GraphFieldContainer container = env.getSource(); return container.getBinary(schema.getName()); }).build(); }
public GraphQLFieldDefinition createPluginPageField() { return newFieldDefinition().name("plugins").description("Load plugins").argument(createPagingArgs()) .type(new GraphQLTypeReference(PLUGIN_PAGE_TYPE_NAME)).dataFetcher(env -> { GraphQLContext gc = env.getContext(); if (!gc.getUser().hasAdminRole()) { return new PermissionException("plugins", "Missing admin permission"); } Map<String, Plugin> deployments = manager.getPlugins(); Page<Plugin> page = new DynamicStreamPageImpl<>(deployments.values().stream(), getPagingInfo(env)); return page; }).build(); }
public static GraphQLFieldDefinition string (String name) { return newFieldDefinition() .name(name) .type(GraphQLString) .dataFetcher(new PropertyDataFetcher(name)) .build(); }
public GraphQLFieldDefinition createNumberDef(FieldSchema schema) { return newFieldDefinition().name(schema.getName()).description(schema.getLabel()).type(GraphQLBigDecimal).dataFetcher(env -> { GraphFieldContainer container = env.getSource(); NumberGraphField numberField = container.getNumber(schema.getName()); if (numberField != null) { return numberField.getNumber(); } return null; }).build(); }
public GraphQLFieldDefinition createMeshFieldType() { return newFieldDefinition().name("mesh").description("The mesh instance").type(new GraphQLTypeReference(MESH_TYPE_NAME)) .dataFetcher((env) -> { return Mesh.mesh(); }).build(); }
/** * Convenience method to create a field in a GraphQL schema that fetches the number of rows in a table. * Must be on a type that has a "namespace" field for context. */ public static GraphQLFieldDefinition field (String fieldName, String tableName) { return newFieldDefinition() .name(fieldName) .type(GraphQLInt) .dataFetcher(new RowCountFetcher(tableName)) .build(); }
public GraphQLFieldDefinition nodeField(GraphQLInterfaceType nodeInterface, DataFetcher nodeDataFetcher) { return newFieldDefinition() .name("node") .description("Fetches an object given its ID") .type(nodeInterface) .dataFetcher(nodeDataFetcher) .argument(newArgument() .name("id") .description("The ID of an object") .type(nonNull(GraphQLID))) .build(); }
public GraphQLFieldDefinition createDateDef(FieldSchema schema) { return newFieldDefinition().name(schema.getName()).description(schema.getLabel()).type(GraphQLString).dataFetcher(env -> { GraphFieldContainer container = env.getSource(); DateGraphField dateField = container.getDate(schema.getName()); if (dateField != null) { return DateUtils.toISO8601(dateField.getDate(), 0); } return null; }).build(); }
.type(stopType) .dataFetcher(environment -> ((GraphIndex.StopAndDistance) environment.getSource()).stop) .build()) .field(GraphQLFieldDefinition.newFieldDefinition() .name("distance") .type(Scalars.GraphQLInt) .dataFetcher(environment -> ((GraphIndex.StopAndDistance) environment.getSource()).distance) .build()) .build(); .dataFetcher(environment -> index.patternForId .get(((StopTimesInPattern) environment.getSource()).pattern.id)) .build()) .field(GraphQLFieldDefinition.newFieldDefinition() .name("stoptimes") .type(new GraphQLList(stoptimeType)) .dataFetcher(environment -> ((StopTimesInPattern) environment.getSource()).times) .build()) .build(); .dataFetcher(environment -> relay .toGlobalId(clusterType.getName(), ((StopCluster) environment.getSource()).id)) .build()) .field(GraphQLFieldDefinition.newFieldDefinition() .name("gtfsId") .type(new GraphQLNonNull(Scalars.GraphQLString)) .dataFetcher(environment -> ((StopCluster) environment.getSource()).id) .build()) .field(GraphQLFieldDefinition.newFieldDefinition()
public GraphQLFieldDefinition mutation(String name, String fieldName, List<GraphQLInputObjectField> inputFields, List<GraphQLFieldDefinition> outputFields, DataFetcher dataFetcher) { GraphQLInputObjectType inputObjectType = newInputObject() .name(name + "Input") .fields(inputFields) .build(); GraphQLObjectType outputType = newObject() .name(name + "Payload") .fields(outputFields) .build(); return newFieldDefinition() .name(fieldName) .type(outputType) .argument(newArgument() .name("input") .type(nonNull(inputObjectType))) .dataFetcher(dataFetcher) .build(); }
public GraphQLFieldDefinition mutationWithClientMutationId(String name, String fieldName, List<GraphQLInputObjectField> inputFields, List<GraphQLFieldDefinition> outputFields, DataFetcher dataFetcher) { GraphQLInputObjectField clientMutationIdInputField = newInputObjectField() .name("clientMutationId") .type(GraphQLString) .build(); GraphQLFieldDefinition clientMutationIdPayloadField = newFieldDefinition() .name("clientMutationId") .type(GraphQLString) .build(); return mutation(name, fieldName, addElementToList(inputFields, clientMutationIdInputField), addElementToList(outputFields, clientMutationIdPayloadField), dataFetcher); }
private void directWiring() { GraphQLFieldDefinition descriptionField = GraphQLFieldDefinition.newFieldDefinition() .name("description") .type(Scalars.GraphQLString) .dataFetcher(PropertyDataFetcher.fetching("desc")) .build(); }
/** * Same effect as the field(GraphQLFieldDefinition). Builder.build() is called * from within * * @param builder an un-built/incomplete GraphQLFieldDefinition * * @return this */ public Builder field(GraphQLFieldDefinition.Builder builder) { return field(builder.build()); }
/** * Same effect as the field(GraphQLFieldDefinition). Builder.build() is called * from within * * @param builder an un-built/incomplete GraphQLFieldDefinition * * @return this */ public Builder field(GraphQLFieldDefinition.Builder builder) { return field(builder.build()); }
public GraphQLFieldDefinition nodeField(GraphQLInterfaceType nodeInterface, DataFetcher nodeDataFetcher) { return newFieldDefinition() .name("node") .description("Fetches an object given its ID") .type(nodeInterface) .dataFetcher(nodeDataFetcher) .argument(newArgument() .name("id") .description("The ID of an object") .type(nonNull(GraphQLID))) .build(); }