Package com.softwaremill.common.cdi.autofactory.extension.parameter.converter

Source Code of com.softwaremill.common.cdi.autofactory.extension.parameter.converter.MixedConstructorConverter

package com.softwaremill.common.cdi.autofactory.extension.parameter.converter;

import com.softwaremill.common.cdi.autofactory.FactoryParameter;
import com.softwaremill.common.cdi.autofactory.extension.MethodParameterIndexer;
import com.softwaremill.common.cdi.autofactory.extension.QualifierAnnotationsFilter;
import com.softwaremill.common.cdi.autofactory.extension.parameter.BeanManagerParameterValue;
import com.softwaremill.common.cdi.autofactory.extension.parameter.FactoryParameterParameterValue;
import com.softwaremill.common.cdi.autofactory.extension.parameter.ParameterValue;

import javax.enterprise.inject.spi.AnnotatedConstructor;
import javax.enterprise.inject.spi.AnnotatedParameter;
import java.util.List;

/**
* @author Adam Warski (adam at warski dot org)
*/
public class MixedConstructorConverter implements ConstructorToParameterValuesConverter {
    private final QualifierAnnotationsFilter qualifierAnnotationsFilter;
    private final AnnotatedConstructor<?> constructor;
    private final MethodParameterIndexer methodParameterIndexer;

    public MixedConstructorConverter(QualifierAnnotationsFilter qualifierAnnotationsFilter,
                                                 AnnotatedConstructor<?> constructor,
                                                 MethodParameterIndexer methodParameterIndexer) {
        this.qualifierAnnotationsFilter = qualifierAnnotationsFilter;
        this.constructor = constructor;
        this.methodParameterIndexer = methodParameterIndexer;
    }

    public ParameterValue[] convert() {
        List<? extends AnnotatedParameter<?>> constructorParameters = constructor.getParameters();
        ParameterValue[] constructorParameterValues = new ParameterValue[constructorParameters.size()];

        for (int i = 0; i < constructorParameters.size(); i++) {
            AnnotatedParameter<?> parameter = constructorParameters.get(i);
            constructorParameterValues[i] = createParameterValue(parameter);
        }

        return constructorParameterValues;
    }

    private ParameterValue createParameterValue(AnnotatedParameter parameter) {
        if (parameter.getAnnotation(FactoryParameter.class) != null) {
            return new FactoryParameterParameterValue(methodParameterIndexer.getIndexForArgument(parameter.getBaseType()));
        } else {
            return new BeanManagerParameterValue(parameter.getBaseType(), qualifierAnnotationsFilter.filter(parameter.getAnnotations()));
        }
    }
}
TOP

Related Classes of com.softwaremill.common.cdi.autofactory.extension.parameter.converter.MixedConstructorConverter

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.