package com.bazaarvoice.auth.hmac.server; import static org.apache.commons.lang.Validate.notNull; import static org.glassfish.jersey.server.model.Parameter.Source.UNKNOWN; import javax.inject.Inject; import org.glassfish.hk2.api.Factory; import org.glassfish.hk2.api.ServiceLocator; import org.glassfish.jersey.server.internal.inject.AbstractValueFactoryProvider; import org.glassfish.jersey.server.internal.inject.MultivaluedParameterExtractorProvider; import org.glassfish.jersey.server.model.Parameter; /** * {@link org.glassfish.jersey.server.spi.internal.ValueFactoryProvider * ValueFactoryProvider} that makes a {@link PrincipalFactory} available to the * request if an {@link HmacAuth} annotation is present. * * @param <P> the type of principal */ public class PrincipalValueFactoryProvider<P> extends AbstractValueFactoryProvider { private final PrincipalFactory<? extends P> factory; @Inject public PrincipalValueFactoryProvider(final MultivaluedParameterExtractorProvider mpep, final ServiceLocator locator, final PrincipalFactory<P> factory) { super(mpep, locator, UNKNOWN); notNull(factory, "factory cannot be null"); this.factory = factory; } protected Factory<? extends P> createValueFactory(final Parameter parameter) { final HmacAuth auth = parameter.getAnnotation(HmacAuth.class); if (auth != null) { // TODO introduce type checking return getFactory(); } return null; } protected PrincipalFactory<? extends P> getFactory() { return factory; } }