Añado los fuentes de java

This commit is contained in:
2025-06-09 13:37:06 +02:00
parent d6c990e5d5
commit a97a6350ee
226 changed files with 57246 additions and 0 deletions
+112
View File
@@ -0,0 +1,112 @@
package com.tarisan.generador;
public class Campo{
private boolean clave;
private String nombre;
private String nombreOriginal;
private String tipo;
private boolean requerido;
private int largo;
private String tipoOracle;
private String claveOracle;
private String longitudOracle;
public Campo()
{
super();
}
//metodos set get
public boolean getClave()
{
return clave;
}
public void setClave( boolean nuevoClave )
{
clave = nuevoClave;
}
public String getNombre()
{
return nombre;
}
public void setNombre( String nuevoNombre )
{
nombre = nuevoNombre;
}
public String getNombreOriginal()
{
return nombreOriginal;
}
public void setNombreOriginal( String nuevoNombreOriginal )
{
nombreOriginal = nuevoNombreOriginal;
}
public String getTipo()
{
return tipo;
}
public void setTipo( String nuevoTipo )
{
tipo = nuevoTipo;
}
public boolean getRequerido()
{
return requerido;
}
public void setRequerido( boolean nuevoRequerido )
{
requerido = nuevoRequerido;
}
public int getLargo()
{
return largo;
}
public void setLargo( int nuevoLargo )
{
largo = nuevoLargo;
}
public String getTipoOracle()
{
return tipoOracle;
}
public void setTipoOracle( String nuevoTipo )
{
tipoOracle = nuevoTipo;
}
public String getLongitudOracle()
{
return longitudOracle;
}
public void setLongitudOracle( String nuevoLongitud )
{
longitudOracle = nuevoLongitud;
}
public String getClaveOracle()
{
return claveOracle;
}
public void setClaveOracle( String nuevoClave )
{
claveOracle = nuevoClave;
}
}
+58
View File
@@ -0,0 +1,58 @@
package com.tarisan.generador;
public class Dato{
private String clase;
private String nombre;
private String nombreOriginal;
private String valor;
public Dato()
{
super();
}
//metodos set get
public String getClase()
{
return clase;
}
public void setClase( String nuevoClase )
{
clase = nuevoClase;
}
public String getNombre()
{
return nombre;
}
public void setNombre( String nuevoNombre )
{
nombre = nuevoNombre;
}
public String getNombreOriginal()
{
return nombreOriginal;
}
public void setNombreOriginal( String nuevoNombreOriginal )
{
nombreOriginal = nuevoNombreOriginal;
}
public String getValor()
{
return valor;
}
public void setValor( String nuevoValor )
{
valor = nuevoValor;
}
}
@@ -0,0 +1,72 @@
package com.tarisan.generador;
import com.tarisan.control.*;
import com.tarisan.excepcion.*;
import com.tarisan.generador.ObtenerTablasBD;
import java.sql.*;
import java.util.Vector;
public class GeneradorJavaBeansBD
{
/**
Metodo main
*/
public static void main(String[] args)
{
try
{
ParametrosConfiguracion.cargarPropiedades();
Connection conexion = ParametrosConfiguracion.dataStore.obtenerConexion();
// Nombre del package de los JavaBeans
String packageName = "com.tarisan";
int tipo = ObtenerTablasBD.JAVA;
Vector vectorAll = new Vector();
Vector vectorTablas = null;
ObtenerTablasBD obtenerTablas = new ObtenerTablasBD();
vectorTablas = obtenerTablas.getTablas(conexion);
vectorAll.addElement(vectorTablas);
vectorAll.trimToSize();
generarJavaBeans(vectorAll, packageName);
ParametrosConfiguracion.dataStore.liberarConexion(conexion);
}
catch(ExcepcionTarisan ex)
{
System.out.println("ExcepcionTarisan: " + ex);
}
}//fin de metodo main
/**
Metodo para generar los JavaBeans
*/
private static void generarJavaBeans(Vector vectorAll, String packageName)
{
System.out.println("\nGenerando clases data en "+ System.getProperties().get("user.dir") + "\\dataGenerado\\...");
Vector unVectorTabla;
Tabla tabla;
for( int j = 0 ; j < vectorAll.size() ; j++)
{
unVectorTabla = ( Vector )(vectorAll.elementAt(j)) ;
// Recorro el vector de tablas
for(int k = 0; k < unVectorTabla.size(); k++)
{
tabla = (Tabla)(unVectorTabla.elementAt(k));
GenerarObjetoBaseBD.crearObjetoBase(tabla, packageName);
// GenerarAttributeInfoBD.crearAttributeInfo(tabla, packageName);
// GenerarBeanInfoBD.crearBeanInfo(tabla, packageName);
}
}
}
}
@@ -0,0 +1,140 @@
package com.tarisan.generador;
import java.io.*;
import java.util.Vector;
public class GenerarAttributeInfoBD
{
public static void crearAttributeInfo( Tabla tabla , String packageName)
{
String nombreClase = tabla.getNombre();
System.out.println("Generando " + nombreClase + "AttributeInfo...");
try{
PrintWriter out = new PrintWriter( new FileWriter(".\\dataGenerado\\" + nombreClase + "AttributeInfo.java" ) );
out.println("package " + packageName + ".data;\r\r\n\r\r\n\r\r\n");
out.println( "public class " + nombreClase + "AttributeInfo extends " + packageName + ".persistencia.ObjetoBaseAttributeInfo" );
out.println( "{" );
//Recorro las propiedades
String definicionPropiedades = "";
String listaClaves = "";
String metodosPropiedades = "";
String tipo="", nombrePropiedad="";
boolean clave , required;
String originalName=null, largo=null;
String nombrePropiedadCambiada = null;
String tipoElemento = null;
String columna="";
Vector vectorCampos = tabla.getCampos();
Campo campo;
for( int i=0; i < vectorCampos.size(); i++ )
{
campo = ( Campo )vectorCampos.elementAt(i);
nombrePropiedad = campo.getNombre();
//Saco sus propiedades
nombrePropiedad = campo.getNombre();
tipo = campo.getTipo();
clave = campo.getClave();
required = campo.getRequerido();
originalName = campo.getNombreOriginal();
largo = "" + campo.getLargo();
//Definicion de las propiedades
definicionPropiedades += "\tprivate boolean " + nombrePropiedad +"Required = "+ required +";\r\n";
definicionPropiedades += "\tprivate String " + nombrePropiedad +"OriginalName = \""+ originalName +"\";\r\n";
definicionPropiedades += "\tprivate int " + nombrePropiedad +"Largo = "+ largo +";\r\n";
//Genero el codigo para las claves
if( clave )
{
if( !listaClaves.equals("") )
listaClaves += ", ";
listaClaves += "\""+ nombrePropiedad +"\"";
}
//Metodos GET
//Required
nombrePropiedadCambiada = nombrePropiedad + "Required";
metodosPropiedades += "\r\n\r\n\tpublic boolean " + getGetMethod( nombrePropiedadCambiada ) +"()\r\n";
metodosPropiedades += "\t{\r\n";
metodosPropiedades += "\t\treturn " + nombrePropiedadCambiada + ";\r\n";
metodosPropiedades += "\t}\r\n";
//OriginalName
nombrePropiedadCambiada = nombrePropiedad + "OriginalName";
metodosPropiedades += "\tpublic String " + getGetMethod( nombrePropiedadCambiada ) +"()\r\n";
metodosPropiedades += "\t{\r\n";
metodosPropiedades += "\t\treturn " + nombrePropiedadCambiada + ";\r\n";
metodosPropiedades += "\t}\r\n";
//Largo
nombrePropiedadCambiada = nombrePropiedad + "Largo";
metodosPropiedades += "\tpublic int " + getGetMethod( nombrePropiedadCambiada ) +"()\r\n";
metodosPropiedades += "\t{\r\n";
metodosPropiedades += "\t\treturn " + nombrePropiedadCambiada + ";\r\n";
metodosPropiedades += "\t}\r\n";
//Metodos SET
//Required
nombrePropiedadCambiada = nombrePropiedad + "Required";
metodosPropiedades += "\r\n\tpublic void " + getSetMethod( nombrePropiedadCambiada ) + "( boolean s )\r\n";
metodosPropiedades += "\t{\r\n";
metodosPropiedades += "\t\t" + nombrePropiedadCambiada + " = s;\r\n";
metodosPropiedades += "\t}\r\n";
//OriginalName
nombrePropiedadCambiada = nombrePropiedad + "OriginalName";
metodosPropiedades += "\tpublic void " + getSetMethod( nombrePropiedadCambiada ) + "( String s )\r\n";
metodosPropiedades += "\t{\r\n";
metodosPropiedades += "\t\t" + nombrePropiedadCambiada + " = s;\r\n";
metodosPropiedades += "\t}\r\n";
//Required
nombrePropiedadCambiada = nombrePropiedad + "Largo";
metodosPropiedades += "\tpublic void " + getSetMethod( nombrePropiedadCambiada ) + "( int s )\r\n";
metodosPropiedades += "\t{\r\n";
metodosPropiedades += "\t\t" + nombrePropiedadCambiada + " = s;\r\n";
metodosPropiedades += "\t}\r\n";
}//fin del for
//Imprimo el resto
out.println( definicionPropiedades );
out.println( "\tprivate String[] primaryKey = {" + listaClaves + "};" );
out.println( "\r\n\tpublic String[] getPrimaryKey(){" );
out.println( "\t\treturn primaryKey;" );
out.println( "\t}" );
out.println( metodosPropiedades );
out.println( "\r\n\r\n}\r\n" );
out.close();
}
catch( Exception e )
{
System.out.println( e );
}
}
public static String getGetMethod( String nombrePropiedad )
{
String nombreMetodo = "get" + nombrePropiedad.substring(0,1).toUpperCase() + nombrePropiedad.substring(1);
return nombreMetodo;
}
public static String getSetMethod( String nombrePropiedad )
{
String nombreMetodo = "set" + nombrePropiedad.substring(0,1).toUpperCase() + nombrePropiedad.substring(1);
return nombreMetodo;
}
}
@@ -0,0 +1,82 @@
package com.tarisan.generador;
import java.io.*;
import java.util.Vector;
public class GenerarBeanInfoBD
{
public static void crearBeanInfo( Tabla tabla , String packageName)
{
String nombreClase = tabla.getNombre();
System.out.println("Generando " + nombreClase + "BeanInfo...");
try{
PrintWriter out = new PrintWriter( new FileWriter(".\\dataGenerado\\" + nombreClase + "BeanInfo.java" ) );
//Recorro las columnas
//String definicionPropiedades = "";
String metodosPropiedades = "";
String tipo ="", nombrePropiedad="";
int numPropiedades = 0;
String textoPropiedades = "";
Vector vectorCampos = tabla.getCampos();
Campo campo;
for( int i=0; i < vectorCampos.size(); i++ )
{
campo = ( Campo )vectorCampos.elementAt(i);
nombrePropiedad = campo.getNombre();
tipo = campo.getTipo();
textoPropiedades += "\t\t\tpds[pdsParent.length + "+ numPropiedades + "] = new PropertyDescriptor(\""+ nombrePropiedad +"\", cls);\r\n";
numPropiedades++;
}
out.println("package " + packageName + ".data;\r\r\n\r\r\n\r\r\n");
out.println("import java.beans.SimpleBeanInfo;");
out.println("import java.beans.BeanInfo;");
out.println("import java.beans.Introspector;");
out.println("import java.beans.PropertyDescriptor;");
out.println("import java.beans.IndexedPropertyDescriptor;\r\n\r\n\r\n");
out.println( "public class " + nombreClase + "BeanInfo extends SimpleBeanInfo" );
out.println( "{\r\n" );
out.println("\tpublic PropertyDescriptor[] getPropertyDescriptors()");
out.println("\t{");
out.println("\t\tPropertyDescriptor[] pds = null;");
out.println("\t\ttry{");
out.println("\t\t\t//get the number of properties of the parent class");
out.println("\t\t\tBeanInfo bI = Introspector.getBeanInfo( com.iberdrola.compras.persistencia.ObjetoBase.class );");
out.println("\t\t\tPropertyDescriptor[] pdsParent = bI.getPropertyDescriptors();");
out.println("\t\t\tClass cls = com.iberdrola.compras.data."+ nombreClase +".class;");
out.println("\t\t\tint numberLocalProperties = "+ numPropiedades +";");
out.println("\t\t\tpds = new PropertyDescriptor[numberLocalProperties + pdsParent.length];");
out.println("\t\t\t//");
out.println("\t\t\t//first do the parent class");
out.println("\t\t\t//");
out.println("\t\t\tfor(int i=0;i<pdsParent.length;i++){");
out.println("\t\t\t\tpds[i] = pdsParent[i];");
out.println("\t\t\t}");
out.println( textoPropiedades );
out.println( "\t\t}" );
out.println( "\t\tcatch(Exception e){" );
out.println( "\t\t\tSystem.out.println( e );" );
out.println( "\t\t\treturn null;" );
out.println( "\t\t}\r\n" );
out.println( "\t\treturn pds;" );
out.println( "\t}\r\n" );
out.println( "}" );
out.close();
}
catch( Exception e )
{
System.out.println( e );
}
}
}
@@ -0,0 +1,105 @@
package com.tarisan.generador;
import java.io.*;
import java.util.Vector;
public class GenerarObjetoBaseBD
{
public static void crearObjetoBase(Tabla tabla, String packageName)
{
String nombreClase = tabla.getNombre();
System.out.println("Generando " + nombreClase + "...");
try
{
PrintWriter out = new PrintWriter( new FileWriter(".\\dataGenerado\\" + nombreClase + ".java" ) );
out.println("/**");
out.println(" * @(#) " + nombreClase + ".java");
out.println(" */");
out.println("package " + packageName + ".data;\n\n\n");
out.println("/**");
out.println(" */");
out.println( "public class " + nombreClase);
out.println( "{" );
//Recorro las propiedades
String definicionPropiedades = "";
String metodosPropiedades = "";
String tipo ="", nombrePropiedad="";
String tipoElemento = null;
String columna="";
Vector vectorCampos = tabla.getCampos();
Campo campo;
for(int i = 0; i < vectorCampos.size(); i++)
{
campo = (Campo)vectorCampos.elementAt(i);
nombrePropiedad = campo.getNombre();
tipo = campo.getTipo();
//Definicion de las propiedades
definicionPropiedades += "\n\t/**";
definicionPropiedades += "\n\t */";
definicionPropiedades += "\n\tprivate " + tipo + " " + nombrePropiedad +";\n";
//Metodo GET
metodosPropiedades += "\n\t/**";
metodosPropiedades += "\n\t * @return";
metodosPropiedades += "\n\t */";
metodosPropiedades += "\n\tpublic " + tipo + " " + getGetMethod( nombrePropiedad ) +"()\n";
metodosPropiedades += "\t{\n";
metodosPropiedades += "\t\treturn this." + nombrePropiedad + ";\n";
metodosPropiedades += "\t}\n";
//Metodo SET
// String nuevoPropiedad = "nuevo" + nombrePropiedad.substring(0,1).toUpperCase() + nombrePropiedad.substring(1);
String nuevoPropiedad = nombrePropiedad;
metodosPropiedades += "\n\t/**";
metodosPropiedades += "\n\t * @param " + nuevoPropiedad;
metodosPropiedades += "\n\t * @return";
metodosPropiedades += "\n\t */";
metodosPropiedades += "\n\tpublic void " + getSetMethod(nombrePropiedad) + "(" + tipo + " " + nuevoPropiedad + ")\n";
metodosPropiedades += "\t{\n";
metodosPropiedades += "\t\tthis." + nombrePropiedad + " = " + nuevoPropiedad + ";\n";
metodosPropiedades += "\t}\n";
}//fin del for
//Imprimo el resto
out.println(definicionPropiedades);
out.println(metodosPropiedades);
out.println( "\n\n}\n" );
out.close();
}
catch( Exception e )
{
System.out.println( e );
}
}
public static String getGetMethod(String nombrePropiedad)
{
String nombreMetodo = "get" + nombrePropiedad.substring(0,1).toUpperCase() + nombrePropiedad.substring(1);
return nombreMetodo;
}
public static String getSetMethod(String nombrePropiedad)
{
String nombreMetodo = "set" + nombrePropiedad.substring(0,1).toUpperCase() + nombrePropiedad.substring(1);
return nombreMetodo;
}
}
@@ -0,0 +1,196 @@
package com.tarisan.generador;
import java.util.Vector;
import java.sql.*;
import org.w3c.dom.*;
import com.tarisan.generador.oracle.ObtenerTablasBDOracle;
public class ObtenerTablasBD
{
//CONSTANTES para determinar el tipo de generación
public static final int JAVA = 0;
public static final int XML = 1;
public static final int DATOS_XML = 2;
public static final int DOC = 3;
public static final int SQL = 4;
public static final int HTML = 5;
//ATRIBUTOS
/**
Tipo de generación (se recibirá en el constructor
*/
private int tipo;
/**
Elemento <BASE_DATOS> del xml de configuracion
"configuracion_generador_bd.xml
*/
private Element elementoBD = null;
//METODOS:
/**
Constructor de la clase
*/
public ObtenerTablasBD(Element newElementoBD)
{
elementoBD = newElementoBD;
tipo = ObtenerTablasBD.JAVA;
}
public ObtenerTablasBD(Element newElementoBD, int tip)
{
elementoBD = newElementoBD;
tipo = tip;
}
public ObtenerTablasBD()
{
}
/**
Dado un elemento BASE_DATOS hace la conexion a la BD
y devuelve un Vector con las Tablas (objetos Tabla) de la BD correspondientes
Si no estan especificadas en el xml, devuelve todas
*/
public Vector getTablas( )
{
Vector vectorTablas = new Vector();
Connection conn = null;
ResultSet rs = null;
ResultSet rsPKeys = null;
ResultSetMetaData rsMetaData = null;
try
{
//datos referentes a la conexion a la BD
String driver = elementoBD.getAttribute("driver");
String user = elementoBD.getAttribute("user");
String password = elementoBD.getAttribute("password");
String url = elementoBD.getAttribute("url");
// Conexion a la BD y tomo el statement
Class.forName(driver);
conn = DriverManager.getConnection(url, user , password);
/*
Obtengo los nombres de las tablas:
Si estan especificadas en el xml: getNombresTablasXML(elementoBD)
En caso contrario: getNombresAllTablasBDOracle( conn )
*/
String[] nombresTabla = null;
NodeList elementosTabla = elementoBD.getElementsByTagName("TABLA");
/*
Si no hay elementos <TABLA>, elementosTabla.getLength=0
y hay que tomar todas las tablas de la BD
*/
ObtenerTablasBDOracle tablasOracle = new ObtenerTablasBDOracle(conn);
if( elementosTabla.getLength() == 0)
nombresTabla = tablasOracle.getNombresAllTablasBD();
else
nombresTabla = getNombresTablasXML( elementosTabla );
//Voy a ir recorriendo las tablas y sus correspondientes campos
// vectorTablas = tablasOracle.getTablasBD(nombresTabla);
vectorTablas = tablasOracle.getTablasBD(nombresTabla, tipo);
return vectorTablas;
}
catch(Exception e)
{
System.err.println(e);
}
//devuelvo el vector de tablas
vectorTablas.trimToSize();
return vectorTablas;
}
public Vector getTablas(Connection conexion)
{
Vector vectorTablas = new Vector();
Connection conn = null;
ResultSet rs = null;
ResultSet rsPKeys = null;
ResultSetMetaData rsMetaData = null;
try
{
/*
Obtengo los nombres de las tablas:
Si estan especificadas en el xml: getNombresTablasXML(elementoBD)
En caso contrario: getNombresAllTablasBDOracle( conn )
*/
String[] nombresTabla = null;
/*
Si no hay elementos <TABLA>, elementosTabla.getLength=0
y hay que tomar todas las tablas de la BD
*/
ObtenerTablasBDOracle tablasOracle = new ObtenerTablasBDOracle(conexion);
nombresTabla = tablasOracle.getNombresAllTablasBD();
//Voy a ir recorriendo las tablas y sus correspondientes campos
// vectorTablas = tablasOracle.getTablasBD(nombresTabla);
vectorTablas = tablasOracle.getTablasBD(nombresTabla, tipo);
return vectorTablas;
}
catch(Exception e)
{
System.err.println(e);
}
//devuelvo el vector de tablas
vectorTablas.trimToSize();
return vectorTablas;
}
/**
Parsea el XML y devuelve los nombres de las tablas especificadas
*/
private String[] getNombresTablasXML( NodeList elementosTabla )
{
String[] resultado = null;
Vector vectorNombres = new Vector();
//Busco los nombres de las tablas en el documento XML
Node nodo;
for( int k = 0; k < elementosTabla.getLength() ; k++ )
{
nodo = elementosTabla.item(k);
vectorNombres.addElement(((Element)nodo).getAttribute("name") );
}
//Tomo el array de Strings
vectorNombres.trimToSize();
resultado = new String[ vectorNombres.size() ];
vectorNombres.copyInto(resultado);
// devuelvo el resultado
return resultado;
}
}
@@ -0,0 +1,60 @@
package com.tarisan.generador;
import java.util.Vector;
public class Registro
{
/**
Nombre de la clase correspondiente a la tabla
*/
private String nombre;
/**
Nombre Original de la clase correspondiente a la tabla
*/
private String nombreOriginal;
/**
Vector de objetos "Dato"
*/
private Vector datos;
public Registro()
{
super();
}
// metodos get y set
public String getNombre()
{
return nombre;
}
public void setNombre( String nuevoNombre )
{
nombre = nuevoNombre;
}
public String getNombreOriginal()
{
return nombreOriginal;
}
public void setNombreOriginal( String nuevoNombreOriginal )
{
nombreOriginal = nuevoNombreOriginal;
}
public Vector getDatos()
{
return datos;
}
public void setDatos( Vector nuevoDatos )
{
datos = nuevoDatos;
}
}
+76
View File
@@ -0,0 +1,76 @@
package com.tarisan.generador;
import java.util.Vector;
public class Tabla
{
/**
Nombre del JavaBean correspondiente a la tabla
*/
private String nombre;
/**
Nombre original de la tabla
*/
private String nombreOriginal;
/**
Vector de objetos "Campo"
*/
private Vector campos;
/**
Tipo de la tabla
*/
private String tipoTabla;
public Tabla()
{
super();
}
// metodos get y set
public String getNombre()
{
return nombre;
}
public void setNombre( String nuevoNombre )
{
nombre = nuevoNombre;
}
public String getNombreOriginal()
{
return nombreOriginal;
}
public void setNombreOriginal( String nuevoNombreOriginal )
{
nombreOriginal = nuevoNombreOriginal;
}
public Vector getCampos()
{
return campos;
}
public void setCampos( Vector nuevoCampos )
{
campos = nuevoCampos;
}
public String getTipoTabla()
{
return tipoTabla;
}
public void setTipoTabla( String nuevoTipo )
{
tipoTabla = nuevoTipo;
}
}
@@ -0,0 +1,81 @@
package com.tarisan.generador;
import java.util.StringTokenizer;
public class UtilidadesGeneradorBD
{
/**
*/
public static String getNombreCampo( String nombreBD )
{
String nombreCampo = "";
StringTokenizer st = new StringTokenizer( nombreBD, "_");
String token = "";
for( int i=0; st.hasMoreElements(); ++i )
{
token = (String)st.nextElement();
if( i == 0 )
nombreCampo += token.toLowerCase();
else
nombreCampo += token.substring(0,1).toUpperCase() + token.substring(1).toLowerCase();
}
return nombreCampo;
}
/**
lo mismo que el anterior pero empezando con mayusculas
*/
public static String getNombreTabla( String nombreBD )
{
String nombreTabla = "";
StringTokenizer st = new StringTokenizer( nombreBD, "_");
String token = "";
for( int i=0; st.hasMoreElements(); ++i )
{
token = (String)st.nextElement();
nombreTabla += token.substring(0,1).toUpperCase() + token.substring(1).toLowerCase();
}
return nombreTabla;
}
/**
* Esta funcion formatea la fecha de entrada
* Formato Origen: YYYY-MM-DD hh:mm:ss....
* Formato Salida: DD.MM.YYYY
* @return String
*/
public static String formatearFecha(String entrada)
{
StringBuffer salida = new StringBuffer();
int longitud;
if(entrada == null)
{
salida.append("");
}
else
{
longitud = entrada.length();
if(longitud == 0)
{
salida.append("");
}
else
{
salida.append(entrada.substring(8, 10));
salida.append(".");
salida.append(entrada.substring(5, 7));
salida.append(".");
salida.append(entrada.substring(0, 4));
}
}
return salida.toString();
}
}
@@ -0,0 +1,482 @@
package com.tarisan.generador.oracle;
import com.tarisan.generador.Tabla;
import com.tarisan.generador.Campo;
import com.tarisan.generador.Registro;
import com.tarisan.generador.Dato;
import com.tarisan.generador.UtilidadesGeneradorBD;
import com.tarisan.generador.ObtenerTablasBD;
import java.util.Vector;
import java.sql.*;
public class ObtenerTablasBDOracle
{
/**
Conexión a Oracle
*/
private Connection conn;
/**
* constructor de la clase
*/
public ObtenerTablasBDOracle(Connection newConn)
{
conn = newConn;
}
/**
* metodo que ,dado un array de Strings con los nombres de
* las tablas devuelve un vector de objetos Tabla
*/
public Vector getTablasBD(String[] nombresTabla, int tipo)
{
Vector vectorTablas = new Vector();
Statement stmt = null;
try
{
stmt = conn.createStatement();
switch(tipo)
{
case ObtenerTablasBD.JAVA:
{
vectorTablas = getEstructura(nombresTabla, stmt);
break;
}
case ObtenerTablasBD.XML:
{
vectorTablas = getEstructura(nombresTabla, stmt);
break;
}
case ObtenerTablasBD.DATOS_XML:
{
vectorTablas = getValores(nombresTabla, stmt);
break;
}
case ObtenerTablasBD.DOC:
{
vectorTablas = getEstructura(nombresTabla, stmt);
break;
}
case ObtenerTablasBD.SQL:
{
vectorTablas = getEstructura(nombresTabla, stmt);
break;
}
case ObtenerTablasBD.HTML:
{
vectorTablas = getEstructura(nombresTabla, stmt);
break;
}
}
}
catch(Exception e)
{
System.err.println(e);
}
//devuelvo el vector de tablas
vectorTablas.trimToSize();
return vectorTablas;
}
private Vector getEstructura(String[] nombresTabla, Statement stmt) throws Exception
{
//Voy a ir recorriendo las tablas de la BD y sus correspondientes campos
Tabla tabla;
String nombre, nombreOriginal;
Vector vectorCampos = null, vectorKeys = null;
Vector vectorTablas = new Vector();
ResultSet rs = null,rsPKeys = null;
ResultSetMetaData rsMetaData = null;
Campo campo;
for (int k=0; k < nombresTabla.length ; k++)
{
tabla = new Tabla();
vectorCampos = new Vector();
// nombre original de la tabla
nombreOriginal = nombresTabla[k];
tabla.setNombreOriginal(nombreOriginal);
//nombre de la tabla / del javabean
nombre = UtilidadesGeneradorBD.getNombreTabla( nombreOriginal );
tabla.setNombre(nombre);
//Columnas que son clave primaria
vectorKeys = new Vector();
String[] keyColumns = null;
StringBuffer queryPKeys = new StringBuffer();
queryPKeys.append("SELECT USER_CONS_COLUMNS.COLUMN_NAME");
queryPKeys.append(", USER_CONSTRAINTS.CONSTRAINT_NAME");
queryPKeys.append(", TAB.TABTYPE");
queryPKeys.append(" FROM USER_CONS_COLUMNS, USER_CONSTRAINTS, TAB");
queryPKeys.append(" WHERE USER_CONS_COLUMNS.TABLE_NAME = '" +nombreOriginal+ "'");
queryPKeys.append(" AND USER_CONSTRAINTS.CONSTRAINT_TYPE = 'P'");
queryPKeys.append(" AND USER_CONSTRAINTS.CONSTRAINT_NAME = USER_CONS_COLUMNS.CONSTRAINT_NAME");
queryPKeys.append(" AND USER_CONSTRAINTS.TABLE_NAME = TAB.TNAME");
queryPKeys.append(" ORDER BY USER_CONS_COLUMNS.POSITION");
String nombrePKey = "";
String tipoTabla = "";
rsPKeys = stmt.executeQuery(queryPKeys.toString());
while(rsPKeys.next())
{
// vectorKeys.addElement(rsPKeys.getString("COLUMN_NAME"));
vectorKeys.addElement(rsPKeys.getString(1));
nombrePKey = rsPKeys.getString(2);
tipoTabla = rsPKeys.getString(3);
}
vectorKeys.trimToSize();
keyColumns = new String[ vectorKeys.size() ];
vectorKeys.copyInto( keyColumns );
//Tipo de la tabla oracle (tabla o vista)
tabla.setTipoTabla(tipoTabla);
//Tomo todos los campos de esta tabla
rs = stmt.executeQuery("SELECT * FROM "+ nombreOriginal );
rsMetaData = rs.getMetaData();
//empiezo a recorrer los campos de la tabla
for (int i = 1 ; i <= rsMetaData.getColumnCount() ; i++)
{
campo = new Campo();
// Nombre original del campo
String nombreOriginalCampo = rsMetaData.getColumnName(i);
campo.setNombreOriginal( nombreOriginalCampo );
//Nombre del campo (es decir, de la propiedad del bean)
campo.setNombre( UtilidadesGeneradorBD.getNombreCampo( nombreOriginalCampo ));
// tipo (java) de campo y largo segun tipo
String tipoOracle = rsMetaData.getColumnTypeName(i);
tipoOracle.trim();
tipoOracle.toUpperCase();
if( tipoOracle.equals("CHAR"))
{
campo.setLongitudOracle(String.valueOf(rsMetaData.getColumnDisplaySize(i)));
campo.setTipoOracle("CHAR");
campo.setTipo("String");
campo.setLargo( rsMetaData.getColumnDisplaySize(i) );
}
else if(tipoOracle.equals("CHARACTER"))
{
campo.setLongitudOracle(String.valueOf(rsMetaData.getColumnDisplaySize(i)));
campo.setTipoOracle("CHARACTER");
campo.setTipo("String");
campo.setLargo( rsMetaData.getColumnDisplaySize(i) );
}
else if( tipoOracle.equals("DATE") )
{
campo.setLongitudOracle("");
campo.setTipoOracle("DATE");
campo.setTipo("java.sql.Date");
campo.setLargo( rsMetaData.getColumnDisplaySize(i) );
}
else if( tipoOracle.equals("LONG") )
{
//como tipo memo
campo.setLongitudOracle("");
campo.setTipoOracle("LONG");
}
else if( tipoOracle.equals("LONG RAW") )
{
campo.setLongitudOracle("");
campo.setTipoOracle("LONG RAW");
campo.setTipo("long");
}
else if( tipoOracle.equals("MLSLABEL") )
{
//no se que es esto
campo.setLongitudOracle("");
campo.setTipoOracle("MLSLABEL");
}
else if( tipoOracle.equals("NUMBER") )
{
campo.setLongitudOracle(String.valueOf(rsMetaData.getPrecision(i)));
if (rsMetaData.getScale(i) > 0)
{
campo.setLongitudOracle(campo.getLongitudOracle() + "," + String.valueOf(rsMetaData.getScale(i)));
}
campo.setTipoOracle("NUMBER");
// campo.setScale( rsMetaData.getScale(i) );
// campo.setPrecision( rsMetaData.getPrecision(i) );
if(rsMetaData.getScale(i) != 0)
{
campo.setTipo("double");
}
else
{
if(rsMetaData.getPrecision(i) == 0)
{
campo.setTipo("double");
}
else
{
if(rsMetaData.getPrecision(i) < 10)
{
campo.setTipo("int");
}
else
{
//campo.setTipo("long");
campo.setTipo("double");
}
}
}
campo.setLargo(rsMetaData.getColumnDisplaySize(i));
}
else if( tipoOracle.equals("RAW") )
{
//no se que es esto
campo.setLongitudOracle("");
campo.setTipoOracle("RAW");
}
else if( tipoOracle.equals("RAW MLSLABEL") )
{
//no se que es esto
campo.setLongitudOracle("");
campo.setTipoOracle("RAW MLSLABEL");
}
else if( tipoOracle.equals("ROWID") )
{
//no se que es esto
campo.setLongitudOracle("");
campo.setTipoOracle("ROWID");
}
else if(tipoOracle.equals("VARCHAR2"))
{
campo.setLongitudOracle(String.valueOf(rsMetaData.getColumnDisplaySize(i)));
campo.setTipoOracle("VARCHAR2");
campo.setTipo("String");
campo.setLargo( rsMetaData.getColumnDisplaySize(i) );
}
else if(tipoOracle.equals("VARCHAR"))
{
campo.setLongitudOracle(String.valueOf(rsMetaData.getColumnDisplaySize(i)));
campo.setTipoOracle("VARCHAR");
campo.setTipo("String");
campo.setLargo( rsMetaData.getColumnDisplaySize(i) );
}
// Campo requerido o no
if( rsMetaData.isNullable(i) == 0)
campo.setRequerido( true );
else
campo.setRequerido( false );
// campo primay key o no
for( int j = 0; j < keyColumns.length; j++)
{
if( (campo.getNombreOriginal()).equals(keyColumns[j]))
{
campo.setClave( true );
campo.setClaveOracle(nombrePKey + " (" + String.valueOf(j+1) + "º)");
break;
}
}
// añado el campo al vector de campos
vectorCampos.addElement(campo);
}//fin del for de campos
//añado la tabla al vector de tablas
tabla.setCampos(vectorCampos);
vectorTablas.addElement(tabla);
}//fin del for de tablas
return vectorTablas;
}
private Vector getValores(String[] nombresTabla, Statement stmt) throws Exception
{
//Voy a ir recorriendo las tablas de la BD y sus correspondientes campos
Registro registro;
String nombre, nombreOriginal;
Vector vectorDatos = null;
Vector vectorRegistros = new Vector();
Dato dato;
String nombreOriginalDato;
ResultSet rs = null;
ResultSetMetaData rsMetaData = null;
String tipoOracle;
for (int k=0; k < nombresTabla.length ; k++)
{
// nombre original de la tabla
nombreOriginal = nombresTabla[k];
//Tomo todos los campos de esta tabla
rs = stmt.executeQuery("SELECT * FROM " + nombreOriginal );
rsMetaData = rs.getMetaData();
//Empiezo a recorrer los registros de datos de la tabla
while(rs.next())
{
registro = new Registro();
vectorDatos = new Vector();
registro.setNombreOriginal( nombreOriginal );
//nombre de la tabla / del javabean
nombre = UtilidadesGeneradorBD.getNombreTabla( nombreOriginal );
registro.setNombre( nombre );
for(int i = 1; i <= rsMetaData.getColumnCount(); i++)
{
dato = new Dato();
nombreOriginalDato = rsMetaData.getColumnName(i);
dato.setNombreOriginal( nombreOriginalDato );
//Nombre del campo (es decir, de la propiedad del bean)
dato.setNombre( UtilidadesGeneradorBD.getNombreCampo( nombreOriginalDato ));
//Valor del campo
dato.setValor(rs.getString(i));
//Tipo(java) de campo
tipoOracle = rsMetaData.getColumnTypeName(i).trim().toUpperCase();
if( tipoOracle.equals("CHAR") || tipoOracle.equals("CHARACTER") )
{
dato.setClase("Character");
}
else if( tipoOracle.equals("DATE") )
{
dato.setClase("java.sql.Date");
dato.setValor(UtilidadesGeneradorBD.formatearFecha((String)dato.getValor()));
}
else if( tipoOracle.equals("LONG") )
{
//como tipo memo
}
else if( tipoOracle.equals("LONG RAW") )
{
dato.setClase("Long");
}
else if( tipoOracle.equals("MLSLABEL") )
{
//no se que es esto
}
else if( tipoOracle.equals("NUMBER") )
{
if(rsMetaData.getScale(i) != 0)
{
dato.setClase("Double");
}
else
{
if(rsMetaData.getPrecision(i) == 0)
{
dato.setClase("Double");
}
else
{
if(rsMetaData.getPrecision(i) < 10)
{
dato.setClase("Integer");
}
else
{
//dato.setClase("Long");
dato.setClase("Double");
}
}
}
}
else if( tipoOracle.equals("RAW") )
{
//no se que es esto
}
else if( tipoOracle.equals("RAW MLSLABEL") )
{
//no se que es esto
}
else if( tipoOracle.equals("ROWID") )
{
//no se que es esto
}
else if( tipoOracle.equals("VARCHAR2") || tipoOracle.equals("VARCHAR"))
{
dato.setClase("String");
}
// añado el dato al vector de datos
vectorDatos.addElement(dato);
}//fin del for de registros
//añado la tabla al vector de registros
registro.setDatos(vectorDatos);
vectorRegistros.addElement(registro);
}
}//fin del for de tablas
return vectorRegistros;
}
/**
* Accede a la BD y devuelve los nombres de todas las tablas
*/
public String[] getNombresAllTablasBD()
{
String[] resultado = null;
Vector vectorNombres = new Vector();
//Busco los nombres de las tablas de la BD
Statement stmt;
ResultSet rs;
try
{
//tomo los nombres de la tabla
stmt = conn.createStatement();
// rs = stmt.executeQuery( "SELECT TABLE_NAME FROM USER_TABLES" );
rs = stmt.executeQuery( "SELECT TNAME FROM TAB" );
while(rs.next())
{
// vectorNombres.addElement( rs.getString("TABLE_NAME") );
vectorNombres.addElement( rs.getString("TNAME") );
}
// Copio los elementos del vector en el array
vectorNombres.trimToSize();
resultado = new String[ vectorNombres.size() ];
vectorNombres.copyInto(resultado);
}
catch(SQLException sqle)
{
System.err.println( sqle );
}
//devuelvo el resultado
return resultado;
}
}