Retomando mi blog.

Que tal!  a todos los Javaleros (estoy harto de que nos digan javeros por que sabemos que se pronuncia como “llaveros”) como sea estoy dispuesto a retomar de manera permanente mi blog. Comenzare posteando nuevos proyectos o utilerias que les puedan servir a todos ustedes.

Por ahora comenzare posteando un proyecto al cual llamamos AutzBuilder (como el que ya existe pero reloaded), para todos aquellos Administradores del viejo SVN y posteriormente  publicare mis demás proyectos así que, Saludos y espero mucha mucha retro-alimentación

Autorellenados de campos en Netbeans

Hola que tal, después de una larga ausencia en mi blog tengo una nueva idea y he decidido realizarla, espero que a uno o mas le interese esta librería para autorellenar jTexfield, jSpinner todo esto en netbeans.

No se ustedes pero hay veces que ami se me complica hacer el llenado de las cajas de texto radio-buttons cheks y demás, bueno pues con esta solución evitaremos esa fatiga de estar poniendo

cliente.setNombre(cajaDeTextoNombre.getText());

cliente.setApellido(cajaDeTextoApellido.getText());

cliente.setPuesto(cajaDeTextoPuesto.getText());

claro todo esto después de una buena validación de las cajas de texto(si es necesario), pues todo este rollo se acabo gracias a esta librería.

A considerar.

Si bien esta librería es útil solamente que tiene algunas cuestiones importantes(ademas de alguno que otro bug que trato de corregir), pero la primera de estas es:

Uso de un bean.- Es decir el Autofill se hace valer de beans por ejemplo

public class Usuario {

private String nombre;
private int numero;
private double numeroD;

public double getNumeroD() {
return numeroD;
}

public void setNumeroD(double numeroD) {
this.numeroD = numeroD;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public int getNumero() {
return numero;
}

public void setNumero(int numero) {
this.numero = numero;
}

}

Para los que estamos acostumbrados a usar estos beans o skeletons no se nos hace raro pero ojo el bean tiene propiedades privadas asi que se tienen que encapsular y dar salida a las variables (poner get y set de cada variable).

La segunda y que yo considero un poco desgraciada es que en el Frame tienes que tener la caja de texto con el nombre ke tienes en el bean por ejemplo

Frame=private JTextfield nombre    ————-     Bean= private String nombre

Frame=private JTextfield numero    ————-     Bean= private int numero;

Los dos con su respectivos get y set, osea que tambien se tienen que generar los get y set en el frame(para que netbeans lo haga automaticamente solamente presiona Alt+Insert(en el area de codificacion) -> Getter and Setter-> seleccionar los campos a generar.)

y sin mas rodeos solamente poner

AutoFill.fill(bean, frame);

y tiene su metodo de reversa que es

AutoFill.collect(bean, frame);

aqui les dejo un ejemplo de como quedaria

package autofill;

import javax.swing.JOptionPane;
import javax.swing.JSpinner;
import javax.swing.JTextField;

/**
*
* @author root
*/
public class Frame extends javax.swing.JFrame {

/** Creates new form Frame */
public Frame() {
initComponents();
Usuario m=new Usuario();
m.setNombre(“Carlos Antonio Landin Alvarado”);
m.setNumero(12565);
m.setNumeroD(15.5);
AutoFill.fill(m, this);
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings(“unchecked”)
// <editor-fold defaultstate=”collapsed” desc=”Generated Code”>
private void initComponents() {

nombre = new javax.swing.JTextField();
numero = new javax.swing.JSpinner();
numeroD = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jButton1.setText(“Collect”);
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(40, 40, 40)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jButton1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(numeroD, javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(numero, javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(nombre, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 222, Short.MAX_VALUE))
.addContainerGap(23, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(nombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(numero, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(numeroD, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton1)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);

pack();
}// </editor-fold>

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Usuario m2=new Usuario();
AutoFill.collectIn(m2, this);
JOptionPane.showMessageDialog(this, “valor de nombre: “+m2.getNombre()
+”\n Valor de Numero:”+m2.getNumero()+”\n Valor de Numero Double:”+m2.getNumeroD());
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Frame().setVisible(true);
}
});
}

public JTextField getNombre() {
return nombre;
}

public void setNombre(JTextField nombre) {
this.nombre = nombre;
}

public JSpinner getNumero() {
return numero;
}

public void setNumero(JSpinner numero) {
this.numero = numero;
}

public JTextField getNumeroD() {
return numeroD;
}

public void setNumeroD(JTextField numeroD) {
this.numeroD = numeroD;
}

// Variables declaration – do not modify
private javax.swing.JButton jButton1;
private javax.swing.JTextField nombre;
private javax.swing.JSpinner numero;
private javax.swing.JTextField numeroD;
// End of variables declaration

}

Aqui les pongo la direccion para descargar el Autorrellenador de campos para netbeans

Configurar LVS (piranha) en CentOS 5 tutorial en español

hola que tal amigos Javeros a falta de desarrollos en la empresa (ya que aqui solo desarrollan en PHP) no he podido postear algún codigo o alguna herramienta codifcada en Java pero ahora les traigo unos temas interesantes por ejemplo. He tenido que trabajar con cluster y actualmente sigo peleándome con MYSQL pero no dudo que en unos dias pueda tener todo listo para comenzar con la documentación (y pedir permiso a mi jefe, para que me deje publicarlo aquí en mi blog ) de cualquier forma yo adecuo mi documentación al blog asi que esperenlo, pero por ahora les voy a dejar el tutorial de como configurar LVS en CentOS 5 y lo voy a tratar de explicar lo mas que pueda cualquier duda o comentario porfa postenlo aquí prometo responderlos rápidamente.

Primero que nada vamos a conocer la tipologia que vamos a implementar, en mi caso seran 2 servidores en cluster  usando el algorithmo Direct Routing solamente uno como master y el otro como failover en caso que ocurra un error con el master el failover entrara en lugar de este, PERO… al mismo tiempo estos servidores seran como real severs (osea apaches comunes y corrientes que responen peticiones HTTP) y usaremos un reverse proxy por cuestiones de seguridad (si no les interesa poner el Reverse proxy no hay ningun problema el RP es fácil de configurar, en este tutorial solamente lo utilizaremos para redireccionar la peticion al LVS)como se puede ver en la siguiente imagen.

Cosas a considerar antes de comenzar la configuracion seran:

  1. Tener en mente la direccion IP Virtual a utilziar claro que esta tendra que ser en el rango que el router o las mismas maquinas puedan reconocerlo por ejemplo mi IPV sera 192.160.2.106.
  2. Escalabilidad en nuestra configuracion para que en un futuro se puedan agregar mas nodos y nuevos failovers.
  3. Tener instalado piranha o la Cluster suite de centos( en caso que no se tenga solo ejecutar la siguiente sentencia “#yum groupinstall “Clustering”

como se aprecia en la imagen tenemos el nodo1 que sera el Master de nuestro cluster en LVS asi que este lo configuraremos se la siguiente forma:

  1. Encender la herramienta de configuracion web de piranha con las siguientes lineas #piranha-passwd(para confifurar el password del usuario piranha para poder accesar a la aplicacion web) y #service piranha-gui start ( para el encendido del la herramienta) para hacer esto necesitas tener el httpd(apache de paquete default) instalado
  2. Agregar la IP primaria de nuestro cluster como se puede ver en la imagen nosotros agregamos la ip real de nuestro servidor que es 192.160.2.100
  3. Agregar  la ip del Failover de nuestro cluster que en nuestro caso sera la ip del nodo2
  4. Agregar nuestro servidor virtual en este ejemplo vamos a utilizar el puerto 42200 para la entrada al balanceo y utilzaremos el algoritmo de balanceo Round RobinNota: no olvides activar el servidor virtual presionando el boton (active) una ves que termines de configurar el servidor virtual(dando click en la pestañaVirtual server, seleccionando el servidor virtual y presionando el boton que dice (de)active para que ponga el status como “up”)

  5. agrega las direcciones IP de los apaches en Realserver y no olvides activarlos tambien.
  6. por ultimo la pantalla de Monitoring Scripts se queda como estaba por defaul si tu gustas agragar un script o alguna otra cosa pero recomiendo que se quede asi como esta
  7. Por ultimo se tendra que modificar el archivo /etc/sysctl.conf modificando el parametro de autoredireccionamiento
    • net.ipv4.ip_forward = 0
    • ejecutar el comando #sysctl -p que permitira parsear el archivo para escrivirlo en la carpeta /proc

Teniendo estas configuraciones esta listo nuestro servidor Master de piranha ahora continuemos con las configuraciones del failover(esclavo de piranha) este servidor tendra que configurarse solo por consola y poniendo las siguientes lineas de codigo una vez levantado nuestro cluster explicare como es que funciona el envio de paquetes ARP.

  1. #yum install arptables_jf – para instalar el paquete de arp’s los arp’s nos ayudaran a oculatar una IPV que se tendra que levantar en el nodo2 borrando las peticiones por el protocolo tcp(ping’s,peticiones http, ftp etc.) que se hagan a esta misma, en nuestro ejemplo la IPV sera la 192.160.2.106
  2. #arptables -A IN -d 192.160.2.106 -j DROP – esta instruccion para borrar todas las peticiones que se hagan a nuestra IPV
  3. #arptables -A OUT -d 192.160.2.106 -j mangle –mangle-ip-s 192.160.2.101 – linea nos ayudara a responder la peticion http(en nuestro caso de apache) directamente al router sin necesidad de pasar por el nodo master y una ves que llegue la peticion al router este lo enviara al cliente evitando cuellos de botella), la ip 192.160.2.101 sera la direccion ip del servidor en el que estamos como ya savemos el nodo2 tiene esta direccion.
  4. #service arptables_jf save – Salvando los cambios para los arps’s esta instruccion escribira un archivo en /etc/sysconfig/arptables que permitira modificar las reglas dictadas para los arp
  5. #service arptables_jf start – iniciamos el servicio de arp’s
  6. #chkconfig arptables_jf  on – ponemos al servicio que se arranque al iniciar el sistema
Notas adicionales

  • Agregar los siguientes parametros en el archivo /etc/sysctl.conf de los “Real Servers”
    • net.ipv4.conf.all.arp_ignore=1
    • net.ipv4.conf.all.arp_announce=2
    • y ejecutar el comando #sysctl -p que permitira parsear el archivo para escrivirlo en la carpeta /proc
  • modificar el puerto de escucha de apache en el parametro Listen 80 cambiarlo por Listen 42200 en alchivo httpd.conf de tu apache(por default esta en /etc/httpd/conf/httpd.conf)

Operaciones con fechas2 java

MATEMATCIAS CON FECHAS EN JAVA

Dado el exito de mi primer entrada de operaciones con fechas me he dado la tarea de hacer una libreria muchisimo mas completa, aun esta en beta ya que se pretende agregar muchisimo mas metodos, no dudes en postear sugerencias para la libreria.

Bueno pues esta libreria permitira agregar tiempo a una fecha en java con los siguientes metodos:

addMilisecond – agregar milisegundos a una fecha
addSecond – agregar segundos a una fecha
addMinute – agregar minutos a una fecha
addHour – agregar horas a una fecha
addMonth – agregar Meses a una fecha
addYear – agregar años a una fecha
———————————————————————-
reductMilisecond – resta/quita milisegundos a una fecha
reductSecond – resta/quita segundos a una fecha
reductMinute – resta/quita minutos a una fecha
reductHour – resta/quita horas a una fecha
reductMonth – resta/quita Meses a una fecha
reductYear – resta/quita años a una fecha
La libreria tambien utiliza algunos metodos que nos sirven para utilerias por ejemplo

format – que sirve para dar un formato especifico al dato con el que se esta trabajando y este se vale de un objeto SIMPLEDATEFORMAT por ejemplo:

MathDate date=new MathDate();
date.reductHour(1);
String s=date.format("yyyy/MM/dd hh:mm:ss");
System.out.println(s);
----------------------------------
Salida
2010/06/29 03:41:34
----------------------------------

isAfter – se utiliza para saber si la fecha que se pasa por parametro es menor a la fecha con la que se cuenta
por ejemplo:

MathDate date=new MathDate();
date.addHour(1);
boolean bol=date.isAfter(new Date());
System.out.println(bol);
----------------------------------
Salida
false
----------------------------------

isBefore – se utiliza para saber si la fecha que se pasa por parametro es mayor a la fecha con la que se cuenta por ejemplo:

MathDate date=new MathDate();
date.addHour(1);
boolean bol=date.isBefore(new Date());
System.out.println(bol);
----------------------------------
Salida
true
----------------------------------

isBetwen – se utiliza para saber si la fecha esta entre un rango de fechas por ejemplo:

MathDate date_mas_una_hora=new MathDate();
date_mas_una_hora.addHour(1);
MathDate date_menos_una_hora=new MathDate();
date_menos_una_hora.reductHour(1);
MathDate date3=new MathDate();
boolean bool=date3.isBetwen(date_menos_una_hora, date_mas_una_hora);
System.out.println(bool);
----------------------------------
Salida
true
----------------------------------

math esta funcion me encanta por que aqui mismo se puede hacer varias operaciones al mismo tiempo, sumar o restar el dato que se quiera

//valores permitidos milisecond|second|minute|hour|day|week|month|year
MathDate date=new MathDate();
date.math("+2day,+1minute,-1year,+20month,-10000second");
String s=date.format("yyyy/MM/dd hh:mm:ss");
System.out.println(s);
----------------------------------
Salida
2011/03/01 03:41:30
----------------------------------

reset Este metodo solamente devuelve solamente la fecha ya operada a la fecha de inicio en el siguiente ejemplo resto una hora a una fecha, la imprimo, mando llamar el metodo reset y la vuelvo a imprimir e aqui el ejemplo:

MathDate date=new MathDate();
date.reductHour(1);
String s=date.format("yyyy/MM/dd hh:mm:ss");
System.out.println(s);
date.reset();
System.out.println("******************");
s=date.format("yyyy/MM/dd hh:mm:ss");
System.out.println(s);
----------------------------------
Salida
2010/06/29 02:51:06
******************
2010/06/29 03:51:06
----------------------------------

y por ultimo les pongo ejemplo de como queda ya funcionando todo😀


package mathdate;
import math.date.util.MathCalendar;
import math.date.util.MathDate;
/**
*
* @author kloneton
*/
public class Main {
public static void main(String[] args) {
MathDate date=new MathDate();
MathCalendar calendar=date.reductHour(1);
System.out.println(calendar.getHour());
System.out.println(calendar.getMont());
System.out.println(calendar.getYear());
}
}

Espero les paresca interesante este proyecto muchas gracias aqui les dejo el link para descargarlo

MathDate Download

MathDate Page

Base de datos para Objetos en java (LilaDB)

Bueno pues yo he tratado de simular lo que es una base de datos el proyecto aun esta en beta y tiene actualmente dos funcionalidades el almacenar cadenas y objetos.

¿Como funciona?
El funcionamiento es sencillo aun que un poco revoltoso; Como objeto principal se utilizan HashMap es una especie de simulacion de arboles (no arboles binarios) un ejemplo grafico de lo que quiero demostrar es este:
Cada nodo del arbol es uun hashmap
usuarios->sistema->roles->administrador
y la representacion en objetos nativos de java seria
hashmap->hashmap->hashmap->ObjetoSerializado

Se tiene que tener en cuenta que los objetos a guardar tienen que implementar la interface Serializable, yo construí una clase llamado ObjetoSerializado el cual implementa esta interface y es usada dentro de la la clase principal.


import com.base.beans.ObjetoSerializado;

/**
*
* @author Carlos Landin
*/
public class Usuario implements Serializable{
private String nombre;
private String apellido;

public Usuario(String nombre, String apellido) {
this.nombre = nombre;
this.apellido = apellido;

}

public String getApellido() {
return apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

}


package basededatos;

import com.base.Db;
import java.util.Iterator;
import java.util.List;

/**
*
* @author root
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//se crea el objeto que sera la base de datos esto generara un archivo binario en la raiz del proyecto que facilmente se puede transportar
//el constructor esta sobrecargado pasandole el parametro booleano crea una nueva base de datos y sin el se utilisa una existente
Db base = new Db("ejemplo4",true);
//se apunta a la base de datos este metodo originalmente se tiene el constructor pero lo apunto aqui
//para simular una base datos, mas aaadelante se podran utilizar mas de una base de datos
base.use();
//yo construi un lector de querys el cual se representa de la siguente manera
base.execQuery("usuarios->1", new Usuario("Carlos", "Landin"));
//como se puede ver en el query primero se crea un nodo llamado usuario y dentro de este se pone un "id" pero en realidad es otro nodo
base.execQuery("usuarios->2", new Usuario("Alma", "Rodriguez"));
base.execQuery("usuarios->3", new Usuario("Francisco", "Diaz"));
//se recupera objeto que previamente se guardo
//es importante tener en cuenta que estos datos despues de ejecutar este query se escriven en un archivo
//se recuperan todos los nodos en este nivel del arbol
List u= (List) base.getObjetoSerializado("usuarios->*");
//tambien se puede recuperar un solo objeto
//List u= (List) base.getObjetoSerializado("usuarios->1");
//se muestran los datos el cual la salida tendria que ser
for (Iterator it = u.iterator(); it.hasNext();) {
usuario object = it.next();
System.out.println(object.getNombre());
}
//Salida
// Carlos
//Alma
//Francisco
//tambien esta libreria permite almacenar strings implementado algunos metodos mas como busqueda por ejemplo
//aqui se crean objetos en el mismo nivel que seria configuracion
base.execQuery("put tabla->configuracion->clave1");
base.execQuery("put tabla->configuracion->clave2");
//el siguiente metodo es para buscar seria el equivalente al LIKE en sql pero aqui se utiliza ' (comilla simple)
//la siguiente linea busca todos los que contengan la letra "o" no importa si tiene caracteres adelante o detras de el
List l = base.execQuery("get tabla->configuracion->'0'");
for (Object object : l) {
System.out.println(object);
}
//recuperando todos los elementos en este nivel
List l = base.executarQuery("get tabla1->ususarios->nombre->*");
for (Object object : l) {
System.out.println(object);
}

}
}

Ojala les paresca interesante aqui les adjunto el proyecto que estaba haciendo en Netbeans http://www.megaupload.com/?d=XDQN7JG8 disculpen la hora per deverdad el universo conspiro en mi contra😄 bueno ya como conclucion les pregunto

¿Y tu para que la usarias?

editado
Bueno pues una severa disculpa por mis horrores pero ese dia estaba tan apurado no habia visto la prorroga que habian dado jejejej, muchas gracias por las observaciones que me hicieron, la verdad si tenia contemplado refinar el idioma y esas cosas del spanglish, es solo que deverdad desarrolle rapidisimo la libreria que ni pense en ese momento en eso, bueno como sea aqui esta la version alfa del proyecto https://sourceforge.net/projects/liladb/

les pido de favor que si alguien quisiera aportar al proyecto ya sea agregar alguna funcionalidad o alguna sugerencia (o quisaz echarme la mano a traducirlo) prometo subir el proyecto ya con todos los metodos documentados SALUDOS A TODOS

Editado
La libreria se modifico para poder implementar nadamas la interface Serializable

Migrar llaves foráneas de innodb a ndb en mysql

Hola que a todos mis lectores pues ahora tengo un nuevo trabajo y por lo tanto algo nuevo que hacer ahora lo que tengo que hacer es levantar un clúster usando LVS+Mysql Cluster+Cluster suite y por ahora me estoy “peleando” con la base de datos, se supone que solo es cuestión de migrar las tablas… pues bien aquí vamos a tener problemas primero que nada debemos de conocer son las desventajas de usar mysql-cluster una vez que las conocemos procedamos a continuar con el trabajo.
Primero que nada sabemos que las llaves foráneas no son permitidas en el engine NDB para eso tenemos que forzarlas con triggers podemos hacer los trigers a manita (si es que no tenemos muchas llaves) pero que pasa cuando tenemos muchas llaves??? Por eso mismo me he dado a la tarea de crear un programa para que escriba los triggers y aqui se los dejo Saludos cualquier duda estoy a sus ordenes😀

Nota: debes de tener el archivo .sql solamente con las llaves que arroja el mysqldump en el que se va a basar el programa por ejemplo:

Nota: Necesitas crear esta tabla para ke funcione las referencias:
CREATE TABLE error_msg (error_msg VARCHAR(32) NOT NULL PRIMARY KEY)Engine=ndbcluster;

—————————-ARCHIVO EJEMPLO DE MYSQLDUMP—————————-
— Filtros para la tabla `admin_agente_zona`
ALTER TABLE `admin_agente`
ADD CONSTRAINT `agente_agente` FOREIGN KEY (`id_agente`) REFERENCES `admin_` (`id_agente`),
ADD CONSTRAINT `agente_zona_` FOREIGN KEY (`id_zona`) REFERENCES `admin_zonas` (`id_zona`);
— Filtros para la tabla `admin_`
ALTER TABLE `admin_compania`
ADD CONSTRAINT `admin_compania_db` FOREIGN KEY (`postgis_db`) REFERENCES `admin_db_postgis` (`postgis_db`),
ADD CONSTRAINT `compania_Requiere_ FOREIGN KEY (`id_agente`) REFERENCES `admin_agente` (`id_agente`),
ADD CONSTRAINT `compania_Requiere_` FOREIGN KEY (`id_compania_padre`) REFERENCES `admin_compania` (`id_compania`),
ADD CONSTRAINT `compania_Requiere_` FOREIGN KEY (`id_tipo_cia`) REFERENCES `admin_tipo_compania` (`id_tipo_cia`);
— Filtros para la tabla `admin_empresa`
ALTER TABLE `admin_empresa`
ADD CONSTRAINT `admin_empresa_ibfk_1` FOREIGN KEY (`id_compania`) REFERENCES `admin_compania` (`id_compania`),
ADD CONSTRAINT `admin_empresa_ibfk_3` FOREIGN KEY (`id_tipo_empresa`) REFERENCES `admin_tipo_empresa` (`id_tipo_empresa`);
—————————————————————————————————————————————————————————
Clase: creadordetrigers.java 

package cradordetrigers;

package cradordetrigers;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author kloneton
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        {
            try {
                //se abre el archivo
                File f = new File("constraints.txt");
                BufferedReader entrada = new BufferedReader(new FileReader(f));
                // creando patrones para saber que linea procesaremos
                String lineaTabla = "";
                List lista = new ArrayList();
                //leer el archivo completo
                System.out.println("DELIMITER $$");
                int contador = 0;
                while (entrada.ready()) {

                    String texto = entrada.readLine();
                    if (texto.contains("ALTER TABLE")) {
                        lineaTabla = texto;
                        contador++;
                    } else if (texto.contains("ADD CONSTRAINT")) {
                        lista.add(texto);
                    } else if (texto.contains("Filtros")) {
                        //dando output al triger mofique esta linea en caso de querer escrivir en un archivo
                        System.out.println(creaTriger(lista, lineaTabla));
                        lista.clear();
                    }

                }
                System.out.println("DELIMITER  ;");
                System.out.println(contador);
            } catch (IOException ex) {
                System.out.println("Error al leer archivo");
                ex.printStackTrace();
            }
        }
    }

    public static String creaTriger(List lista, String lineatabla) {
        //primer expresion regular para separar ALTER TABLE lo que utilizaremos aqui sera el nombre de nuestra PK
        Pattern patronTabla = Pattern.compile("(\\w+) (\\w+) `(.+)`");
        //asignando expresion a un matcher para separar la palabara
        Matcher matPK = patronTabla.matcher(lineatabla);
        if (matPK.find()) {
            // linea de aqui arriba busca la exspresion regular
            //separando el nombre de la tabla que llevara los PK
            String tabla_PK = matPK.group(3);
            String tabla_FK = "";
            String anidacion = "";
            //segunda expresion regular para separar los miembros que nos serviran de referencia
            Pattern patronFK = Pattern.compile("(.+FOREIGN KEY)\\p{Blank}(\\(.+\\))\\p{Blank}REFERENCES\\p{Blank}\\`(.+)\\`\\p{Blank}(.+)[\\,\\;]$");
            //variables, variables... y mas variables inicializadas para que no marque nullpointerexeption
            String trigger = "";
            String campo_PK = "";
            String campo_FK = "";
            String prefijoIf = "IF ";
            int contador = 0;
            //iterando cada una de las lineas para asi generar el output
            for (Iterator it = lista.iterator(); it.hasNext();) {
                String linea = it.next();
                //asignando al matcher el patron para separar la linea que contiene la llave
                Matcher matFK = patronFK.matcher(linea);
                //buscando la exprecion regular
                matFK.find();
                //separando los miembros y quitando comillas y parentesis
                tabla_FK = matFK.group(3);
                campo_PK = matFK.group(2).replaceAll("[\\(\\)\\`]", "");
                campo_FK = matFK.group(4).replaceAll("[\\(\\)\\`]", "");
                //vsi tiene mas de una llave este for nos ayudara a separarlos y asi crear un solo trigger
                if (campo_PK.contains(",") && campo_FK.contains(",")) {
                    String camposPK[] = campo_PK.split(",");
                    String camposFK[] = campo_FK.split(",");
                    campo_PK = "";
                    campo_FK = "";
                    for (int i = 0; i < camposPK.length; i++) {
                        campo_PK += " alias." + camposPK[i].trim() + " = new." + camposFK[i].trim();
                        if (i < (camposFK.length - 1)) {
                            campo_PK += "  AND  ";
                        }
                    }

                } else {
                    campo_PK = "alias." + campo_PK.trim() + " = ";
                    campo_FK = "new." + campo_FK.trim();
                }
                //construyendo el trigger agregando if o else en caso de tener mas de una llave
                prefijoIf = (0 == contador++) ? "\tIF" : "\tELSEIF ";
                anidacion += prefijoIf + "(SELECT COUNT(*) FROM " + tabla_FK + " alias WHERE " + campo_PK + " " + campo_FK + ")=0" + " \n" +
                        " \tTHEN" + " \n" +
                        " \tINSERT error_msg VALUES ('FK_INSERT_" + tabla_PK + "_" + tabla_FK + " Key Violated');" + " \n";

            }
            //dando salida a los mensajes de error que se insertaran en la tabla ya mencionada
            System.out.println(" INSERT INTO error_msg values('FK_INSERT_" + tabla_PK + "_" + tabla_FK + " Key Violated')$");
            System.out.println(" INSERT INTO error_msg values('FK_UPDATE_" + tabla_PK + "_" + tabla_FK + " Key Violated')$");
            //estructuta estandar del triger la variable anidacion es el producto en caso de tener mas de una PK
            trigger = "" +
                    " CREATE TRIGGER FK_INSERT_" + tabla_PK + "_" + tabla_FK + " \n" +
                    "  BEFORE INSERT" + " \n" +
                    " \tON  " + tabla_PK + " \n" +
                    " \tFOR EACH ROW" + " \n" +
                    " \tBEGIN" + " \n" + anidacion +
                    " \tEND IF;" + " \n" +
                    " END;$$";
            //remplazando valores para hacer el Before Update
            String trigTemp = trigger;
            trigTemp = trigTemp.replace("new.", "old.");
            trigTemp = trigTemp.replaceAll("FK_INSERT", "FK_UPDATE");
            trigTemp = trigTemp.replaceAll("BEFORE INSERT", "BEFORE UPDATE");
            trigger += "\n" + trigTemp;

            return trigger;
        } else {
            return "";
        }
    }
}

Operaciones con fechas java

fechas

Bueno primero que nada una severa disculpa por que no habia podido escrivir sobre el comentario que dejaron hice un  videotutorial de como insertar un .swf en java swing ya esta nadamas que he tenido problemas para subirlo si alguien conose un servido bueno pls post it me continuando con el trabajo aqui les dejo una clase que tiene muchas operaciones para fechas (se preguntaran por que estoy muy traumado con ls fechas) lo que pasa es que en mi trabajo haora mismo desarrollo un RelogChecador cosa que implica mucho trabajo con fechas bueno pues aqui les dejo mi clase cualquer cosa avisenme porfavor la mayoria de los metodos son estaticos abajo lez dejo otro ejemplo de como se podrian mandar llamar.

Clases utilizadas:

Veamos la clase que hasta el momento estoy alimenando 

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.kloneton.utilerias;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.StringTokenizer;

/**
 *
 * @author klone
 */
public class Fecha {

    public Fecha() {
    }

    /**
     * extencion de java.util.SimpleDateFormat
     * @param formato
     *  String de formato ejemplo:
     * <center>getFecha("dd/MM/yyyy")<br /> return 05/04/2009</center>
     * @see SimpleDateFormat
     * @return
     */
    public static String getFecha(String formato) {
        Date date = new Date();
        SimpleDateFormat formating = new SimpleDateFormat(formato);
        return formating.format(date);

    }

    /**
     *  Este metodo funciona con objets tipo sqlDate
     * @param formato
     * @param date
     * @return
     */
    public static String getFecha(String formato, java.sql.Date date) {
        SimpleDateFormat formating = new SimpleDateFormat(formato);
        return formating.format(date);

    }

    /**
     * Este metodo funciona con objets tipo utilDate
     * @param formato
     * @param date
     * @return
     */
    public static String getFecha(String formato, Date date) {
        SimpleDateFormat formating = new SimpleDateFormat(formato);
        return formating.format(date);

    }

    /**
     * retorna la fecha en español en formato YYYY/MMMM/DD
     * <sub>
     * <br />  YYYY= AÑO EN CUATRO DIGITOS ejemplo 2009
     * <br />  MMMM= MES EN ESPAÑOL ejemplo ABRIL
     * <br />  DD= DIA DEL MES  ejemplo 05</sub>
     * @param separador
     * Se usa para separar la cadena de fecha por ejemplo:
     * <br />
     * <center> getFechaCompletaEsp("/")
     * <br />return 2009/ABRIL/05  </center>
     * @return
     */
    public static String getFechaCompletaEsp(String separador) {
        Date date = new Date();
        SimpleDateFormat formating = new SimpleDateFormat("yyyy,MM,dd");

        StringBuffer buffer = new StringBuffer();
        StringTokenizer tokens = new StringTokenizer(formating.format(date), ",");
        buffer.append(tokens.nextElement().toString());
        buffer.append(separador);

        switch (Integer.parseInt(tokens.nextElement().toString())) {
            case 1:
                buffer.append("Enero");
                break;
            case 2:
                buffer.append("Febrero");
                break;
            case 3:
                buffer.append("Marzo");
                break;
            case 4:
                buffer.append("Abril");
                break;
            case 5:
                buffer.append("Mayo");
                break;
            case 6:
                buffer.append("Junio");
                break;
            case 7:
                buffer.append("Julio");
                break;
            case 8:
                buffer.append("Agosto");
                break;
            case 9:
                buffer.append("Septiembre");
                break;
            case 10:
                buffer.append("Octubre");
                break;
            case 11:
                buffer.append("Nobiembre");
                break;
            case 12:
                buffer.append("Diciembre");
                break;
        }
        buffer.append(separador);
        buffer.append(tokens.nextElement().toString());
        return buffer.toString().toUpperCase();
    }

    /**
     *Este metodo es utilizado para  saber en dos letras el dia de la semana<br />
     * y lo calcula por medio de la clase Calendar jsugando el dia de la semana
     * @return "Lu","Ma","Mi,"Ju","Vi","Sa","Do"
     * @see Calendar
     */
    public static String getDiaSemana() {
        String dia = "";
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        int diaInt = cal.get(Calendar.DAY_OF_WEEK);
        switch (diaInt) {
            case 1:
                dia = "Do";
                break;
            case 2:
                dia = "Lu";
                break;
            case 3:
                dia = "Ma";
                break;
            case 4:
                dia = "Mi";
                break;
            case 5:
                dia = "Ju";
                break;
            case 6:
                dia = "Vi";
                break;
            case 7:
                dia = "Sa";
                break;

        }
        return dia;
    }

    /**
     *Este metodo es utilizado para  saber en numero el dia de la semana<br />
     * y lo calcula por medio de la clase Calendar jsugando el dia de la semana
     * @return 1,2,3,4,5,6,7
     * @see Calendar
     */
    public static int getDiaSemanaInt() {

        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        return cal.get(Calendar.DAY_OF_WEEK) + 1;
    }

    /**
     * Resta un determidado numero de minutos a una hora especificada en un Calendar
     * <b>NO SE PODRA RESTAR MAS DE 60MINUTOS</B>
     * @param cal
     * @param minutosAgregar
     * @see Calendar
     */
    public static Calendar restaMinutos(Calendar cal, int mintuosARestar) {
        Calendar calendar = Calendar.getInstance();
        int hora = cal.get(Calendar.HOUR_OF_DAY);
        int minuto = cal.get(Calendar.MINUTE);
        if (minuto - mintuosARestar < 0) {
            int nuevoMinuto = 60 - mintuosARestar;
            calendar.set(0, 0, 0, hora - 1, nuevoMinuto);
        } else {
            calendar.set(0, 0, 0, hora, calendar.get(Calendar.MINUTE) - mintuosARestar);
        }
        return calendar;
    }

    /**
     * Agrega un determidado numero de minutos a una hora especificada en un Calendar
     * * <b>NO SE PODRA AGREGAR MAS DE 60MINUTOS</B>
     * @param cal
     * @param minutosAgregar
     * @see Calendar
     */
    public static Calendar agregaMinutos(Calendar cal, int minutosAgregar) {
        Calendar calendar = Calendar.getInstance();
        int hora = cal.get(Calendar.HOUR_OF_DAY);
        int minuto = cal.get(Calendar.MINUTE);
        if (minuto + minutosAgregar >= 60) {
            int nuevoMinuto = minuto - 60;
            nuevoMinuto -= minutosAgregar;
            calendar.set(0, 0, 0, (hora + 1), nuevoMinuto, Calendar.MINUTE);
        } else {
            calendar.set(0, 0, 0, hora, cal.get(Calendar.MINUTE) + minutosAgregar);
        }
        return calendar;
    }

    /**
     * comp es el Calendar a comparar return true si cal menor comp si no false
     * @param cal
     * @param comp
     * @return
     */
    public static boolean esMenor(Calendar cal, Calendar comp) {
        if (cal.compareTo(comp) <= 0) {
            return true;
        } else {
            return false;
        }

    }

    /**
     *
     * @param cal
     * @param comp
     * @return
     */
    public static boolean esMayorIgual(Calendar cal, Calendar comp) {

        if (cal.compareTo(comp) > 0) {
            return true;

        } else {
            return false;
        }

    }

    /**
     *
     * @param buscar
     * @param menor
     * @param mayor
     * @return boolean
     */
    public static boolean esEntre(Calendar buscar, Calendar menor, Calendar mayor) {

        if (esMayorIgual(buscar, menor) && esMenor(buscar, mayor)) {
            return true;
        } else {
            return false;
        }

    }

    /**
     * Este metodo funciona para encontrar la diferencia en dias entre dos Calendar
     * @param inicio
     * @param fin
     * @return
     */
    public static long diferenciaDates(Calendar inicio, Calendar fin) {
        long diferenciaMilis = fin.getTimeInMillis() - inicio.getTimeInMillis();
        long diferenciaDias = diferenciaMilis / (1000 * 60 * 60 * 24);
        return diferenciaDias;

    }
}
como se pueden ver todos los metodos son estatic s aqui les pongo el ejemplo de como se podrian utilizar ya en un main 
public static void main(String args[]) {
        System.out.println(Fecha.getDiaSemana()); // salida Ju
        System.out.println(Fecha.getFechaCompletaEsp("-")); // salida 2009-MAYO-07
        System.out.println(Fecha.getFecha("dd/MM/yyyy hh:mm:ss aa", new Date()));
        Calendar calendarAagregar=Calendar.getInstance();// inicializamoz nuestro calendar con la fecha  de haorita 2008-05-07 13:17:00
        Calendar calendarNuevo=Fecha.agregaMinutos(calendarAagregar, 20);
        Date fechaSalida=calendarNuevo.getTime();//extraemos el objeto Date para poder ulizar nuestros metodos
        System.out.println(Fecha.getFecha("dd/MM/yyyy hh:mm:ss aa",fechaSalida)); // salida 2008-05-07 13:37:00
    }
Muchas gracias por dedicarme unos minutos hasla luego ojala que para hoy ya este arriba el Video tutorial saludos.

Eltima component

Logo de eltima software

Hola que tal a todos losseguidores de mi blog para mi segundo post😄 quiero hacer algo muy especial y esto es “compartir” esta magnifica libreria que en ocaciones hace milagros  por jemplo yo hace poco tenia que entregar un proyecto para mi clase de programacion y por parte de mi trabajo pude conseguir esta libreria no estoy muy seguro que la compraron pero TOTAL llego a mis manos y quiziera compartirla con uds pues tengo planeado hacer un par de post en el que explique la funcionalidad de los componentes mas usados de esta libreria. primero que nada quiero exponer “QUE ES ELTIMA PARA MI”.

  1. un grupo de componentes (jLabel, JPanel,jTable y muchos mas) con funciones de mas.
  2. una salvacion para aquellos que quieren ponerle un poco mas de estilo a los prgramas.
  3. haorro de tiempo tremendamente.
  4. un frame para swing.

pues bien como diria Gutar Hero VAMOZ A DARLE CAÑA Como siempre tratare de hacer las cosas muchismo mas facil ya que nustro objetivo es haorrar tiempo y como la mayoria de los estudiantes (y alguno ke otro experimentado)

¿COMO LO AGO CON NETBEANS?

Para los que no conocen netbeans es un IDE para desarrollar programas en java desde Java Swing, Java para moviles, Java para la web, Java FX y actualmente ya tiene un gran soporte para PHP, Rubi on Rails y Grouvy y muchas cossisisimas mas solo que la verdad no expoto al maximo netbeans pero si lo ocupo en muchas ocaciones. aqui les dejo un TUTORIAL BASICO DE NETBEANS

haora para hacer mas facil nuestra codificacion vamos a incrustar nuestro componente en el palette de netbeans para solo arrastrar y soltar lo que necesitamos

Herramientas a utilizar

Libreria de EltimaComponents click aki

ahora aqui Descargar Eltima components

Netbeans Utima Release

  1. Creamos un proyecto de Java Aplication  .
crear proyecto

crear proyecto

2. Creamos un JFrame pulsando boton derecho sobre un paquete

Cramos un JFrame

Cramos un JFrame

3.  le ponemos un JFrame (Recuerda que todas las clases de Java deven de empesar con Mayusculas) y pulsamos Finish

Nombre al JFrame

Nombre al JFrame

4. Pulsamos boton derecho sobre el Palette que netbeans tiene para insertar Componentes(el passo 4 y paso 5 se pueden omitir pero es recomendable por cuestion de organizacion)

Creamos una category

Creamos una category

5. le ponemos un nombre a la categoria de objetos (en mi caso puse Eltima Components) para identificarlos por grupos

Poner Nombre Category

Poner Nombre Category

6. Pulsamos boton derecho sobre las categoria y escojemos Palette Manager… para incrustar nuestros objetos

Incrustamos nuestro gupo de objetos Eltima Components

Incrustamos nuestro gupo de objetos Eltima Components

6. Pulsamos el boton Add from Jar.

Pulsar Add from Jar

Pulsar Add from Jar

7. Seleccionamos el Jar que desacargamos de eltima components

Seleccionar Eltima Jar

Seleccionar Eltima Jar

8. Seleccionamos todos los objetos de la lista (pulsando Shift y seleccionando desde el primero hasta el ultimo de la lista) y pulsamos Next>.

Seleccionamos todos los JComponets de eltima

Seleccionamos todos los JComponets de eltima

9. Seleccionamos la categoria que en el paso 5 creamos y pulsamos Finish.

Seleccionamos Eltima Components

Seleccionamos Eltima Components

10.  una vez creado nuestro grupo de componentes solamente es cuestion de arrastrar hacia la venta el componente que nesecitemos y listo.

en este caso yo agrego un ElCalculatorField que sirve para desplegar una calculadora prediseñada con algua que otra utileria

Solo es cuestion de arrastrar..

Solo es cuestion de arrastrar..

11. corremos el proyecto pulsando Shift+f6(Run Single) y este sera nuestro resultado.

Ejemplo de ElCalculatorTime ya funcionando

Ejemplo de ElCalculatorTime ya funcionando

NOTA. se necesita un teclado y mouse para hacer el Tutorial siguendo mis pasos jeeje por que hacer el tutorial con solo el teclado puede ser un poco tedioso pero si gustan lo hago Klonetones.wordpress.com estamos para echarnos la mano.

Si les quedo alguna duda no duden en postearme y preguntarme en mis proximos POST explicare la utilizacion de algunos de los componentes POSTEEN de cual quieren aprender por mi parte es todo ojala y les sirva este pequeño tutorial

SALUDOS JAVEROS!

Como formatear fechas facilmente en java

 

Hola que tal a todos!

En esta ocacion mi primero post por cierto vamos ha ver una forma muy sencilla de como formatear fechas en java en esta ocacion solo vamos a utilizar una clase llamada

aqui tambien les dejo la tabla de que datos vamos a utilizar

Letter  Date or Time Component  Presentation  Examples 
G  Era designator  Text  AD 
y  Year  Year  1996; 96 
M  Month in year  Month  July; Jul; 07 
w  Week in year  Number  27 
W  Week in month  Number  2 
D  Day in year  Number  189 
d  Day in month  Number  10 
F  Day of week in month  Number  2 
E  Day in week  Text  Tuesday; Tue 
a  Am/pm marker  Text  PM 
H  Hour in day (0-23)  Number  0 
k  Hour in day (1-24)  Number  24 
K  Hour in am/pm (0-11)  Number  0 
h  Hour in am/pm (1-12)  Number  12 
m  Minute in hour  Number  30 
s  Second in minute  Number  55 
S  Millisecond  Number  978 
z  Time zone  General time zone  Pacific Standard Time; PST; GMT-08:00 
Z  Time zone  RFC 822 time zone  -0800

vamosal codigo Java 

package free.kloneton;

import java.text.SimpleDateFormat;

import java.util.Date;

public class FormatearFecha {

    public static void main(String[] args) {

        SimpleDateFormat formateador=new SimpleDateFormat("dd/MM/yyyy");

        String fecha=formateador.format(new Date());

        System.out.println(fecha);

    }

}

y el resultado es : 

init:  

deps-jar:

compile-single:

run-single:

26/04/2009

BUILD SUCCESSFUL (total time: 2 seconds)

Aqui tenemos un enlace que hace las cosas de forma invrsa de String “05/05/1988” a un objeto java.util.Date

SimpleDateFormat inverso

Como pueden ver es un codigo muy simple  cualquier duda por favor avisenme.