@SuppressWarnings("ConstantConditions") private Optional<SchemaDefinition> getSchemaDef(Document document) { return document.getDefinitions().stream() .filter(d -> d instanceof SchemaDefinition) .map(SchemaDefinition.class::cast) .findFirst(); }
public static Map<String, FragmentDefinition> getFragmentsByName(Document document) { Map<String, FragmentDefinition> fragmentsByName = new LinkedHashMap<>(); for (Definition definition : document.getDefinitions()) { if (definition instanceof FragmentDefinition) { FragmentDefinition fragmentDefinition = (FragmentDefinition) definition; fragmentsByName.put(fragmentDefinition.getName(), fragmentDefinition); } } return fragmentsByName; }
private void buildFragmentMap() { for (Definition definition : document.getDefinitions()) { if (!(definition instanceof FragmentDefinition)) continue; FragmentDefinition fragmentDefinition = (FragmentDefinition) definition; fragmentDefinitionMap.put(fragmentDefinition.getName(), fragmentDefinition); } }
private NodePrinter<Document> document() { if (compactMode) { return (out, node) -> out.printf("%s", join(node.getDefinitions(), " ")); } return (out, node) -> out.printf("%s\n", join(node.getDefinitions(), "\n\n")); }
private <T extends TypeDefinition> Optional<T> getType(String typeName, Class<T> typeDefClass, Document doc) { if (typeName == null) { return Optional.empty(); } return doc.getDefinitions().stream() .filter(def -> typeDefClass.isAssignableFrom(def.getClass())) .map(typeDefClass::cast) .filter(defT -> defT.getName().equals(typeName)) .findFirst(); } }
@Override public TraversalControl visitDocument(Document node, TraverserContext<Node> context) { List<Definition> wantedDefinitions = node.getDefinitions().stream() .filter(d -> { if (d instanceof OperationDefinition) { OperationDefinition operationDefinition = (OperationDefinition) d; return isThisOperation(operationDefinition, operationName); } return d instanceof FragmentDefinition; // SDL in a query makes no sense - its gone should it be present }) .collect(Collectors.toList()); Document changedNode = node.transform(builder -> { builder.definitions(wantedDefinitions); }); return changeNode(context, changedNode); } };
/** * special method to build directly a TypeDefinitionRegistry from a Document * useful for Introspection => IDL (Document) => TypeDefinitionRegistry * * @param document containing type definitions * * @return the TypeDefinitionRegistry containing all type definitions from the document * * @throws SchemaProblem if an error occurs */ public TypeDefinitionRegistry buildRegistry(Document document) { List<GraphQLError> errors = new ArrayList<>(); TypeDefinitionRegistry typeRegistry = new TypeDefinitionRegistry(); List<Definition> definitions = document.getDefinitions(); for (Definition definition : definitions) { if (definition instanceof SDLDefinition) { typeRegistry.add((SDLDefinition) definition).ifPresent(errors::add); } } if (errors.size() > 0) { throw new SchemaProblem(errors); } else { return typeRegistry; } }
/** * Executable definitions * * A GraphQL document is only valid for execution if all definitions are either * operation or fragment definitions. */ @Override public void checkDocument(Document document) { document.getDefinitions().forEach(definition -> { if (!(definition instanceof OperationDefinition) && !(definition instanceof FragmentDefinition)) { String message = nonExecutableDefinitionMessage(definition); addError(ValidationErrorType.NonExecutableDefinition, definition.getSourceLocation(), message); } }); }
public static GetOperationResult getOperation(Document document, String operationName) { Map<String, FragmentDefinition> fragmentsByName = new LinkedHashMap<>(); Map<String, OperationDefinition> operationsByName = new LinkedHashMap<>(); for (Definition definition : document.getDefinitions()) { if (definition instanceof OperationDefinition) { OperationDefinition operationDefinition = (OperationDefinition) definition; operationsByName.put(operationDefinition.getName(), operationDefinition); } if (definition instanceof FragmentDefinition) { FragmentDefinition fragmentDefinition = (FragmentDefinition) definition; fragmentsByName.put(fragmentDefinition.getName(), fragmentDefinition); } } if (operationName == null && operationsByName.size() > 1) { throw new UnknownOperationException("Must provide operation name if query contains multiple operations."); } OperationDefinition operation; if (operationName == null || operationName.isEmpty()) { operation = operationsByName.values().iterator().next(); } else { operation = operationsByName.get(operationName); } if (operation == null) { throw new UnknownOperationException(String.format("Unknown operation named '%s'.", operationName)); } GetOperationResult result = new GetOperationResult(); result.fragmentsByName = fragmentsByName; result.operationDefinition = operation; return result; }
@Override public TraversalControl visitDocument(Document node, TraverserContext<Node> context) { Document changedNode = node.transform(builder -> { List<Definition> definitions = sort(node.getDefinitions(), comparingDefinitions()); builder.definitions(definitions); }); return changeNode(context, changedNode); }
private void prepareFragmentMap() { List<Definition> definitions = getValidationContext().getDocument().getDefinitions(); for (Definition definition : definitions) { if (definition instanceof FragmentDefinition) { FragmentDefinition fragmentDefinition = (FragmentDefinition) definition; fragmentSpreads.put(fragmentDefinition.getName(), gatherSpreads(fragmentDefinition)); } } }
private Builder(Document existing) { this.sourceLocation = existing.getSourceLocation(); this.comments = existing.getComments(); this.definitions = existing.getDefinitions(); this.ignoredChars = existing.getIgnoredChars(); }
/** * Parses an AST value literal into the correct {@link graphql.language.Value} which * MUST be of the correct shape eg '"string"' or 'true' or '1' or '{ "object", "form" }' * or '[ "array", "form" ]' otherwise an exception is thrown * * @param astLiteral the string to parse an AST literal * * @return a valid Value * * @throws graphql.AssertException if the input can be parsed */ public static Value valueFromAst(String astLiteral) { // we use the parser to give us the AST elements as if we defined an inputType String toParse = "input X { x : String = " + astLiteral + "}"; try { Document doc = new Parser().parseDocument(toParse); InputObjectTypeDefinition inputType = (InputObjectTypeDefinition) doc.getDefinitions().get(0); InputValueDefinition inputValueDefinition = inputType.getInputValueDefinitions().get(0); return inputValueDefinition.getDefaultValue(); } catch (Exception e) { return Assert.assertShouldNeverHappen("valueFromAst of '%s' failed because of '%s'", astLiteral, e.getMessage()); } } }
@SuppressWarnings("ConstantConditions") private Optional<SchemaDefinition> getSchemaDef(Document document) { return document.getDefinitions().stream() .filter(d -> d instanceof SchemaDefinition) .map(SchemaDefinition.class::cast) .findFirst(); }
public static Map<String, FragmentDefinition> getFragmentsByName(Document document) { Map<String, FragmentDefinition> fragmentsByName = new LinkedHashMap<>(); for (Definition definition : document.getDefinitions()) { if (definition instanceof FragmentDefinition) { FragmentDefinition fragmentDefinition = (FragmentDefinition) definition; fragmentsByName.put(fragmentDefinition.getName(), fragmentDefinition); } } return fragmentsByName; }
private void buildFragmentMap() { for (Definition definition : document.getDefinitions()) { if (!(definition instanceof FragmentDefinition)) continue; FragmentDefinition fragmentDefinition = (FragmentDefinition) definition; fragmentDefinitionMap.put(fragmentDefinition.getName(), fragmentDefinition); } }
private <T extends TypeDefinition> Optional<T> getType(String typeName, Class<T> typeDefClass, Document doc) { if (typeName == null) { return Optional.empty(); } return doc.getDefinitions().stream() .filter(def -> typeDefClass.isAssignableFrom(def.getClass())) .map(typeDefClass::cast) .filter(defT -> defT.getName().equals(typeName)) .findFirst(); } }
private void prepareFragmentMap() { List<Definition> definitions = getValidationContext().getDocument().getDefinitions(); for (Definition definition : definitions) { if (definition instanceof FragmentDefinition) { FragmentDefinition fragmentDefinition = (FragmentDefinition) definition; fragmentSpreads.put(fragmentDefinition.getName(), gatherSpreads(fragmentDefinition)); } } }
private Builder(Document existing) { this.sourceLocation = existing.getSourceLocation(); this.comments = existing.getComments(); this.definitions = existing.getDefinitions(); this.ignoredChars = existing.getIgnoredChars(); }
@Override public TraversalControl visitDocument(Document node, TraverserContext<Node> context) { Document changedNode = node.transform(builder -> { List<Definition> definitions = sort(node.getDefinitions(), comparingDefinitions()); builder.definitions(definitions); }); return changeNode(context, changedNode); }