private GraphQLEnumType buildEnumType(BuildContext buildCtx, EnumTypeDefinition typeDefinition) { buildCtx.enterNode(typeDefinition); GraphQLEnumType.Builder builder = GraphQLEnumType.newEnum(); builder.definition(typeDefinition); builder.name(typeDefinition.getName()); builder.description(schemaGeneratorHelper.buildDescription(typeDefinition, typeDefinition.getDescription())); List<EnumTypeExtensionDefinition> extensions = enumTypeExtensions(typeDefinition, buildCtx); EnumValuesProvider enumValuesProvider = buildCtx.getWiring().getEnumValuesProviders().get(typeDefinition.getName()); typeDefinition.getEnumValueDefinitions().forEach(evd -> { GraphQLEnumValueDefinition enumValueDefinition = buildEnumValue(buildCtx, typeDefinition, enumValuesProvider, evd); builder.value(enumValueDefinition); }); extensions.forEach(extension -> extension.getEnumValueDefinitions().forEach(evd -> { GraphQLEnumValueDefinition enumValueDefinition = buildEnumValue(buildCtx, typeDefinition, enumValuesProvider, evd); if (!builder.hasValue(enumValueDefinition.getName())) { builder.value(enumValueDefinition); } })); builder.withDirectives( buildDirectives(typeDefinition.getDirectives(), directivesOf(extensions), ENUM, buildCtx.getDirectiveDefinitions()) ); GraphQLEnumType enumType = builder.build(); enumType = directiveBehaviour.onEnum(enumType, buildCtx.mkBehaviourParams()); return buildCtx.exitNode(enumType); }
type = new InterfaceBuilder(graphQLObjectInfoRetriever, graphQLFieldRetriever, extensionsHandler).getInterfaceBuilder(object, container).build(); } else if (Enum.class.isAssignableFrom(object)) { type = new EnumBuilder(graphQLObjectInfoRetriever).getEnumBuilder(object).build(); } else { if (isInput) {
rv = getOutputTypeCache().put(typeName, graphQLType.get()); } else if (classType.isEnum()) { GraphQLEnumType.Builder enumType = GraphQLEnumType.newEnum().name(typeNamingStrategy.getTypeName(this, type)); for (Object value : classType.getEnumConstants()) { enumType.value(value.toString(), value); rv = getOutputTypeCache().put(typeName, enumType.build()); } else { rv = buildObject(type, classType);
builder.name(typeName); builder.description(description.value()); Enum constant = constants.stream().filter(c -> c.name().contentEquals(n)).findFirst().get(); String name_ = fieldName == null ? n : fieldName.value(); builder.value(name_, constant, fieldDescription == null ? name_ : fieldDescription.value()); } catch (NoSuchFieldException ignore) { final GraphQLEnumType type = builder.build(); types.put(typeName, type);
builder.name(typeName); builder.description(description.value()); Enum constant = constants.stream().filter(c -> c.name().contentEquals(n)).findFirst().get(); String name_ = fieldName == null ? n : fieldName.value(); builder.value(name_, constant, fieldDescription == null ? name_ : fieldDescription.value()); } catch (NoSuchFieldException ignore) {
@SuppressWarnings("WeakerAccess") protected Optional<GraphQLInputObjectField> createInputDisambiguatorField(AnnotatedType javaType, BuildContext buildContext) { Class<?> raw = ClassUtils.getRawType(javaType.getType()); String typeName = buildContext.typeInfoGenerator.generateTypeName(GenericTypeReflector.annotate(raw), buildContext.messageBundle) + "TypeDisambiguator"; GraphQLInputType fieldType = null; if (buildContext.typeCache.contains(typeName)) { fieldType = new GraphQLTypeReference(typeName); } else { List<AnnotatedType> impls = buildContext.abstractInputHandler.findConcreteSubTypes(raw, buildContext).stream() .map(GenericTypeReflector::annotate) .collect(Collectors.toList()); if (impls.size() > 1) { buildContext.typeCache.register(typeName); GraphQLEnumType.Builder builder = GraphQLEnumType.newEnum() .name(typeName) .description("Input type discriminator"); impls.stream() .map(t -> buildContext.typeInfoGenerator.generateTypeName(t, buildContext.messageBundle)) .forEach(builder::value); fieldType = builder.build(); } } return Optional.ofNullable(fieldType).map(type -> newInputObjectField() .name(ValueMapper.TYPE_METADATA_FIELD_NAME) .type(type) .build()); } }
private GraphQLEnumType buildEnumType(BuildContext buildCtx, EnumTypeDefinition typeDefinition) { buildCtx.enterNode(typeDefinition); GraphQLEnumType.Builder builder = GraphQLEnumType.newEnum(); builder.definition(typeDefinition); builder.name(typeDefinition.getName()); builder.description(schemaGeneratorHelper.buildDescription(typeDefinition, typeDefinition.getDescription())); List<EnumTypeExtensionDefinition> extensions = enumTypeExtensions(typeDefinition, buildCtx); EnumValuesProvider enumValuesProvider = buildCtx.getWiring().getEnumValuesProviders().get(typeDefinition.getName()); typeDefinition.getEnumValueDefinitions().forEach(evd -> { GraphQLEnumValueDefinition enumValueDefinition = buildEnumValue(buildCtx, typeDefinition, enumValuesProvider, evd); builder.value(enumValueDefinition); }); extensions.forEach(extension -> extension.getEnumValueDefinitions().forEach(evd -> { GraphQLEnumValueDefinition enumValueDefinition = buildEnumValue(buildCtx, typeDefinition, enumValuesProvider, evd); if (!builder.hasValue(enumValueDefinition.getName())) { builder.value(enumValueDefinition); } })); builder.withDirectives( buildDirectives(typeDefinition.getDirectives(), directivesOf(extensions), ENUM, buildCtx.getDirectiveDefinitions()) ); GraphQLEnumType enumType = builder.build(); enumType = directiveBehaviour.onEnum(enumType, buildCtx.mkBehaviourParams()); return buildCtx.exitNode(enumType); }
/** * Converts an enum to a GraphQLEnumType. * @param enumClazz the Enum to convert * @return A GraphQLEnum type for class. */ public GraphQLEnumType classToEnumType(Class<?> enumClazz) { if (enumConversions.containsKey(enumClazz)) { return enumConversions.get(enumClazz); } Enum [] values = (Enum []) enumClazz.getEnumConstants(); GraphQLEnumType.Builder builder = newEnum().name(toValidNameName(enumClazz.getName())); for (Enum value : values) { builder.value(toValidNameName(value.name()), value); } GraphQLEnumType enumResult = builder.build(); enumConversions.put(enumClazz, enumResult); return enumResult; }
/** * Converts an enum to a GraphQLEnumType. * @param enumClazz the Enum to convert * @return A GraphQLEnum type for class. */ public GraphQLEnumType classToEnumType(Class<?> enumClazz) { if (enumConversions.containsKey(enumClazz)) { return enumConversions.get(enumClazz); } Enum [] values = (Enum []) enumClazz.getEnumConstants(); GraphQLEnumType.Builder builder = newEnum().name(toValidNameName(enumClazz.getName())); for (Enum value : values) { builder.value(toValidNameName(value.name()), value); } GraphQLEnumType enumResult = builder.build(); enumConversions.put(enumClazz, enumResult); return enumResult; }
@SuppressWarnings( "unchecked" ) private GraphQLType getGraphQLTypeFromJavaType(Class<?> clazz) { if (clazz.isEnum()) { if (classCache.containsKey(clazz)) return classCache.get(clazz); GraphQLEnumType.Builder enumBuilder = GraphQLEnumType.newEnum().name(clazz.getSimpleName()); int ordinal = 0; for (Enum<?> enumValue : ((Class<Enum<?>>)clazz).getEnumConstants()) enumBuilder.value(enumValue.name(), ordinal++); GraphQLType enumType = enumBuilder.build(); setNoOpCoercing(enumType); classCache.putIfAbsent(clazz, enumType); return enumType; } return JavaScalars.of(clazz); }
@Test public void wireGraphQLEnumType_validLocations_correctMethodIsCalled() throws Exception { // Arrange AnnotationsDirectiveWiring upperWiring = mock(AnnotationsDirectiveWiring.class); GraphQLEnumType directiveContainer = GraphQLEnumType.newEnum().name("asdf").value("asdfasdf").build(); AnnotationsWiringEnvironmentImpl upperCaseEnv = new AnnotationsWiringEnvironmentImpl(directiveContainer, directiveContainer.getDirective("upperCase")); when(upperWiring.onEnum(upperCaseEnv)).thenReturn(directiveContainer); HashMap<GraphQLDirective, AnnotationsDirectiveWiring> map = new HashMap<>(); GraphQLDirective upperCase = newDirective().name("upperCase").validLocations(Introspection.DirectiveLocation.ENUM).build(); map.put(upperCase, upperWiring); // Act directiveWirer.wire(directiveContainer, map); // Assert verify(upperWiring).onEnum(upperCaseEnv); }
protected GraphQLEnumType generateEnumType(Object object) { String typeName = getGraphQLTypeNameOrIdentityCode(object); List<GraphQLEnumValueDefinition> enumValues = getEnumValues(object); if (enumValues == null) { return null; } GraphQLEnumType.Builder builder = newEnum(); builder.name(typeName); builder.description(getTypeDescription(object)); for (GraphQLEnumValueDefinition value : enumValues) { builder.value(value.getName(), value.getValue(), value.getDescription()); } return builder.build(); } }
public Builder value(String name) { return value(new GraphQLEnumValueDefinition(name, null, name)); }
public Builder value(String name, Object value, String description) { return value(new GraphQLEnumValueDefinition(name, description, value)); }
public static Builder newEnum(GraphQLEnumType existing) { return new Builder(existing); }
public Builder withDirective(GraphQLDirective.Builder builder) { return withDirective(builder.build()); }
public static Builder newEnum() { return new Builder(); }
public Builder value(String name, Object value) { assertNotNull(value, "value can't be null"); return value(new GraphQLEnumValueDefinition(name, null, value)); }
@Test(expectedExceptions = InvalidDirectiveLocationException.class) public void wireGraphQLEnumType_invalidLocations_exceptionIsThrown() throws Exception { // Arrange AnnotationsDirectiveWiring upperWiring = mock(AnnotationsDirectiveWiring.class); GraphQLEnumType directiveContainer = GraphQLEnumType.newEnum().name("asdf").value("asdfasdf").build(); AnnotationsWiringEnvironmentImpl upperCaseEnv = new AnnotationsWiringEnvironmentImpl(directiveContainer, directiveContainer.getDirective("upperCase")); when(upperWiring.onEnum(upperCaseEnv)).thenReturn(directiveContainer); HashMap<GraphQLDirective, AnnotationsDirectiveWiring> map = new HashMap<>(); GraphQLDirective upperCase = newDirective().name("upperCase").build(); map.put(upperCase, upperWiring); // Act directiveWirer.wire(directiveContainer, map); }
/** * This helps you transform the current GraphQLEnumType 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 GraphQLEnumType transform(Consumer<Builder> builderConsumer) { Builder builder = newEnum(this); builderConsumer.accept(builder); return builder.build(); }