
io.lsn.java.common.configuration.condition.OnConfigurationCondition Maven / Gradle / Ivy
package io.lsn.java.common.configuration.condition;
import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.util.MultiValueMap;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Patryk Szlagowski
*/
public class OnConfigurationCondition extends SpringBootCondition {
@Override
public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
List beans = Arrays.asList(context.getBeanFactory().getBeanNamesForAnnotation(RegisterPartsInApplications.class));
if (beans == null || beans.isEmpty()) {
return ConditionOutcome.noMatch("");
}
Object applicationBean = context.getBeanFactory().getBean(beans.get(0));
MultiValueMap annotatedTargetClass = metadata.getAllAnnotationAttributes(ConditionalOnConfiguration.class.getName());
List configurationInApplication = Arrays.asList(applicationBean.getClass().getAnnotation(RegisterPartsInApplications.class).value())
.stream()
.filter(value -> value.name().equals(annotatedTargetClass.getFirst("name")))
.collect(Collectors.toList());
if (configurationInApplication == null || configurationInApplication.isEmpty()) {
return ConditionOutcome.noMatch("");
}
RegisterParts configurationForLibrary = configurationInApplication.get(0);
if (annotatedTargetClass.getFirst("type").equals(ConditionalOnConfiguration.Type.ENDPOINT) && configurationForLibrary.registerRestEndpoint()) {
return ConditionOutcome.match();
}
if (annotatedTargetClass.getFirst("type").equals(ConditionalOnConfiguration.Type.SERVICE) && configurationForLibrary.registerService()) {
return ConditionOutcome.match();
}
return ConditionOutcome.noMatch("");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy