/*
* 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.java.type.runtime;
import static java.util.Collections.emptyList;
import static java.util.stream.Collectors.toList;
import static org.mule.runtime.module.extension.internal.util.IntrospectionUtils.getOperationMethods;
import org.mule.runtime.extension.api.annotation.Configurations;
import org.mule.runtime.extension.api.annotation.Operations;
import org.mule.runtime.module.extension.internal.loader.java.type.ConfigurationElement;
import org.mule.runtime.module.extension.internal.loader.java.type.ExtensionElement;
import org.mule.runtime.module.extension.internal.loader.java.type.MethodElement;
import org.mule.runtime.module.extension.internal.loader.java.type.ParameterizableTypeElement;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
/**
* {@link ConfigurationWrapper} specification for classes that are considered as Extensions
*
* @since 4.0
*/
public class ExtensionTypeWrapper<T> extends ComponentWrapper implements ExtensionElement, ParameterizableTypeElement {
public ExtensionTypeWrapper(Class<T> aClass) {
super(aClass);
}
/**
* {@inheritDoc}
*/
public List<ConfigurationElement> getConfigurations() {
final Optional<Configurations> optionalConfigurations = this.getAnnotation(Configurations.class);
if (optionalConfigurations.isPresent()) {
final Configurations configurations = optionalConfigurations.get();
return Stream.of(configurations.value()).map(ConfigurationWrapper::new).collect(toList());
}
return emptyList();
}
/**
* {@inheritDoc}
*/
@Override
public List<MethodElement> getOperations() {
return getAnnotation(Operations.class)
.map(classes -> Stream.of(classes.value())
.flatMap(clazz -> getOperationMethods(clazz).stream())
.map(clazz -> (MethodElement) new MethodWrapper(clazz))
.collect(toList()))
.orElse(emptyList());
}
}