Search in sources :

Example 1 with PaginatedList

use of nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.PaginatedList in project timbuctoo by HuygensING.

the class SerializerExecutionStrategy method execute.

@Override
public CompletableFuture<ExecutionResult> execute(ExecutionContext executionContext, ExecutionStrategyParameters parameters) throws NonNullableFieldWasNullException {
    Map<String, java.util.List<Field>> fields = parameters.fields();
    GraphQLObjectType parentType = parameters.typeInfo().castType(GraphQLObjectType.class);
    return super.execute(executionContext, parameters).thenApply(sourceResult -> {
        Map<String, Object> data = sourceResult.getData();
        if (parameters.source() instanceof TypedValue) {
            String value = ((TypedValue) parameters.source()).getValue();
            String typename = ((TypedValue) parameters.source()).getType();
            Value result;
            if (value == null) {
                result = null;
            } else if (data.containsKey("__typename")) {
                result = Value.create(value, typename, (String) data.get("__typename"));
            } else {
                result = Value.create(value, typename);
            }
            return new ExecutionResultImpl(result, sourceResult.getErrors(), sourceResult.getExtensions());
        } else if (parameters.source() instanceof SubjectReference) {
            final String uri = ((SubjectReference) parameters.source()).getSubjectUri();
            final Set<String> types = ((SubjectReference) parameters.source()).getTypes();
            final String graphqlType = getDirectiveArgument(parentType, "rdfType", "uri").orElse(null);
            String type;
            if (graphqlType != null && types.contains(graphqlType)) {
                type = graphqlType;
            } else {
                Optional<String> firstType = types.stream().sorted().findFirst();
                if (firstType.isPresent()) {
                    type = firstType.get();
                } else {
                    LOG.error("No type present on " + uri + ". Expected at least TIM_UNKNOWN");
                    type = RdfConstants.UNKNOWN;
                }
            }
            LinkedHashMap<PredicateInfo, Serializable> copy = new LinkedHashMap<>();
            for (Map.Entry<String, Object> entry : data.entrySet()) {
                final String graphqlFieldName = entry.getKey();
                final GraphQLFieldDefinition fieldDesc = parentType.getFieldDefinition(entry.getKey());
                Optional<String> predicateUri = getDirectiveArgument(fieldDesc, "rdf", "predicate");
                Optional<Direction> direction = getDirectiveArgument(fieldDesc, "rdf", "direction").map(Direction::valueOf);
                final PredicateInfo predicateInfo;
                predicateInfo = predicateUri.map(predUri -> PredicateInfo.predicateInfo(graphqlFieldName, predUri, direction.orElse(Direction.OUT))).orElseGet(() -> PredicateInfo.predicateInfo(graphqlFieldName, null, Direction.OUT));
                if (entry.getValue() == null || entry.getValue() instanceof Serializable) {
                    copy.put(predicateInfo, (Serializable) entry.getValue());
                } else {
                    copy.put(predicateInfo, Value.fromRawJavaType(entry.getValue()));
                }
            }
            return new ExecutionResultImpl(Entity.entity(uri, type, copy), sourceResult.getErrors(), sourceResult.getExtensions());
        } else if (parameters.source() instanceof PaginatedList) {
            PaginatedList<? extends DatabaseResult> source = (PaginatedList) parameters.source();
            return new ExecutionResultImpl(serializableList(source.getPrevCursor().orElse(null), source.getNextCursor().orElse(null), ((GraphqlIntrospectionList) data.get("items")).getItems()), sourceResult.getErrors(), sourceResult.getExtensions());
        } else if (executionContext.getGraphQLSchema().getQueryType() == parentType) {
            return new ExecutionResultImpl(QueryContainer.queryContainer(sourceResult.getData()), sourceResult.getErrors(), sourceResult.getExtensions());
        } else {
            LinkedHashMap<String, Serializable> copy = new LinkedHashMap<>();
            for (Map.Entry<String, Object> entry : data.entrySet()) {
                if (entry.getValue() == null || entry.getValue() instanceof Serializable) {
                    copy.put(entry.getKey(), (Serializable) entry.getValue());
                } else {
                    copy.put(entry.getKey(), GraphqlIntrospectionValue.fromRawJavaType(entry.getValue()));
                }
            }
            return new ExecutionResultImpl(graphqlIntrospectionObject(copy), sourceResult.getErrors(), sourceResult.getExtensions());
        }
    });
}
Also used : TypedValue(nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.TypedValue) SerializableList.serializableList(nl.knaw.huygens.timbuctoo.v5.serializable.dto.SerializableList.serializableList) GraphqlIntrospectionValue(nl.knaw.huygens.timbuctoo.v5.serializable.dto.GraphqlIntrospectionValue) GraphQLFieldDefinition(graphql.schema.GraphQLFieldDefinition) CompletableFuture(java.util.concurrent.CompletableFuture) ExecutionContext(graphql.execution.ExecutionContext) GraphqlIntrospectionObject.graphqlIntrospectionObject(nl.knaw.huygens.timbuctoo.v5.serializable.dto.GraphqlIntrospectionObject.graphqlIntrospectionObject) SubjectReference(nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.SubjectReference) ExecutionStrategyParameters(graphql.execution.ExecutionStrategyParameters) Value(nl.knaw.huygens.timbuctoo.v5.serializable.dto.Value) ExecutionResult(graphql.ExecutionResult) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) AsyncExecutionStrategy(graphql.execution.AsyncExecutionStrategy) ExecutionResultImpl(graphql.ExecutionResultImpl) QueryContainer(nl.knaw.huygens.timbuctoo.v5.serializable.dto.QueryContainer) GraphQLObjectType(graphql.schema.GraphQLObjectType) GraphqlIntrospectionList(nl.knaw.huygens.timbuctoo.v5.serializable.dto.GraphqlIntrospectionList) Logger(org.slf4j.Logger) NonNullableFieldWasNullException(graphql.execution.NonNullableFieldWasNullException) RdfConstants(nl.knaw.huygens.timbuctoo.v5.util.RdfConstants) Set(java.util.Set) Serializable(nl.knaw.huygens.timbuctoo.v5.serializable.dto.Serializable) Field(graphql.language.Field) DatabaseResult(nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.DatabaseResult) Collectors(java.util.stream.Collectors) List(java.util.List) PaginatedList(nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.PaginatedList) StringValue(graphql.language.StringValue) PredicateInfo(nl.knaw.huygens.timbuctoo.v5.serializable.dto.PredicateInfo) LoggerFactory.getLogger(org.slf4j.LoggerFactory.getLogger) Optional(java.util.Optional) Direction(nl.knaw.huygens.timbuctoo.v5.datastores.quadstore.dto.Direction) GraphqlIntrospectionList.graphqlIntrospectionList(nl.knaw.huygens.timbuctoo.v5.serializable.dto.GraphqlIntrospectionList.graphqlIntrospectionList) Entity(nl.knaw.huygens.timbuctoo.v5.serializable.dto.Entity) Serializable(nl.knaw.huygens.timbuctoo.v5.serializable.dto.Serializable) Set(java.util.Set) Optional(java.util.Optional) GraphqlIntrospectionList(nl.knaw.huygens.timbuctoo.v5.serializable.dto.GraphqlIntrospectionList) SubjectReference(nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.SubjectReference) GraphQLFieldDefinition(graphql.schema.GraphQLFieldDefinition) LinkedHashMap(java.util.LinkedHashMap) ExecutionResultImpl(graphql.ExecutionResultImpl) GraphQLObjectType(graphql.schema.GraphQLObjectType) TypedValue(nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.TypedValue) GraphqlIntrospectionValue(nl.knaw.huygens.timbuctoo.v5.serializable.dto.GraphqlIntrospectionValue) Value(nl.knaw.huygens.timbuctoo.v5.serializable.dto.Value) StringValue(graphql.language.StringValue) SerializableList.serializableList(nl.knaw.huygens.timbuctoo.v5.serializable.dto.SerializableList.serializableList) GraphqlIntrospectionList(nl.knaw.huygens.timbuctoo.v5.serializable.dto.GraphqlIntrospectionList) List(java.util.List) PaginatedList(nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.PaginatedList) GraphqlIntrospectionList.graphqlIntrospectionList(nl.knaw.huygens.timbuctoo.v5.serializable.dto.GraphqlIntrospectionList.graphqlIntrospectionList) GraphqlIntrospectionObject.graphqlIntrospectionObject(nl.knaw.huygens.timbuctoo.v5.serializable.dto.GraphqlIntrospectionObject.graphqlIntrospectionObject) PredicateInfo(nl.knaw.huygens.timbuctoo.v5.serializable.dto.PredicateInfo) PaginatedList(nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.PaginatedList) TypedValue(nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.TypedValue)

Aggregations

ExecutionResult (graphql.ExecutionResult)1 ExecutionResultImpl (graphql.ExecutionResultImpl)1 AsyncExecutionStrategy (graphql.execution.AsyncExecutionStrategy)1 ExecutionContext (graphql.execution.ExecutionContext)1 ExecutionStrategyParameters (graphql.execution.ExecutionStrategyParameters)1 NonNullableFieldWasNullException (graphql.execution.NonNullableFieldWasNullException)1 Field (graphql.language.Field)1 StringValue (graphql.language.StringValue)1 GraphQLFieldDefinition (graphql.schema.GraphQLFieldDefinition)1 GraphQLObjectType (graphql.schema.GraphQLObjectType)1 LinkedHashMap (java.util.LinkedHashMap)1 List (java.util.List)1 Map (java.util.Map)1 Optional (java.util.Optional)1 Set (java.util.Set)1 CompletableFuture (java.util.concurrent.CompletableFuture)1 Collectors (java.util.stream.Collectors)1 Direction (nl.knaw.huygens.timbuctoo.v5.datastores.quadstore.dto.Direction)1 DatabaseResult (nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.DatabaseResult)1 PaginatedList (nl.knaw.huygens.timbuctoo.v5.graphql.datafetchers.dto.PaginatedList)1