InputDefinitionToDataModelMapper.java 2.9 KB
Newer Older
1 2 3
package com.kobylynskyi.graphql.codegen.mapper;

import com.kobylynskyi.graphql.codegen.model.MappingConfig;
4
import graphql.language.Document;
5
import graphql.language.InputObjectTypeDefinition;
6 7
import graphql.language.InputObjectTypeExtensionDefinition;
import graphql.language.InputValueDefinition;
8 9

import java.util.HashMap;
10
import java.util.List;
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
import java.util.Map;

import static com.kobylynskyi.graphql.codegen.model.DataModelFields.*;

/**
 * Map input type definition to a Freemarker data model
 *
 * @author kobylynskyi
 */
public class InputDefinitionToDataModelMapper {

    /**
     * Map input type definition to a Freemarker data model
     *
     * @param mappingConfig  Global mapping configuration
     * @param typeDefinition GraphQL type definition
27
     * @param document       GraphQL document
28 29
     * @return Freemarker data model of the GraphQL type
     */
30 31
    public static Map<String, Object> map(MappingConfig mappingConfig, InputObjectTypeDefinition typeDefinition,
                                          Document document) {
32
        String packageName = MapperUtils.getModelPackageName(mappingConfig);
33 34 35
        List<InputValueDefinition> inputValueDefinitions = getInputValueDefinitions(typeDefinition, document);

        Map<String, Object> dataModel = new HashMap<>();
36 37 38 39
        dataModel.put(PACKAGE, packageName);
        dataModel.put(IMPORTS, MapperUtils.getImports(mappingConfig, packageName));
        dataModel.put(CLASS_NAME, MapperUtils.getClassNameWithPrefixAndSuffix(mappingConfig, typeDefinition));
        dataModel.put(NAME, typeDefinition.getName());
40
        dataModel.put(FIELDS, InputValueDefinitionToParameterMapper.map(mappingConfig, inputValueDefinitions, typeDefinition.getName()));
41
        dataModel.put(BUILDER, mappingConfig.getGenerateBuilder());
A
Alberto Valiña 已提交
42 43
        dataModel.put(EQUALS_AND_HASH_CODE, mappingConfig.getGenerateEqualsAndHashCode());
        dataModel.put(TO_STRING, mappingConfig.getGenerateToString());
44
        dataModel.put(TO_STRING_ESCAPE_JSON, mappingConfig.getGenerateRequests());
45 46 47
        return dataModel;
    }

48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
    /**
     * Merge input value definitions from the definition and its extensions
     *
     * @param typeDefinition InputObjectTypeDefinition definition
     * @param document       GraphQL document. Used to fetch all extensions of the same definition
     * @return list of all input value definitions
     */
    private static List<InputValueDefinition> getInputValueDefinitions(InputObjectTypeDefinition typeDefinition,
                                                                       Document document) {
        List<InputValueDefinition> definitions = typeDefinition.getInputValueDefinitions();
        MapperUtils.getDefinitionsOfType(document, InputObjectTypeExtensionDefinition.class, typeDefinition.getName())
                .stream()
                .map(InputObjectTypeDefinition::getInputValueDefinitions)
                .forEach(definitions::addAll);
        return definitions;
    }

65
}