
graphql.nadel.engine.FieldMetadataUtil Maven / Gradle / Ivy
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