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 @@ -39,11 +39,29 @@ public interface SchemaDirectiveWiringEnvironment<T extends GraphQLDirectiveCont
*
* @return the directive that was registered under specific directive name or null if it was not
* registered this way
*
* @deprecated use {@link #getAppliedDirective()}
*/
GraphQLDirective getDirective();

/**
* This returns the applied directive that the {@link graphql.schema.idl.SchemaDirectiveWiring} was registered
* against during calls to {@link graphql.schema.idl.RuntimeWiring.Builder#directive(String, SchemaDirectiveWiring)}
* <p>
* If this method of registration is not used (say because
* {@link graphql.schema.idl.WiringFactory#providesSchemaDirectiveWiring(SchemaDirectiveWiringEnvironment)} or
* {@link graphql.schema.idl.RuntimeWiring.Builder#directiveWiring(SchemaDirectiveWiring)} was used)
* then this will return null.
*
* @return the applied directive that was registered under specific directive name or null if it was not
* registered this way
*/
GraphQLAppliedDirective getAppliedDirective();

/**
* @return all of the directives that are on the runtime element
*
* @deprecated use {@link #getAppliedDirectives()} instead
*/
Map<String, GraphQLDirective> getDirectives();

Expand All @@ -53,6 +71,8 @@ public interface SchemaDirectiveWiringEnvironment<T extends GraphQLDirectiveCont
* @param directiveName the name of the directive
*
* @return a named directive or null
*
* @deprecated use {@link #getAppliedDirective(String)} instead
*/
GraphQLDirective getDirective(String directiveName);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,11 @@ public class SchemaDirectiveWiringEnvironmentImpl<T extends GraphQLDirectiveCont
private final GraphQLFieldsContainer fieldsContainer;
private final GraphQLFieldDefinition fieldDefinition;
private final GraphQLDirective registeredDirective;
private final GraphQLAppliedDirective registeredAppliedDirective;

public SchemaDirectiveWiringEnvironmentImpl(T element, List<GraphQLDirective> directives, List<GraphQLAppliedDirective> appliedDirectives, GraphQLDirective registeredDirective, SchemaGeneratorDirectiveHelper.Parameters parameters) {
public SchemaDirectiveWiringEnvironmentImpl(T element, List<GraphQLDirective> directives, List<GraphQLAppliedDirective> appliedDirectives, GraphQLAppliedDirective registeredAppliedDirective, GraphQLDirective registeredDirective, SchemaGeneratorDirectiveHelper.Parameters parameters) {
this.element = element;
this.registeredAppliedDirective = registeredAppliedDirective;
this.registeredDirective = registeredDirective;
this.typeDefinitionRegistry = parameters.getTypeRegistry();
this.directives = FpKit.getByName(directives, GraphQLDirective::getName);
Expand All @@ -59,6 +61,11 @@ public GraphQLDirective getDirective() {
return registeredDirective;
}

@Override
public GraphQLAppliedDirective getAppliedDirective() {
return registeredAppliedDirective;
}

@Override
public Map<String, GraphQLDirective> getDirectives() {
return new LinkedHashMap<>(directives);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import graphql.schema.GraphQLSchemaElement;
import graphql.schema.GraphQLUnionType;
import graphql.schema.GraphqlElementParentTree;
import graphql.util.FpKit;

import java.util.ArrayDeque;
import java.util.Deque;
Expand Down Expand Up @@ -65,6 +66,7 @@ public static <T extends GraphQLDirectiveContainer> boolean schemaDirectiveWirin
directiveContainer.getDirectives(),
directiveContainer.getAppliedDirectives(),
null,
null,
params);
// do they dynamically provide a wiring for this element?
return wiringFactory.providesSchemaDirectiveWiring(env);
Expand Down Expand Up @@ -206,9 +208,10 @@ public GraphQLObjectType onObject(GraphQLObjectType objectType, Parameters param
newObjectType,
newObjectType.getDirectives(),
newObjectType.getAppliedDirectives(),
(outputElement, directives, appliedDirectives, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
(outputElement, directives, appliedDirectives, registeredAppliedDirective, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
directives,
appliedDirectives,
registeredAppliedDirective,
registeredDirective,
newParams),
SchemaDirectiveWiring::onObject);
Expand All @@ -231,9 +234,10 @@ public GraphQLInterfaceType onInterface(GraphQLInterfaceType interfaceType, Para
newInterfaceType,
newInterfaceType.getDirectives(),
newInterfaceType.getAppliedDirectives(),
(outputElement, directives, appliedDirectives, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
(outputElement, directives, appliedDirectives, registeredAppliedDirective, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
directives,
appliedDirectives,
registeredAppliedDirective,
registeredDirective,
newParams),
SchemaDirectiveWiring::onInterface);
Expand Down Expand Up @@ -265,9 +269,10 @@ public GraphQLEnumType onEnum(final GraphQLEnumType enumType, Parameters params)
newEnumType,
newEnumType.getDirectives(),
newEnumType.getAppliedDirectives(),
(outputElement, directives, appliedDirectives, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
(outputElement, directives, appliedDirectives, registeredAppliedDirective, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
directives,
appliedDirectives,
registeredAppliedDirective,
registeredDirective,
newParams),
SchemaDirectiveWiring::onEnum);
Expand Down Expand Up @@ -297,9 +302,10 @@ public GraphQLInputObjectType onInputObjectType(GraphQLInputObjectType inputObje
newInputObjectType,
newInputObjectType.getDirectives(),
newInputObjectType.getAppliedDirectives(),
(outputElement, directives, appliedDirectives, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
(outputElement, directives, appliedDirectives, registeredAppliedDirective, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
directives,
appliedDirectives,
registeredAppliedDirective,
registeredDirective,
newParams),
SchemaDirectiveWiring::onInputObjectType);
Expand All @@ -315,9 +321,10 @@ public GraphQLUnionType onUnion(GraphQLUnionType element, Parameters params) {
element,
element.getDirectives(),
element.getAppliedDirectives(),
(outputElement, directives, appliedDirectives, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
(outputElement, directives, appliedDirectives, registeredAppliedDirective, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
directives,
appliedDirectives,
registeredAppliedDirective,
registeredDirective,
newParams),
SchemaDirectiveWiring::onUnion);
Expand All @@ -332,9 +339,10 @@ public GraphQLScalarType onScalar(GraphQLScalarType element, Parameters params)
element,
element.getDirectives(),
element.getAppliedDirectives(),
(outputElement, directives, appliedDirectives, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
(outputElement, directives, appliedDirectives, registeredAppliedDirective, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
directives,
appliedDirectives,
registeredAppliedDirective,
registeredDirective,
newParams),
SchemaDirectiveWiring::onScalar);
Expand All @@ -345,9 +353,10 @@ private GraphQLFieldDefinition onField(GraphQLFieldDefinition fieldDefinition, P
fieldDefinition,
fieldDefinition.getDirectives(),
fieldDefinition.getAppliedDirectives(),
(outputElement, directives, appliedDirectives, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
(outputElement, directives, appliedDirectives, registeredAppliedDirective, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
directives,
appliedDirectives,
registeredAppliedDirective,
registeredDirective,
params),
SchemaDirectiveWiring::onField);
Expand All @@ -358,9 +367,10 @@ private GraphQLInputObjectField onInputObjectField(GraphQLInputObjectField eleme
element,
element.getDirectives(),
element.getAppliedDirectives(),
(outputElement, directives, appliedDirectives, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
(outputElement, directives, appliedDirectives, registeredAppliedDirective, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
directives,
appliedDirectives,
registeredAppliedDirective,
registeredDirective,
params),
SchemaDirectiveWiring::onInputObjectField);
Expand All @@ -371,9 +381,10 @@ private GraphQLEnumValueDefinition onEnumValue(GraphQLEnumValueDefinition enumVa
enumValueDefinition,
enumValueDefinition.getDirectives(),
enumValueDefinition.getAppliedDirectives(),
(outputElement, directives, appliedDirectives, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
(outputElement, directives, appliedDirectives, registeredAppliedDirective, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
directives,
appliedDirectives,
registeredAppliedDirective,
registeredDirective,
params),
SchemaDirectiveWiring::onEnumValue);
Expand All @@ -384,9 +395,10 @@ private GraphQLArgument onArgument(GraphQLArgument argument, Parameters params)
argument,
argument.getDirectives(),
argument.getAppliedDirectives(),
(outputElement, directives, appliedDirectives, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
(outputElement, directives, appliedDirectives, registeredAppliedDirective, registeredDirective) -> new SchemaDirectiveWiringEnvironmentImpl<>(outputElement,
directives,
appliedDirectives,
registeredAppliedDirective,
registeredDirective,
params),
SchemaDirectiveWiring::onArgument);
Expand All @@ -397,7 +409,7 @@ private GraphQLArgument onArgument(GraphQLArgument argument, Parameters params)
// builds a type safe SchemaDirectiveWiringEnvironment
//
interface EnvBuilder<T extends GraphQLDirectiveContainer> {
SchemaDirectiveWiringEnvironment<T> apply(T outputElement, List<GraphQLDirective> allDirectives, List<GraphQLAppliedDirective> allAppliedDirectives, GraphQLDirective registeredDirective);
SchemaDirectiveWiringEnvironment<T> apply(T outputElement, List<GraphQLDirective> allDirectives, List<GraphQLAppliedDirective> allAppliedDirectives, GraphQLAppliedDirective registeredAppliedDirective, GraphQLDirective registeredDirective);
}

//
Expand All @@ -420,25 +432,28 @@ private <T extends GraphQLDirectiveContainer> T wireDirectives(

SchemaDirectiveWiringEnvironment<T> env;
T outputObject = element;

Map<String, GraphQLDirective> allDirectivesByName = FpKit.getByName(allDirectives, GraphQLDirective::getName);
//
// first the specific named directives
Map<String, SchemaDirectiveWiring> mapOfWiring = runtimeWiring.getRegisteredDirectiveWiring();
for (GraphQLDirective directive : allDirectives) {
schemaDirectiveWiring = mapOfWiring.get(directive.getName());
for (GraphQLAppliedDirective appliedDirective : allAppliedDirectives) {
schemaDirectiveWiring = mapOfWiring.get(appliedDirective.getName());
if (schemaDirectiveWiring != null) {
env = envBuilder.apply(outputObject, allDirectives, allAppliedDirectives, directive);
GraphQLDirective directive = allDirectivesByName.get(appliedDirective.getName());
env = envBuilder.apply(outputObject, allDirectives, allAppliedDirectives, appliedDirective, directive);
outputObject = invokeWiring(outputObject, invoker, schemaDirectiveWiring, env);
}
}
//
// now call any statically added to the runtime
for (SchemaDirectiveWiring directiveWiring : runtimeWiring.getDirectiveWiring()) {
env = envBuilder.apply(outputObject, allDirectives, allAppliedDirectives, null);
env = envBuilder.apply(outputObject, allDirectives, allAppliedDirectives, null, null);
outputObject = invokeWiring(outputObject, invoker, directiveWiring, env);
}
//
// wiring factory is last (if present)
env = envBuilder.apply(outputObject, allDirectives, allAppliedDirectives, null);
env = envBuilder.apply(outputObject, allDirectives, allAppliedDirectives, null, null);
if (wiringFactory.providesSchemaDirectiveWiring(env)) {
schemaDirectiveWiring = assertNotNull(wiringFactory.getSchemaDirectiveWiring(env), () -> "Your WiringFactory MUST provide a non null SchemaDirectiveWiring");
outputObject = invokeWiring(outputObject, invoker, schemaDirectiveWiring, env);
Expand Down