/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.module.extension.internal.loader.enricher;
import static java.util.Optional.empty;
import static java.util.Optional.ofNullable;
import static org.mule.runtime.extension.api.util.XmlModelUtils.createXmlLanguageModel;
import org.mule.runtime.api.meta.model.XmlDslModel;
import org.mule.runtime.api.meta.model.declaration.fluent.ExtensionDeclaration;
import org.mule.runtime.api.meta.model.declaration.fluent.ExtensionDeclarer;
import org.mule.runtime.extension.api.annotation.dsl.xml.Xml;
import org.mule.runtime.extension.api.loader.ExtensionLoadingContext;
import java.util.Optional;
/**
* Verifies if the extension is annotated with {@link Xml} and if so, enriches the {@link ExtensionDeclarer} with a
* {@link XmlDslModel}.
* <p>
* To get a hold of the {@link Class} on which the {@link Xml} annotation is expected to be, the {@link ExtensionLoadingContext} will be
* queried for such a model property. If such property is not present, then this enricher will return without any side effects
*
* @since 4.0
*/
public final class JavaXmlDeclarationEnricher extends AbstractAnnotatedDeclarationEnricher {
@Override
public void enrich(ExtensionLoadingContext extensionLoadingContext) {
Xml xml = extractAnnotation(extensionLoadingContext.getExtensionDeclarer().getDeclaration(), Xml.class);
ExtensionDeclarer declarer = extensionLoadingContext.getExtensionDeclarer();
ExtensionDeclaration extensionDeclaration = declarer.getDeclaration();
declarer.withXmlDsl(getXmlLanguageModel(xml, extensionDeclaration));
}
private XmlDslModel getXmlLanguageModel(Xml xml, ExtensionDeclaration extensionDeclaration) {
final Optional<String> extensionNamespace = xml != null ? ofNullable(xml.prefix()) : empty();
final Optional<String> extensionNamespaceLocation = xml != null ? ofNullable(xml.namespace()) : empty();
return createXmlLanguageModel(extensionNamespace, extensionNamespaceLocation, extensionDeclaration.getName(),
extensionDeclaration.getVersion());
}
}