package br.com.centralit.citajax.framework;
import java.util.List;
import javax.servlet.ServletContext;
import br.com.centralit.citajax.reflexao.CitAjaxReflexao;
import br.com.centralit.citajax.util.CitAjaxUtil;
import br.com.citframework.util.Constantes;
public class CITObjectProcess {
/**
* Processa o objeto passado como parametro e retorna uma string javascript
* @param path
* @return
* @throws Exception
*/
public String process(String path, ServletContext ctx) throws Exception{
String strAux = "";
String javaScriptObject = getObjectName(path);
if (javaScriptObject == null) return null;
Class classe = null;
try{
classe = Class.forName(Constantes.getValue("BEAN_LOCATION_PACKAGE") + "." + javaScriptObject);
}catch (Exception e) {
for(int i = 2; i < 100; i++){
if (Constantes.getValue("BEAN_LOCATION_PACKAGE" + i) == null || Constantes.getValue("BEAN_LOCATION_PACKAGE" + i).equalsIgnoreCase("")){
throw new Exception("CLASSE NAO ENCONTRADA: " + javaScriptObject);
}
try{
classe = Class.forName(Constantes.getValue("BEAN_LOCATION_PACKAGE" + i) + "." + javaScriptObject);
if (classe != null){ //Se conseguiu instanciar em algum dos pacotes corretamente, entao finaliza.
break;
}
}catch (Exception e2) {
}
}
}
if (classe != null){
Object objeto = classe.newInstance();
List listaGets = CitAjaxReflexao.findGets(objeto);
strAux = "function CIT_" + javaScriptObject + "(";
String strAux2 = "";
for(int i = 0; i < listaGets.size(); i++){
if (((String)listaGets.get(i)).equalsIgnoreCase("class")) continue;
Class r = CitAjaxReflexao.getReturnType(objeto,(String)listaGets.get(i));
if (!(r.getName().indexOf("Collection")>-1) && !(r.getName().indexOf("List")>-1)){
strAux2 += "\tthis." + CitAjaxUtil.convertePrimeiraLetra((String)listaGets.get(i), "L") + " = '';\n";
}
}
strAux2 += "\tthis.idControleCITFramework = null;\n";
strAux += "){\n";
strAux += strAux2;
strAux += "} ";
}
return strAux;
}
public String getObjectName(String path){
if (path.length() - 3 <= 0) return "";
String strResult = "";
for(int i = path.length() - 4; i >= 0; i--){
if (path.charAt(i) == '/'){
return strResult;
}else{
strResult = path.charAt(i) + strResult;
}
}
return strResult;
}
}