/**
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* $Id: InterfazBanco.java 1207 2008-05-05 15:03:53Z jua-gome $
* Universidad de los Andes (Bogotá - Colombia)
* Departamento de Ingeniería de Sistemas y Computación
* Licenciado bajo el esquema Academic Free License version 2.1
*
* Proyecto Cupi2 (http://cupi2.uniandes.edu.co)
* Ejercicio: n9_banco
* Autor: Carlos Andrés Vega - 29-feb-2008
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
package uniandes.cupi2.banco.interfaz;
import java.awt.BorderLayout;
import java.io.FileNotFoundException;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import uniandes.cupi2.banco.mundo.Banco;
import uniandes.cupi2.banco.mundo.CajaExisteException;
import uniandes.cupi2.banco.mundo.CajaNoExisteException;
import uniandes.cupi2.banco.mundo.CajaOcupadaException;
import uniandes.cupi2.banco.mundo.Cliente;
import uniandes.cupi2.banco.mundo.ClienteExisteException;
import uniandes.cupi2.banco.mundo.ClienteNoExisteException;
import uniandes.cupi2.banco.mundo.PersistenciaException;
import uniandes.cupi2.banco.mundo.TransaccionNoPermitidaException;
/**
* Esta es la ventana principal de la aplicación.
*/
public class InterfazBanco extends JFrame
{
/**
* Constante para la serialización
*/
private static final long serialVersionUID = 1L;
/**
* Ruta al archivo donde se persiste la información
*/
private final static String DATA = "./data/banco.data";
// -----------------------------------------------------------------
// Atributos
// -----------------------------------------------------------------
/**
* Clase principal del mundo
*/
private Banco banco;
// -----------------------------------------------------------------
// Atributos de la interfaz
// -----------------------------------------------------------------
/**
* Panel con las extensiones
*/
private PanelExtension panelExtension;
/**
* Panel con la imagen del encabezado
*/
private PanelImagen panelImagen;
/**
* Panel donde se visualiza el Banco
*/
private PanelBanco panelBanco;
/**
* Panel con las opciones que brinda la aplicación
*/
private PanelOpciones panelOpciones;
// -----------------------------------------------------------------
// Constructores
// -----------------------------------------------------------------
/**
* Construye pa ventana principal de la aplicación
*/
public InterfazBanco( )
{
// Crea la clase principal
try
{
banco = new Banco( DATA );
// Construye la forma
getContentPane( ).setLayout( new BorderLayout( ) );
setSize( 800, 600 );
setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
setTitle( "Banco" );
// Creación de los paneles aquí
panelImagen = new PanelImagen( );
add( panelImagen, BorderLayout.NORTH );
panelExtension = new PanelExtension( this );
add( panelExtension, BorderLayout.SOUTH );
panelBanco = new PanelBanco( );
add( panelBanco, BorderLayout.CENTER );
panelBanco.actualizar( banco.darPrimeraCaja( ) );
panelOpciones = new PanelOpciones( this );
add( panelOpciones, BorderLayout.WEST );
// Centrar la ventana
setLocationRelativeTo( null );
}
catch( PersistenciaException e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Banco", JOptionPane.INFORMATION_MESSAGE );
super.dispose( );
}
}
// -----------------------------------------------------------------
// Métodos
// -----------------------------------------------------------------
/**
* Actualiza la visualización del banco
*/
public void actualizar( )
{
panelBanco.actualizar( banco.darPrimeraCaja( ) );
}
/**
* Muestra el dialogo para agregar una caja al banco
*/
public void mostrarDialogoAgregarCaja( )
{
DialogoAgregarCaja dialogo = new DialogoAgregarCaja( this );
dialogo.setVisible( true );
}
/**
* Agrega una caja al banco
* @param idCaja Identificador de la caja a agregar
* @param tipoTransaccion Tipo de transacción que atenderá la caja
* @param dineroInicial Dinero inicial de la caja
*/
public void agregarCaja( int idCaja, String tipoTransaccion, int dineroInicial )
{
try
{
banco.agregarCaja( idCaja, tipoTransaccion, dineroInicial );
actualizar( );
}
catch( CajaExisteException e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Agregar Caja", JOptionPane.INFORMATION_MESSAGE );
}
}
/**
* Elimina una caja del banco
*/
public void eliminarCaja( )
{
String id = JOptionPane.showInputDialog( this, "Ingrese el identificador de la caja a eliminar." );
if( id != null )
{
try
{
int idCaja = Integer.valueOf( id );
banco.eliminarCaja( idCaja );
actualizar( );
}
catch( NumberFormatException e )
{
JOptionPane.showMessageDialog( this, "Formato no valido", "Eliminar Caja", JOptionPane.ERROR_MESSAGE );
}
catch( CajaNoExisteException e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Eliminar Caja", JOptionPane.INFORMATION_MESSAGE );
}
catch( CajaOcupadaException e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Eliminar Caja", JOptionPane.INFORMATION_MESSAGE );
}
}
}
/**
* Muestra el dialogo para agregar un cliente
*/
public void mostrarDialogoAgregarCliente( )
{
DialogoAgregarCliente dialogo = new DialogoAgregarCliente( this );
dialogo.setVisible( true );
}
/**
* Agregar un cliente al banco
* @param id Id del cliente a agregar
* @param tipoTransaccion Tipo de transacción a realizar por el cliente
*/
public void agregarCliente( int id, String tipoTransaccion )
{
try
{
banco.agregarCliente( id, tipoTransaccion );
actualizar( );
}
catch( CajaNoExisteException e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Agregar Cliente", JOptionPane.ERROR_MESSAGE );
}
catch( ClienteExisteException e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Agregar Cliente", JOptionPane.ERROR_MESSAGE );
}
}
/**
* Despacha un cliente del banco
*/
public void despacharCliente( )
{
String id = JOptionPane.showInputDialog( this, "Ingrese el identificador de la caja." );
if( id != null )
{
try
{
int idCaja = Integer.valueOf( id );
int monto = Integer.valueOf( JOptionPane.showInputDialog( this, "Ingrese le monto." ) );
banco.despacharCliente( idCaja, monto );
}
catch( NumberFormatException e )
{
JOptionPane.showMessageDialog( this, "Formato no valido", "Despachar Cliente", JOptionPane.ERROR_MESSAGE );
}
catch( CajaNoExisteException e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Despachar Cliente", JOptionPane.ERROR_MESSAGE );
}
catch( TransaccionNoPermitidaException e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Despachar Cliente", JOptionPane.ERROR_MESSAGE );
}
catch( ClienteNoExisteException e )
{
JOptionPane.showMessageDialog( this, e.getMessage( ), "Despachar Cliente", JOptionPane.ERROR_MESSAGE );
}
actualizar( );
}
}
/**
* Busca a un cliente en las filas del banco
*/
public void buscarCliente( )
{
String id = JOptionPane.showInputDialog( this, "Ingrese el identificador del cliente." );
if( id != null )
{
try
{
int idCliente = Integer.valueOf( id );
Cliente cliente = banco.buscarCliente( idCliente );
panelBanco.modificarClienteBuscado( cliente );
if( cliente == null )
JOptionPane.showMessageDialog( this, "No existe un cliente con el id dado", "Buscar Cliente", JOptionPane.ERROR_MESSAGE );
}
catch( NumberFormatException e )
{
JOptionPane.showMessageDialog( this, "Formato no valido", "Buscar Cliente", JOptionPane.ERROR_MESSAGE );
}
actualizar( );
}
}
/**
* Genera el reporte de las cajas del banco
*/
public void generarReporte( )
{
JFileChooser chooser = new JFileChooser( "./data" );
int returnVal = chooser.showSaveDialog( this );
if( returnVal == JFileChooser.APPROVE_OPTION )
{
String pathArchivo = chooser.getSelectedFile( ).getParent( );
String nombreArchivo = chooser.getSelectedFile( ).getName( );
if( !nombreArchivo.endsWith( ".txt" ) )
{
nombreArchivo = nombreArchivo + ".txt";
}
try
{
banco.generarReporte( pathArchivo, nombreArchivo );
}
catch( FileNotFoundException e )
{
JOptionPane.showMessageDialog( this, "Problemas al crear el archivo del reporte", "Error", JOptionPane.ERROR_MESSAGE );
}
}
}
/**
* Este método se encarga de salvar la información del banco, justo antes de cerrar la aplicación
*/
public void dispose( )
{
try
{
banco.guardarBanco( DATA );
super.dispose( );
}
catch( Exception e )
{
setVisible( true );
int respuesta = JOptionPane.showConfirmDialog( this, "Problemas salvando la información del bANCO:\n" + e.getMessage( ) + "\nࠑuiere cerrar el programa sin salvar?", "Error", JOptionPane.YES_NO_OPTION );
if( respuesta == JOptionPane.YES_OPTION )
{
super.dispose( );
}
}
}
// -----------------------------------------------------------------
// Puntos de Extensión
// -----------------------------------------------------------------
/**
* Método para la extensión 1
*/
public void reqFuncOpcion1( )
{
String resultado = banco.metodo1( );
JOptionPane.showMessageDialog( this, resultado, "Respuesta", JOptionPane.INFORMATION_MESSAGE );
}
/**
* Método para la extensión 2
*/
public void reqFuncOpcion2( )
{
String resultado = banco.metodo2( );
JOptionPane.showMessageDialog( this, resultado, "Respuesta", JOptionPane.INFORMATION_MESSAGE );
}
// -----------------------------------------------------------------
// Main
// -----------------------------------------------------------------
/**
* Este método ejecuta la aplicación, creando una nueva interfaz
* @param args
*/
public static void main( String[] args )
{
InterfazBanco interfaz = new InterfazBanco( );
interfaz.setVisible( true );
}
}
|