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); }
@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); }
builder.name(typeName);
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);
builder.name(typeName);
@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; }
@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(); } }
@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); }
@Override public GraphQLInputType getInputType(IGraphQLObjectMapper graphQLObjectMapper, Type type) { Class<?> classType = (Class<?>) type; Class<?> enumClassType = classType.getComponentType(); GraphQLEnumType.Builder enumType = GraphQLEnumType.newEnum() .name(graphQLObjectMapper.getTypeNamingStrategy().getTypeName(graphQLObjectMapper, enumClassType)); for (Object value : enumClassType.getEnumConstants()) { enumType.value(value.toString(), value); } return new GraphQLList(enumType.build()); }
@Override public GraphQLOutputType getOutputType(IGraphQLObjectMapper graphQLObjectMapper, Type type) { Class<?> classType = (Class<?>) type; Class<?> enumClassType = classType.getComponentType(); GraphQLEnumType.Builder enumType = GraphQLEnumType.newEnum() .name(graphQLObjectMapper.getTypeNamingStrategy().getTypeName(graphQLObjectMapper, enumClassType)); for (Object value : enumClassType.getEnumConstants()) { enumType.value(value.toString(), value); } return new GraphQLList(enumType.build()); }
public static <E extends Enum<E>> GraphQLOutputType newEnumType(Class<E> enumClass) { GraphQLEnumType.Builder builder = GraphQLEnumType.newEnum() .name(enumClass.getSimpleName()); for (E e : EnumUtils.getEnumList(enumClass)) { builder = builder.value(e.name(), e); } return builder.build(); }
protected GraphQLInputType getFieldsEnumType(EntityType<?> entityType) { GraphQLEnumType.Builder enumBuilder = GraphQLEnumType.newEnum().name(entityType.getName()+"FieldsEnum"); final AtomicInteger ordinal = new AtomicInteger(); entityType.getAttributes().stream() .filter(this::isValidInput) .filter(this::isNotIgnored) .forEach(it -> enumBuilder.value(it.getName(), ordinal.incrementAndGet())); GraphQLInputType answer = enumBuilder.build(); setNoOpCoercing(answer); return answer; }
public GraphQLEnumType createLinkEnumType() { GraphQLEnumType linkTypeEnum = newEnum().name(LINK_TYPE_NAME).description("Mesh resolve link type").value(LinkType.FULL.name(), LinkType.FULL, "Render full links").value(LinkType.MEDIUM.name(), LinkType.MEDIUM, "Render medium links").value(LinkType.SHORT.name(), LinkType.SHORT, "Render short links") .value(LinkType.OFF.name(), LinkType.OFF, "Don't render links").build(); return linkTypeEnum; }
@Override public GraphQLEnumType toGraphQLType(String typeName, AnnotatedType javaType, OperationMapper operationMapper, BuildContext buildContext) { GraphQLEnumType.Builder enumBuilder = newEnum() .name(typeName) .description(buildContext.typeInfoGenerator.generateTypeDescription(javaType, buildContext.messageBundle)); buildContext.directiveBuilder.buildEnumTypeDirectives(javaType, buildContext.directiveBuilderParams()).forEach(directive -> enumBuilder.withDirective(operationMapper.toGraphQLDirective(directive, buildContext))); addOptions(enumBuilder, javaType, operationMapper, buildContext); return enumBuilder.build(); }
.name("Day") .value("MONDAY") .value("TUESDAY")
void enumTypes() { GraphQLEnumType colorEnum = newEnum() .name("Color") .description("Supported colors.") .value("RED") .value("GREEN") .value("BLUE") .build(); }