Search in sources :

Example 1 with AccountRuleConf

use of org.apache.syncope.common.lib.policy.AccountRuleConf in project syncope by apache.

the class ImplementationManager method buildAccountRule.

public static Optional<AccountRule> buildAccountRule(final Implementation impl) throws InstantiationException, IllegalAccessException {
    switch(impl.getEngine()) {
        case GROOVY:
            return Optional.of(ImplementationManager.<AccountRule>buildGroovy(impl));
        case JAVA:
        default:
            AccountRule rule = null;
            AccountRuleConf ruleConf = POJOHelper.deserialize(impl.getBody(), AccountRuleConf.class);
            Class<? extends AccountRule> ruleClass = ApplicationContextProvider.getApplicationContext().getBean(ImplementationLookup.class).getAccountRuleClass(ruleConf.getClass());
            if (ruleClass == null) {
                LOG.warn("Could not find matching account rule for {}", impl.getClass());
            } else {
                // fetch (or create) rule
                if (ApplicationContextProvider.getBeanFactory().containsSingleton(ruleClass.getName())) {
                    rule = (AccountRule) ApplicationContextProvider.getBeanFactory().getSingleton(ruleClass.getName());
                } else {
                    rule = (AccountRule) ApplicationContextProvider.getBeanFactory().createBean(ruleClass, AbstractBeanDefinition.AUTOWIRE_BY_TYPE, false);
                    ApplicationContextProvider.getBeanFactory().registerSingleton(ruleClass.getName(), rule);
                }
                rule.setConf(ruleConf);
            }
            return Optional.ofNullable(rule);
    }
}
Also used : AccountRule(org.apache.syncope.core.persistence.api.dao.AccountRule) AccountRuleConf(org.apache.syncope.common.lib.policy.AccountRuleConf) ImplementationLookup(org.apache.syncope.core.persistence.api.ImplementationLookup)

Example 2 with AccountRuleConf

use of org.apache.syncope.common.lib.policy.AccountRuleConf 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)

Aggregations

AccountRuleConf (org.apache.syncope.common.lib.policy.AccountRuleConf)2 ExtPage (org.apache.syncope.client.console.annotations.ExtPage)1 ExtWidget (org.apache.syncope.client.console.annotations.ExtWidget)1 BaseExtPage (org.apache.syncope.client.console.pages.BaseExtPage)1 BasePage (org.apache.syncope.client.console.pages.BasePage)1 SSOLoginFormPanel (org.apache.syncope.client.console.panels.SSOLoginFormPanel)1 AbstractBinaryPreviewer (org.apache.syncope.client.console.wicket.markup.html.form.preview.AbstractBinaryPreviewer)1 BaseExtWidget (org.apache.syncope.client.console.widgets.BaseExtWidget)1 PasswordRuleConf (org.apache.syncope.common.lib.policy.PasswordRuleConf)1 PullCorrelationRuleConf (org.apache.syncope.common.lib.policy.PullCorrelationRuleConf)1 ReportletConf (org.apache.syncope.common.lib.report.ReportletConf)1 ImplementationLookup (org.apache.syncope.core.persistence.api.ImplementationLookup)1 AccountRule (org.apache.syncope.core.persistence.api.dao.AccountRule)1 ClassPathScanningCandidateComponentProvider (org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider)1 AssignableTypeFilter (org.springframework.core.type.filter.AssignableTypeFilter)1