/** * Calculates all the used namespaces of the given <module/> leaving behind the (possible) cyclic reference if there are * {@link MacroExpansionModuleModel#TNS_PREFIX} references by removing the current namespace generation. * * @param moduleModel XML of the <module/> * @param xmlDslModel the {@link XmlDslModel} for the current {@link ExtensionModel} generation * @return a {@link XmlExtensionModelProperty} which contains all the namespaces dependencies. Among them could be dependencies * that must be macro expanded and others which might not, but that job is left for the * {@link MacroExpansionModulesModel#getDirectExpandableNamespaceDependencies(ComponentModel, Set)} */ private XmlExtensionModelProperty getXmlExtensionModelProperty(ComponentModel moduleModel, XmlDslModel xmlDslModel) { final Set<String> namespaceDependencies = getUsedNamespaces(moduleModel).stream() .filter(namespace -> !xmlDslModel.getNamespace().equals(namespace)) .collect(Collectors.toSet()); return new XmlExtensionModelProperty(namespaceDependencies); }
private Set<String> getDependenciesOrFail(ExtensionModel extensionModel) { return extensionModel.getModelProperty(XmlExtensionModelProperty.class) .orElseThrow(() -> new IllegalArgumentException(format("The current extension [%s] (namespace [%s]) does not have the macro expansion model property, it should have never reach here.", extensionModel.getName(), extensionModel.getXmlDslModel().getNamespace()))) .getNamespacesDependencies(); }
sortedExtension.getName(), sortedExtension.getXmlDslModel().getPrefix(), sortedExtension.getXmlDslModel().getNamespace()));
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); }
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)); } }
final Map<String, ExtensionModel> allExtensionsByNamespace = extensions.stream() .filter(extensionModel -> extensionModel.getModelProperty(XmlExtensionModelProperty.class).isPresent()) .collect(Collectors.toMap(extModel -> extModel.getXmlDslModel().getNamespace(), Function.identity()));
private XmlDslModel registerExtensionImport(ExtensionModel extension) { XmlDslModel languageModel = extension.getXmlDslModel(); Import schemaImport = new Import(); schemaImport.setNamespace(languageModel.getNamespace()); schemaImport.setSchemaLocation(languageModel.getSchemaLocation()); if (!schema.getIncludeOrImportOrRedefine().contains(schemaImport)) { schema.getIncludeOrImportOrRedefine().add(schemaImport); } return languageModel; }
@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)))); }
final String description = getDescription(moduleModel); final String xmlnsTnsValue = moduleModel.getParameters().get(XMLNS_TNS); if (xmlnsTnsValue != null && !xmlDslModel.getNamespace().equals(xmlnsTnsValue)) { throw new MuleRuntimeException(createStaticMessage(format("The %s attribute value of the module must be '%s', but found '%s'", XMLNS_TNS, xmlDslModel.getNamespace(), xmlnsTnsValue)));
@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)))); }
@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")); }
public static SchemaBuilder newSchema(ExtensionModel extensionModel, XmlDslModel xmlDslModel, DslResolvingContext dslContext) { SchemaBuilder builder = new SchemaBuilder(); builder.extensionModel = extensionModel; builder.schema = new Schema(); builder.schema.setTargetNamespace(xmlDslModel.getNamespace()); builder.schema.setElementFormDefault(FormChoice.QUALIFIED); builder.schema.setAttributeFormDefault(FormChoice.UNQUALIFIED); builder.withDslSyntaxResolver(extensionModel, dslContext) .importXmlNamespace() .importSpringFrameworkNamespace() .importMuleNamespace(); builder.initialiseDelegates(); builder.withImportedTypes(extensionModel.getImportedTypes()); builder.withTypeMapping(extensionModel); builder.withTypes(extensionModel.getTypes()); return builder; }
@Override public void write(JsonWriter out, XmlDslModel value) throws IOException { out.beginObject(); out.name(PREFIX).value(value.getPrefix()); out.name(NAMESPACE).value(value.getNamespace()); out.name(SCHEMA_LOCATION).value(value.getSchemaLocation()); out.name(SCHEMA_VERSION).value(value.getSchemaVersion()); out.name(XSD_FILE_NAME).value(value.getXsdFileName()); out.endObject(); }
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); }
private XmlDslModel registerExtensionImport(ExtensionModel extension) { XmlDslModel languageModel = extension.getXmlDslModel(); Import schemaImport = new Import(); schemaImport.setNamespace(languageModel.getNamespace()); schemaImport.setSchemaLocation(languageModel.getSchemaLocation()); if (!schema.getIncludeOrImportOrRedefine().contains(schemaImport)) { schema.getIncludeOrImportOrRedefine().add(schemaImport); } return languageModel; }
@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)))); }
@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))))); }