package br.com.centralit.citajax.framework;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citajax.reflexao.CitAjaxReflexao;
import br.com.centralit.citajax.util.CitAjaxUtil;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilI18N;
public class AjaxProcessEvent extends AjaxFacade {
private static final Logger LOGGER = Logger.getLogger(AjaxProcessEvent.class);
public Collection execute(final String formNameParm, final String name, String evento) throws Exception {
Class<?> classe = null;
boolean bTentarLocalizarForm = true;
String formName = formNameParm;
if (formName == null) {
formName = "";
}
formName = formName.replaceAll("\\.load", "");
int iCodigoTentativa = 1;
while (bTentarLocalizarForm) {
try {
if (iCodigoTentativa == 1) {
classe = Class.forName(Constantes.getValue("BEAN_LOCATION_FORM") + "." + CitAjaxUtil.convertePrimeiraLetra(formName, "U"));
} else {
if (StringUtils.isBlank(Constantes.getValue("BEAN_LOCATION_FORM" + iCodigoTentativa))) {
classe = null;
bTentarLocalizarForm = false;
break;
}
classe = Class.forName(Constantes.getValue("BEAN_LOCATION_FORM" + iCodigoTentativa) + "." + CitAjaxUtil.convertePrimeiraLetra(formName, "U"));
}
if (classe != null) {
bTentarLocalizarForm = true;
break;
}
} catch (final ClassNotFoundException | StringIndexOutOfBoundsException e) {
iCodigoTentativa++;
}
}
if (classe == null) {
LOGGER.warn("Form n�o encontrado: " + CitAjaxUtil.convertePrimeiraLetra(formName, "U"));
return null;
}
final Object objeto = classe.newInstance();
final HttpServletRequest request = this.getRequest();
final HttpServletResponse response = this.getResponse();
// Pega a classe Bean associada ao FormAction
final Method mtdGetBeanClass = CitAjaxReflexao.findMethod("getBeanClass", objeto);
final Object objClassBean = mtdGetBeanClass.invoke(objeto);
// Instancia o Bean
final Object objBean = ((Class<?>) objClassBean).newInstance();
// Passa os valores do request para o bean
final ParserRequest parser = new ParserRequest();
final Map<String, Object> hashValores = parser.getFormFields(request);
/** Inclu�do por valdoilo.damasceno */
String language = UtilI18N.PORTUGUESE_SIGLA;
if (request != null && request.getSession() != null && request.getSession().getAttribute("locale") != null) {
language = (String) request.getSession().getAttribute("locale");
}
parser.converteValoresRequestToBean(hashValores, objBean, language);
// Cria o document e associa o bean.
final DocumentHTML document = new DocumentHTML();
document.setBean(objBean);
document.setValuesForm(hashValores);
/** Inclu�do por valdoilo.damasceno */
document.setLanguage(language);
document.setIgnoreNextMethod(false);
String eventoOrig = evento;
Method mtd = null;
mtd = CitAjaxReflexao.findMethod(evento, objeto);
if (mtd == null) {
evento = evento.toLowerCase();
mtd = CitAjaxReflexao.findMethod(name + "_on" + evento, objeto);
}
eventoOrig = CitAjaxUtil.convertePrimeiraLetra(eventoOrig, "U");
if (mtd != null) {
mtd.invoke(objeto, new Object[] {document, request, response});
return document.getAllScripts();
} else {
mtd = CitAjaxReflexao.findMethod(name + "_on" + CitAjaxUtil.convertePrimeiraLetra(evento, "U"), objeto);
if (mtd != null) {
mtd.invoke(objeto, new Object[] {document, request, response});
return document.getAllScripts();
}
}
return null;
}
}