Search in sources :

Example 21 with AssignableTypeFilter

use of org.springframework.core.type.filter.AssignableTypeFilter in project syncope by apache.

the class ClassPathScanImplementationLookup method load.

@SuppressWarnings("unchecked")
public void load() {
    pages = new ArrayList<>();
    previewers = new ArrayList<>();
    extPages = new ArrayList<>();
    extWidgets = new ArrayList<>();
    ssoLoginFormPanels = new ArrayList<>();
    reportletConfs = new HashMap<>();
    accountRuleConfs = new HashMap<>();
    passwordRuleConfs = new HashMap<>();
    pullCorrelationRuleConfs = new HashMap<>();
    ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
    scanner.addIncludeFilter(new AssignableTypeFilter(BasePage.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(AbstractBinaryPreviewer.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(BaseExtPage.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(BaseExtWidget.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(SSOLoginFormPanel.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(ReportletConf.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(AccountRuleConf.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(PasswordRuleConf.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(PullCorrelationRuleConf.class));
    scanner.findCandidateComponents(getBasePackage()).forEach(bd -> {
        try {
            Class<?> clazz = ClassUtils.resolveClassName(bd.getBeanClassName(), ClassUtils.getDefaultClassLoader());
            boolean isAbsractClazz = Modifier.isAbstract(clazz.getModifiers());
            if (!isAbsractClazz) {
                if (BaseExtPage.class.isAssignableFrom(clazz)) {
                    if (clazz.isAnnotationPresent(ExtPage.class)) {
                        extPages.add((Class<? extends BaseExtPage>) clazz);
                    } else {
                        LOG.error("Could not find annotation {} in {}, ignoring", ExtPage.class.getName(), clazz.getName());
                    }
                } else if (BaseExtWidget.class.isAssignableFrom(clazz)) {
                    if (clazz.isAnnotationPresent(ExtWidget.class)) {
                        extWidgets.add((Class<? extends BaseExtWidget>) clazz);
                    } else {
                        LOG.error("Could not find annotation {} in {}, ignoring", ExtWidget.class.getName(), clazz.getName());
                    }
                } else if (BasePage.class.isAssignableFrom(clazz)) {
                    pages.add((Class<? extends BasePage>) clazz);
                } else if (AbstractBinaryPreviewer.class.isAssignableFrom(clazz)) {
                    previewers.add((Class<? extends AbstractBinaryPreviewer>) clazz);
                } else if (SSOLoginFormPanel.class.isAssignableFrom(clazz)) {
                    ssoLoginFormPanels.add((Class<? extends SSOLoginFormPanel>) clazz);
                } else if (ReportletConf.class.isAssignableFrom(clazz)) {
                    reportletConfs.put(clazz.getName(), (Class<? extends ReportletConf>) clazz);
                } else if (AccountRuleConf.class.isAssignableFrom(clazz)) {
                    accountRuleConfs.put(clazz.getName(), (Class<? extends AccountRuleConf>) clazz);
                } else if (PasswordRuleConf.class.isAssignableFrom(clazz)) {
                    passwordRuleConfs.put(clazz.getName(), (Class<? extends PasswordRuleConf>) clazz);
                } else if (PullCorrelationRuleConf.class.isAssignableFrom(clazz)) {
                    pullCorrelationRuleConfs.put(clazz.getName(), (Class<? extends PullCorrelationRuleConf>) clazz);
                }
            }
        } catch (Throwable t) {
            LOG.warn("Could not inspect class {}", bd.getBeanClassName(), t);
        }
    });
    pages = Collections.unmodifiableList(pages);
    previewers = Collections.unmodifiableList(previewers);
    Collections.sort(extPages, (o1, o2) -> ObjectUtils.compare(o1.getAnnotation(ExtPage.class).priority(), o2.getAnnotation(ExtPage.class).priority()));
    extPages = Collections.unmodifiableList(extPages);
    Collections.sort(extWidgets, (o1, o2) -> ObjectUtils.compare(o1.getAnnotation(ExtWidget.class).priority(), o2.getAnnotation(ExtWidget.class).priority()));
    extWidgets = Collections.unmodifiableList(extWidgets);
    ssoLoginFormPanels = Collections.unmodifiableList(ssoLoginFormPanels);
    reportletConfs = Collections.unmodifiableMap(reportletConfs);
    accountRuleConfs = Collections.unmodifiableMap(accountRuleConfs);
    passwordRuleConfs = Collections.unmodifiableMap(passwordRuleConfs);
    pullCorrelationRuleConfs = Collections.unmodifiableMap(pullCorrelationRuleConfs);
    LOG.debug("Binary previewers found: {}", previewers);
    LOG.debug("Extension pages found: {}", extPages);
    LOG.debug("Extension widgets found: {}", extWidgets);
    LOG.debug("SSO Login pages found: {}", ssoLoginFormPanels);
    LOG.debug("Reportlet configurations found: {}", reportletConfs);
    LOG.debug("Account Rule configurations found: {}", accountRuleConfs);
    LOG.debug("Password Rule configurations found: {}", passwordRuleConfs);
    LOG.debug("Pull Correlation Rule configurations found: {}", pullCorrelationRuleConfs);
}
Also used : SSOLoginFormPanel(org.apache.syncope.client.console.panels.SSOLoginFormPanel) BaseExtPage(org.apache.syncope.client.console.pages.BaseExtPage) PasswordRuleConf(org.apache.syncope.common.lib.policy.PasswordRuleConf) BaseExtPage(org.apache.syncope.client.console.pages.BaseExtPage) ExtPage(org.apache.syncope.client.console.annotations.ExtPage) ClassPathScanningCandidateComponentProvider(org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider) AccountRuleConf(org.apache.syncope.common.lib.policy.AccountRuleConf) ReportletConf(org.apache.syncope.common.lib.report.ReportletConf) AbstractBinaryPreviewer(org.apache.syncope.client.console.wicket.markup.html.form.preview.AbstractBinaryPreviewer) PullCorrelationRuleConf(org.apache.syncope.common.lib.policy.PullCorrelationRuleConf) ExtWidget(org.apache.syncope.client.console.annotations.ExtWidget) BaseExtWidget(org.apache.syncope.client.console.widgets.BaseExtWidget) BasePage(org.apache.syncope.client.console.pages.BasePage) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter) BaseExtWidget(org.apache.syncope.client.console.widgets.BaseExtWidget)

Example 22 with AssignableTypeFilter

use of org.springframework.core.type.filter.AssignableTypeFilter in project syncope by apache.

the class ClassPathScanImplementationLookup method load.

@SuppressWarnings("unchecked")
public void load() {
    resources = new ArrayList<>();
    ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
    scanner.addIncludeFilter(new AssignableTypeFilter(AbstractResource.class));
    for (BeanDefinition bd : scanner.findCandidateComponents(getBasePackage())) {
        try {
            Class<?> clazz = ClassUtils.resolveClassName(bd.getBeanClassName(), ClassUtils.getDefaultClassLoader());
            boolean isAbsractClazz = Modifier.isAbstract(clazz.getModifiers());
            if (!isAbsractClazz) {
                if (AbstractResource.class.isAssignableFrom(clazz)) {
                    if (clazz.isAnnotationPresent(Resource.class)) {
                        resources.add((Class<? extends AbstractResource>) clazz);
                    } else {
                        LOG.error("Could not find annotation {} in {}, ignoring", Resource.class.getName(), clazz.getName());
                    }
                }
            }
        } catch (Throwable t) {
            LOG.warn("Could not inspect class {}", bd.getBeanClassName(), t);
        }
    }
    resources = Collections.unmodifiableList(resources);
}
Also used : ClassPathScanningCandidateComponentProvider(org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider) AbstractResource(org.apache.wicket.request.resource.AbstractResource) Resource(org.apache.syncope.client.enduser.annotations.Resource) AbstractResource(org.apache.wicket.request.resource.AbstractResource) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter)

Example 23 with AssignableTypeFilter

use of org.springframework.core.type.filter.AssignableTypeFilter in project syncope by apache.

the class ClassPathScanImplementationLookup method load.

@Override
@SuppressWarnings("unchecked")
public void load() {
    classNames = new EnumMap<>(ImplementationType.class);
    for (ImplementationType type : ImplementationType.values()) {
        classNames.put(type, new HashSet<>());
    }
    jwtSSOProviderClasses = new HashSet<>();
    reportletClasses = new HashMap<>();
    accountRuleClasses = new HashMap<>();
    passwordRuleClasses = new HashMap<>();
    correlationRuleClasses = new HashMap<>();
    auditAppenderClasses = new HashSet<>();
    ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
    scanner.addIncludeFilter(new AssignableTypeFilter(JWTSSOProvider.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(Reportlet.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(AccountRule.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(PasswordRule.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(PullCorrelationRule.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(ItemTransformer.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(SchedTaskJobDelegate.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(ReconFilterBuilder.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(LogicActions.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(PropagationActions.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(PullActions.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(PushActions.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(Validator.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(RecipientsProvider.class));
    scanner.addIncludeFilter(new AssignableTypeFilter(AuditAppender.class));
    scanner.findCandidateComponents(getBasePackage()).forEach(bd -> {
        try {
            Class<?> clazz = ClassUtils.resolveClassName(bd.getBeanClassName(), ClassUtils.getDefaultClassLoader());
            boolean isAbstractClazz = Modifier.isAbstract(clazz.getModifiers());
            if (JWTSSOProvider.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                classNames.get(ImplementationType.JWT_SSO_PROVIDER).add(clazz.getName());
                jwtSSOProviderClasses.add(clazz);
            }
            if (Reportlet.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                ReportletConfClass annotation = clazz.getAnnotation(ReportletConfClass.class);
                if (annotation == null) {
                    LOG.warn("Found Reportlet {} without declared configuration", clazz.getName());
                } else {
                    classNames.get(ImplementationType.REPORTLET).add(clazz.getName());
                    reportletClasses.put(annotation.value(), (Class<? extends Reportlet>) clazz);
                }
            }
            if (AccountRule.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                AccountRuleConfClass annotation = clazz.getAnnotation(AccountRuleConfClass.class);
                if (annotation == null) {
                    LOG.warn("Found account policy rule {} without declared configuration", clazz.getName());
                } else {
                    classNames.get(ImplementationType.ACCOUNT_RULE).add(clazz.getName());
                    accountRuleClasses.put(annotation.value(), (Class<? extends AccountRule>) clazz);
                }
            }
            if (PasswordRule.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                PasswordRuleConfClass annotation = clazz.getAnnotation(PasswordRuleConfClass.class);
                if (annotation == null) {
                    LOG.warn("Found password policy rule {} without declared configuration", clazz.getName());
                } else {
                    classNames.get(ImplementationType.PASSWORD_RULE).add(clazz.getName());
                    passwordRuleClasses.put(annotation.value(), (Class<? extends PasswordRule>) clazz);
                }
            }
            if (PullCorrelationRule.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                PullCorrelationRuleConfClass annotation = clazz.getAnnotation(PullCorrelationRuleConfClass.class);
                if (annotation == null) {
                    LOG.warn("Found pull correlation rule {} without declared configuration", clazz.getName());
                } else {
                    classNames.get(ImplementationType.ACCOUNT_RULE).add(clazz.getName());
                    correlationRuleClasses.put(annotation.value(), (Class<? extends PullCorrelationRule>) clazz);
                }
            }
            if (ItemTransformer.class.isAssignableFrom(clazz) && !isAbstractClazz && !clazz.equals(JEXLItemTransformerImpl.class)) {
                classNames.get(ImplementationType.ITEM_TRANSFORMER).add(clazz.getName());
            }
            if (SchedTaskJobDelegate.class.isAssignableFrom(clazz) && !isAbstractClazz && !PullJobDelegate.class.isAssignableFrom(clazz) && !PushJobDelegate.class.isAssignableFrom(clazz) && !GroupMemberProvisionTaskJobDelegate.class.isAssignableFrom(clazz)) {
                classNames.get(ImplementationType.TASKJOB_DELEGATE).add(bd.getBeanClassName());
            }
            if (ReconFilterBuilder.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                classNames.get(ImplementationType.RECON_FILTER_BUILDER).add(bd.getBeanClassName());
            }
            if (LogicActions.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                classNames.get(ImplementationType.LOGIC_ACTIONS).add(bd.getBeanClassName());
            }
            if (PropagationActions.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                classNames.get(ImplementationType.PROPAGATION_ACTIONS).add(bd.getBeanClassName());
            }
            if (PullActions.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                classNames.get(ImplementationType.PULL_ACTIONS).add(bd.getBeanClassName());
            }
            if (PushActions.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                classNames.get(ImplementationType.PUSH_ACTIONS).add(bd.getBeanClassName());
            }
            if (Validator.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                classNames.get(ImplementationType.VALIDATOR).add(bd.getBeanClassName());
            }
            if (RecipientsProvider.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                classNames.get(ImplementationType.RECIPIENTS_PROVIDER).add(bd.getBeanClassName());
            }
            if (AuditAppender.class.isAssignableFrom(clazz) && !isAbstractClazz) {
                classNames.get(ImplementationType.AUDIT_APPENDER).add(clazz.getName());
                auditAppenderClasses.add(clazz);
            }
        } catch (Throwable t) {
            LOG.warn("Could not inspect class {}", bd.getBeanClassName(), t);
        }
    });
    classNames = Collections.unmodifiableMap(classNames);
    LOG.debug("Implementation classes found: {}", classNames);
    jwtSSOProviderClasses = Collections.unmodifiableSet(jwtSSOProviderClasses);
    reportletClasses = Collections.unmodifiableMap(reportletClasses);
    accountRuleClasses = Collections.unmodifiableMap(accountRuleClasses);
    passwordRuleClasses = Collections.unmodifiableMap(passwordRuleClasses);
    correlationRuleClasses = Collections.unmodifiableMap(correlationRuleClasses);
    auditAppenderClasses = Collections.unmodifiableSet(auditAppenderClasses);
}
Also used : PasswordRule(org.apache.syncope.core.persistence.api.dao.PasswordRule) PropagationActions(org.apache.syncope.core.provisioning.api.propagation.PropagationActions) PushJobDelegate(org.apache.syncope.core.provisioning.java.pushpull.PushJobDelegate) ItemTransformer(org.apache.syncope.core.provisioning.api.data.ItemTransformer) PullActions(org.apache.syncope.core.provisioning.api.pushpull.PullActions) AccountRuleConfClass(org.apache.syncope.core.persistence.api.dao.AccountRuleConfClass) LogicActions(org.apache.syncope.core.provisioning.api.LogicActions) AuditAppender(org.apache.syncope.core.logic.audit.AuditAppender) PullCorrelationRule(org.apache.syncope.core.persistence.api.dao.PullCorrelationRule) PushActions(org.apache.syncope.core.provisioning.api.pushpull.PushActions) PasswordRuleConfClass(org.apache.syncope.core.persistence.api.dao.PasswordRuleConfClass) SchedTaskJobDelegate(org.apache.syncope.core.provisioning.api.job.SchedTaskJobDelegate) ReportletConfClass(org.apache.syncope.core.persistence.api.dao.ReportletConfClass) AccountRule(org.apache.syncope.core.persistence.api.dao.AccountRule) RecipientsProvider(org.apache.syncope.core.provisioning.api.notification.RecipientsProvider) Reportlet(org.apache.syncope.core.persistence.api.dao.Reportlet) ImplementationType(org.apache.syncope.common.lib.types.ImplementationType) PullCorrelationRuleConfClass(org.apache.syncope.core.persistence.api.dao.PullCorrelationRuleConfClass) ClassPathScanningCandidateComponentProvider(org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider) JWTSSOProvider(org.apache.syncope.core.spring.security.JWTSSOProvider) ReconFilterBuilder(org.apache.syncope.core.provisioning.api.pushpull.ReconFilterBuilder) Validator(org.apache.syncope.core.persistence.api.attrvalue.validation.Validator) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter)

Example 24 with AssignableTypeFilter

use of org.springframework.core.type.filter.AssignableTypeFilter in project spring-integration by spring-projects.

the class IntegrationComponentScanRegistrar method typeFiltersFor.

private List<TypeFilter> typeFiltersFor(AnnotationAttributes filter, BeanDefinitionRegistry registry) {
    List<TypeFilter> typeFilters = new ArrayList<>();
    FilterType filterType = filter.getEnum("type");
    for (Class<?> filterClass : filter.getClassArray("classes")) {
        switch(filterType) {
            case ANNOTATION:
                Assert.isAssignable(Annotation.class, filterClass, "An error occurred while processing a @IntegrationComponentScan ANNOTATION type filter: ");
                @SuppressWarnings("unchecked") Class<Annotation> annotationType = (Class<Annotation>) filterClass;
                typeFilters.add(new AnnotationTypeFilter(annotationType));
                break;
            case ASSIGNABLE_TYPE:
                typeFilters.add(new AssignableTypeFilter(filterClass));
                break;
            case CUSTOM:
                Assert.isAssignable(TypeFilter.class, filterClass, "An error occurred while processing a @IntegrationComponentScan CUSTOM type filter: ");
                TypeFilter typeFilter = BeanUtils.instantiateClass(filterClass, TypeFilter.class);
                invokeAwareMethods(filter, this.environment, this.resourceLoader, registry);
                typeFilters.add(typeFilter);
                break;
            default:
                throw new IllegalArgumentException("Filter type not supported with Class value: " + filterType);
        }
    }
    for (String expression : filter.getStringArray("pattern")) {
        switch(filterType) {
            case ASPECTJ:
                typeFilters.add(new AspectJTypeFilter(expression, this.resourceLoader.getClassLoader()));
                break;
            case REGEX:
                typeFilters.add(new RegexPatternTypeFilter(Pattern.compile(expression)));
                break;
            default:
                throw new IllegalArgumentException("Filter type not supported with String pattern: " + filterType);
        }
    }
    return typeFilters;
}
Also used : AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) AspectJTypeFilter(org.springframework.core.type.filter.AspectJTypeFilter) ArrayList(java.util.ArrayList) TypeFilter(org.springframework.core.type.filter.TypeFilter) AspectJTypeFilter(org.springframework.core.type.filter.AspectJTypeFilter) AnnotationTypeFilter(org.springframework.core.type.filter.AnnotationTypeFilter) RegexPatternTypeFilter(org.springframework.core.type.filter.RegexPatternTypeFilter) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter) RegexPatternTypeFilter(org.springframework.core.type.filter.RegexPatternTypeFilter) Annotation(java.lang.annotation.Annotation) FilterType(org.springframework.context.annotation.FilterType) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter)

Example 25 with AssignableTypeFilter

use of org.springframework.core.type.filter.AssignableTypeFilter in project alien4cloud by alien4cloud.

the class TypeScanner method scanTypes.

public static Set<Class<?>> scanTypes(String basePackage, Class<?> targetType) throws ClassNotFoundException {
    ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
    AssignableTypeFilter filter = new AssignableTypeFilter(targetType);
    scanner.addIncludeFilter(filter);
    Set<BeanDefinition> beanSet = scanner.findCandidateComponents(basePackage);
    Set<Class<?>> classSet = new HashSet<Class<?>>();
    for (BeanDefinition beanDef : beanSet) {
        log.debug("found candidate bean = {}", beanDef.getBeanClassName());
        Class<?> clazz;
        clazz = Class.forName(beanDef.getBeanClassName(), true, Thread.currentThread().getContextClassLoader());
        classSet.add(clazz);
    }
    return classSet;
}
Also used : ClassPathScanningCandidateComponentProvider(org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) AssignableTypeFilter(org.springframework.core.type.filter.AssignableTypeFilter) HashSet(java.util.HashSet)

Aggregations

AssignableTypeFilter (org.springframework.core.type.filter.AssignableTypeFilter)36 BeanDefinition (org.springframework.beans.factory.config.BeanDefinition)20 ClassPathScanningCandidateComponentProvider (org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider)14 Test (org.junit.jupiter.api.Test)13 AnnotationTypeFilter (org.springframework.core.type.filter.AnnotationTypeFilter)9 FooService (example.scannable.FooService)6 Annotation (java.lang.annotation.Annotation)5 ArrayList (java.util.ArrayList)4 MetadataReader (org.springframework.core.type.classreading.MetadataReader)4 MetadataReaderFactory (org.springframework.core.type.classreading.MetadataReaderFactory)4 SimpleMetadataReaderFactory (org.springframework.core.type.classreading.SimpleMetadataReaderFactory)4 AspectJTypeFilter (org.springframework.core.type.filter.AspectJTypeFilter)4 RegexPatternTypeFilter (org.springframework.core.type.filter.RegexPatternTypeFilter)4 TypeFilter (org.springframework.core.type.filter.TypeFilter)4 AutowiredQualifierFooService (example.scannable.AutowiredQualifierFooService)3 FooServiceImpl (example.scannable.FooServiceImpl)3 Test (org.junit.Test)3 AnnotatedComponent (example.gh24375.AnnotatedComponent)2 DevComponent (example.profilescan.DevComponent)2 ProfileAnnotatedComponent (example.profilescan.ProfileAnnotatedComponent)2