package com.fitbank.manual; import com.FitBank.xml.Formas.DatoHttp; import com.FitBank.xml.Formas.Datos; import com.FitBank.xml.Formas.Formulario; import com.FitBank.xml.Formas.Oculto; import com.FitBank.xml.Formas.Origen; import com.FitBank.xml.Parser.ExcepcionParser; import com.FitBank.xml.Parser.ParserFormulario; import com.fitbank.schemautils.Field; import com.fitbank.schemautils.Schema; import com.fitbank.schemautils.Table; import com.fitbank.util.Debug; import com.fitbank.util.ListaArchivos; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import javax.swing.JFrame; import net.sf.json.JSONObject; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; /** * Genera el manual en texto de las transacciones * * @author FitBank CI */ public class GenerateManual { public static void generate(JFrame frame, File base, String dir, String appURL, String appUser, String appPassword) { Collection archivos = ListaArchivos.cargarDirectorio(new File(dir), "xml"); for (File archivo : archivos) { Debug.info("Procesando: " + archivo.getName()); try { Formulario formulario = ParserFormulario.parseString(IOUtils. toString(new FileInputStream(archivo), "ISO-8859-1")); StringBuffer sbTXT = new StringBuffer(); Map namesJS = new HashMap(); getFields(getNames(formulario), sbTXT, namesJS); String file = formulario.getSubs() + formulario.getTran(); FileWriter fosDesc = new FileWriter(new File(base, file + ".fields.txt")); fosDesc.append(sbTXT.toString()); fosDesc.close(); StringBuffer js = new StringBuffer(); js.append("mostrarCampos("); js.append(JSONObject.fromObject(namesJS).toString()); js.append(");"); int tabs; try { tabs = Integer.parseInt(formulario.getFila(formulario.size() - 1).getTab()); } catch (Exception e) { tabs = 1; } CaptureDialog sc = new CaptureDialog(frame, true, appURL, appUser, appPassword); sc.capture(base, formulario.getSubs(), formulario.getTran(), tabs, js.toString()); } catch (IOException e) { Debug.error(e); } catch (ExcepcionParser e) { Debug.error(e); } } } private static void getFields(Map names, StringBuffer campos, Map namesJS) throws NumberFormatException { int n = 0; StringBuffer ocultos = new StringBuffer(); for (Datos datos : names.values()) { String codigo = datos.getOrigenManual(); String descripcion = ""; if (StringUtils.isBlank(codigo)) { codigo = datos.getOrigen().getCodigo(); } else if (!StringUtils.isNumeric(codigo) && StringUtils. isAlphanumericSpace(codigo)) { descripcion = codigo; codigo = ""; } String tipo = getTipo(datos.getOrigen().getTipo()); if (StringUtils.isNumeric(codigo) && codigo.length() > 3) { int t = Integer.parseInt( codigo.substring(0, codigo.length() - 3)); int c = Integer.parseInt(codigo.substring(codigo.length() - 3)); Table table = Schema.get().findTable(t); if (table != null) { Field field = table.findField(c); if (field != null) { descripcion = field.getDescription(); } else { Debug.error("No se encontrĂ³ el campo " + c + " del origen " + codigo); } } else { Debug.error("No se encontrĂ³ la tabla " + t + " del origen " + codigo); } } if (datos instanceof Oculto || datos.getTipoDato(). equals(DatoHttp.TIPO_OCULTO) || !datos.getModificable(). equals(DatoHttp.MODIFICABLE_MODIFICABLE) || !dentroLimites( datos)) { ocultos.append("[-] " + datos.getName() + " " + tipo + descripcion + "\n"); } else { campos.append("[" + (++n) + "] " + tipo + descripcion + "\n"); namesJS.put(datos.getName(), n); } } campos.append('\n'); campos.append(ocultos.toString()); } private static Map getNames(Formulario formulario) { Map names = new LinkedHashMap(); Iterator i = formulario.iterator(Datos.class); while (i.hasNext()) { Datos datos = i.next(); if (!names.containsKey(datos.getName())) { names.put(datos.getName(), datos); } } return names; } private static String getTipo(String tipo) { if (tipo.equals(Origen.TIPO_CRITERIO)) { return "Criterio: "; } else if (tipo.equals(Origen.TIPO_ORDEN)) { return "Orden: "; } else { return ""; } } private static boolean dentroLimites(Datos datos) { return datos.getX() > -768 && datos.getY() > -1024 && datos.getX() < 1024 && datos.getY() < 768; } }