@Override protected void onOperation(OperationDeclaration declaration) { declaration.getModelProperty(OperationComponentModelModelProperty.class) .ifPresent(modelProperty -> { ComponentModel bodyComponentModel = modelProperty.getBodyComponentModel(); declaration.getAllParameters().stream() .filter(parameterDeclaration -> parameterDeclaration.getType() instanceof StringType) .forEach(parameterDeclaration -> traverseProperty(bodyComponentModel.getInnerComponents(), parameterDeclaration)); }); } }.walk(extensionDeclaration);
private void addQueryModelProperties(OperationDeclaration declaration, Query query) { ParameterDeclaration parameterDeclaration = declaration.getAllParameters() .stream() .filter(p -> p.getModelProperty(ImplementingParameterModelProperty.class).isPresent()) .filter(p -> p.getModelProperty(ImplementingParameterModelProperty.class).get() .getParameter().isAnnotationPresent(MetadataKeyId.class)) .findFirst() .orElseThrow(() -> new IllegalParameterModelDefinitionException( "Query operation must have a parameter annotated with @MetadataKeyId")); parameterDeclaration.addModelProperty(new QueryParameterModelProperty(query.translator())); parameterDeclaration.setLayoutModel(builderFrom(parameterDeclaration.getLayoutModel()).asQuery().build()); }
public DefaultMetadataScopeAdapter(Type extensionElement, MethodElement operation, OperationDeclaration declaration) { operation.getValueFromAnnotation(OutputResolver.class); Optional<OutputResolver> outputResolverDeclaration = operation.getAnnotation(OutputResolver.class); Optional<Pair<MetadataKeyId, MetadataType>> keyId = locateMetadataKeyId(declaration); inputResolvers = declaration.getAllParameters().stream() .filter(p -> getAnnotatedElement(p).map(e -> e.isAnnotationPresent(TypeResolver.class)).orElse(false)) .filter(p -> !hasCustomStaticType(p)) .collect(toMap(p -> p.getName(), p -> ResolverSupplier.of(getAnnotatedElement(p).get().getAnnotation(TypeResolver.class).value()))); if (outputResolverDeclaration.isPresent() || !inputResolvers.isEmpty()) { outputResolverDeclaration.ifPresent(resolverDeclaration -> { if (!hasCustomStaticType(declaration.getOutput())) { outputResolver = ResolverSupplier.of(resolverDeclaration.output()); } if (!hasCustomStaticType(declaration.getOutputAttributes())) { attributesResolver = ResolverSupplier.of(resolverDeclaration.attributes()); } }); keyId.ifPresent(pair -> keysResolver = getKeysResolver(pair.getRight(), pair.getLeft(), () -> getCategoryName(outputResolver, attributesResolver, inputResolvers))); } else { initializeFromClass(extensionElement, operation, declaration); } }
@Test public void parseClassParameterInOperation() { ExtensionDeclaration declaration = marvelDeclarer.getDeclaration(); OperationDeclaration findInstructionsOperation = getOperation(declaration, "findInstructions"); List<ParameterDeclaration> params = findInstructionsOperation.getAllParameters(); assertThat(params, hasSize(2)); ParameterDeclaration pathParam = params.get(1); Optional<ClassValueModel> classValueModel = pathParam.getDisplayModel().getClassValueModel(); assertThat(classValueModel.isPresent(), is(true)); assertThat(classValueModel.get().getAssignableFrom(), hasSize(1)); assertThat(classValueModel.get().getAssignableFrom().get(0), equalTo("com.starkindustries.Reader")); }
@Test public void parsePathParameterWithFileExtensions() { ExtensionDeclaration declaration = marvelDeclarer.getDeclaration(); OperationDeclaration findInstructionsOperation = getOperation(declaration, "findInstructions"); List<ParameterDeclaration> params = findInstructionsOperation.getAllParameters(); assertThat(params, hasSize(2)); ParameterDeclaration pathParam = params.get(0); Optional<PathModel> pathModel = pathParam.getDisplayModel().getPathModel(); assertThat(pathModel.isPresent(), is(true)); assertThat(pathModel.get().getType(), is(ANY)); assertThat(pathModel.get().acceptsUrls(), is(false)); assertThat(pathModel.get().getFileExtensions(), hasItem("xml")); }
@Test public void verifyTargetValueParameterOnOperation() { OperationDeclaration operationDeclaration = getNamedObject(declaration.getOperations(), "transform"); ParameterDeclaration parameterDeclaration = getNamedObject(operationDeclaration.getAllParameters(), "targetValue"); assertThat(parameterDeclaration.getName(), is("targetValue")); assertThat(parameterDeclaration.getExpressionSupport(), is(REQUIRED)); assertThat(parameterDeclaration.getType(), instanceOf(StringType.class)); assertThat(parameterDeclaration.isRequired(), is(false)); }
@Test public void verifyTargetParameterOnOperation() { OperationDeclaration operationDeclaration = getNamedObject(declaration.getOperations(), "transform"); ParameterDeclaration parameterDeclaration = getNamedObject(operationDeclaration.getAllParameters(), "target"); assertThat(parameterDeclaration.getName(), is("target")); assertThat(parameterDeclaration.getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(parameterDeclaration.getType(), instanceOf(StringType.class)); assertThat(parameterDeclaration.isRequired(), is(false)); }
@Test public void parseExampleAnnotationOnOperationParameter() { ExtensionDeclaration extensionDeclaration = heisenbergDeclarer.getDeclaration(); OperationDeclaration operation = getOperation(extensionDeclaration, HeisenbergOperations.OPERATION_WITH_EXAMPLE); assertThat(operation, is(notNullValue())); List<ParameterDeclaration> parameters = operation.getAllParameters(); assertParameterExample(findParameter(parameters, GREETING_PARAMETER), OPERATION_PARAMETER_EXAMPLE); }
@Test public void parseSummaryAnnotationOnOperationParameter() { ExtensionDeclaration extensionDeclaration = heisenbergDeclarer.getDeclaration(); OperationDeclaration operation = getOperation(extensionDeclaration, HeisenbergOperations.OPERATION_WITH_SUMMARY); assertThat(operation, is(notNullValue())); List<ParameterDeclaration> parameters = operation.getAllParameters(); assertParameterSummary(findParameter(parameters, DOOR_PARAMETER), KNOCKEABLE_DOORS_SUMMARY); }
@Test public void parseDisplayNameAnnotationOnOperationParameter() { ExtensionDeclaration extensionDeclaration = heisenbergDeclarer.getDeclaration(); OperationDeclaration operation = getOperation(extensionDeclaration, HeisenbergOperations.OPERATION_WITH_DISPLAY_NAME_PARAMETER); assertThat(operation, is(notNullValue())); List<ParameterDeclaration> parameters = operation.getAllParameters(); assertParameterDisplayName(findParameter(parameters, OPERATION_PARAMETER_ORIGINAL_OVERRIDED_DISPLAY_NAME), OPERATION_PARAMETER_OVERRIDED_DISPLAY_NAME); }
@Test public void deprecatedParameterTestCase() { ExtensionDeclaration extensionDeclaration = getEnrichedExtensionDeclaration(DeprecatedExtension.class); OperationDeclaration operationDeclaration = (OperationDeclaration) getNamedDeclaration(extensionDeclaration.getOperations(), "nonDeprecatedOperation"); ParameterDeclaration parameterDeclaration = (ParameterDeclaration) getNamedDeclaration(operationDeclaration.getAllParameters(), "badParameter"); assertTrue(parameterDeclaration.getDeprecation().isPresent()); assertThat(parameterDeclaration.getDeprecation().get().getMessage(), is("This parameter was made redundant")); assertThat(parameterDeclaration.getDeprecation().get().getDeprecatedSince(), is("1.1.0")); assertFalse(parameterDeclaration.getDeprecation().get().getToRemoveIn().isPresent()); }
@Test public void nonDeprecatedParameterTestCase() { ExtensionDeclaration extensionDeclaration = getEnrichedExtensionDeclaration(DeprecatedExtension.class); OperationDeclaration operationDeclaration = (OperationDeclaration) getNamedDeclaration(extensionDeclaration.getOperations(), "nonDeprecatedOperation"); ParameterDeclaration parameterDeclaration = (ParameterDeclaration) getNamedDeclaration(operationDeclaration.getAllParameters(), "echo"); assertFalse(parameterDeclaration.getDeprecation().isPresent()); }
@Test public void parseMetadataAnnotationsOnParameter() { final OperationDeclaration operationDeclaration = getDeclaration(declaration.getConfigurations().get(0).getOperations(), CONTENT_METADATA_WITH_KEY_ID); final List<ParameterDeclaration> parameters = operationDeclaration.getAllParameters(); assertParameterIsMetadataKeyPart(getDeclaration(parameters, "type")); assertParameterIsMetadataContent(getDeclaration(parameters, "content")); }
assertThat(operation.getAllParameters().isEmpty(), is(true)); assertThat(operation.getAllParameters(), hasSize(1)); assertThat(operation.getOutput().getType(), equalTo(STRING_TYPE)); assertThat(operation.getOutputAttributes().getType(), equalTo(toMetadataType(IntegerAttributes.class))); assertParameter(operation.getAllParameters(), "index", "", INT_TYPE, false, SUPPORTED, "0"); assertConnected(operation, false); assertTransactional(operation, false); assertThat(operation, is(notNullValue())); assertFalse(operation.getDeprecation().isPresent()); assertThat(operation.getAllParameters(), hasSize(0)); assertThat(operation.getOutput().getType(), is(instanceOf(ArrayType.class))); assertMessageType(((ArrayType) operation.getOutput().getType()).getType(), STRING_TYPE, assertThat(operation.getAllParameters(), hasSize(2)); assertThat(operation.getOutput().getType(), equalTo(STRING_TYPE)); assertThat(operation.getOutputAttributes().getType(), is(instanceOf(VoidType.class))); assertParameter(operation.getAllParameters(), "victim", "", STRING_TYPE, false, SUPPORTED, "#[payload]"); assertParameter(operation.getAllParameters(), "goodbyeMessage", "", STRING_TYPE, false, SUPPORTED, "We are done"); assertConnected(operation, false); assertTransactional(operation, false); assertThat(operation.getAllParameters(), hasSize(3)); assertParameter(operation.getAllParameters(), "weapon", "", WEAPON_TYPE, true, SUPPORTED, null); assertParameter(operation.getAllParameters(), "type", "", toMetadataType(WeaponType.class), true, SUPPORTED, null); assertParameter(operation.getAllParameters(), "attributesOfWeapon", "", toMetadataType(Weapon.WeaponAttributes.class), true, SUPPORTED, null); assertConnected(operation, false);
assertOutputType(dynamicContent.getOutput(), outputMetadataType, true); assertOutputType(dynamicContent.getOutputAttributes(), toMetadataType(void.class), false); params = dynamicContent.getAllParameters(); assertParameterType(getDeclaration(params, "type"), toMetadataType(String.class)); assertParameterType(getDeclaration(params, "content"), objectParameterMetadataType); assertOutputType(dynamicOutput.getOutput(), outputMetadataType, true); assertOutputType(dynamicOutput.getOutputAttributes(), toMetadataType(void.class), false); params = dynamicOutput.getAllParameters(); assertParameterType(getDeclaration(params, "type"), toMetadataType(String.class)); assertParameterType(getDeclaration(params, "content"), objectParameterMetadataType); assertOutputType(dynamicContentAndOutput.getOutput(), outputMetadataType, true); assertOutputType(dynamicContentAndOutput.getOutputAttributes(), toMetadataType(void.class), false); params = dynamicContentAndOutput.getAllParameters(); assertParameterType(getDeclaration(params, "type"), toMetadataType(String.class)); assertParameterType(getDeclaration(params, "content"), objectParameterMetadataType); assertOutputType(dynamicOutputAndAttributes.getOutput(), toMetadataType(Object.class), true); assertOutputType(dynamicOutputAndAttributes.getOutputAttributes(), toMetadataType(AbstractOutputAttributes.class), true); params = dynamicOutputAndAttributes.getAllParameters(); assertParameterType(getDeclaration(params, "type"), toMetadataType(String.class));
private void addQueryModelProperties(OperationDeclaration declaration, Query query) { ParameterDeclaration parameterDeclaration = declaration.getAllParameters() .stream() .filter(p -> p.getModelProperty(ImplementingParameterModelProperty.class).isPresent()) .filter(p -> p.getModelProperty(ImplementingParameterModelProperty.class).get() .getParameter().isAnnotationPresent(MetadataKeyId.class)) .findFirst() .orElseThrow(() -> new IllegalParameterModelDefinitionException( "Query operation must have a parameter annotated with @MetadataKeyId")); parameterDeclaration.addModelProperty(new QueryParameterModelProperty(query.translator())); parameterDeclaration.setLayoutModel(builderFrom(parameterDeclaration.getLayoutModel()).asQuery().build()); }
public MetadataScopeAdapter(Type extensionElement, MethodElement operation, OperationDeclaration declaration) { operation.getValueFromAnnotation(OutputResolver.class); Optional<OutputResolver> outputResolverDeclaration = operation.getAnnotation(OutputResolver.class); Optional<Pair<MetadataKeyId, MetadataType>> keyId = locateMetadataKeyId(declaration); inputResolvers = declaration.getAllParameters().stream() .filter(p -> getAnnotatedElement(p).map(e -> e.isAnnotationPresent(TypeResolver.class)).orElse(false)) .filter(p -> !hasCustomStaticType(p)) .collect(toMap(p -> p.getName(), p -> ResolverSupplier.of(getAnnotatedElement(p).get().getAnnotation(TypeResolver.class).value()))); if (outputResolverDeclaration.isPresent() || !inputResolvers.isEmpty()) { outputResolverDeclaration.ifPresent(resolverDeclaration -> { if (!hasCustomStaticType(declaration.getOutput())) { outputResolver = ResolverSupplier.of(resolverDeclaration.output()); } if (!hasCustomStaticType(declaration.getOutputAttributes())) { attributesResolver = ResolverSupplier.of(resolverDeclaration.attributes()); } }); keyId.ifPresent(pair -> keysResolver = getKeysResolver(pair.getRight(), pair.getLeft(), () -> getCategoryName(outputResolver, attributesResolver, inputResolvers))); } else { initializeFromClass(extensionElement, operation, declaration); } }