Ejemplo

El siguiente código es un programa que valida el ingreso de usuarios, pidiendo la contraseña y el nombre del usuario respectivamente. En este programa implementamos el patrón Factory Method y Singleton.

Este programa tiene tres paquetes; un paquete que se llama bd y tiene la clase Conexion, otro que se llama interfaz y que tiene las clases MenuUsuario y Validacion, y por ultimo el paquete llamado logica que tiene las siguientes clases: TipoUsuario, Local, CreadorLocal, Remoto, CreadorRemoto, Corporativo, CreadorCorporativo, Comun, CreadorComun, Creador.

A continuacion veremos la clase Conexion que pertenece al paquete bd.

package bd;


import java.sql.*;
/**
* Clase encargada de realizar la conexion con la base de datos esta misma clase se encarga de consultar y hacer persistencia de datos.
*/
public class Conexion {

static private String bd = "validacionUsuarios";
static private String login = "root";
static private String password = "programacion";
static private String url = "jdbc:mysql://localhost/" + bd;
static private Conexion conex = null;
private String CadenaSql;
private Connection conexion = null;
/**
* el contructor se encargada de realizar la conexion a la base de datos
* y muestra en consola mensajes si se pudo o no conectar a labase de datos.
*/

static public Conexion getConexion() {
if (conex == null) {
conex = new Conexion();
}
return conex;
}
private Conexion() {
try {
System.out.println("Tratando de cargar el driver");
Class.forName("com.mysql.jdbc.Driver");
conexion = DriverManager.getConnection(url, login, password);
if (conexion != null) {
System.out.println("Conexion a base de datos " + bd + " OK");
}
} catch (SQLException sqlEx) {
System.out.println(sqlEx);
} catch (ClassNotFoundException ex) {
System.out.println(ex);
}
}

/**
*
* Funcion encargada de realizar las consultas para poder usarla debe existir
* una conexion a base de datos
*
*
* @return ResultSet
*/
public ResultSet Consultar() {
ResultSet tabla = null;
try {
Statement stmt = conexion.createStatement();
tabla = stmt.executeQuery(CadenaSql);
} catch (SQLException ex) {
System.out.println(ex);
}
return tabla;
}
/**
* Setter que asigna el valor a la cadenaSql
*
* @param String cadena;
*/
public void setCadena(String cadena) {
CadenaSql = cadena;
}
/**
* getter que retorna
*
* @return Connection;
*/
public Connection getConectar() {
return conexion;
}
/**
* Funcion encargada de realizar la desconexion a base de datos
*/
public void desconectar() {
conexion = null;
}
/**
* Funcion encargada de retornar el objeto conexion y garantiza que la clase se instancie una sola vez.
* @return Conexion
* @uml.property name="conexion"
*/
}

ahora la clase MenuUsuario que pertenece al paquete interfaz

package interfaz;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import logica.TipoUsuario;

public class MenuUsuario extends Frame implements ActionListener {

private Button salir;
private JTextArea informacion;
private TipoUsuario relacion;
private Font fuente1;

public MenuUsuario(TipoUsuario datos) {

this.setLayout(null);
this.setResizable(false);
relacion = datos;
this.setTitle("BIENVENIDO " + " ***** " + relacion.getTipoUsuario() + " ***** ");
this.setSize(380, 280);
this.setLocation(200, 70);
this.setBackground(Color.BLACK);

salir = new Button("Salir");
salir.setBounds(160, 210, 70, 40);
salir.addActionListener(this);
add(salir);

informacion = new JTextArea();
informacion.setSize(250, 150);
informacion.setLocation(70, 50);
add(informacion);

fuente1 = new Font("Helvética", Font.ITALIC + Font.ROMAN_BASELINE, 12);
informacion.setFont(fuente1);
informacion.setText(relacion.infor);
this.setVisible(true);
informacion.setForeground(Color.blue);
informacion.setEditable(false);
addWindowListener(new Cierre());
}

public void actionPerformed(ActionEvent e) {
if (e.getSource() == salir) {
System.exit(0);
}
}
}

class Cierre extends WindowAdapter {

@Override
public void windowClosing(WindowEvent e) {
System.exit(0);

}
}

y la clase Validacion que pertenece tambien al paquete interfaz

package interfaz;

import java.awt.event.*;
import java.awt.*;
import javax.swing.JOptionPane;

import logica.*;

public class Validacion extends Frame implements ActionListener {

private Creador creador;
private Label Usuario, Clave;
private TextField txfUs, txfCl;
private Button Salir, Ingresar;
private TipoUsuario us;

public Validacion() {

setLayout(null);
this.setBackground(Color.BLACK);
this.setResizable(false);
Ingresar = new Button("Ingresar");
creador = new CreadorLocal();
us = creador.construir();
Usuario = new Label("USUARIO :");
Usuario.setForeground(Color.white);
txfUs = new TextField(25);
txfUs.setText(null);
txfUs.setBackground(Color.white);
Clave = new Label("CONTRASEÑA :");
Clave.setForeground(Color.white);
txfCl = new TextField(30);
txfCl.setText(null);
Salir = new Button("Cancelar");

add(Usuario);
Usuario.setBounds(30, 60, 90, 20);
add(txfUs);
txfUs.setBounds(195, 60, 170, 20);
txfUs.addActionListener(this);
add(Clave);
Clave.setBounds(30, 90, 90, 20);
add(txfCl);
txfCl.setBounds(195, 90, 170, 20);
txfCl.addActionListener(this);
add(Ingresar);
Ingresar.setBounds(50, 150, 90, 30);
Ingresar.addActionListener(this);
add(Salir);
Salir.setBounds(250, 150, 90, 30);
Salir.addActionListener(this);
addWindowListener(new Cierre());

}

public static void main(String[] args) {
Validacion miIngreso = new Validacion();
miIngreso.setTitle("Validar Usuario y Contraseña");
miIngreso.setLocation(400, 200);
miIngreso.setSize(400, 200);
miIngreso.setVisible(true);
}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == Ingresar) {
if (txfUs.getText().length() != 0 && txfCl.getText().length() != 0) {
us.setNombre(txfUs.getText());
us.setClave(txfCl.getText());
us.capturaRelacion();
if (us.getExistencia() == true) {
if (us.getTipoUsuario().compareTo("local") == 0) {
creador = new CreadorLocal();
us = creador.construir();
}
if (us.getTipoUsuario().compareTo("remoto") == 0) {
creador = new CreadorRemoto();
us = creador.construir();
}
if (us.getTipoUsuario().compareTo("comun") == 0) {
creador = new CreadorComun();
us = creador.construir();
}
if (us.getTipoUsuario().compareTo("corporativo") == 0) {
creador = new CreadorCorporativo();
us = creador.construir();
}
this.dispose();
MenuUsuario MiMenu = new MenuUsuario(us);

} else {
JOptionPane.showMessageDialog(null,
"Usuario y/o contrase�a incorrectos ",
"Ingrese nuavamente sus datos", 0);
}
} else {
JOptionPane.showMessageDialog(
null,
" Existen Campos en blanco, <>",
"Informacion Incompleta", 2);
}
}
if (e.getSource() == Salir) {
System.exit(0);
}
}

class Cierre extends WindowAdapter {

@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
}
y ahora veremos todas las clases del paquete de logica

package logica;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import bd.Conexion;

public class Comun extends TipoUsuario {

private Conexion con;

public Comun() {
tipoUsuario = "Usuario comun";
infor="Usted puede Visualizar:\n\n Usuarios del tipo remoto.\n Usuarios de su mismo tipo.";
}

public String getTipoUsuario() {
return tipoUsuario;
}

public String getInformacion(){
return infor;
}
@Override
public void capturaRelacion() {
existe = false;
conexion.setCadena("SELECT * FROM registro where nombre ='"
+ this.getNombre() + "'");
ResultSet tabla = conexion.Consultar();
try {
while (tabla.next()) {
if (this.getClave().compareTo(tabla.getString("clave")) == 0) {
this.setTipo(tabla.getString("tipoUsuario"));
existe = true;
}
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Problemas con la tabla");
}
}
}

package logica;

import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class Corporativo extends TipoUsuario {


public Corporativo() {
tipoUsuario = "Usuario corporativo";
infor="Usted puede:\n\n Visualizar y modificar todos los tipos de usuario ";
}

public String getTipoUsuario() {
return tipoUsuario;
}
public String getInformacion(){
return infor;
}
@Override
public void capturaRelacion() {
existe = false;
conexion.setCadena("SELECT * FROM registro where nombre ='" + this.getNombre() + "'");
ResultSet tabla = conexion.Consultar();
try {
while (tabla.next()) {
if (this.getClave().compareTo(tabla.getString("clave")) == 0) {
this.setTipo(tabla.getString("tipoUsuario"));
existe = true;
}
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Problemas con la tabla");
}

}
}

package logica;

public abstract class Creador {

public abstract TipoUsuario factoryMethod();

public TipoUsuario construir() {
TipoUsuario tipoUs = factoryMethod();
return tipoUs;
}
}

package logica;

public class CreadorComun extends Creador{

public TipoUsuario factoryMethod()
{
return new Comun();
}
}

package logica;

public class CreadorCorporativo extends Creador{

public TipoUsuario factoryMethod()
{
return new Corporativo();
}
}

package logica;

public class CreadorLocal extends Creador{

public TipoUsuario factoryMethod()
{
return new Local();
}
}

package logica;

public class CreadorRemoto extends Creador{

public TipoUsuario factoryMethod()
{
return new Remoto();
}
}

package logica;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JOptionPane;

import bd.Conexion;

public class Local extends TipoUsuario {


public Local() {
tipoUsuario = "Usuario local";
infor = "Usted puede Visualizar:\n\n Usuarios de su mismo tipo.";
}

public String getTipoUsuario() {
return tipoUsuario;
}

public String getInformacion() {
return infor;
}

@Override
public void capturaRelacion() {
existe = false;
conexion.setCadena("SELECT * FROM registro where nombre ='" + this.getNombre() + "'");
ResultSet tabla = conexion.Consultar();
try {
while (tabla.next()) {
if (this.getClave().compareTo(tabla.getString("clave")) == 0) {
this.setTipo(tabla.getString("tipoUsuario"));
existe = true;
}
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Problemas con la tabla");
}
}
}

package logica;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JOptionPane;

public class Remoto extends TipoUsuario {

public Remoto() {
this.tipoUsuario = "Usuario remoto";
this.infor="Usted puede Visualizar:\n\n Usarios del tipo comun. \n Usuarios del tipo local. \n Usuarios de su mismo tipo.";
}

@Override
public void capturaRelacion() {
existe = false;
conexion.setCadena("SELECT * FROM registro where nombre ='"
+ this.getNombre() + "'");
ResultSet tabla = conexion.Consultar();
try {
while (tabla.next()) {
if (this.getClave().compareTo(tabla.getString("clave")) == 0) {
this.setTipo(tabla.getString("tipoUsuario"));
existe = true;
}
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Problemas con la tabla");
}
}
}

package logica;

import bd.Conexion;

public abstract class TipoUsuario {

static protected TipoUsuario usuario=null;
protected String nombreUsuario;
protected String claveUsuario;
protected String tipoUsuario;
protected boolean existe;
protected Conexion conexion;
public String infor;

public TipoUsuario() {
//Crea una instancia de la clase conexion
conexion = Conexion.getConexion();
existe = false;

}

public String getTipoUsuario(){
return tipoUsuario;
}

public String getNombre() {
return nombreUsuario;
}

public String getClave() {
return claveUsuario;
}

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

public void setClave(String clave) {
this.claveUsuario = clave;
}
public boolean getExistencia(){
return existe;
}

public void setTipo(String tipo){
this.tipoUsuario=tipo;
}

public String getInformacion(){
return infor;
}
public abstract void capturaRelacion();
}


No hay comentarios:

Publicar un comentario