Skip to content

Instantly share code, notes, and snippets.

@carlosspohr
Created February 2, 2012 18:04
Show Gist options
  • Save carlosspohr/1724894 to your computer and use it in GitHub Desktop.
Save carlosspohr/1724894 to your computer and use it in GitHub Desktop.
Passando a instância dos facades lá no parameters provider do VRaptor
package br.com.swa.portais.commons;
import java.util.List;
import java.util.ResourceBundle;
import org.apache.log4j.Logger;
import swa.persistency.annotation.RMI;
import swa.persistency.manager.ObjectManager;
import br.com.caelum.vraptor.http.ParametersProvider;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.resource.ResourceMethod;
import br.com.caelum.vraptor.validator.Message;
import br.com.swa.portais.commons.components.IFacadeProvider;
@Component
public class FacadeParametersProvider implements ParametersProvider { //implements ParametersProvider
private static final Logger logger = Logger.getLogger(FacadeInstantiatorInterceptor.class);
private final ParametersProvider delegate;
private final IFacadeProvider facadeProvider;
public FacadeParametersProvider(ParametersProvider delegate, IFacadeProvider facadeProvider) {
this.delegate = delegate;
this.facadeProvider = facadeProvider;
}
@SuppressWarnings("unchecked")
@Override
public Object[] getParametersFor(ResourceMethod method, List<Message> errors, ResourceBundle bundle) {
Object[] parameters = delegate.getParametersFor(method, errors, bundle);
Class<?>[] types = method.getMethod().getParameterTypes();
for (int i = 0; i < types.length; i++)
{
if(types[i].isAnnotationPresent(RMI.class)){
logger.info("Configurando uma instância do manager para a classe [" + types[i].getSimpleName() + "]");
Class<? extends ObjectManager> clazz = (Class<? extends ObjectManager>) types[i];
ObjectManager manager = facadeProvider.getInstance(clazz);
parameters[i] = manager;
}
}
return parameters;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment