package com.github.aesteve.vertx.nubes.reflections.injectors.annot.impl; import com.github.aesteve.vertx.nubes.annotations.params.Param; import com.github.aesteve.vertx.nubes.exceptions.params.InvalidParamValueException; import com.github.aesteve.vertx.nubes.exceptions.params.MandatoryParamException; import com.github.aesteve.vertx.nubes.exceptions.params.WrongParameterException; import com.github.aesteve.vertx.nubes.exceptions.params.WrongParameterException.ParamType; import com.github.aesteve.vertx.nubes.reflections.adapters.ParameterAdapterRegistry; import com.github.aesteve.vertx.nubes.reflections.injectors.annot.AnnotatedParamInjector; import io.vertx.ext.web.RoutingContext; import org.apache.commons.lang3.StringUtils; public class ParamInjector implements AnnotatedParamInjector<Param> { private final ParameterAdapterRegistry adapters; public ParamInjector(ParameterAdapterRegistry adapters) { this.adapters = adapters; } @Override public Object resolve(RoutingContext context, Param annotation, String paramName, Class<?> resultClass) throws WrongParameterException { final String requestParamName = StringUtils.isEmpty(annotation.value()) ? paramName : annotation.value(); final String paramValue = context.request().getParam(requestParamName); if (paramValue == null && annotation.mandatory()) { throw new MandatoryParamException(ParamType.REQUEST_PARAM, requestParamName); } try { return adapters.adaptParam(paramValue, resultClass); } catch (IllegalArgumentException iae) { throw new InvalidParamValueException(ParamType.REQUEST_PARAM, requestParamName, paramValue, iae); } } }