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 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 , 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 , 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; } }