All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.lsn.java.common.condition.OnConfigurationCondition Maven / Gradle / Ivy

package io.lsn.java.common.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