Package com.gwtplatform.dispatch.rpc.server.actionhandlervalidator

Source Code of com.gwtplatform.dispatch.rpc.server.actionhandlervalidator.ActionHandlerValidatorLinkerHelper$BeanProvider

/**
* Copyright 2011 ArcBees Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/

package com.gwtplatform.dispatch.rpc.server.actionhandlervalidator;

import java.util.Iterator;

import com.gwtplatform.dispatch.rpc.server.actionhandler.ActionHandler;
import com.gwtplatform.dispatch.rpc.server.actionhandlervalidator.ActionHandlerValidatorLinkerHelper.BeanProvider
        .BindingDescriptor;
import com.gwtplatform.dispatch.rpc.server.actionvalidator.ActionValidator;

public class ActionHandlerValidatorLinkerHelper {
    public interface BeanProvider {

        <B> B getInstance(Class<B> clazz);

        <B> Iterator<BindingDescriptor<B>> getBindings(Class<B> clazz);

        /**
         * @param <B>
         */
        public interface BindingDescriptor<B> {

            String getBeanName();

            B getBean();
        }
    }

    /**
     * BingingDescriptor implementation for the Guice/Spring. This allows us to obtain bindings from guice injector/or
     * from Spring application context
     */
    public static class CommonBindingDescriptor<B> implements BindingDescriptor<B> {

        private String name;
        private B bean;

        public CommonBindingDescriptor(B bean, String name) {
            this.name = name;
            this.bean = bean;
        }

        @Override
        public String getBeanName() {
            return name;
        }

        @Override
        public B getBean() {
            return bean;
        }
    }

    @SuppressWarnings({"unchecked", "rawtypes"})
    public static void linkValidators(BeanProvider beanProvider, ActionHandlerValidatorRegistry registry) {
        Iterator<BindingDescriptor<ActionHandlerValidatorMap>> bindings =
                beanProvider.getBindings(ActionHandlerValidatorMap.class);

        if (registry instanceof EagerActionHandlerValidatorRegistry) {
            EagerActionHandlerValidatorRegistry instanceRegistry = (EagerActionHandlerValidatorRegistry) registry;

            while (bindings.hasNext()) {
                BindingDescriptor<ActionHandlerValidatorMap> binding = bindings.next();

                Class<? extends ActionValidator> actionValidatorClass = binding.getBean()
                        .getActionHandlerValidatorClass().getActionValidatorClass();
                Class<? extends ActionHandler<?, ?>> handlerClass =
                        binding.getBean().getActionHandlerValidatorClass().getActionHandlerClass();

                ActionHandlerValidatorInstance actionHandlerValidatorInstance;
                ActionValidator actionValidator = instanceRegistry.findActionValidator(actionValidatorClass);

                if (actionValidator == null) {
                    actionValidator = beanProvider.getInstance(actionValidatorClass);
                }

                actionHandlerValidatorInstance = new ActionHandlerValidatorInstance(actionValidator,
                        beanProvider.getInstance(handlerClass));

                instanceRegistry.addActionHandlerValidator(binding.getBean().getActionClass(),
                        actionHandlerValidatorInstance);
            }
        } else if (registry instanceof LazyActionHandlerValidatorRegistry) {
            LazyActionHandlerValidatorRegistry classRegistry = (LazyActionHandlerValidatorRegistry) registry;

            while (bindings.hasNext()) {
                BindingDescriptor<ActionHandlerValidatorMap> binding = bindings.next();
                ActionHandlerValidatorMap map = binding.getBean();
                classRegistry.addActionHandlerValidatorClass(map.getActionClass(),
                        map.getActionHandlerValidatorClass());
            }
        }
    }
}
TOP

Related Classes of com.gwtplatform.dispatch.rpc.server.actionhandlervalidator.ActionHandlerValidatorLinkerHelper$BeanProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.