private OperationModel getOperation(String name) { return extensionModel.getOperationModel(name).get(); }
@Test public void testModuleSimple() { String modulePath = "modules/module-simple.xml"; ExtensionModel extensionModel = getExtensionModelFrom(modulePath); assertThat(extensionModel.getName(), is("module-simple")); assertThat(extensionModel.getConfigurationModels().size(), is(0)); assertThat(extensionModel.getModelProperty(GlobalElementComponentModelModelProperty.class).isPresent(), is(false)); assertThat(extensionModel.getOperationModels().size(), is(11)); Optional<OperationModel> operationModelOptional = extensionModel.getOperationModel("set-payload-concat-params-values"); assertThat(operationModelOptional.isPresent(), is(true)); final OperationModel operationModel = operationModelOptional.get(); assertThat(operationModel.getAllParameterModels().size(), is(4)); assertThat(operationModel.getAllParameterModels().get(0).getName(), is("value1")); assertThat(operationModel.getAllParameterModels().get(1).getName(), is("value2")); assertThat(operationModel.getAllParameterModels().get(2).getName(), is(TARGET_PARAMETER_NAME)); assertThat(operationModel.getAllParameterModels().get(3).getName(), is(TARGET_VALUE_PARAMETER_NAME)); Optional<OperationComponentModelModelProperty> modelProperty = operationModel.getModelProperty(OperationComponentModelModelProperty.class); assertThat(modelProperty.isPresent(), is(true)); assertThat(modelProperty.get().getBodyComponentModel().getInnerComponents().size(), is(1)); assertThat(operationModel.getOutput().getType().getMetadataFormat(), is(MetadataFormat.JAVA)); assertThat(operationModel.getOutput().getType(), instanceOf(StringType.class)); assertThat(operationModel.getOutputAttributes().getType().getMetadataFormat(), is(MetadataFormat.JAVA)); assertThat(operationModel.getOutputAttributes().getType(), instanceOf(StringType.class)); assertThat(operationModel.getErrorModels().size(), is(0)); }
private OperationModel getOperation(String ope) { return extension.getOperationModel(ope).orElseThrow(() -> new RuntimeException(ope + " not found")); }
@Test public void testModuleJsonCustomTypes() throws IOException { String modulePath = "modules/module-json-custom-types.xml"; ExtensionModel extensionModel = getExtensionModelFrom(modulePath); assertThat(extensionModel.getName(), is("module-json-custom-types")); assertThat(extensionModel.getConfigurationModels().size(), is(0)); assertThat(extensionModel.getModelProperty(GlobalElementComponentModelModelProperty.class).isPresent(), is(false)); assertThat(extensionModel.getOperationModels().size(), is(8)); Optional<OperationModel> operationModel = extensionModel.getOperationModel("operation-with-custom-types"); assertThat(operationModel.isPresent(), is(true)); final OperationModel operation = operationModel.get(); assertThat(operation.getAllParameterModels().size(), is(3)); final ParameterModel parameterValueModel = operation.getAllParameterModels().get(0); assertThat(parameterValueModel.getName(), is("value")); assertThat(operation.getAllParameterModels().get(1).getName(), is(TARGET_PARAMETER_NAME)); assertThat(operation.getAllParameterModels().get(2).getName(), is(TARGET_VALUE_PARAMETER_NAME)); assertThat(parameterValueModel.getType().getMetadataFormat(), is(MetadataFormat.JSON)); assertThat(parameterValueModel.getType(), instanceOf(ObjectType.class)); assertThat(((ObjectType) parameterValueModel.getType()).getFields().size(), is(2)); assertThat(operation.getOutput().getType().getMetadataFormat(), is(MetadataFormat.JSON)); assertThat(operation.getOutput().getType(), instanceOf(ObjectType.class)); assertThat(((ObjectType) operation.getOutput().getType()).getFields().size(), is(3)); Optional<OperationComponentModelModelProperty> modelProperty = operation.getModelProperty(OperationComponentModelModelProperty.class); assertThat(modelProperty.isPresent(), is(true)); assertThat(modelProperty.get().getBodyComponentModel().getInnerComponents().size(), is(1)); }
@Test public void allowedStereotypeOnScopeChain() { OperationModel operation = heisenbergExtension.getOperationModel("getChain").get(); NestedChainModel nestedChain = (NestedChainModel) operation.getNestedComponents().get(0); assertThat(nestedChain.getAllowedStereotypes().size(), is(1)); StereotypeModel stereotypeModel = nestedChain.getAllowedStereotypes().iterator().next(); assertThat(stereotypeModel.toString(), stereotypeModel, is(MuleStereotypes.VALIDATOR)); }
@Test public void operationThrowsOverridesExtensionThrows() { extensionModel = loadExtension(HeisenbergWithOperationThrows.class); OperationModel someOperation = extensionModel.getOperationModel("someOperation").get(); Optional<ErrorModel> operationError = someOperation.getErrorModels().stream() .filter(errorModel -> errorModel.getType().equals(OPERATION.getType())).findFirst(); assertThat(operationError.isPresent(), is(true)); }
@Test public void operationInheritsExtensionErrorThrows() { extensionModel = loadExtension(HeisenbergWithExtensionThrows.class); OperationModel someOperation = extensionModel.getOperationModel("someOperation").get(); Optional<ErrorModel> operationError = someOperation.getErrorModels().stream() .filter(errorModel -> errorModel.getType().equals(EXTENSION.getType())).findFirst(); assertThat(operationError.isPresent(), is(true)); }
@Test public void validatorStereotype() { OperationModel operation = heisenbergExtension.getOperationModel("validateMoney").get(); StereotypeModel stereotypeModel = operation.getStereotype(); assertThat(stereotypeModel.isAssignableTo(PROCESSOR), is(true)); assertThat(stereotypeModel.isAssignableTo(VALIDATOR), is(true)); assertThat(stereotypeModel.getType(), is(VALIDATOR_DEFINITION.getName())); assertThat(stereotypeModel.getNamespace(), is(HEISENBERG.toUpperCase())); assertThat(stereotypeModel.getParent().get(), is(VALIDATOR)); }
/** * Validates that the {@link #componentModel} is valid for the given {@code configurationProvider} * * @throws IllegalOperationException If the validation fails */ @Override protected void validateOperationConfiguration(ConfigurationProvider configurationProvider) { ConfigurationModel configurationModel = configurationProvider.getConfigurationModel(); if (!configurationModel.getOperationModel(componentModel.getName()).isPresent() && !configurationProvider.getExtensionModel().getOperationModel(componentModel.getName()).isPresent()) { throw new IllegalOperationException(format( "Root component '%s' defines an usage of operation '%s' which points to configuration '%s'. " + "The selected config does not support that operation.", getLocation().getRootContainerName(), componentModel.getName(), configurationProvider.getName())); } }
@Test public void objectStoreParameters() { OperationModel operationModel = heisenbergExtension.getOperationModel("storeMoney").get(); ParameterModel parameter = operationModel.getAllParameterModels().stream().filter(p -> "objectStore".equals(p.getName())).findFirst().get(); StereotypeModel stereotype = parameter.getAllowedStereotypes().stream() .filter(s -> s.getType().equals(OBJECT_STORE.getType())) .findFirst() .get(); assertThat(stereotype.getNamespace(), equalTo(OBJECT_STORE.getNamespace())); Optional<ImportedTypeModel> typeImport = heisenbergExtension.getImportedTypes().stream() .filter(i -> getTypeId(i.getImportedType()).map(id -> ObjectStore.class.getName().equals(id)).orElse(false)) .findFirst(); assertThat(typeImport.isPresent(), is(true)); }
private void assertOperation(String operationName, ExtensionModel extensionModel, DeclarationOperation declarer, String outputDocumentation, String outputAttributeDocumentation) { final Optional<OperationModel> operationModelOptional = extensionModel.getOperationModel(operationName); assertThat(operationModelOptional.isPresent(), is(true)); final OperationModel operationModel = operationModelOptional.get(); assertThat(operationModel.getOutput().getType(), is(declarer.getOutput())); assertThat(operationModel.getOutput().getDescription(), is(outputDocumentation)); assertThat(operationModel.getOutputAttributes().getType(), is(declarer.getOutputAttributes())); assertThat(operationModel.getOutputAttributes().getDescription(), is(outputAttributeDocumentation)); }
@Parameterized.Parameters(name = "{1}") public static List<Object[]> parameters() { ExtensionModel extensionModel = loadExtension(OrderedExtension.class); List<Object[]> objects = new ArrayList<>(); objects.add(new Object[] {extensionModel.getOperationModel("implicitOrder").get(), "Operation - Implicit Order"}); objects.add(new Object[] {extensionModel.getOperationModel("explicitOrder").get(), "Operation - Explicit Order"}); objects.add(new Object[] {extensionModel.getOperationModel("mixedOrder").get(), "Operation - Mixed Order"}); objects.add(new Object[] {extensionModel.getConfigurationModel("ImplicitOrderConfig").get(), "Config - Implicit Order"}); objects.add(new Object[] {extensionModel.getConfigurationModel("ExplicitOrderConfig").get(), "Config - Explicit Order"}); objects.add(new Object[] {extensionModel.getConfigurationModel("MixedOrderConfig").get(), "Config - Mixed Order"}); objects.add(new Object[] {extensionModel.getConfigurationModel("InheritsOrderConfig").get(), "Config - Inherited Order"}); objects.add(new Object[] {extensionModel.getConnectionProviderModel("implicit").get(), "Conn Provider - Implicit Order"}); objects.add(new Object[] {extensionModel.getConnectionProviderModel("explicit").get(), "Conn Provider - Explicit Order"}); objects.add(new Object[] {extensionModel.getConnectionProviderModel("mixed").get(), "Conn Provider - Mixed Order"}); objects.add(new Object[] {extensionModel.getSourceModel("ImplicitSourceOrder").get(), "Source - Implicit Order"}); objects.add(new Object[] {extensionModel.getSourceModel("ExplicitSourceOrder").get(), "Source - Explicit Order"}); objects.add(new Object[] {extensionModel.getSourceModel("MixedSourceOrder").get(), "Source - Mixed Order"}); objects.add(new Object[] {extensionModel.getSourceModel("ExplicitSourceOrderWithCallbacks").get(), "Source - With Callbacks Explicit Order"}); objects.add(new Object[] {extensionModel.getSourceModel("MixedSourceOrderWithCallbacks").get(), "Source - With Callbacks Mixed Order"}); return objects; }
private void assertSinglePrimaryContentParameter(ExtensionModel extensionModel, String operationName, String defaultValue) { OperationModel appleOperation = aggressiveGet(extensionModel.getOperationModel(operationName)); List<ParameterModel> contentParameters = appleOperation.getAllParameterModels().stream() .filter(ExtensionModelUtils::isContent) .collect(toList()); assertThat(contentParameters, hasSize(1)); ParameterModel contentParameter = contentParameters.get(0); assertThat(contentParameter.isRequired(), is(false)); assertThat(contentParameter.getDefaultValue(), is(defaultValue)); assertThat(contentParameter.getRole(), is(PRIMARY_CONTENT)); }
@Test public void staticResourceOperation() { OperationModel operation = extensionModel.getOperationModel(STATIC_RESOURCE_OPERATION_NAME).get(); assertThat(operation.getName(), is(STATIC_RESOURCE_OPERATION_NAME)); assertType(operation.getOutput().getType(), InputStream.class, BinaryType.class); final List<ParameterModel> parameters = operation.getAllParameterModels(); assertThat(parameters, hasSize(4)); assertStreamingStrategyParameter(parameters.get(0)); ParameterModel parameter = parameters.get(1); assertThat(parameter.getName(), is(PATH)); assertType(parameter.getType(), String.class, StringType.class); assertTargetParameter(parameters.get(2), parameters.get(3)); }
@Test public void setPayload() { OperationModel setPayload = coreExtensionModel.getOperationModel("setPayload").get(); ParameterModel value = setPayload.getAllParameterModels().get(0); ParameterModel encoding = setPayload.getAllParameterModels().get(1); ParameterModel mimeType = setPayload.getAllParameterModels().get(2); assertThat(value.getName(), is("value")); assertThat(value.getExpressionSupport(), is(SUPPORTED)); assertThat(value.getType(), is(instanceOf(StringType.class))); assertThat(encoding.getName(), is("encoding")); assertThat(encoding.getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(encoding.getType(), is(instanceOf(StringType.class))); assertThat(mimeType.getName(), is("mimeType")); assertThat(mimeType.getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(mimeType.getType(), is(instanceOf(StringType.class))); }
@Test public void flowRef() { final OperationModel flowRefModel = coreExtensionModel.getOperationModel("flowRef").get(); assertThat(flowRefModel.getStereotype(), is(PROCESSOR)); assertAssociatedProcessorsChangeOutput(flowRefModel); assertThat(flowRefModel.getAllParameterModels(), hasSize(3)); assertThat(flowRefModel.getAllParameterModels().get(0).getName(), is("name")); assertThat(flowRefModel.getAllParameterModels().get(0).getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(flowRefModel.getAllParameterModels().get(0).getType(), instanceOf(DefaultStringType.class)); assertThat(flowRefModel.getAllParameterModels().get(0).isRequired(), is(true)); assertTarget(flowRefModel.getAllParameterModels().get(1)); }
@Test public void setVariable() { OperationModel setVariable = coreExtensionModel.getOperationModel("setVariable").get(); ParameterModel variableName = setVariable.getAllParameterModels().get(0); ParameterModel value = setVariable.getAllParameterModels().get(1); ParameterModel encoding = setVariable.getAllParameterModels().get(2); ParameterModel mimeType = setVariable.getAllParameterModels().get(3); assertThat(variableName.getName(), is("variableName")); assertThat(variableName.getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(variableName.getType(), is(instanceOf(StringType.class))); assertThat(value.getName(), is("value")); assertThat(value.getExpressionSupport(), is(SUPPORTED)); assertThat(value.getType(), is(instanceOf(StringType.class))); assertThat(encoding.getName(), is("encoding")); assertThat(encoding.getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(encoding.getType(), is(instanceOf(StringType.class))); assertThat(mimeType.getName(), is("mimeType")); assertThat(mimeType.getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(mimeType.getType(), is(instanceOf(StringType.class))); }
@Test public void logger() { final OperationModel loggerModel = coreExtensionModel.getOperationModel("logger").get(); assertThat(loggerModel.getStereotype(), is(PROCESSOR)); assertThat(loggerModel.getErrorModels(), empty()); assertThat(loggerModel.getExecutionType(), is(CPU_LITE)); assertOutputSameAsInput(loggerModel); final List<ParameterModel> paramModels = loggerModel.getAllParameterModels(); assertThat(paramModels, hasSize(3)); assertThat(paramModels.get(0).getName(), is("message")); assertThat(paramModels.get(0).getExpressionSupport(), is(SUPPORTED)); assertThat(paramModels.get(0).getType(), instanceOf(StringType.class)); assertThat(paramModels.get(0).isRequired(), is(false)); assertThat(paramModels.get(1).getName(), is("level")); assertThat(paramModels.get(1).getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(paramModels.get(1).getType(), instanceOf(DefaultStringType.class)); assertThat(paramModels.get(1).isRequired(), is(false)); assertThat(paramModels.get(2).getName(), is("category")); assertThat(paramModels.get(2).getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(paramModels.get(2).getType(), instanceOf(StringType.class)); assertThat(paramModels.get(2).isRequired(), is(false)); }
@Test public void raiseError() { final OperationModel raiseErrorModel = coreExtensionModel.getOperationModel("raiseError").get(); assertThat(raiseErrorModel.getStereotype(), is(PROCESSOR)); assertThat(raiseErrorModel.getErrorModels(), empty()); assertThat(raiseErrorModel.getExecutionType(), is(CPU_LITE)); assertOutputSameAsInput(raiseErrorModel); final List<ParameterModel> paramModels = raiseErrorModel.getAllParameterModels(); assertThat(paramModels, hasSize(2)); assertThat(paramModels.get(0).getName(), is("type")); assertThat(paramModels.get(0).getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(paramModels.get(0).getType(), instanceOf(DefaultStringType.class)); assertThat(paramModels.get(0).isRequired(), is(true)); assertThat(paramModels.get(1).getName(), is("description")); assertThat(paramModels.get(1).getExpressionSupport(), is(SUPPORTED)); assertThat(paramModels.get(1).getType(), instanceOf(StringType.class)); assertThat(paramModels.get(1).isRequired(), is(false)); }
@Test public void idempotentMessageValidator() { final OperationModel filterModel = coreExtensionModel.getOperationModel("idempotentMessageValidator").get(); assertThat(filterModel.getStereotype(), is(PROCESSOR)); assertOutputSameAsInput(filterModel); assertThat(filterModel.getAllParameterModels(), hasSize(4)); assertThat(filterModel.getAllParameterModels().get(0).getName(), is("idExpression")); assertThat(filterModel.getAllParameterModels().get(0).getExpressionSupport(), is(SUPPORTED)); assertThat(filterModel.getAllParameterModels().get(0).getType(), instanceOf(DefaultStringType.class)); assertThat(filterModel.getAllParameterModels().get(0).isRequired(), is(false)); assertThat(filterModel.getAllParameterModels().get(1).getName(), is("valueExpression")); assertThat(filterModel.getAllParameterModels().get(1).getExpressionSupport(), is(SUPPORTED)); assertThat(filterModel.getAllParameterModels().get(1).getType(), instanceOf(DefaultStringType.class)); assertThat(filterModel.getAllParameterModels().get(1).isRequired(), is(false)); assertThat(filterModel.getAllParameterModels().get(2).getName(), is("storePrefix")); assertThat(filterModel.getAllParameterModels().get(2).getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(filterModel.getAllParameterModels().get(2).getType(), instanceOf(DefaultStringType.class)); assertThat(filterModel.getAllParameterModels().get(2).isRequired(), is(false)); assertThat(filterModel.getAllParameterModels().get(3).getName(), is("objectStore")); assertThat(filterModel.getAllParameterModels().get(3).getExpressionSupport(), is(NOT_SUPPORTED)); assertThat(filterModel.getAllParameterModels().get(3).getType(), instanceOf(DefaultObjectType.class)); assertThat(filterModel.getAllParameterModels().get(3).isRequired(), is(false)); assertThat(filterModel.getAllParameterModels().get(3).getAllowedStereotypes().size(), is(1)); assertThat(filterModel.getAllParameterModels().get(3).getAllowedStereotypes().get(0), is(OBJECT_STORE)); }