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

com.adobe.aemds.guide.service.internal.GuideCaptchaValidatorProvider Maven / Gradle / Ivy

/*************************************************************************
 *
 * ADOBE CONFIDENTIAL
 * __________________
 *
 *  Copyright 2016 Adobe Systems Incorporated
 *  All Rights Reserved.
 *
 * NOTICE:  All information contained herein is, and remains
 * the property of Adobe Systems Incorporated and its suppliers,
 * if any.  The intellectual and technical concepts contained
 * herein are proprietary to Adobe Systems Incorporated and its
 * suppliers and may be covered by U.S. and Foreign Patents,
 * patents in process, and are protected by trade secret or copyright law.
 * Dissemination of this information or reproduction of this material
 * is strictly forbidden unless prior written permission is obtained
 * from Adobe Systems Incorporated.
 **************************************************************************/

package com.adobe.aemds.guide.service.internal;

import com.adobe.aemds.guide.service.GuideCaptchaValidator;
import com.adobe.aemds.guide.service.GuideException;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.sling.commons.osgi.ServiceUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListMap;

/**
 * @pad.exclude Exclude from Published API.
 * @class GuideCaptchaValidatorProvider
 * Service to identify captcha validator and provide GuideCaptchaValidator Impl class object.
 */

@Component(immediate = true, metatype = false, label = "Adaptive Form Captcha validator provider Service", description = "Service to provide GuideCaptchaValidator impl class object.")
@Service(GuideCaptchaValidatorProvider.class)
public class GuideCaptchaValidatorProvider {

    private static final Logger logger = LoggerFactory.getLogger(GuideCaptchaValidatorProvider.class);

    @Reference(referenceInterface = GuideCaptchaValidator.class,
            policy = ReferencePolicy.DYNAMIC,
            cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
            bind = "bindCaptchaValidatorProviderMap",
            unbind = "unbindCaptchaValidatorProviderMap")

    private Map,GuideCaptchaValidator>> captchaValidatorProviderMap = new ConcurrentHashMap,GuideCaptchaValidator>>();

    /**
     * @pad.exclude
     */
    protected void bindCaptchaValidatorProviderMap(final GuideCaptchaValidator validator, Map config){
        String validatorName = validator.getCaptchaValidatorName();

        if (captchaValidatorProviderMap.containsKey(validatorName)) {
            ConcurrentSkipListMap, GuideCaptchaValidator> innerMap = (ConcurrentSkipListMap, GuideCaptchaValidator>) captchaValidatorProviderMap.get(validatorName);
            innerMap.put( ServiceUtil.getComparableForServiceRanking(config), validator);
        } else {
            Map,GuideCaptchaValidator> innerMap = new ConcurrentSkipListMap, GuideCaptchaValidator>();
            innerMap.put( ServiceUtil.getComparableForServiceRanking(config), validator);
            captchaValidatorProviderMap.put(validatorName, innerMap);
        }
    }

    /**
     * @pad.exclude
     */
    protected void unbindCaptchaValidatorProviderMap(final GuideCaptchaValidator validator, Map config) {
        String validatorName = validator.getCaptchaValidatorName();
        if (captchaValidatorProviderMap.containsKey(validatorName)) {
            ConcurrentSkipListMap, GuideCaptchaValidator> innerMap = (ConcurrentSkipListMap, GuideCaptchaValidator>) captchaValidatorProviderMap.get(validatorName);
            innerMap.remove( ServiceUtil.getComparableForServiceRanking(config) );
        }
    }

    /**
     * @pad.exclude
     */
    public GuideCaptchaValidator getGuideCaptchaValidator(String validatorName) throws GuideException {
        if (StringUtils.isEmpty(validatorName)) {
            throw new GuideException("captcha validator name is required");
        }
        GuideCaptchaValidator captchaValidator = null;
        if (!StringUtils.isEmpty(validatorName)) {
            ConcurrentSkipListMap, GuideCaptchaValidator> innerMap = (ConcurrentSkipListMap, GuideCaptchaValidator>) captchaValidatorProviderMap.get(validatorName);

            if(innerMap != null && innerMap.firstEntry() != null){
                captchaValidator = innerMap.firstEntry().getValue();
            }else {
                logger.error("Captcha validator impl object not found.");
            }
        } else {
            logger.error("Captcha service provider name is required to validate the captcha");
        }
        if (captchaValidator == null) {
            throw new GuideException("No validator is available for given validator name : " + validatorName);
        }
        return captchaValidator;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy