Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

import javax.lang.model.element.Modifier;
import java.util.List;
import java.util.Set;
import java.util.Optional;

import static no.sikt.graphitron.generators.codebuilding.FormatCodeBlocks.returnWrap;
import static no.sikt.graphitron.generators.codebuilding.VariableNames.VAR_OBJECT;
Expand All @@ -27,7 +27,7 @@ public TypeNameMethodGenerator(TypeResolverTarget localObject, ProcessedSchema p

@Override
public MethodSpec generate(TypeResolverTarget target) {
var components = getComponents(target).stream().map(TypeNameMethodGenerator::ifStatement).collect(CodeBlock.joining("\n"));
var components = getComponents(target).orElse(List.of()).stream().map(TypeNameMethodGenerator::ifStatement).collect(CodeBlock.joining("\n"));
return getDefaultSpecBuilder(METHOD_NAME, STRING.className)
.addModifiers(Modifier.STATIC)
.addParameter(OBJECT.className, VAR_OBJECT)
Expand All @@ -36,11 +36,11 @@ public MethodSpec generate(TypeResolverTarget target) {
.build();
}

private Set<ObjectDefinition> getComponents(TypeResolverTarget target) {
private Optional<List<ObjectDefinition>> getComponents(TypeResolverTarget target) {
if (processedSchema.isInterface(target.getName()) || processedSchema.isUnion(target.getName())) {
return processedSchema.getTypesFromInterfaceOrUnion(target.getName());
}
return Set.of();
return Optional.empty();
}

private static CodeBlock ifStatement(ObjectDefinition obj) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public MethodSpec generate(ObjectField target) {
}

private CodeBlock getCodeForMultitableCountMethod(ObjectField target) {
var implementations = processedSchema.getTypesFromInterfaceOrUnion(target.getTypeName());
var implementations = processedSchema.getTypesFromInterfaceOrUnion(target.getTypeName()).orElse(List.of());

var aliasSet = new LinkedHashSet<AliasWrapper>();
var codeForImplementations = CodeBlock.builder();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import static no.sikt.graphitron.mappings.JavaPoetClassName.*;
import static no.sikt.graphitron.mappings.JavaPoetClassName.SELECT_JOIN_STEP;
import static no.sikt.graphitron.mappings.TableReflection.*;
import static no.sikt.graphitron.validation.ValidationHandler.addErrorMessageAndThrow;
import static no.sikt.graphql.naming.GraphQLReservedName.*;

public class FetchMultiTableDBMethodGenerator extends FetchDBMethodGenerator {
Expand Down Expand Up @@ -60,7 +59,7 @@ public MethodSpec generate(ObjectField target) {
var unionOrInterfaceDefinition = processedSchema.isUnion(target) ? processedSchema.getUnion(target) : processedSchema.getInterface(target);

// Order is important for paginated queries as it gets data fields by index in the mapping
LinkedHashSet<ObjectDefinition> implementations = new LinkedHashSet<>(processedSchema.getTypesFromInterfaceOrUnion(unionOrInterfaceDefinition.getName()));
var implementations = processedSchema.getTypesFromInterfaceOrUnion(unionOrInterfaceDefinition.getName()).orElse(List.of());

return getSpecBuilder(target, unionOrInterfaceDefinition.getGraphClassName(), inputParser)
.addCode(implementations.isEmpty() ? returnWrap("null") : getCode(target, implementations, inputParser.getMethodInputNames(false, false, true)))
Expand All @@ -72,7 +71,7 @@ protected CodeBlock getHelperMethodCallForNestedField(ObjectField field, FetchCo
return null;
}

private CodeBlock getCode(ObjectField target, LinkedHashSet<ObjectDefinition> implementations, List<String> inputs) {
private CodeBlock getCode(ObjectField target, List<ObjectDefinition> implementations, List<String> inputs) {
List<String> sortFieldQueryMethodCalls = new ArrayList<>();
LinkedHashMap<String, String> mappedQueryVariables = new LinkedHashMap<>();
var joins = CodeBlock.builder();
Expand All @@ -87,9 +86,6 @@ private CodeBlock getCode(ObjectField target, LinkedHashSet<ObjectDefinition> im
}

for (var implementation : implementations) {
if (!implementation.hasTable()) {
addErrorMessageAndThrow("Type '%s' is returned in an interface query, but not have table set. This is not supported.", implementation.getName());
}
String typeName = implementation.getName();
sortFieldQueryMethodCalls.add(getSortFieldsMethodName(target, implementation));
String mappedVariableName = joinStepPrefix(typeName);
Expand Down Expand Up @@ -153,7 +149,7 @@ private CodeBlock getCode(ObjectField target, LinkedHashSet<ObjectDefinition> im
.build();
}

private static @NotNull CodeBlock getTokenVariableDeclaration(Set<ObjectDefinition> implementations) {
private static @NotNull CodeBlock getTokenVariableDeclaration(List<ObjectDefinition> implementations) {
var map = mapOfEntries(
indentIfMultiline(
implementations.stream()
Expand Down Expand Up @@ -226,7 +222,7 @@ private CodeBlock getFetchCodeBlock(ObjectField target) {
RECORD1.className);
}

private CodeBlock createMappingContent(GenerationSourceField<?> target, LinkedHashSet<ObjectDefinition> implementations, boolean isConnection) {
private CodeBlock createMappingContent(GenerationSourceField<?> target, List<ObjectDefinition> implementations, boolean isConnection) {
var interfaceClassName = processedSchema.getRecordType(target).getGraphClassName();
var lambdaParameters = new LinkedHashMap<String, String>();

Expand Down Expand Up @@ -279,7 +275,7 @@ public List<MethodSpec> generateWithSubselectMethods(ObjectField target) {
return Stream.concat(
Stream.of(mainMethod),
processedSchema
.getTypesFromInterfaceOrUnion(unionOrInterfaceDefinition.getName())
.getTypesFromInterfaceOrUnion(unionOrInterfaceDefinition.getName()).orElse(List.of())
.stream()
.map(it -> getMethodsForImplementation(target, it, methodInputs))
.flatMap(Collection::stream)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
import static no.sikt.graphitron.generators.codebuilding.FormatCodeBlocks.indentIfMultiline;
import static no.sikt.graphitron.generators.codebuilding.KeyWrapper.findKeyForResolverField;
import static no.sikt.graphitron.generators.codebuilding.KeyWrapper.getKeySetForResolverFields;
import static no.sikt.graphitron.generators.codebuilding.VariableNames.VAR_ORDER_FIELDS;
import static no.sikt.graphitron.generators.codebuilding.VariableNames.VAR_ITERATOR;
import static no.sikt.graphitron.generators.codebuilding.VariableNames.VAR_ORDER_FIELDS;
import static no.sikt.graphitron.generators.codebuilding.VariablePrefix.internalPrefix;
import static no.sikt.graphitron.mappings.JavaPoetClassName.*;
import static no.sikt.graphql.naming.GraphQLReservedName.NODE_TYPE;
Expand Down Expand Up @@ -57,7 +57,7 @@ public MethodSpec generate(ObjectField target) {
.build();
}

private CodeBlock getCode(ObjectField target, Set<ObjectDefinition> implementations) {
private CodeBlock getCode(ObjectField target, List<ObjectDefinition> implementations) {
var context = new FetchContext(processedSchema, target, getLocalObject(), false);
var overriddenFields = getFieldsOverriddenByType(processedSchema.getInterface(target), implementations);
var selectCode = generateSelectRow(context, target, implementations, overriddenFields);
Expand Down Expand Up @@ -85,7 +85,7 @@ protected CodeBlock getHelperMethodCallForNestedField(ObjectField field, FetchCo
return null;
}

private @NotNull HashMap<String, Set<String>> getFieldsOverriddenByType(InterfaceDefinition targetInterface, Set<ObjectDefinition> implementations) {
private @NotNull HashMap<String, Set<String>> getFieldsOverriddenByType(InterfaceDefinition targetInterface, List<ObjectDefinition> implementations) {
HashMap<String, Set<String>> overriddenFields = new HashMap<>();

// Find overridden interface fields
Expand All @@ -102,10 +102,9 @@ protected CodeBlock getHelperMethodCallForNestedField(ObjectField field, FetchCo
);

// Find overridden non-interface fields
var implementationList = new ArrayList<>(implementations);
for (int i = 0; i < implementationList.size(); i++) {
for (int j = i + 1; j < implementationList.size(); j++) {
compareNonInterfaceFields(implementationList.get(i), implementationList.get(j), targetInterface, overriddenFields);
for (int i = 0; i < implementations.size(); i++) {
for (int j = i + 1; j < implementations.size(); j++) {
compareNonInterfaceFields(implementations.get(i), implementations.get(j), targetInterface, overriddenFields);
}
}
return overriddenFields;
Expand All @@ -130,7 +129,7 @@ private boolean hasDifferentFieldConfiguration(ObjectField fieldA, ObjectField f
return fieldDirectiveDiffers || isNodeIdField;
}

protected CodeBlock generateSelectRow(FetchContext context, ObjectField target, Set<ObjectDefinition> implementations, HashMap<String, Set<String>> overriddenFields) {
protected CodeBlock generateSelectRow(FetchContext context, ObjectField target, List<ObjectDefinition> implementations, HashMap<String, Set<String>> overriddenFields) {
List<GenerationField> allFields = new LinkedList<>();

context.getReferenceObject()
Expand Down Expand Up @@ -183,7 +182,7 @@ protected CodeBlock generateSelectRow(FetchContext context, ObjectField target,
return CodeBlock.join(rowElements, ",\n");
}

private CodeBlock fetchAndMap(ObjectField target, Set<ObjectDefinition> implementations, String querySource, HashMap<String, Set<String>> overriddenFields, FetchContext context) {
private CodeBlock fetchAndMap(ObjectField target, List<ObjectDefinition> implementations, String querySource, HashMap<String, Set<String>> overriddenFields, FetchContext context) {
var interfaceDefinition = processedSchema.getInterface(target);

var returnInsideIfBlock = !target.hasForwardPagination();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package no.sikt.graphitron.validation;

public enum ErrorMessages {
MISSING_FIELD("Input type %s referencing table %s does not map all fields required by the database. Missing required fields: %s"),
MISSING_NON_NULLABLE("Input type %s referencing table %s does not map all fields required by the database as non-nullable. Nullable required fields: %s"),
MISSING_TABLE_ON_MULTITABLE("Type(s) '%s' are used in a query %s returning multitable interface or union '%s', but do not have tables set. This is not supported.");

private final String msg;

ErrorMessages(String msg) {
this.msg = msg;
}

public String getMsg() {
return msg;
}

public String format(Object ...input) {
return String.format(msg, input);
}
}
Loading