Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.ArrayList;
- class VO{
- static BufferedReader br;
- static ArrayList<String> includes;
- static void readFile( String file )
- {
- try{
- br = new BufferedReader(new FileReader( file ));
- }catch(IOException ioe){
- System.out.println( "Cant read File:" );
- System.out.println( ioe );
- System.exit(1);
- }
- }
- static void closeFile( )
- {
- try{
- br.close();
- }catch(IOException ioe){
- System.out.println( "Cant close File:" );
- System.out.println( ioe );
- System.exit(1);
- }
- }
- static String toCamelCase(String s)
- {
- //convertir a camelCase
- String foo [] = s.split("_");
- String camelCase = "";
- for(String bar : foo){
- camelCase += Character.toUpperCase( bar.charAt(0) ) + bar.substring( 1 );
- }
- return camelCase;
- }
- /*
- *
- *
- * */
- static void parseTable(String t_name) throws IOException
- {
- System.out.println( "parseando tabla: " + t_name );
- String tline ;
- ArrayList<Field> fields = new ArrayList<Field>();
- while( (tline = br.readLine()).trim().startsWith("`") )
- {
- String campo = tline.substring( tline.indexOf("`") + 1, tline.lastIndexOf("`") );
- String comentario = (tline.indexOf("COMMENT ") != -1) ? tline.substring( tline.indexOf("COMMENT ") + 9, tline.lastIndexOf("'") ) : " [Campo no documentado]";
- boolean autoInc = (tline.indexOf("AUTO_INCREMENT ") != -1);
- String tipo = tline.trim().split(" ")[1];
- fields.add( new Field(campo , tipo , comentario, false, autoInc) );
- }
- //buscar llave primaria, PRIMARY KEY
- if( (tline.trim().startsWith("PRIMARY KEY") ) )
- {
- //hay definicion de llave primaria
- String pk = tline.substring( tline.indexOf("(")+1, tline.indexOf(")") );
- String pks[] = pk.split(",");
- for(String i: pks)
- {
- i= i.trim().substring( 1, i.length()-1 ) ;
- //cicle trough the fields, and add pk to the ones on i
- for(int a = 0; a < fields.size(); a++){
- if(fields.get( a ).title.equals(i)){
- fields.get( a ).isPrimary = true;
- }
- }
- }
- }
- writeVO( t_name, fields );
- writeDAOBase( t_name, fields );
- writeDAO( t_name, fields );
- }
- //vo para una tabla
- static void writeVO( String tabla, ArrayList<Field> fields ) throws IOException
- {
- //convertir a camelCase
- String camelCaseTabla = toCamelCase( tabla );
- String fileName = "base/" + tabla + ".vo.base.php";
- PrintWriter pw = new PrintWriter(new FileWriter( fileName ));
- pw.println("<?php");
- pw.println("/** Value Object file for table "+ tabla +"." );
- pw.println(" * ");
- pw.println(" * VO does not have any behaviour except for storage and retrieval of its own data (accessors and mutators).");
- pw.println(" * @author Alan Gonzalez <alan@caffeina.mx> ");
- pw.println(" * @access public");
- pw.println(" * ");
- pw.println(" */");
- pw.println();
- pw.println("class " + camelCaseTabla + " extends VO" );
- pw.println("{");
- //constructor
- {
- pw.println( " /**");
- pw.println( " * Constructor de " + toCamelCase(tabla) );
- pw.println( " * " );
- pw.println( " * Para construir un objeto de tipo "+ toCamelCase(tabla) + " debera llamarse a el constructor " );
- pw.println( " * sin parametros. Es posible, construir un objeto pasando como parametro un arreglo asociativo " );
- pw.println( " * cuyos campos son iguales a las variables que constituyen a este objeto." );
- pw.println( " * @return "+ toCamelCase(tabla) );
- pw.println( " */");
- pw.println(" function __construct( $data = NULL)");
- pw.println(" { ");
- pw.println(" if(isset($data))");
- pw.println(" {");
- }
- for(Field f : fields){
- pw.println(" if( isset($data['" + f.title + "']) ){");
- pw.println(" $this->"+f.title+" = $data['"+ f.title +"'];");
- pw.println(" }");
- }
- pw.println(" }");
- pw.println(" }");
- pw.println("");
- //toString
- {
- pw.println( " /**");
- pw.println( " * Obtener una representacion en String" );
- pw.println( " * " );
- pw.println( " * Este metodo permite tratar a un objeto "+toCamelCase(tabla)+ " en forma de cadena." );
- pw.println( " * La representacion de este objeto en cadena es la forma JSON (JavaScript Object Notation) para este objeto.");
- pw.println( " * @return String ");
- pw.println( " */");
- pw.println(" public function __toString( )");
- pw.println(" { ");
- pw.println( " $vec = array();" );
- pw.println( " array_push($vec, array( " );
- int x = 0;
- for( Field f : fields)
- {
- if(x++ < (fields.size()-1))
- pw.println( " \""+ f.title+ "\" => $this->" + f.title + "," );
- else
- pw.println( " \"" +f.title +"\" => $this->" + f.title );
- }
- pw.println( " )); " );
- pw.println( " return json_encode($vec); " );
- pw.println(" }");
- pw.println(" ");
- }
- //actual fields
- for( Field f : fields)
- {
- pw.println( " /**");
- pw.println( " * "+f.title );
- pw.println( " * ");
- pw.println( " * "+f.comment +"<br>");
- if(f.isPrimary)
- pw.println( " * <b>Llave Primaria</b><br>");
- if(f.isAutoIncrement)
- pw.println( " * <b>Auto Incremento</b><br>");
- pw.println( " * @access protected" );
- pw.println( " * @var "+ f.type );
- pw.println( " */");
- pw.println( " protected $" + f.title + ";" );
- pw.println();
- }
- //getters and setters
- for( Field f : fields)
- {
- String camelCaseCampo = toCamelCase( f.title );
- pw.println( " /**");
- pw.println( " * get" + camelCaseCampo );
- pw.println( " * " );
- pw.println( " * Get the <i>" + f.title + "</i> property for this object. Donde <i>" + f.title +"</i> es " + f.comment );
- pw.println( " * @return "+ f.type );
- pw.println( " */");
- pw.println( " final public function get" + camelCaseCampo + "()" );
- pw.println( " {" );
- pw.println( " return $this->"+ f.title +";");
- pw.println( " }" );
- pw.println();
- pw.println( " /**");
- pw.println( " * set" + camelCaseCampo + "( $"+f.title+" )" );
- pw.println( " * " );
- pw.println( " * Set the <i>" + f.title + "</i> property for this object. Donde <i>" + f.title +"</i> es " + f.comment +"." );
- pw.println( " * Una validacion basica se hara aqui para comprobar que <i>" + f.title + "</i> es de tipo <i>" + f.type +"</i>. " );
- pw.println( " * Si esta validacion falla, se arrojara... algo. " );
- if(f.isAutoIncrement) {
- pw.println( " * <br><br>Esta propiedad se mapea con un campo que es de <b>Auto Incremento</b> !<br>");
- pw.println( " * No deberias usar set" + camelCaseCampo + "( ) a menos que sepas exactamente lo que estas haciendo.<br>");
- }
- if(f.isPrimary) {
- pw.println( " * <br><br>Esta propiedad se mapea con un campo que es una <b>Llave Primaria</b> !<br>");
- pw.println( " * No deberias usar set" + camelCaseCampo + "( ) a menos que sepas exactamente lo que estas haciendo.<br>");
- }
- pw.println( " * @param "+ f.type );
- pw.println( " */");
- pw.println( " final public function set" + camelCaseCampo + "( $"+f.title+" )" );
- pw.println( " {" );
- pw.println( " $this->"+f.title+ " = $" + f.title+";" );
- pw.println( " }" );
- pw.println();
- }
- pw.println("}");
- pw.close();
- }
- //dao normal para tabla
- static void writeDAO(String tabla, ArrayList<Field> fields ) throws IOException
- {
- String fileName = tabla + ".dao.php";
- includes.add(fileName);
- String className = toCamelCase( tabla );
- PrintWriter pw = new PrintWriter(new FileWriter( fileName ));
- pw.println("<?php");
- pw.println();
- pw.println( "require_once ('Estructura.php');");
- pw.println("require_once(\"base/"+tabla+".dao.base.php\");");
- pw.println("require_once(\"base/"+tabla+".vo.base.php\");");
- pw.println("/** "+ toCamelCase(tabla) +" Data Access Object (DAO)." );
- pw.println(" * ");
- pw.println(" * Esta clase contiene toda la manipulacion de bases de datos que se necesita para ");
- pw.println(" * almacenar de forma permanente y recuperar instancias de objetos {@link "+toCamelCase(tabla)+" }. ");
- pw.println(" * @author Alan Gonzalez <alan@caffeina.mx> ");
- pw.println(" * @access public");
- pw.println(" * ");
- pw.println(" */");
- pw.println("class " + className+ "DAO extends " + className+"DAOBase" );
- pw.println("{");
- pw.println();
- pw.println("}");
- pw.flush();
- pw.close();
- }
- //dao base para tabla
- static void writeDAOBase(String tabla, ArrayList<Field> fields ) throws IOException
- {
- String fileName = "base/" + tabla + ".dao.base.php";
- String className = toCamelCase( tabla );
- PrintWriter pw = new PrintWriter(new FileWriter( fileName ));
- pw.println("<?php");
- pw.println("/** "+ toCamelCase(tabla) +" Data Access Object (DAO) Base." );
- pw.println(" * ");
- pw.println(" * Esta clase contiene toda la manipulacion de bases de datos que se necesita para ");
- pw.println(" * almacenar de forma permanente y recuperar instancias de objetos {@link "+toCamelCase(tabla)+" }. ");
- pw.println(" * @author Alan Gonzalez <alan@caffeina.mx> ");
- pw.println(" * @access private");
- pw.println(" * ");
- pw.println(" */");
- pw.println("abstract class " + className+ "DAOBase extends TablaDAO" );
- pw.println("{");
- pw.println();
- /*
- metodo save
- */
- {
- pw.println(" /**");
- pw.println(" * Guardar registros. ");
- pw.println(" * ");
- pw.println(" * Este metodo guarda el estado actual del objeto {@link "+toCamelCase(tabla)+"} pasado en la base de datos. La llave ");
- pw.println(" * primaria indicara que instancia va a ser actualizado en base de datos. Si la llave primara o combinacion de llaves");
- pw.println(" * primarias describen una fila que no se encuentra en la base de datos, entonces save() creara una nueva fila, insertando");
- pw.println(" * en ese objeto el ID recien creado.");
- pw.println(" * ");
- pw.println(" * @static");
- pw.println(" * @throws Exception si la operacion fallo.");
- pw.println(" * @param "+toCamelCase(tabla)+" [$"+tabla+"] El objeto de tipo " + toCamelCase(tabla));
- pw.println(" * @return Un entero mayor o igual a cero denotando las filas afectadas, o un string con el error si es que hubo alguno.");
- pw.println(" **/");
- pw.println(" public static final function save( &$"+tabla+" )");
- pw.println(" {");
- String pks = "";
- for(Field f : fields){
- if(!f.isPrimary) continue;
- pks += " $"+tabla+"->get"+ toCamelCase(f.title)+"() ,";
- }
- pks = pks.substring(0, pks.length() -1 );
- pw.println(" if( self::getByPK( " + pks + ") === NULL )");
- pw.println(" {");
- pw.println(" try{ return " + className +"DAOBase::create( $"+ tabla +") ; } catch(Exception $e){ throw $e; }");
- pw.println(" }else{");
- pw.println(" try{ return " + className +"DAOBase::update( $"+ tabla +") ; } catch(Exception $e){ throw $e; }");
- pw.println(" }");
- pw.println(" }");
- pw.println();
- pw.println();
- }
- /*
- metodo getByPK
- */
- {
- String pks = "";
- String sql = "";
- for(Field f : fields){
- if(!f.isPrimary) continue;
- pks += " $"+f.title+",";
- sql += f.title +" = ? AND ";
- }
- pks = pks.substring( 0, pks.length() -1 );
- sql = sql.substring( 0, sql.length() -4 );
- pw.println(" /**");
- pw.println(" * Obtener {@link "+toCamelCase(tabla)+"} por llave primaria. ");
- pw.println(" * ");
- pw.println(" * Este metodo cargara un objeto {@link "+toCamelCase(tabla)+"} de la base de datos ");
- pw.println(" * usando sus llaves primarias. ");
- pw.println(" * ");
- pw.println(" * @static");
- pw.println(" * @return Objeto Un objeto del tipo {@link "+toCamelCase(tabla)+"}. NULL si no hay tal registro.");
- pw.println(" **/");
- pw.println(" public static final function getByPK( " + pks + " )");
- pw.println(" {");
- pw.println(" $sql = \"SELECT * FROM "+tabla+" WHERE ("+ sql + ") LIMIT 1;\";");
- pw.println(" $params = array( "+ pks +" );");
- pw.println(" global $conn;");
- pw.println(" $rs = $conn->GetRow($sql, $params);");
- pw.println(" if(count($rs)==0)return NULL;");
- pw.println(" return new " + toCamelCase(tabla) + "( $rs );");
- pw.println(" }");
- pw.println();
- pw.println();
- }
- /*
- metodo getAll
- */
- {
- pw.println(" /**");
- pw.println(" * Obtener todas las filas.");
- pw.println(" * ");
- pw.println(" * Esta funcion leera todos los contenidos de la tabla en la base de datos y construira");
- pw.println(" * un vector que contiene objetos de tipo {@link "+toCamelCase(tabla)+"}. Tenga en cuenta que este metodo");
- pw.println(" * consumen enormes cantidades de recursos si la tabla tiene muchas filas. ");
- pw.println(" * Este metodo solo debe usarse cuando las tablas destino tienen solo pequenas cantidades de datos o se usan sus parametros para obtener un menor numero de filas.");
- pw.println(" * ");
- pw.println(" * @static");
- pw.println(" * @param $pagina Pagina a ver.");
- pw.println(" * @param $columnas_por_pagina Columnas por pagina.");
- pw.println(" * @param $orden Debe ser una cadena con el nombre de una columna en la base de datos.");
- pw.println(" * @param $tipo_de_orden 'ASC' o 'DESC' el default es 'ASC'");
- pw.println(" * @return Array Un arreglo que contiene objetos del tipo {@link "+toCamelCase(tabla)+"}.");
- pw.println(" **/");
- pw.println(" public static final function getAll( $pagina = NULL, $columnas_por_pagina = NULL, $orden = NULL, $tipo_de_orden = 'ASC' )");
- pw.println(" {");
- pw.println(" $sql = \"SELECT * from "+tabla+"\";");
- pw.println(" if($orden != NULL)");
- pw.println(" { $sql .= \" ORDER BY \" . $orden . \" \" . $tipo_de_orden; }");
- pw.println(" if($pagina != NULL)");
- pw.println(" {");
- pw.println(" $sql .= \" LIMIT \" . (( $pagina - 1 )*$columnas_por_pagina) . \",\" . $columnas_por_pagina; ");
- pw.println(" }");
- pw.println(" global $conn;");
- pw.println(" $rs = $conn->Execute($sql);");
- pw.println(" $allData = array();");
- pw.println(" foreach ($rs as $foo) {");
- pw.println(" array_push( $allData, new "+ toCamelCase( tabla ) +"($foo));");
- pw.println(" }");
- pw.println(" return $allData;");
- pw.println(" }");
- pw.println();
- pw.println();
- }
- /*
- metodo search
- */
- {
- pw.println(" /**");
- pw.println(" * Buscar registros.");
- pw.println(" * ");
- pw.println(" * Este metodo proporciona capacidad de busqueda para conseguir un juego de objetos {@link "+toCamelCase(tabla)+"} de la base de datos. ");
- pw.println(" * Consiste en buscar todos los objetos que coinciden con las variables permanentes instanciadas de objeto pasado como argumento. ");
- pw.println(" * Aquellas variables que tienen valores NULL seran excluidos en busca de criterios.");
- pw.println(" * ");
- pw.println(" * <code>");
- pw.println(" * /**");
- pw.println(" * * Ejemplo de uso - buscar todos los clientes que tengan limite de credito igual a 20000");
- pw.println(" * {@*} ");
- pw.println(" * $cliente = new Cliente();");
- pw.println(" * $cliente->setLimiteCredito(\"20000\");");
- pw.println(" * $resultados = ClienteDAO::search($cliente);");
- pw.println(" * ");
- pw.println(" * foreach($resultados as $c ){");
- pw.println(" * echo $c->getNombre() . \"<br>\";");
- pw.println(" * }");
- pw.println(" * </code>");
- pw.println(" * @static");
- pw.println(" * @param "+toCamelCase(tabla)+" [$"+tabla+"] El objeto de tipo " + toCamelCase(tabla));
- pw.println(" * @param bool [$json] Verdadero para obtener los resultados en forma JSON y no objetos. En caso de no presentare este parametro se tomara el valor default de false.");
- pw.println(" **/");
- pw.println(" public static final function search( $"+tabla+" , $json = false)");
- pw.println(" {");
- pw.println(" $sql = \"SELECT * from "+tabla+" WHERE (\"; ");
- pw.println(" $val = array();");
- for(Field f : fields)
- {
- pw.println(" if( $"+tabla+"->get"+toCamelCase(f.title)+"() != NULL){");
- pw.println(" $sql .= \" "+ f.title +" = ? AND\";");
- pw.println(" array_push( $val, $"+tabla+"->get"+toCamelCase(f.title)+"() );");
- pw.println(" }");
- pw.println();
- }
- pw.println(" $sql = substr($sql, 0, -3) . \" )\";" );
- pw.println(" global $conn;");
- pw.println(" $rs = $conn->Execute($sql, $val);");
- pw.println(" if($json === false){");
- pw.println(" $ar = array();");
- pw.println(" foreach ($rs as $foo) {");
- pw.println(" array_push( $ar, new "+ toCamelCase( tabla ) +"($foo));");
- pw.println(" }");
- pw.println(" return $ar;");
- pw.println(" }else{");
- pw.println(" $allData = '[';");
- pw.println(" foreach ($rs as $foo) {");
- pw.println(" $allData .= new "+ toCamelCase( tabla ) +"($foo) . ',';" );
- pw.println(" }");
- pw.println(" $allData = substr($allData, 0 , -1) . ']';" );
- pw.println(" return $allData;");
- pw.println(" }");
- pw.println(" }");
- pw.println();
- pw.println();
- }
- /*
- metodo update
- */
- {
- pw.println(" /**");
- pw.println(" * Actualizar registros.");
- pw.println(" * ");
- pw.println(" * Este metodo es un metodo de ayuda para uso interno. Se ejecutara todas las manipulaciones");
- pw.println(" * en la base de datos que estan dadas en el objeto pasado.No se haran consultas SELECT ");
- pw.println(" * aqui, sin embargo. El valor de retorno indica cuántas filas se vieron afectadas.");
- pw.println(" * ");
- pw.println(" * @internal private information for advanced developers only");
- pw.println(" * @return Filas afectadas o un string con la descripcion del error");
- pw.println(" * @param "+toCamelCase(tabla)+" [$"+tabla+"] El objeto de tipo " + toCamelCase(tabla) + " a actualizar.");
- pw.println(" **/");
- pw.println(" private static final function update( $"+tabla+" )");
- pw.println(" {");
- String sql = "";
- String args = "";
- String pk = "";
- String pkargs = "";
- for(Field f : fields){
- if( f.isPrimary )
- {
- pk += " " + f.title + " = ? AND";
- pkargs += "$"+tabla+"->get" + toCamelCase(f.title)+"(),";
- }else{
- args += "$"+tabla+"->get"+ toCamelCase(f.title) + "(), \n ";
- sql += f.title+" = ?, ";
- }
- }
- if(args.length()==0){
- }else{
- args = args.substring(0, args.length() -1 ) ;
- pk = pk.substring(0, pk.length() - 4 ) ;
- sql = sql.substring(0, sql.length() -2 );
- pw.println(" $sql = \"UPDATE "+tabla+" SET "+ sql + " WHERE " +pk+ ";\";" );
- pw.println(" $params = array( \n "+ args +" "+ pkargs +" );");
- pw.println(" global $conn;");
- pw.println(" try{$conn->Execute($sql, $params);}");
- pw.println(" catch(Exception $e){ throw new Exception ($e->getMessage()); }");
- pw.println(" return $conn->Affected_Rows();");
- }
- pw.println(" }");
- pw.println();
- pw.println();
- }
- /*
- metodo create
- */
- {
- pw.println(" /**");
- pw.println(" * Crear registros.");
- pw.println(" * ");
- pw.println(" * Este metodo creara una nueva fila en la base de datos de acuerdo con los ");
- pw.println(" * contenidos del objeto "+toCamelCase(tabla)+" suministrado. Asegurese");
- pw.println(" * de que los valores para todas las columnas NOT NULL se ha especificado ");
- pw.println(" * correctamente. Despues del comando INSERT, este metodo asignara la clave ");
- pw.println(" * primaria generada en el objeto "+toCamelCase(tabla)+" dentro de la misma transaccion.");
- pw.println(" * ");
- pw.println(" * @internal private information for advanced developers only");
- pw.println(" * @return Un entero mayor o igual a cero identificando las filas afectadas, en caso de error, regresara una cadena con la descripcion del error");
- pw.println(" * @param "+toCamelCase(tabla)+" [$"+tabla+"] El objeto de tipo " + toCamelCase(tabla) +" a crear." );
- pw.println(" **/");
- pw.println(" private static final function create( &$"+tabla+" )");
- pw.println(" {");
- String sql = "";
- String args = "";
- String sqlnames = "";
- String pk_ai = "";
- for(Field f : fields){
- if(f.isPrimary && f.isAutoIncrement)
- {
- pk_ai += "$"+tabla+"->set"+ toCamelCase(f.title) + "( $conn->Insert_ID() );";
- }else{
- args += "$"+tabla+"->get"+ toCamelCase(f.title) + "(), \n ";
- sqlnames += f.title+", ";
- sql += "?, ";
- }
- }
- sqlnames = sqlnames.substring(0, sqlnames.length() -2 ) ;
- args = args.substring(0, args.length() -1 ) ;
- sql = sql.substring(0, sql.length() -2 );
- pw.println(" $sql = \"INSERT INTO "+tabla+" ( "+ sqlnames + " ) VALUES ( "+ sql +");\";" );
- pw.println(" $params = array( \n "+ args +" );");
- pw.println(" global $conn;");
- pw.println(" try{$conn->Execute($sql, $params);}");
- pw.println(" catch(Exception $e){ throw new Exception ($e->getMessage()); }");
- pw.println(" $ar = $conn->Affected_Rows();");
- pw.println(" if($ar == 0) return 0;");
- pw.println(" " + pk_ai);
- pw.println(" return $ar;");
- pw.println(" }");
- pw.println();
- pw.println();
- }
- /*
- metodo byrange
- */
- {
- pw.println(" /**");
- pw.println(" * Buscar por rango.");
- pw.println(" * ");
- pw.println(" * Este metodo proporciona capacidad de busqueda para conseguir un juego de objetos {@link "+toCamelCase(tabla)+"} de la base de datos siempre y cuando ");
- pw.println(" * esten dentro del rango de atributos activos de dos objetos criterio de tipo {@link "+toCamelCase(tabla)+"}.");
- pw.println(" * ");
- pw.println(" * Aquellas variables que tienen valores NULL seran excluidos en la busqueda. ");
- pw.println(" * No es necesario ordenar los objetos criterio, asi como tambien es posible mezclar atributos.");
- pw.println(" * Si algun atributo solo esta especificado en solo uno de los objetos de criterio se buscara que los resultados conicidan exactamente en ese campo.");
- pw.println(" * ");
- pw.println(" * <code>");
- pw.println(" * /**");
- pw.println(" * * Ejemplo de uso - buscar todos los clientes que tengan limite de credito ");
- pw.println(" * * mayor a 2000 y menor a 5000. Y que tengan un descuento del 50%.");
- pw.println(" * {@*} ");
- pw.println(" * $cr1 = new Cliente();");
- pw.println(" * $cr1->setLimiteCredito(\"2000\");");
- pw.println(" * $cr1->setDescuento(\"50\");");
- pw.println(" * ");
- pw.println(" * $cr2 = new Cliente();");
- pw.println(" * $cr2->setLimiteCredito(\"5000\");");
- pw.println(" * $resultados = ClienteDAO::byRange($cr1, $cr2);");
- pw.println(" * ");
- pw.println(" * foreach($resultados as $c ){");
- pw.println(" * echo $c->getNombre() . \"<br>\";");
- pw.println(" * }");
- pw.println(" * </code>");
- pw.println(" * @static");
- pw.println(" * @param "+toCamelCase(tabla)+" [$"+tabla+"] El objeto de tipo " + toCamelCase(tabla));
- pw.println(" * @param "+toCamelCase(tabla)+" [$"+tabla+"] El objeto de tipo " + toCamelCase(tabla));
- pw.println(" * @param bool [$json] Verdadero para obtener los resultados en forma JSON y no objetos. En caso de no presentare este parametro se tomara el valor default de false.");
- pw.println(" **/");
- pw.println(" public static final function byRange( $"+tabla+"A , $"+tabla+"B , $json = false)");
- pw.println(" {");
- pw.println(" $sql = \"SELECT * from "+tabla+" WHERE (\"; ");
- pw.println(" $val = array();");
- for(Field f : fields)
- {
- pw.println(" if( (($a = $"+tabla+"A->get"+toCamelCase(f.title)+"()) != NULL) & ( ($b = $"+tabla+"B->get"+toCamelCase(f.title)+"()) != NULL) ){");
- pw.println(" $sql .= \" "+ f.title +" >= ? AND "+ f.title +" <= ? AND\";");
- pw.println(" array_push( $val, min($a,$b)); ");
- pw.println(" array_push( $val, max($a,$b)); ");
- pw.println(" }elseif( $a || $b ){");
- pw.println(" $sql .= \" "+ f.title +" = ? AND\"; ");
- pw.println(" $a = $a == NULL ? $b : $a;");
- pw.println(" array_push( $val, $a);");
- pw.println(" ");
- pw.println(" }");
- pw.println();
- }
- pw.println(" $sql = substr($sql, 0, -3) . \" )\";" );
- pw.println(" global $conn;");
- pw.println(" $rs = $conn->Execute($sql, $val);");
- pw.println(" if($json === false){");
- pw.println(" $ar = array();");
- pw.println(" foreach ($rs as $foo) {");
- pw.println(" array_push( $ar, new "+ toCamelCase( tabla ) +"($foo));");
- pw.println(" }");
- pw.println(" return $ar;");
- pw.println(" }else{");
- pw.println(" $allData = '[';");
- pw.println(" foreach ($rs as $foo) {");
- pw.println(" $allData .= new "+ toCamelCase( tabla ) +"($foo) . ',';" );
- pw.println(" }");
- pw.println(" $allData = substr($allData, 0 , -1) . ']';" );
- pw.println(" return $allData;");
- pw.println(" }");
- pw.println(" }");
- pw.println();
- pw.println();
- //termina -------
- }
- /*
- metodo delete
- */
- {
- pw.println(" /**");
- pw.println(" * Eliminar registros.");
- pw.println(" * ");
- pw.println(" * Este metodo eliminara la informacion de base de datos identificados por la clave primaria");
- pw.println(" * en el objeto "+toCamelCase(tabla)+" suministrado. Una vez que se ha suprimido un objeto, este no ");
- pw.println(" * puede ser restaurado llamando a save(). save() al ver que este es un objeto vacio, creara una nueva fila ");
- pw.println(" * pero el objeto resultante tendra una clave primaria diferente de la que estaba en el objeto eliminado. ");
- pw.println(" * Si no puede encontrar eliminar fila coincidente a eliminar, Exception sera lanzada.");
- pw.println(" * ");
- pw.println(" * @throws Exception Se arroja cuando el objeto no tiene definidas sus llaves primarias.");
- pw.println(" * @return int El numero de filas afectadas.");
- pw.println(" * @param "+toCamelCase(tabla)+" [$"+tabla+"] El objeto de tipo " + toCamelCase(tabla)+ " a eliminar");
- pw.println(" **/");
- pw.println(" public static final function delete( &$"+tabla+" )");
- pw.println(" {");
- String sql = "";
- String args = "";
- String pk = "";
- String pkargs = "";
- for(Field f : fields){
- if( f.isPrimary )
- {
- pk += " " + f.title + " = ? AND";
- pkargs += "$"+tabla+"->get" + toCamelCase(f.title)+"(), ";
- }
- }
- if(pkargs.length() == 0){
- }else{
- pkargs = pkargs.substring(0, pkargs.length() -2 ) ;
- pk = pk.substring(0, pk.length() - 4 ) ;
- pw.println(" if(self::getByPK("+ pkargs +") === NULL) throw new Exception('Campo no encontrado.');");
- //DELETE FROM `pos`.`cliente` WHERE `cliente`.`id_cliente` = 54 LIMIT 1
- pw.println(" $sql = \"DELETE FROM "+tabla+" WHERE " +pk+ ";\";" );
- pw.println(" $params = array( "+ pkargs +" );");
- pw.println(" global $conn;");
- pw.println();
- pw.println(" $conn->Execute($sql, $params);");
- pw.println(" return $conn->Affected_Rows();");
- }
- pw.println(" }");
- pw.println();
- pw.println();
- }
- pw.println("}");
- pw.close();
- }
- //parse view
- static void parseView(String vname) throws IOException
- {
- }
- //vo para vista
- static void parseViewTableVO( String tabla, ArrayList<Field> fields ) throws IOException
- {
- }
- //ado y adobase para vista
- static void parseViewTableADO( String tabla, ArrayList<Field> fields ) throws IOException
- {
- }
- /*
- init
- */
- static void parseContent() throws IOException
- {
- System.out.println("Starting...");
- String line ;
- int table_count = 0;
- int views_count = 0;
- while( (line = br.readLine()) != null )
- {
- if( line.indexOf("CREATE TABLE") != -1 )
- {
- table_count++;
- String t_name = line.substring( line.indexOf("`") + 1, line.lastIndexOf("`") );
- parseTable( t_name );
- }
- }
- //escribir el archivo de la estructura de las clases
- PrintWriter pw = new PrintWriter(new FileWriter("Estructura.php"));
- pw.println("<?php");
- pw.println(" /** Table Data Access Object.");
- pw.println(" * ");
- pw.println(" * Esta clase abstracta comprende metodos comunes para todas las clases DAO que mapean una tabla");
- pw.println(" * @author Alan Gonzalez <alan@caffeina.mx> ");
- pw.println(" * @access private");
- pw.println(" * ");
- pw.println(" */");
- pw.println(" abstract class TablaDAO");
- pw.println(" {");
- pw.println("");
- pw.println(" }");
- pw.println("");
- pw.println(" /** Table Data Access Object.");
- pw.println(" * ");
- pw.println(" * Esta clase abstracta comprende metodos comunes para todas las clases DAO que mapean una vista");
- pw.println(" * @author Alan Gonzalez <alan@caffeina.mx> ");
- pw.println(" * @access private");
- pw.println(" * ");
- pw.println(" */");
- pw.println(" abstract class VistaDAO");
- pw.println(" {");
- pw.println("");
- pw.println(" }");
- pw.println(" /** Value Object.");
- pw.println(" * ");
- pw.println(" * Esta clase abstracta comprende metodos comunes para todas los objetos VO");
- pw.println(" * @author Alan Gonzalez <alan@caffeina.mx> ");
- pw.println(" * @access private");
- pw.println(" * ");
- pw.println(" */");
- pw.println(" abstract class VO");
- pw.println(" {");
- pw.println("");
- pw.println("");
- pw.println(" }");
- pw.flush();
- pw.close();
- System.out.println("Parsed tables: " + table_count);
- System.out.println("Parsed views: " + views_count);
- }
- static void writeIncludes( )
- {
- try{
- PrintWriter pw = new PrintWriter(new FileWriter( "model.inc.php" ));
- pw.println("<?php");
- pw.println("/* Todos los includes de este sitema */" );
- pw.println();
- pw.println( "require_once ('Estructura.php');");
- for( String s : includes )
- {
- pw.println( "require_once ('"+ s +"');");
- }
- pw.close();
- }catch(IOException ioe){
- System.out.println("Inclues"+ioe);
- }
- }
- public static void main(String ... args)
- {
- br = null;
- includes = new ArrayList<String>();
- if(args.length < 1){
- System.out.println("No sql file specified... using bd.sql");
- readFile( "bd.sql" );
- }else{
- readFile( args[0] );
- }
- try{
- parseContent( );
- }catch(IOException ioe){
- System.out.println( "Error al parsear..." );
- }
- writeIncludes();
- closeFile();
- }
- }
- class Field{
- String title;
- String type;
- String comment;
- boolean isPrimary;
- boolean isAutoIncrement;
- Field( String title )
- {
- this.title = title;
- }
- Field( String title, String type, String comment, boolean isPrimary, boolean isAutoIncrement )
- {
- this.title = title;
- this.type = type;
- this.comment = comment;
- this.isPrimary = isPrimary;
- this.isAutoIncrement = isAutoIncrement;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement