package br.com.centralit.citajax.framework;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 AjaxProcessLoad extends AjaxFacade {
public Collection execute(final String name) throws Exception {
Class<?> classe = null;
boolean bTentarLocalizarForm = true;
int iCodigoTentativa = 1;
while (bTentarLocalizarForm) {
try {
// System.out.println("Form action: " + Constantes.getValue("BEAN_LOCATION_FORM") + "." + CitAjaxUtil.convertePrimeiraLetra(name, "U"));
if (iCodigoTentativa == 1) {
classe = Class.forName(Constantes.getValue("BEAN_LOCATION_FORM") + "." + CitAjaxUtil.convertePrimeiraLetra(name, "U"));
} else {
if (Constantes.getValue("BEAN_LOCATION_FORM" + iCodigoTentativa) == null
|| Constantes.getValue("BEAN_LOCATION_FORM" + iCodigoTentativa).trim().equalsIgnoreCase("")) {
classe = null;
bTentarLocalizarForm = false;
break;
}
classe = Class.forName(Constantes.getValue("BEAN_LOCATION_FORM" + iCodigoTentativa) + "." + CitAjaxUtil.convertePrimeiraLetra(name, "U"));
}
if (classe != null) {
bTentarLocalizarForm = true;
break;
}
} catch (final ClassNotFoundException e) {
iCodigoTentativa++;
}
}
if (classe == null) {
return null;
}
final Object objeto = classe.newInstance();
// Identifica os metodos a serem tratados, existentes no form.
final Collection<Method> col1 = CitAjaxReflexao.findMethodByPalavra("onclick", objeto);
final Collection<Method> col2 = CitAjaxReflexao.findMethodByPalavra("onClick", objeto);
final Collection<Method> col3 = CitAjaxReflexao.findMethodByPalavra("onchange", objeto);
final Collection<Method> col4 = CitAjaxReflexao.findMethodByPalavra("onChange", objeto);
final Collection<Method> col5 = CitAjaxReflexao.findMethodByPalavra("onblur", objeto);
final Collection<Method> col6 = CitAjaxReflexao.findMethodByPalavra("onBlur", objeto);
final Collection<Method> colMetodosTratar = new ArrayList<>();
colMetodosTratar.addAll(col1);
colMetodosTratar.addAll(col2);
colMetodosTratar.addAll(col3);
colMetodosTratar.addAll(col4);
colMetodosTratar.addAll(col5);
colMetodosTratar.addAll(col6);
final DocumentHTML document = new DocumentHTML();
document.setMetodosTratamentoByMethods(colMetodosTratar);
// Verifica se existe o metodo load, caso exista entao executa.
final Method mtd = CitAjaxReflexao.findMethod("load", objeto);
// Passa os valores do request para o bean
// 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();
final ParserRequest parser = new ParserRequest();
final Map<String, Object> hashValores = parser.getFormFields(request);
final HttpServletRequest request = this.getRequest();
final HttpServletResponse response = this.getResponse();
/** 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);
document.setBean(objBean);
document.setValuesForm(hashValores);
/** Inclu�do por valdoilo.damasceno */
document.setLanguage(language);
document.setIgnoreNextMethod(false);
if (mtd != null) { // Pode ser que o form nao tenha o metodo load.
mtd.invoke(objeto, new Object[] {document, request, response});
}
return document.getAllScripts();
}
}