All Downloads are FREE. Search and download functionalities are using the official Maven repository.

graphql.nadel.engine.FieldMetadataUtil Maven / Gradle / Ivy

There is a newer version: 2021-03-26T09-09-21-fabd441
Show newest version
package graphql.nadel.engine;

import graphql.Internal;
import graphql.language.Field;
import graphql.nadel.engine.transformation.FieldMetadata;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static graphql.Assert.assertNotNull;
import static graphql.Assert.assertTrue;
import static graphql.nadel.dsl.NodeId.getId;
import static graphql.nadel.util.FpKit.filter;
import static graphql.nadel.util.FpKit.filterAndMap;
import static graphql.nadel.util.FpKit.map;

@Internal
public class FieldMetadataUtil {


    public static List getRootOfTransformationIds(Field field, Map> metadataByFieldId) {
        List fieldMetadata = readMetadata(field, metadataByFieldId);
        return filterAndMap(fieldMetadata, FieldMetadata::isRootOfTransformation, FieldMetadata::getTransformationId);
    }

    public static List getRootOfTransformationIds(String fieldId, Map> metadataByFieldId) {
        List fieldMetadata = readMetadata(fieldId, metadataByFieldId);
        return filterAndMap(fieldMetadata, FieldMetadata::isRootOfTransformation, FieldMetadata::getTransformationId);
    }

    public static List getTransformationIds(Field field, Map> metadataByFieldId) {
        List fieldMetadata = readMetadata(field, metadataByFieldId);
        return map(fieldMetadata, FieldMetadata::getTransformationId);
    }

    public static List getTransformationIds(String fieldId, Map> metadataByFieldId) {
        List fieldMetadata = readMetadata(fieldId, metadataByFieldId);
        return map(fieldMetadata, FieldMetadata::getTransformationId);
    }

    public static void addFieldMetadata(Field field, String transformationId, boolean rootOfTransformation, Map> metadataByFieldId) {
        List fieldMetadata = readMetadata(field, metadataByFieldId);
        FieldMetadata newFieldMetadata = new FieldMetadata(transformationId, rootOfTransformation);
        fieldMetadata.add(newFieldMetadata);
        writeMetadata(field, fieldMetadata, metadataByFieldId);
    }

    public static void copyFieldMetadata(Field from, Field to, Map> metadataByFieldId) {
        List fromMetadata = readMetadata(from, metadataByFieldId);
        if (fromMetadata.isEmpty()) {
            return;
        }
        List toMetadata = readMetadata(to, metadataByFieldId);
        toMetadata.addAll(fromMetadata);
        writeMetadata(to, toMetadata, metadataByFieldId);
    }

    public static String getUniqueRootFieldId(Field field, Map> metadataByFieldId) {
        List fieldMetadata = readMetadata(field, metadataByFieldId);
        List rootFieldMetadata = filter(fieldMetadata, FieldMetadata::isRootOfTransformation);
        assertTrue(rootFieldMetadata.size() == 1, () -> "exactly one root info expected");
        return rootFieldMetadata.get(0).getTransformationId();
    }

    public static void setFieldMetadata(String fieldId,
                                        String transformationId,
                                        List additionalIds,
                                        boolean rootOfTransformation,
                                        Map> metadataByFieldId) {
        assertNotNull(transformationId);
        List fieldMetadata = new ArrayList<>();

        FieldMetadata newFieldMetadata = new FieldMetadata(transformationId, rootOfTransformation);
        fieldMetadata.add(newFieldMetadata);
        for (String additionalId : additionalIds) {
            fieldMetadata.add(new FieldMetadata(additionalId, false));
        }
        metadataByFieldId.put(fieldId, fieldMetadata);
    }


    private static void writeMetadata(Field field, List newMetadata, Map> metadataByFieldId) {
        metadataByFieldId.put(getId(field), newMetadata);
    }


    private static List readMetadata(Field field, Map> metadataByFieldId) {
        List result = metadataByFieldId.get(getId(field));
        return result != null ? result : new ArrayList<>();
    }

    private static List readMetadata(String fieldId, Map> metadataByFieldId) {
        List result = metadataByFieldId.get(fieldId);
        return result != null ? result : new ArrayList<>();
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy