package br.com.centralit.citquestionario.util;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import br.com.centralit.citajax.reflexao.CitAjaxReflexao;
import br.com.centralit.citajax.util.CitAjaxUtil;
import br.com.centralit.citquestionario.bean.ExecutaSQLDTO;
import br.com.centralit.citquestionario.integracao.ExecutaSQLDao;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilStrings;
public class RenderDynamicForm {
private static HashMap hashDynaFormsLoad = null;
/**
* Renderiza o form dinamico.
* @param nameDynaForm
* @param type - XML ou DB
* @return
*/
public static String render(String nameDynaForm, String type, Integer idSolicitacaoServico, Integer idProfissinal){
if (hashDynaFormsLoad == null){
hashDynaFormsLoad = new HashMap();
}
if (type == null){
type = "XML";
}
DynamicFormInfoBean dynaForm = null;
if (type.equalsIgnoreCase("XML")){
dynaForm = renderByXML(nameDynaForm);
}
if (type.equalsIgnoreCase("DB")){
//Implementacao futura.
}
if (dynaForm != null){
if (dynaForm.getType().equalsIgnoreCase("TABLE_IN_COLS")){
return renderTableInCols(dynaForm, idSolicitacaoServico, idProfissinal);
}
if (dynaForm.getType().equalsIgnoreCase("NONE")){
return renderNone(dynaForm, idSolicitacaoServico, idProfissinal);
}
}
return "";
}
/**
* Imprime o form dinamico.
* @param nameDynaForm
* @param type - XML ou DB
* @return
*/
public static String print(String nameDynaForm, String type, Integer idSolicitacaoServico, Integer idProfissinal){
if (hashDynaFormsLoad == null){
hashDynaFormsLoad = new HashMap();
}
if (type == null){
type = "XML";
}
DynamicFormInfoBean dynaForm = null;
if (type.equalsIgnoreCase("XML")){
dynaForm = renderByXML(nameDynaForm);
}
if (type.equalsIgnoreCase("DB")){
//Implementacao futura.
}
if (dynaForm != null){
return print(dynaForm, idSolicitacaoServico, idProfissinal);
}
return "";
}
public static DynamicFormInfoBean getDynamicFormInfoBean(String nameDynaForm){
if (hashDynaFormsLoad == null){
return null;
}
if (hashDynaFormsLoad.containsKey(nameDynaForm)){
DynamicFormInfoBean dynaForm = (DynamicFormInfoBean)hashDynaFormsLoad.get(nameDynaForm);
if (dynaForm != null){
return dynaForm;
}
}
return null;
}
/**
* Renderiza pelo XML.
* @param nameDynaForm
* @return
*/
private static DynamicFormInfoBean renderByXML(String nameDynaForm){
if (hashDynaFormsLoad.containsKey(nameDynaForm)){
DynamicFormInfoBean dynaForm = (DynamicFormInfoBean)hashDynaFormsLoad.get(nameDynaForm);
if (dynaForm != null){
return dynaForm;
}
}
InputStream iisDynaForm = RenderDynamicForm.class.getClassLoader().getResourceAsStream(nameDynaForm + ".xml");
if (iisDynaForm == null){
try {
iisDynaForm = new FileInputStream(CitAjaxUtil.CAMINHO_REAL_APP + "/dynamicForms/" + nameDynaForm + ".xml");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
if (iisDynaForm == null){
iisDynaForm = ClassLoader.getSystemResourceAsStream(nameDynaForm + ".xml");
}
if (iisDynaForm == null){
iisDynaForm = ClassLoader.getSystemClassLoader().getResourceAsStream(nameDynaForm + ".xml");
}
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Document doc = null;
try {
DocumentBuilder builder = factory.newDocumentBuilder();
if (iisDynaForm == null){
throw new Exception("ARQUIVO DYNAMICFORM: " + nameDynaForm + ".xml NAO ENCONTRADO!!!!!!!!!");
}
doc = builder.parse(iisDynaForm);
DynamicFormInfoBean dFormBean = load(doc, nameDynaForm);
dFormBean.setClasseForm(prepareFormAssociate(dFormBean.getClazz()));
hashDynaFormsLoad.put(nameDynaForm, dFormBean); //Coloca no HASH para nao ser mais necessario realizar parser.
return dFormBean;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static DynamicFormInfoBean load(Document doc, String nameDynaForm){
if (doc == null) return null;
DynamicFormInfoBean dynamicFormInfoBean = null;
Node noRoot = doc.getChildNodes().item(0);
if(noRoot != null){
NamedNodeMap map = noRoot.getAttributes();
dynamicFormInfoBean = new DynamicFormInfoBean();
dynamicFormInfoBean.setName(nameDynaForm);
dynamicFormInfoBean.setType(getItemValue(map, "type"));
dynamicFormInfoBean.setClazz(getItemValue(map, "class"));
dynamicFormInfoBean.setDescription(getItemValue(map, "description"));
dynamicFormInfoBean = getElements(dynamicFormInfoBean, noRoot);
}
return dynamicFormInfoBean;
}
private static DynamicFormInfoBean getElements(DynamicFormInfoBean dynamicFormInfoBean, Node noItem){
if (noItem == null) return dynamicFormInfoBean;
Collection colElementos = new ArrayList();
Collection colJavaScripts = new ArrayList();
if (noItem.getChildNodes() != null){
for (int i = 0; i < noItem.getChildNodes().getLength(); i++){
Node noListagemItem = noItem.getChildNodes().item(i);
if(noListagemItem.getNodeName().equals("#text")) continue;
if (noListagemItem.getNodeName().equals("html")) { //HTML
DynamicFormElementBean dynamicFormElementBean = getElemento(dynamicFormInfoBean, noListagemItem);
if (dynamicFormElementBean != null){
colElementos.add(dynamicFormElementBean);
}
}
if (noListagemItem.getNodeName().equals("javascript")) { //JAVASCRIPT
colJavaScripts = getJavaScripts(dynamicFormInfoBean, noListagemItem);
}
if (noListagemItem.getNodeName().equals("column")) { //COLUNA DA TABELA
DynamicFormElementBean dynamicFormElementBean = getElemento(dynamicFormInfoBean, noListagemItem);
if (dynamicFormElementBean != null){
colElementos.add(dynamicFormElementBean);
}
}
}
}
dynamicFormInfoBean.setColElements(colElementos);
dynamicFormInfoBean.setColJavaScripts(colJavaScripts);
return dynamicFormInfoBean;
}
private static DynamicFormElementBean getElemento(DynamicFormInfoBean dynamicFormInfoBean, Node noListagemItem){
if (noListagemItem.getNodeName().equals("html")) { //HTML
DynamicFormElementBean dynamicFormElementBean = new DynamicFormElementBean();
dynamicFormElementBean.setType("html");
dynamicFormElementBean.setHtmlData(noListagemItem.getTextContent());
return dynamicFormElementBean;
}
if (noListagemItem.getNodeName().equals("column")) { //COLUNA DA TABELA
DynamicFormElementBean dynamicFormElementBean = new DynamicFormElementBean();
dynamicFormElementBean.setType("column");
NamedNodeMap map = noListagemItem.getAttributes();
dynamicFormElementBean.setTitle(getItemValue(map, "title"));
dynamicFormElementBean.setName(getItemValue(map, "name"));
dynamicFormElementBean.setColumnType(getItemValue(map, "type"));
dynamicFormElementBean.setFormat(getItemValue(map, "format"));
dynamicFormElementBean.setValid(getItemValue(map, "valid"));
dynamicFormElementBean.setOnkeydown(getItemValue(map, "onkeydown"));
dynamicFormElementBean.setOnkeypress(getItemValue(map, "onkeypress"));
dynamicFormElementBean.setOnkeyup(getItemValue(map, "onkeyup"));
dynamicFormElementBean.setOnfocus(getItemValue(map, "onfocus"));
dynamicFormElementBean.setOnblur(getItemValue(map, "onblur"));
dynamicFormElementBean.setOnclick(getItemValue(map, "onclick"));
if (dynamicFormElementBean.getColumnType() != null){
//RADIO, CHECKBOX ou SELECT
if (dynamicFormElementBean.getColumnType().equalsIgnoreCase("radio") ||
dynamicFormElementBean.getColumnType().equalsIgnoreCase("checkbox") ||
dynamicFormElementBean.getColumnType().equalsIgnoreCase("select")){
String nomeItem = dynamicFormElementBean.getColumnType();
Collection colSubItens = new ArrayList();
for (int c = 0; c < noListagemItem.getChildNodes().getLength(); c++){
Node noSubItem = noListagemItem.getChildNodes().item(c);
if(noSubItem.getNodeName().equals("#text")) continue;
if (noSubItem.getNodeName().equals("optionSQL")) {
ExecutaSQLDao executaSqlDao = new ExecutaSQLDao();
try {
Collection col = executaSqlDao.executaSQL(noSubItem.getTextContent());
if (col != null){
for(Iterator it = col.iterator(); it.hasNext();){
ExecutaSQLDTO executaSQLDTO = (ExecutaSQLDTO)it.next();
DynamicFormElementBean dynamicFormSubElementBean = new DynamicFormElementBean();
dynamicFormSubElementBean.setType("option");
dynamicFormSubElementBean.setValue("" + executaSQLDTO.getValue());
dynamicFormSubElementBean.setDescription(executaSQLDTO.getDescription());
colSubItens.add(dynamicFormSubElementBean);
}
}
} catch (DOMException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
if (noSubItem.getNodeName().equals(nomeItem) || noSubItem.getNodeName().equals("option")) {
DynamicFormElementBean dynamicFormSubElementBean = new DynamicFormElementBean();
NamedNodeMap mapSubItem = noSubItem.getAttributes();
dynamicFormSubElementBean.setType("option");
dynamicFormSubElementBean.setValue(getItemValue(mapSubItem, "value"));
dynamicFormSubElementBean.setDescription(getItemValue(mapSubItem, "description"));
colSubItens.add(dynamicFormSubElementBean);
}
}
dynamicFormElementBean.setColSubElements(colSubItens);
}
//TEXT
if (dynamicFormElementBean.getColumnType().equalsIgnoreCase("text")){
dynamicFormElementBean.setSize(getItemValue(map, "size"));
dynamicFormElementBean.setMaxlength(getItemValue(map, "maxlength"));
}
//TEXTAREA
if (dynamicFormElementBean.getColumnType().equalsIgnoreCase("textarea")){
dynamicFormElementBean.setRows(getItemValue(map, "rows"));
dynamicFormElementBean.setCols(getItemValue(map, "cols"));
}
//AGRUPADOR
if (dynamicFormElementBean.getColumnType().equalsIgnoreCase("group")){
String nomeItem = dynamicFormElementBean.getColumnType();
Collection colSubItens = new ArrayList();
for (int c = 0; c < noListagemItem.getChildNodes().getLength(); c++){
Node noSubItem = noListagemItem.getChildNodes().item(c);
if(noSubItem.getNodeName().equals("#text")) continue;
DynamicFormElementBean dynamicFormSubElementBean = getElemento(dynamicFormInfoBean, noSubItem);
colSubItens.add(dynamicFormSubElementBean);
}
dynamicFormElementBean.setColSubElements(colSubItens);
}
}
return dynamicFormElementBean;
}
return null;
}
private static Collection getJavaScripts(DynamicFormInfoBean dynamicFormInfoBean, Node noItem){
if (noItem == null) return null;
Collection colJavaScripts = new ArrayList();
if (noItem.getChildNodes() != null){
for (int i = 0; i < noItem.getChildNodes().getLength(); i++){
Node noListagemItem = noItem.getChildNodes().item(i);
if(noListagemItem.getNodeName().equals("#text")) continue;
DynamicFormJavascriptBean dynamicFormJavascriptBean = new DynamicFormJavascriptBean();
dynamicFormJavascriptBean.setFunctionName(noListagemItem.getNodeName());
dynamicFormJavascriptBean.setCorpo(noListagemItem.getTextContent());
colJavaScripts.add(dynamicFormJavascriptBean);
}
}
return colJavaScripts;
}
private static String getItemValue(NamedNodeMap map, String nomeItem){
Node no = map.getNamedItem(nomeItem);
if (no == null){
return null;
}
String strValue = no.getNodeValue();
if (strValue != null){
strValue = strValue.replaceAll("\\#br\\#", "<br/>");
}
return strValue;
}
/**
* Renderiza no formato que vier de dentro do Ajaxform que trata o assunto
* @param dynamicFormInfoBean
* @return
*/
private static String renderNone(DynamicFormInfoBean dynamicFormInfoBean, Integer idSolicitacaoServico, Integer idProfissinal){
if (dynamicFormInfoBean == null){
return "";
}
String strBuffer = "";
if (dynamicFormInfoBean.getClasseForm() != null){
Object objeto = null;
try {
objeto = dynamicFormInfoBean.getClasseForm().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (objeto != null){
Method mtd = null;
//--------------------- beforeRestoreDynamicForm
mtd = CitAjaxReflexao.findMethod("beforeRestoreDynamicForm", objeto);
if (mtd == null){
mtd = CitAjaxReflexao.findMethod(dynamicFormInfoBean.getClazz() + "_onBeforeRestoreDynamicForm", objeto);
}
if (mtd != null){
try {
String strRetorno = (String)mtd.invoke(objeto, new Object[] {dynamicFormInfoBean.getName(), idSolicitacaoServico, idProfissinal} );
strBuffer += strRetorno;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
if (dynamicFormInfoBean.getClasseForm() != null){
Object objeto = null;
try {
objeto = dynamicFormInfoBean.getClasseForm().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (objeto != null){
Method mtd = null;
//--------------------- restoreDynamicForm
mtd = CitAjaxReflexao.findMethod("restoreDynamicForm", objeto);
if (mtd == null){
mtd = CitAjaxReflexao.findMethod(dynamicFormInfoBean.getClazz() + "_onRestoreDynamicForm", objeto);
}
if (mtd != null){
try {
String strRetorno = (String)mtd.invoke(objeto, new Object[] {dynamicFormInfoBean.getName(), idSolicitacaoServico, idProfissinal} );
strBuffer += strRetorno;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
if (dynamicFormInfoBean.getClasseForm() != null){
Object objeto = null;
try {
objeto = dynamicFormInfoBean.getClasseForm().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (objeto != null){
Method mtd = null;
//--------------------- afterRestoreDynamicForm
mtd = CitAjaxReflexao.findMethod("afterRestoreDynamicForm", objeto);
if (mtd == null){
mtd = CitAjaxReflexao.findMethod(dynamicFormInfoBean.getClazz() + "_onAfterRestoreDynamicForm", objeto);
}
if (mtd != null){
try {
String strRetorno = (String)mtd.invoke(objeto, new Object[] {dynamicFormInfoBean.getName(), idSolicitacaoServico, idProfissinal} );
strBuffer += strRetorno;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
for(Iterator it = dynamicFormInfoBean.getColElements().iterator(); it.hasNext();){
DynamicFormElementBean dynamicFormElementBean = (DynamicFormElementBean)it.next();
if (dynamicFormElementBean.getType().equalsIgnoreCase("html")){ //HTML
strBuffer += dynamicFormElementBean.getHtmlData();
}
}
return strBuffer;
}
/**
* Renderiza em forma de tabela em colunas
* @param dynamicFormInfoBean
* @return
*/
private static String renderTableInCols(DynamicFormInfoBean dynamicFormInfoBean, Integer idSolicitacaoServico, Integer idProfissinal){
if (dynamicFormInfoBean == null){
return "";
}
String strBuffer = "";
strBuffer += "<script>\n";
strBuffer += "var " + dynamicFormInfoBean.getName() + "_ULTIMO_SEQUENCIAL = 0;\n";
if(dynamicFormInfoBean.getColJavaScripts() != null){
for(Iterator it = dynamicFormInfoBean.getColJavaScripts().iterator(); it.hasNext();){
DynamicFormJavascriptBean dynamicFormJavascriptBean = (DynamicFormJavascriptBean)it.next();
if (dynamicFormJavascriptBean.getFunctionName().equalsIgnoreCase("addItem_CallBack")){
strBuffer += "function " + dynamicFormInfoBean.getName() + "_" + dynamicFormJavascriptBean.getFunctionName() + "(nomeFormDinamico, iQtdeColunas, classe, textoResposta){\n";
}else{
strBuffer += "function " + dynamicFormInfoBean.getName() + "_" + dynamicFormJavascriptBean.getFunctionName() + "(){\n";
}
strBuffer += dynamicFormJavascriptBean.getCorpo() + "\n";
strBuffer += "}\n";
}
}
strBuffer += "</script>\n";
strBuffer += "<fieldset><legend><b>" + dynamicFormInfoBean.getDescription() + "</b></legend>";
strBuffer += "<div style='display:none' id='div" + dynamicFormInfoBean.getName() + "_Control'>";
strBuffer += "<input type='hidden' name='DYNAFORM_PRESENTE' value='" + dynamicFormInfoBean.getName() + "'/>";
strBuffer += "<input type='hidden' name='" + dynamicFormInfoBean.getName() + "_ULTIMO_SEQUENCIAL_HIDDEN' value='0'/>";
strBuffer += "</div>";
if(dynamicFormInfoBean.getColElements() != null){
Integer i = new Integer(0);
int qtdeColunas = dynamicFormInfoBean.getColElements().size();
for(Iterator it = dynamicFormInfoBean.getColElements().iterator(); it.hasNext();){
DynamicFormElementBean dynamicFormElementBean = (DynamicFormElementBean)it.next();
if (dynamicFormElementBean.getType().equalsIgnoreCase("column")){ //COLUNA
i = new Integer(i.intValue() + 1);
strBuffer += "<div style='display:none' id='div" + dynamicFormInfoBean.getName() + "Field_" + i + "'>";
strBuffer += renderItem(dynamicFormInfoBean, dynamicFormElementBean, idSolicitacaoServico, idProfissinal, i);
strBuffer += "</div>\n";
}
}
strBuffer += "<table id='tblAux_" + dynamicFormInfoBean.getName() + "' width='100%'>";
strBuffer += "<tr>";
strBuffer += "<td>";
strBuffer += "<input type='button' name='btnAdd" + dynamicFormInfoBean.getName() + "' value='Adicionar' onclick='adicionarRespostaTabelaFormDinamico(\"" + dynamicFormInfoBean.getName() + "\", " + qtdeColunas + ", \"" + dynamicFormInfoBean.getClazz() + "\", " + dynamicFormInfoBean.getName() + "_addItem_CallBack" + ")'/>";
strBuffer += "</td>";
strBuffer += "</tr>";
strBuffer += "</table>\n";
if (dynamicFormInfoBean.getClasseForm() != null){
Object objeto = null;
try {
objeto = dynamicFormInfoBean.getClasseForm().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (objeto != null){
Method mtd = null;
//--------------------- beforeRestoreDynamicForm
mtd = CitAjaxReflexao.findMethod("beforeRestoreDynamicForm", objeto);
if (mtd == null){
mtd = CitAjaxReflexao.findMethod(dynamicFormInfoBean.getClazz() + "_onBeforeRestoreDynamicForm", objeto);
}
if (mtd != null){
try {
String strRetorno = (String)mtd.invoke(objeto, new Object[] {dynamicFormInfoBean.getName(), idSolicitacaoServico, idProfissinal} );
strBuffer += strRetorno;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
strBuffer += "<table id='tbl_" + dynamicFormInfoBean.getName() + "' width='100%' border = '1' cellpadding='0' cellspacing='0'>";
strBuffer += "<tr>";
strBuffer += "<td bgcolor='#20b2aa'> </td>";
for(Iterator it = dynamicFormInfoBean.getColElements().iterator(); it.hasNext();){
DynamicFormElementBean dynamicFormElementBean = (DynamicFormElementBean)it.next();
if (dynamicFormElementBean.getType().equalsIgnoreCase("column")){ //COLUNA
strBuffer += "<td bgcolor='#20b2aa'>" + dynamicFormElementBean.getTitle() + "</td>";
}
}
strBuffer += "</tr>";
if (dynamicFormInfoBean.getClasseForm() != null){
Object objeto = null;
try {
objeto = dynamicFormInfoBean.getClasseForm().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (objeto != null){
Method mtd = null;
//--------------------- restoreDynamicForm
mtd = CitAjaxReflexao.findMethod("restoreDynamicForm", objeto);
if (mtd == null){
mtd = CitAjaxReflexao.findMethod(dynamicFormInfoBean.getClazz() + "_onRestoreDynamicForm", objeto);
}
if (mtd != null){
try {
String strRetorno = (String)mtd.invoke(objeto, new Object[] {dynamicFormInfoBean.getName(), idSolicitacaoServico, idProfissinal} );
strBuffer += strRetorno;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
strBuffer += "</table>";
if (dynamicFormInfoBean.getClasseForm() != null){
Object objeto = null;
try {
objeto = dynamicFormInfoBean.getClasseForm().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (objeto != null){
Method mtd = null;
//--------------------- afterRestoreDynamicForm
mtd = CitAjaxReflexao.findMethod("afterRestoreDynamicForm", objeto);
if (mtd == null){
mtd = CitAjaxReflexao.findMethod(dynamicFormInfoBean.getClazz() + "_onAfterRestoreDynamicForm", objeto);
}
if (mtd != null){
try {
String strRetorno = (String)mtd.invoke(objeto, new Object[] {dynamicFormInfoBean.getName(), idSolicitacaoServico, idProfissinal} );
strBuffer += strRetorno;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
for(Iterator it = dynamicFormInfoBean.getColElements().iterator(); it.hasNext();){
DynamicFormElementBean dynamicFormElementBean = (DynamicFormElementBean)it.next();
if (dynamicFormElementBean.getType().equalsIgnoreCase("html")){ //HTML
strBuffer += dynamicFormElementBean.getHtmlData();
}
}
}
strBuffer += "</fieldset>";
return strBuffer;
}
private static String renderItem(DynamicFormInfoBean dynamicFormInfoBean, DynamicFormElementBean dynamicFormElementBean, Integer idSolicitacaoServico, Integer idProfissinal, Integer i){
String strBuffer = "";
String valid = dynamicFormElementBean.getValid();
String format = dynamicFormElementBean.getFormat();
String styleClass = "";
String metodos = "";
valid = UtilStrings.nullToVazio(valid);
format = UtilStrings.nullToVazio(format);
if (!valid.equalsIgnoreCase("") || !format.equalsIgnoreCase("")){
styleClass += "#class#='";
if (valid != null && !valid.equalsIgnoreCase("")){
styleClass += "Valid[" + valid + "] ";
}
if (format != null && !format.equalsIgnoreCase("")){
styleClass += "Format[" + format + "] ";
}
styleClass += "' ";
}
if (dynamicFormElementBean.getOnblur() != null && !dynamicFormElementBean.getOnblur().equalsIgnoreCase("")){
metodos += " onblur=\"" + dynamicFormElementBean.getOnblur() + "\" ";
}
if (dynamicFormElementBean.getOnclick() != null && !dynamicFormElementBean.getOnclick().equalsIgnoreCase("")){
metodos += " onclick=\"" + dynamicFormElementBean.getOnclick() + "\" ";
}
if (dynamicFormElementBean.getOnfocus() != null && !dynamicFormElementBean.getOnfocus().equalsIgnoreCase("")){
metodos += " onfocus=\"" + dynamicFormElementBean.getOnfocus() + "\" ";
}
if (dynamicFormElementBean.getOnkeydown() != null && !dynamicFormElementBean.getOnkeydown().equalsIgnoreCase("")){
metodos += " onkeydown=\"" + dynamicFormElementBean.getOnkeydown() + "\" ";
}
if (dynamicFormElementBean.getOnkeypress() != null && !dynamicFormElementBean.getOnkeypress().equalsIgnoreCase("")){
metodos += " onkeypress=\"" + dynamicFormElementBean.getOnkeypress() + "\" ";
}
if (dynamicFormElementBean.getOnkeyup() != null && !dynamicFormElementBean.getOnkeyup().equalsIgnoreCase("")){
metodos += " onkeyup=\"" + dynamicFormElementBean.getOnkeyup() + "\" ";
}
if (dynamicFormElementBean.getOnchange() != null && !dynamicFormElementBean.getOnchange().equalsIgnoreCase("")){
metodos += " onchange=\"" + dynamicFormElementBean.getOnchange() + "\" ";
}
if (dynamicFormElementBean.getColumnType().equalsIgnoreCase("text")){
String size = dynamicFormElementBean.getSize();
String maxlength = dynamicFormElementBean.getMaxlength();
if (size == null){
size = "20";
}
if (maxlength == null){
maxlength = "255";
}
strBuffer += "<input type='text' name='CAMPOFORMDYN_" + dynamicFormInfoBean.getName() + "." + dynamicFormElementBean.getName() + ".SUFIXO' size='" + size + "' maxlength='" + maxlength + "' " + styleClass + " " + metodos + "/>";
}
if (dynamicFormElementBean.getColumnType().equalsIgnoreCase("hidden")){
strBuffer += "<input type='hidden' name='CAMPOFORMDYN_" + dynamicFormInfoBean.getName() + "." + dynamicFormElementBean.getName() + ".SUFIXO' " + styleClass + " " + metodos + "/>";
}
if (dynamicFormElementBean.getColumnType().equalsIgnoreCase("textarea")){
String rows = dynamicFormElementBean.getRows();
String cols = dynamicFormElementBean.getCols();
if (rows == null){
rows = "5";
}
if (cols == null){
cols = "70";
}
strBuffer += "<textarea name='CAMPOFORMDYN_" + dynamicFormInfoBean.getName() + "." + dynamicFormElementBean.getName() + ".SUFIXO' cols='" + cols + "' rows='" + rows + "' " + styleClass + " " + metodos + "></textarea>";
}
if (dynamicFormElementBean.getColumnType().equalsIgnoreCase("group")){
if (dynamicFormElementBean.getColSubElements() != null){
for(Iterator itSub = dynamicFormElementBean.getColSubElements().iterator(); itSub.hasNext();){
DynamicFormElementBean dynamicFormSubElementBean = (DynamicFormElementBean)itSub.next();
strBuffer += renderItem(dynamicFormInfoBean, dynamicFormSubElementBean, idSolicitacaoServico, idProfissinal, i);
}
}
}
if (dynamicFormElementBean.getColumnType().equalsIgnoreCase("radio")){
if (dynamicFormElementBean.getColSubElements() != null){
for(Iterator itSub = dynamicFormElementBean.getColSubElements().iterator(); itSub.hasNext();){
DynamicFormElementBean dynamicFormSubElementBean = (DynamicFormElementBean)itSub.next();
strBuffer += "<input type='radio' name='CAMPOFORMDYN_" + dynamicFormInfoBean.getName() + "." + dynamicFormElementBean.getName() + ".SUFIXO' " + styleClass + " value='" + dynamicFormSubElementBean.getValue() + "' " + metodos + "/>" + dynamicFormSubElementBean.getDescription();
}
}
}
if (dynamicFormElementBean.getColumnType().equalsIgnoreCase("checkbox")){
if (dynamicFormElementBean.getColSubElements() != null){
for(Iterator itSub = dynamicFormElementBean.getColSubElements().iterator(); itSub.hasNext();){
DynamicFormElementBean dynamicFormSubElementBean = (DynamicFormElementBean)itSub.next();
strBuffer += "<input type='checkbox' name='CAMPOFORMDYN_" + dynamicFormInfoBean.getName() + "." + dynamicFormElementBean.getName() + ".SUFIXO' " + styleClass + " value='" + dynamicFormSubElementBean.getValue() + "' " + metodos + "/>" + dynamicFormSubElementBean.getDescription();
}
}
}
if (dynamicFormElementBean.getColumnType().equalsIgnoreCase("select")){
if (dynamicFormElementBean.getColSubElements() != null){
String size = dynamicFormElementBean.getSize();
if (size == null){
size = "1";
}
strBuffer += "<select name='CAMPOFORMDYN_" + dynamicFormInfoBean.getName() + "." + dynamicFormElementBean.getName() + ".SUFIXO' size='" + size + "' " + styleClass + " " + metodos + ">";
strBuffer += "<option value=''>-- Selecione --</option>";
for(Iterator itSub = dynamicFormElementBean.getColSubElements().iterator(); itSub.hasNext();){
DynamicFormElementBean dynamicFormSubElementBean = (DynamicFormElementBean)itSub.next();
strBuffer += "<option value='" + dynamicFormSubElementBean.getValue() + "'>" + dynamicFormSubElementBean.getDescription() + "</option>";
}
strBuffer += "</select>";
}
}
return strBuffer;
}
private static Class prepareFormAssociate(String formName){
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(formName, "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(formName, "U"));
}
if (classe != null){
bTentarLocalizarForm = true;
break;
}
} catch (ClassNotFoundException e) {
iCodigoTentativa++;
//throw new Exception("Form n�o encontrado: " + Util.convertePrimeiraLetra(name, "U"));
}
}
if (classe == null){
System.out.println("CITQUESTIONARIO -> DYNAMIC FORM -> Form n�o encontrado: " + CitAjaxUtil.convertePrimeiraLetra(formName, "U"));
return null;
}
return classe;
}
/**
* Imprime no formato que vier de dentro do Ajaxform que trata o assunto
* @param dynamicFormInfoBean
* @return
*/
private static String print(DynamicFormInfoBean dynamicFormInfoBean, Integer idSolicitacaoServico, Integer idProfissinal){
if (dynamicFormInfoBean == null){
return "";
}
String strBuffer = "";
if (dynamicFormInfoBean.getClasseForm() != null){
Object objeto = null;
try {
objeto = dynamicFormInfoBean.getClasseForm().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (objeto != null){
Method mtd = null;
//--------------------- beforeRestoreDynamicForm
mtd = CitAjaxReflexao.findMethod("beforePrintDynamicForm", objeto);
if (mtd == null){
mtd = CitAjaxReflexao.findMethod(dynamicFormInfoBean.getClazz() + "_onBeforePrintDynamicForm", objeto);
}
if (mtd != null){
try {
String strRetorno = (String)mtd.invoke(objeto, new Object[] {dynamicFormInfoBean.getName(), idSolicitacaoServico, idProfissinal} );
strBuffer += strRetorno;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
if (dynamicFormInfoBean.getClasseForm() != null){
Object objeto = null;
try {
objeto = dynamicFormInfoBean.getClasseForm().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (objeto != null){
Method mtd = null;
//--------------------- restoreDynamicForm
mtd = CitAjaxReflexao.findMethod("printDynamicForm", objeto);
if (mtd == null){
mtd = CitAjaxReflexao.findMethod(dynamicFormInfoBean.getClazz() + "_onPrintDynamicForm", objeto);
}
if (mtd != null){
try {
String strRetorno = (String)mtd.invoke(objeto, new Object[] {dynamicFormInfoBean.getName(), idSolicitacaoServico, idProfissinal} );
strBuffer += strRetorno;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
if (dynamicFormInfoBean.getClasseForm() != null){
Object objeto = null;
try {
objeto = dynamicFormInfoBean.getClasseForm().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (objeto != null){
Method mtd = null;
//--------------------- afterRestoreDynamicForm
mtd = CitAjaxReflexao.findMethod("afterPrintDynamicForm", objeto);
if (mtd == null){
mtd = CitAjaxReflexao.findMethod(dynamicFormInfoBean.getClazz() + "_onAfterPrintDynamicForm", objeto);
}
if (mtd != null){
try {
String strRetorno = (String)mtd.invoke(objeto, new Object[] {dynamicFormInfoBean.getName(), idSolicitacaoServico, idProfissinal} );
strBuffer += strRetorno;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
for(Iterator it = dynamicFormInfoBean.getColElements().iterator(); it.hasNext();){
DynamicFormElementBean dynamicFormElementBean = (DynamicFormElementBean)it.next();
if (dynamicFormElementBean.getType().equalsIgnoreCase("htmlPrint")){ //HTML
strBuffer += dynamicFormElementBean.getHtmlData();
}
}
return strBuffer;
}
}