private static String getExtensionsNamespace(XmlDslModel dslModel) { return dslModel.getPrefix().toUpperCase(); }
private ExtensionModel getExtensionModelOrFail() { return extensionManager.getExtensions().stream() .filter(em -> em.getXmlDslModel().getPrefix().equals(moduleName)) .findFirst() .orElseThrow(() -> new IllegalArgumentException(format("Could not find any extension under the name of [%s]", moduleName))); }
public DefaultXmlArtifactDeclarationLoader(DslResolvingContext context) { this.context = context; this.resolvers = context.getExtensions().stream() .collect(toMap(e -> e.getXmlDslModel().getPrefix(), e -> DslSyntaxResolver.getDefault(e, context))); this.context.getExtensions().forEach(e -> extensionsByNamespace.put(e.getXmlDslModel().getPrefix(), e)); }
void enrich(ExtensionDeclaration extension) { defaultNamespace = extension.getXmlDslModel().getPrefix().toUpperCase(); new IdempotentDeclarationWalker() { @Override protected void onParameter(ParameterGroupDeclaration parameterGroup, ParameterDeclaration declaration) { declaration.getModelProperty(ImplementingParameterModelProperty.class) .ifPresent(param -> declaration.setAllowedStereotypeModels(getStereotypes(param.getParameter()))); declaration.getModelProperty(DeclaringMemberModelProperty.class) .ifPresent(field -> declaration.setAllowedStereotypeModels(getStereotypes(field.getDeclaringField()))); } }.walk(extension); }
private String getStereotypePrefix(ExtensionDeclarer extensionDeclarer) { return extensionDeclarer.getDeclaration().getXmlDslModel().getPrefix().toUpperCase(); }
private void validate(ExtensionModel extensionModel, XmlDslModel xmlDslModel) { checkArgument(extensionModel != null, "extension cannot be null"); checkArgument(xmlDslModel != null, "xml model property cannot be null"); checkState(!StringUtils.isBlank(xmlDslModel.getPrefix()), "xml model property cannot provide a blank namespace"); }
@Override protected void onOperation(HasOperationModels owner, OperationModel operationModel) { operationModel.getModelProperty(OperationComponentModelModelProperty.class) .ifPresent(operationComponentModelModelProperty -> { searchAndValidate(extensionModel.getXmlDslModel().getPrefix(), operationModel, operationComponentModelModelProperty.getBodyComponentModel(), problemsReporter); }); } }.walk(extensionModel);
private Optional<ConfigurationModel> looForConfiguration(ComponentModel componentModel) { final ComponentIdentifier identifier = componentModel.getIdentifier(); return identifier.getNamespace().equals(extensionModel.getXmlDslModel().getPrefix()) ? extensionModel.getConfigurationModel(identifier.getName()) : empty(); }
private static XmlNamespaceInfoProvider createStaticNamespaceInfoProviders(Set<ExtensionModel> extensionModels) { List<XmlNamespaceInfo> extensionNamespaces = extensionModels.stream() .map(ext -> new StaticXmlNamespaceInfo(ext.getXmlDslModel().getNamespace(), ext.getXmlDslModel().getPrefix())) .collect(toImmutableList()); return new StaticXmlNamespaceInfoProvider(extensionNamespaces); }
public XmlApplicationServiceRegistry(ServiceRegistry delegate, DslResolvingContext context) { this.delegate = delegate; List<XmlNamespaceInfo> extensionNamespaces; if (context != null) { extensionNamespaces = context.getExtensions().stream() .map(ext -> new StaticXmlNamespaceInfo(ext.getXmlDslModel().getNamespace(), ext.getXmlDslModel().getPrefix())) .collect(toImmutableList()); } else { extensionNamespaces = ImmutableList.of(); } extensionsXmlInfoProvider = new StaticXmlNamespaceInfoProvider(extensionNamespaces); }
/** * Looks for an operation exposed in the current {@link ExtensionModel}. * * @param componentModel operation to look for. * @return the operation if found, {@link Optional#empty()} otherwise. */ private Optional<OperationModel> lookForOperation(ComponentModel componentModel) { return lookForOperation(componentModel.getIdentifier(), extensionModel.getXmlDslModel().getPrefix()); }
String getNamespaceUri(String prefix) { if (prefix.equals(CORE_PREFIX)) { importIfNotImported(createMuleImport()); return CORE_NAMESPACE; } if (prefix.equals(EE_PREFIX)) { importIfNotImported(createMuleEEImport()); return EE_NAMESPACE; } Optional<ExtensionModel> extensionModelFromPrefix = dslContext.getExtensions().stream() .filter((extensionModel) -> prefix.equals(extensionModel.getXmlDslModel().getPrefix())).findFirst(); if (extensionModelFromPrefix.isPresent()) { registerExtensionImport(extensionModelFromPrefix.get()); return extensionModelFromPrefix.get().getXmlDslModel().getNamespace(); } throw new IllegalArgumentException(String .format("prefix: %s inside substitutionGroup does not exist. It does not relate to any imported namespaces", prefix)); } }
private void declareErrorModels(OperationDeclarer operationDeclarer, XmlDslModel xmlDslModel, String operationName, ComponentModel operationModel) { Optional<ComponentModel> optionalParametersComponentModel = operationModel.getInnerComponents() .stream() .filter(child -> child.getIdentifier().equals(OPERATION_ERRORS_IDENTIFIER)).findAny(); optionalParametersComponentModel.ifPresent(componentModel -> componentModel.getInnerComponents() .stream() .filter(child -> child.getIdentifier().equals(OPERATION_ERROR_IDENTIFIER)) .forEach(param -> { final String namespace = xmlDslModel.getPrefix().toUpperCase(); final String typeName = param.getParameters().get(ERROR_TYPE_ATTRIBUTE); if (StringUtils.isBlank(typeName)) { throw new IllegalModelDefinitionException(format("The operation [%s] cannot have an <error> with an empty 'type' attribute", operationName)); } if (typeName.contains(NAMESPACE_SEPARATOR)) { throw new IllegalModelDefinitionException(format("The operation [%s] cannot have an <error> [%s] that contains a reserved character [%s]", operationName, typeName, NAMESPACE_SEPARATOR)); } operationDeclarer.withErrorModel(ErrorModelBuilder.newError(typeName, namespace) .withParent(ErrorModelBuilder.newError(ANY).build()) .build()); })); }
private Optional<NestableElementModel> findNestableElementModel(ComponentIdentifier componentIdentifier) { try { return extensionNestableElementModelByComponentIdentifier.get(componentIdentifier, () -> { String componentName = toCamelCase(componentIdentifier.getName(), COMPONENT_NAME_SEPARATOR); for (ExtensionModel extensionModel : extensionsModels) { if (extensionModel.getXmlDslModel().getPrefix().equals(componentIdentifier.getNamespace())) { Optional<NestableElementModel> elementModelOptional = searchNestableElementModel(extensionModel, componentName); if (elementModelOptional.isPresent()) { return elementModelOptional; } return searchNestableElementModel(extensionModel, componentIdentifier.getName()); } } return empty(); }); } catch (ExecutionException e) { throw new MuleRuntimeException(e); } }
@Test public void enrichWithCustomNamespaceValue() { extensionDeclarer.named(EXTENSION_NAME).onVersion(EXTENSION_VERSION); XmlDslModel dslModel = enrich(DefaultXmlExtension.class); assertThat(dslModel, is(notNullValue())); assertThat(dslModel.getSchemaVersion(), is(EXTENSION_VERSION)); assertThat(dslModel.getPrefix(), is(NAMESPACE)); assertThat(dslModel.getNamespace(), equalTo(String.format(DEFAULT_NAMESPACE_LOCATION_MASK, NAMESPACE))); assertThat(dslModel.getXsdFileName(), is(String.format(XSD_FILENAME_MASK, NAMESPACE))); assertThat(dslModel.getSchemaLocation(), is(String.format(DEFAULT_SCHEMA_LOCATION_MASK, String.format(DEFAULT_NAMESPACE_LOCATION_MASK, NAMESPACE), String.format(XSD_FILENAME_MASK, NAMESPACE)))); }
@Test public void enrichWithDefaultValues() { extensionDeclarer.named(EXTENSION_NAME).onVersion(EXTENSION_VERSION); XmlDslModel dslModel = enrich(NoXmlSupport.class); assertThat(dslModel, is(notNullValue())); assertThat(dslModel.getSchemaVersion(), is(EXTENSION_VERSION)); assertThat(dslModel.getPrefix(), is(EXTENSION_HYPHENAZED_NAME)); assertThat(dslModel.getNamespace(), equalTo(String.format(DEFAULT_NAMESPACE_LOCATION_MASK, EXTENSION_HYPHENAZED_NAME))); assertThat(dslModel.getXsdFileName(), is(String.format(XSD_FILENAME_MASK, EXTENSION_HYPHENAZED_NAME))); assertThat(dslModel.getSchemaLocation(), is(String.format(DEFAULT_SCHEMA_LOCATION_MASK, String.format(DEFAULT_NAMESPACE_LOCATION_MASK, EXTENSION_HYPHENAZED_NAME), String.format(XSD_FILENAME_MASK, EXTENSION_HYPHENAZED_NAME)))); }
@Test public void enrichWithCustomValues() { extensionDeclarer.named(EXTENSION_NAME).onVersion(EXTENSION_VERSION); XmlDslModel dslModel = enrich(XmlSupport.class); assertThat(dslModel, is(notNullValue())); assertThat(dslModel.getSchemaVersion(), is(EXTENSION_VERSION)); assertThat(dslModel.getPrefix(), is(NAMESPACE)); assertThat(dslModel.getNamespace(), is(NAMESPACE_LOCATION)); assertThat(dslModel.getXsdFileName(), is(String.format(XSD_FILENAME_MASK, NAMESPACE))); assertThat(dslModel.getSchemaLocation(), is(String.format(DEFAULT_SCHEMA_LOCATION_MASK, NAMESPACE_LOCATION, String.format(XSD_FILENAME_MASK, NAMESPACE)))); }
private void registerExpressionFunctions(ExtensionModel extensionModel) { if (extensionModel.getFunctionModels().isEmpty()) { return; } ExpressionModule.Builder moduleBuilder = new DefaultExpressionModuleBuilder(new ModuleNamespace(extensionModel .getXmlDslModel().getPrefix())); registerExpressionFunctions(extensionModel.getFunctionModels().stream(), moduleBuilder); try { final BindingContext bindingContext = new DefaultBindingContextBuilder().addModule(moduleBuilder.build()).build(); registerObject(muleContext, extensionModel.getName() + "GlobalBindingContextProvider", (GlobalBindingContextProvider) () -> bindingContext); } catch (Exception e) { throw new MuleRuntimeException(createStaticMessage(e.getMessage()), e); } }
@Test public void enrichWithCustomSchemaLocationValue() { extensionDeclarer.named(EXTENSION).onVersion(EXTENSION_VERSION); XmlDslModel dslModel = enrich(CustomSchemaLocationXmlExtension.class); assertThat(dslModel, is(notNullValue())); assertThat(dslModel.getSchemaVersion(), is(EXTENSION_VERSION)); assertThat(dslModel.getPrefix(), is(EXTENSION.toLowerCase())); assertThat(dslModel.getNamespace(), equalTo(NAMESPACE_LOCATION)); assertThat(dslModel.getXsdFileName(), is(String.format(XSD_FILENAME_MASK, hyphenize(EXTENSION)))); assertThat(dslModel.getSchemaLocation(), is(String.format(DEFAULT_SCHEMA_LOCATION_MASK, NAMESPACE_LOCATION, String.format(XSD_FILENAME_MASK, hyphenize(EXTENSION))))); }
@Test public void consistentWithSchema() { assertThat(coreExtensionModel.getXmlDslModel().getPrefix(), is(CORE_PREFIX)); assertThat(coreExtensionModel.getXmlDslModel().getNamespace(), is("http://www.mulesoft.org/schema/mule/core")); assertThat(coreExtensionModel.getXmlDslModel().getSchemaLocation(), is("http://www.mulesoft.org/schema/mule/core/current/mule.xsd")); assertThat(coreExtensionModel.getXmlDslModel().getSchemaVersion(), is(MULE_VERSION)); assertThat(coreExtensionModel.getXmlDslModel().getXsdFileName(), is("mule.xsd")); }