es.mityc.firmaJava.libreria.pkcs7.ValidaTarjeta.java Source code

Java tutorial

Introduction

Here is the source code for es.mityc.firmaJava.libreria.pkcs7.ValidaTarjeta.java

Source

/**
 * LICENCIA LGPL:
 * 
 * Esta librera es Software Libre; Usted puede redistribuirlo y/o modificarlo
 * bajo los trminos de la GNU Lesser General Public License (LGPL)
 * tal y como ha sido publicada por la Free Software Foundation; o
 * bien la versin 2.1 de la Licencia, o (a su eleccin) cualquier versin posterior.
 * 
 * Esta librera se distribuye con la esperanza de que sea til, pero SIN NINGUNA
 * GARANT?A; tampoco las implcitas garantas de MERCANTILIDAD o ADECUACIN A UN
 * PROPSITO PARTICULAR. Consulte la GNU Lesser General Public License (LGPL) para ms
 * detalles
 * 
 * Usted debe recibir una copia de la GNU Lesser General Public License (LGPL)
 * junto con esta librera; si no es as, escriba a la Free Software Foundation Inc.
 * 51 Franklin Street, 5 Piso, Boston, MA 02110-1301, USA o consulte
 * <http://www.gnu.org/licenses/>.
 *
 * Copyright 2008 Ministerio de Industria, Turismo y Comercio
 * 
 */

package es.mityc.firmaJava.libreria.pkcs7;

import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.DisplayMode;
import java.awt.Frame;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.ProviderException;
import java.security.UnrecoverableKeyException;
import java.security.cert.X509Certificate;
import java.text.ParseException;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Properties;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.text.MaskFormatter;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import sun.security.pkcs11.wrapper.PKCS11Exception;
import es.mityc.firmaJava.configuracion.Configuracion;
import es.mityc.firmaJava.libreria.ConstantesXADES;
import es.mityc.firmaJava.libreria.utilidades.I18n;

/**
 * @author  Ministerio de Industria, Turismo y Comercio
 * @version 0.9 beta
 */

public class ValidaTarjeta extends JDialog implements ConstantesXADES {

    /**
     * Clase que permite seleccionar una tarjeta criptogrfica para firmar.
     */
    //private static final long serialVersionUID = 1L;

    static Log logger = LogFactory.getLog(ValidaTarjeta.class);

    private Properties tarjetasLibrerias = new Properties();
    private Configuracion configuracion = new Configuracion();
    private transient KeyStore ks = null;

    private JPanel jPanel = null;
    private JLabel jTarjetaLabel = null;
    private JComboBox jTarjetaComboBox = null;
    private JLabel jLibreriaLabel = null;
    private JTextField jLibreriaTextField = null;
    private JButton jExaminarButton = null;
    private JLabel jPinLabel = null;
    private transient JPasswordField jPinPasswordField = null;
    private JButton jAceptarButton = null;
    private JButton jCancelarButton = null;
    private JLabel jTituloLabel = null;

    private PrivateKey pk = null;
    private JDialog jAgregarTarjetaDialog = null;
    private JPanel jContentPane = null;
    private JLabel jAgregarLabel = null;
    private JLabel jNombreTarjetaLabel = null;
    private JLabel jNuevaLibreriaLabel = null;
    private JFormattedTextField jNombreTarjetaTextField = null;
    private JTextField jNuevaLibreriaTextField = null;
    private JButton jExaminarButton1 = null;
    private JButton jAceptarAgregarButton = null;
    private JButton jCancelarAgregarButton = null;

    /**
     * This method initializes 
     * 
     */
    public ValidaTarjeta(Frame parent) {
        super(parent, true);
        initialize();

        //Carga la configuracin
        configuracion.cargarConfiguracion();
        //Establece el idioma segn la configuracin
        String locale = configuracion.getValor(LOCALE);
        FileInputStream fis = null;
        // Configura el idioma
        I18n.setLocale(locale, locale.toUpperCase());

        try {
            fis = new FileInputStream(TARJETAS_PROPERTIES);
            tarjetasLibrerias.load(fis);
            Collection claves = tarjetasLibrerias.keySet();
            jTarjetaComboBox.addItem(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_1));
            for (Iterator iter = claves.iterator(); iter.hasNext();) {
                jTarjetaComboBox.addItem((String) iter.next());
            }
            jTarjetaComboBox.addItem(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_2));

        } catch (IOException e) {
            JOptionPane.showMessageDialog(this,
                    I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_3) + TARJETAS_PROPERTIES,
                    I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_4), JOptionPane.WARNING_MESSAGE);
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
                logger.error(e);
            }
        }
    }

    /**
     * This method initializes this
     * 
     */
    private void initialize() {
        this.setSize(new Dimension(534, 264));
        this.setResizable(false);
        this.setModal(true);
        this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        this.setContentPane(getJPanel());
        this.setTitle(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_5));

        // Centramos la ventana del applet
        //  Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gs = ge.getScreenDevices();

        int screenWidth = 0;
        int screenHeight = 0;
        int longitud = gs.length;
        for (int i = 0; i < longitud; i++) {
            DisplayMode dm = gs[i].getDisplayMode();
            screenWidth = dm.getWidth();
            screenHeight = dm.getHeight();
        }

        this.setLocation((int) (screenWidth / 2) - (int) (539 / 2), (int) (screenHeight / 2) - (int) (497 / 2));
    }

    /**
     * This method initializes jPanel   
     *    
     * @return javax.swing.JPanel   
     */
    private JPanel getJPanel() {
        if (jPanel == null) {
            GridBagConstraints gridBagConstraints12 = new GridBagConstraints(); // Ttulo
            gridBagConstraints12.anchor = GridBagConstraints.WEST;
            gridBagConstraints12.gridx = 0;
            gridBagConstraints12.gridy = 0;
            gridBagConstraints12.gridwidth = 3;
            gridBagConstraints12.insets = new Insets(0, 10, 20, 0);
            GridBagConstraints gridBagConstraints21 = new GridBagConstraints(); // Botn Cancelar
            gridBagConstraints21.gridx = 2;
            gridBagConstraints21.gridy = 4;
            gridBagConstraints21.insets = new Insets(20, 10, 10, 10);
            gridBagConstraints21.anchor = GridBagConstraints.WEST;
            GridBagConstraints gridBagConstraints11 = new GridBagConstraints(); // Botn Aceptar
            gridBagConstraints11.gridx = 1;
            gridBagConstraints11.gridy = 4;
            gridBagConstraints11.insets = new Insets(20, 10, 10, 10);
            gridBagConstraints11.anchor = GridBagConstraints.EAST;
            GridBagConstraints gridBagConstraints6 = new GridBagConstraints(); // Campo del PIN
            gridBagConstraints6.anchor = GridBagConstraints.WEST;
            gridBagConstraints6.gridy = 3;
            gridBagConstraints6.gridx = 1;
            GridBagConstraints gridBagConstraints5 = new GridBagConstraints(); // Etiqueta PIN
            gridBagConstraints5.anchor = GridBagConstraints.EAST;
            gridBagConstraints5.gridx = 0;
            gridBagConstraints5.gridy = 3;
            gridBagConstraints5.insets = new Insets(10, 10, 10, 10);
            GridBagConstraints gridBagConstraints4 = new GridBagConstraints(); // Botn Examinar
            gridBagConstraints4.gridx = 3;
            gridBagConstraints4.gridy = 2;
            gridBagConstraints4.insets = new Insets(10, 10, 10, 10);
            GridBagConstraints gridBagConstraints3 = new GridBagConstraints(); // Campo Librera
            gridBagConstraints3.fill = GridBagConstraints.HORIZONTAL;
            gridBagConstraints3.gridy = 2;
            gridBagConstraints3.gridx = 1;
            gridBagConstraints3.gridwidth = 2;
            GridBagConstraints gridBagConstraints2 = new GridBagConstraints(); // Etiqueta Librera
            gridBagConstraints2.anchor = GridBagConstraints.EAST;
            gridBagConstraints2.gridx = 0;
            gridBagConstraints2.gridy = 2;
            gridBagConstraints2.insets = new Insets(10, 10, 10, 10);
            GridBagConstraints gridBagConstraints1 = new GridBagConstraints(); // Selector de Tarjetas
            gridBagConstraints1.anchor = GridBagConstraints.WEST;
            gridBagConstraints1.gridy = 1;
            gridBagConstraints1.gridx = 1;
            gridBagConstraints1.weightx = 1.0;
            gridBagConstraints1.gridwidth = 2;
            GridBagConstraints gridBagConstraints = new GridBagConstraints(); // Etiqueta Tarjetas
            gridBagConstraints.anchor = GridBagConstraints.EAST;
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 1;
            gridBagConstraints.insets = new Insets(10, 10, 10, 10);

            jTituloLabel = new JLabel();
            jTituloLabel.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_6));
            jPinLabel = new JLabel();
            jPinLabel.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_7));
            jLibreriaLabel = new JLabel();
            jLibreriaLabel.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_8));
            jTarjetaLabel = new JLabel();
            jTarjetaLabel.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_9));
            jPanel = new JPanel();
            jPanel.setLayout(new GridBagLayout());
            jPanel.add(jTarjetaLabel, gridBagConstraints);
            jPanel.add(getJTarjetaComboBox(), gridBagConstraints1);
            jPanel.add(jLibreriaLabel, gridBagConstraints2);
            jPanel.add(getJTextField(), gridBagConstraints3);
            jPanel.add(getJExaminarButton(), gridBagConstraints4);
            jPanel.add(jPinLabel, gridBagConstraints5);
            jPanel.add(getJPinPasswordField(), gridBagConstraints6);
            jPanel.add(getJAceptarButton(), gridBagConstraints11);
            jPanel.add(getJCancelarButton(), gridBagConstraints21);
            jPanel.add(jTituloLabel, gridBagConstraints12);
        }

        return jPanel;
    }

    /**
     * This method initializes jTarjetaComboBox   
     *    
     * @return javax.swing.JComboBox   
     */
    private JComboBox getJTarjetaComboBox() {
        if (jTarjetaComboBox == null) {
            jTarjetaComboBox = new JComboBox();
            jTarjetaComboBox.setPreferredSize(new Dimension(250, 20));
            jTarjetaComboBox.addItemListener(new ItemListener() {
                public void itemStateChanged(ItemEvent e) {
                    jLibreriaTextField
                            .setText(tarjetasLibrerias.getProperty((String) jTarjetaComboBox.getSelectedItem()));
                }
            });
        }
        return jTarjetaComboBox;
    }

    /**
     * This method initializes jLibreriaTextField   
     *    
     * @return javax.swing.JTextField   
     */
    private JTextField getJTextField() {
        if (jLibreriaTextField == null) {
            jLibreriaTextField = new JTextField();
        }
        return jLibreriaTextField;
    }

    /**
     * This method initializes jExaminarButton   
     *    
     * @return javax.swing.JButton   
     */
    private JButton getJExaminarButton() {
        if (jExaminarButton == null) {
            jExaminarButton = new JButton();
            jExaminarButton.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_10));
            jExaminarButton.setPreferredSize(new Dimension(90, 20));
            jExaminarButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    final JFileChooser libreria = new JFileChooser();
                    libreria.setDialogTitle(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_11));
                    int returnVal = libreria.showOpenDialog(jPanel);
                    if (returnVal == JFileChooser.APPROVE_OPTION) {
                        jLibreriaTextField.setText(libreria.getSelectedFile().toString());
                    }
                }
            });
        }
        return jExaminarButton;
    }

    /**
     * This method initializes jPinPasswordField   
     *    
     * @return javax.swing.JPasswordField   
     */
    private JPasswordField getJPinPasswordField() {
        if (jPinPasswordField == null) {
            jPinPasswordField = new JPasswordField();
            jPinPasswordField.setPreferredSize(new Dimension(150, 20));
            jPinPasswordField.addKeyListener(new KeyAdapter() {
                public void keyPressed(KeyEvent e) {
                    if (e.getKeyCode() == 10) {
                        administrarTarjeta();
                    }
                }
            });
        }
        return jPinPasswordField;
    }

    /**
     * This method initializes jAceptarButton   
     *    
     * @return javax.swing.JButton   
     */
    private JButton getJAceptarButton() {
        if (jAceptarButton == null) {
            jAceptarButton = new JButton();
            jAceptarButton.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_12));
            jAceptarButton.setPreferredSize(new Dimension(90, 20));
            jAceptarButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    administrarTarjeta();
                }
            });
        }
        return jAceptarButton;
    }

    /**
     * This method initializes jCancelarButton   
     *    
     * @return javax.swing.JButton   
     */
    private JButton getJCancelarButton() {
        if (jCancelarButton == null) {
            jCancelarButton = new JButton();
            jCancelarButton.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_13));
            jCancelarButton.setPreferredSize(new Dimension(90, 20));
            jCancelarButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    ks = null;
                    dispose();
                }
            });
        }
        return jCancelarButton;
    }

    public PrivateKey getPrivateKey(X509Certificate cert)
            throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException {
        pk = null;

        String alias = null;
        Enumeration aliasesEnum;
        aliasesEnum = ks.aliases();
        X509Certificate certKeyStore = null;
        if (aliasesEnum != null) {
            while (aliasesEnum.hasMoreElements()) {
                alias = (String) aliasesEnum.nextElement();
                certKeyStore = (X509Certificate) ks.getCertificate(alias);
                if (certKeyStore.getSerialNumber().equals(cert.getSerialNumber())) {
                    pk = (PrivateKey) ks.getKey(alias, jPinPasswordField.getPassword());
                }
            }
        }

        return pk;
    }

    public String getAlias(X509Certificate cert)
            throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException {
        String alias = null;
        Enumeration aliasesEnum;
        aliasesEnum = ks.aliases();
        X509Certificate certKeyStore = null;
        if (aliasesEnum != null) {
            while (aliasesEnum.hasMoreElements()) {
                alias = (String) aliasesEnum.nextElement();
                certKeyStore = (X509Certificate) ks.getCertificate(alias);
                if (certKeyStore.getSerialNumber().equals(cert.getSerialNumber())) {
                    break;
                }
            }
        }

        return alias;
    }

    public KeyStore getKeyStore() {
        return ks;
    }

    private static String mensajeErrorConexion(String errorCode) {
        switch (Integer.parseInt(errorCode)) {
        case -1:
            return I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_14);
        case 2:
            return I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_15);
        case 48:
            return I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_16);
        case 160:
            return I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_17);
        case 164:
            return I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_18);
        case 225:
            return I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_19);
        }
        return I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_20);
    }

    private void administrarTarjeta() {
        if (((String) jTarjetaComboBox.getSelectedItem())
                .equals(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_1))) {
            // No se ha seleccionado ninguna tarjeta
            JOptionPane.showMessageDialog(jPanel, I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_21),
                    I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_22), JOptionPane.ERROR_MESSAGE);
        } else if (((String) jTarjetaComboBox.getSelectedItem())
                .equals(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_2))) {
            // Se aade una nueva tarjeta criptogrfica
            agregarTarjeta();
        } else {
            // Se ha seleccionado una tarjeta de la lista desplegable
            validarTarjeta();
        }
    }

    private void validarTarjeta() {
        Runnable doWorkRunnable = new Runnable() {
            public void run() {
                ConexionTarjeta c = ConexionTarjeta.getInstance();
                try {
                    ks = c.conectar(jPinPasswordField.getPassword(), jLibreriaTextField.getText());
                    ValidaTarjeta.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
                    dispose();
                } catch (ProviderException e1) {
                    JOptionPane.showMessageDialog(jPanel, e1.getMessage(),
                            I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_23), JOptionPane.ERROR_MESSAGE);
                } catch (PKCS11Exception e1) {
                    String mensajeError = mensajeErrorConexion(String.valueOf(e1.getErrorCode()));
                    JOptionPane.showMessageDialog(jPanel, mensajeError,
                            I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_23), JOptionPane.ERROR_MESSAGE);
                }
                ValidaTarjeta.this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }
        };

        ValidaTarjeta.this.setCursor(new Cursor(Cursor.WAIT_CURSOR));
        SwingUtilities.invokeLater(doWorkRunnable);
    }

    private void agregarTarjeta() {
        this.getJAgregarTarjetaDialog();
        jAgregarTarjetaDialog.setVisible(true);
    }

    /**
     * This method initializes jAgregarTarjetaDialog   
     *    
     * @return javax.swing.JDialog   
     */
    private JDialog getJAgregarTarjetaDialog() {
        if (jAgregarTarjetaDialog == null) {
            jAgregarTarjetaDialog = new JDialog();
            jAgregarTarjetaDialog.setSize(new Dimension(527, 207));
            jAgregarTarjetaDialog.setModal(true);
            jAgregarTarjetaDialog.setResizable(false);
            jAgregarTarjetaDialog.setTitle(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_24));
            jAgregarTarjetaDialog.setLocationRelativeTo(this);
            jAgregarTarjetaDialog.setContentPane(getJContentPane());
        }
        return jAgregarTarjetaDialog;
    }

    /**
     * This method initializes jContentPane   
     *    
     * @return javax.swing.JPanel   
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            GridBagConstraints gridBagConstraints16 = new GridBagConstraints(); // Botn Cancelar
            gridBagConstraints16.gridx = 2;
            gridBagConstraints16.gridy = 3;
            gridBagConstraints16.weightx = 0.5;
            gridBagConstraints16.insets = new Insets(10, 0, 20, 0);

            GridBagConstraints gridBagConstraints15 = new GridBagConstraints(); // Botn Aceptar
            gridBagConstraints15.gridx = 1;
            gridBagConstraints15.gridy = 3;
            gridBagConstraints15.weightx = 0.5;
            gridBagConstraints15.insets = new Insets(10, 0, 20, 0);

            GridBagConstraints gridBagConstraints14 = new GridBagConstraints(); // Botn Examinar
            gridBagConstraints14.gridx = 3;
            gridBagConstraints14.gridy = 2;
            gridBagConstraints14.insets = new Insets(0, 10, 10, 10);

            GridBagConstraints gridBagConstraints13 = new GridBagConstraints(); // Campo de texto Librera de la Tarjeta
            gridBagConstraints13.fill = GridBagConstraints.HORIZONTAL;
            gridBagConstraints13.gridy = 2;
            gridBagConstraints13.weightx = 1.0;
            gridBagConstraints13.gridx = 1;
            gridBagConstraints13.gridwidth = 2;
            gridBagConstraints13.insets = new Insets(0, 10, 10, 0);

            GridBagConstraints gridBagConstraints10 = new GridBagConstraints(); // Campo de texto Nombre de la Tarjeta
            gridBagConstraints10.fill = GridBagConstraints.HORIZONTAL;
            gridBagConstraints10.gridy = 1;
            gridBagConstraints10.weightx = 1.0;
            gridBagConstraints10.gridx = 1;
            gridBagConstraints10.gridwidth = 2;
            gridBagConstraints10.insets = new Insets(0, 10, 10, 0);

            GridBagConstraints gridBagConstraints9 = new GridBagConstraints(); // Label Librera de la tarjeta
            gridBagConstraints9.gridx = 0;
            gridBagConstraints9.gridy = 2;
            gridBagConstraints9.anchor = GridBagConstraints.WEST;
            gridBagConstraints9.insets = new Insets(0, 10, 10, 0);
            jNuevaLibreriaLabel = new JLabel();
            jNuevaLibreriaLabel.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_25));

            GridBagConstraints gridBagConstraints8 = new GridBagConstraints(); // Label Nombre de la Tarjeta
            gridBagConstraints8.gridx = 0;
            gridBagConstraints8.gridy = 1;
            gridBagConstraints8.anchor = GridBagConstraints.WEST;
            gridBagConstraints8.insets = new Insets(0, 10, 10, 0);
            jNombreTarjetaLabel = new JLabel();
            jNombreTarjetaLabel.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_26));

            GridBagConstraints gridBagConstraints7 = new GridBagConstraints(); // Ttulo del panel principal
            gridBagConstraints7.gridx = 0;
            gridBagConstraints7.gridy = 0;
            gridBagConstraints7.gridwidth = 4;
            gridBagConstraints7.anchor = GridBagConstraints.WEST;
            gridBagConstraints7.insets = new Insets(10, 10, 20, 0);
            jAgregarLabel = new JLabel();
            jAgregarLabel.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_27));

            jContentPane = new JPanel();
            jContentPane.setLayout(new GridBagLayout());
            jContentPane.add(jAgregarLabel, gridBagConstraints7);
            jContentPane.add(jNombreTarjetaLabel, gridBagConstraints8);
            jContentPane.add(jNuevaLibreriaLabel, gridBagConstraints9);
            jContentPane.add(getJNombreTarjetaTextField(), gridBagConstraints10);
            jContentPane.add(getJNuevaLibreriaTextField(), gridBagConstraints13);
            jContentPane.add(getJExaminarButton1(), gridBagConstraints14);
            jContentPane.add(getJAceptarAgregarButton(), gridBagConstraints15);
            jContentPane.add(getJCancelarAgregarButton(), gridBagConstraints16);
        }
        return jContentPane;
    }

    /**
     * This method initializes jNombreTarjetaTextField   
     *    
     * @return javax.swing.JTextField   
     */
    private JFormattedTextField getJNombreTarjetaTextField() {
        if (jNombreTarjetaTextField == null) {

            // El nombre de la tarjeta solo acepta letras y nmeros
            // Se agrega la barra baja como separador
            MaskFormatter formato = new MaskFormatter();
            formato.setValidCharacters(CARACTERES_VALIDOS);
            formato.setAllowsInvalid(false);
            try {
                formato.setMask(MASK);
            } catch (ParseException e) {
                // Nunca ocurre
            }

            jNombreTarjetaTextField = new JFormattedTextField(formato);
            jNombreTarjetaTextField.setFocusLostBehavior(javax.swing.JFormattedTextField.COMMIT);
        }
        return jNombreTarjetaTextField;
    }

    /**
     * This method initializes jNuevaLibreriaTextField   
     *    
     * @return javax.swing.JTextField   
     */
    private JTextField getJNuevaLibreriaTextField() {
        if (jNuevaLibreriaTextField == null) {
            jNuevaLibreriaTextField = new JTextField();
        }
        return jNuevaLibreriaTextField;
    }

    /**
     * This method initializes jExaminarButton1   
     *    
     * @return javax.swing.JButton   
     */
    private JButton getJExaminarButton1() {
        if (jExaminarButton1 == null) {
            jExaminarButton1 = new JButton();
            jExaminarButton1.setPreferredSize(new Dimension(90, 20));
            jExaminarButton1.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_10));
            jExaminarButton1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    final JFileChooser libreria = new JFileChooser();
                    libreria.setDialogTitle(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_11));
                    int returnVal = libreria.showOpenDialog(jPanel);
                    if (returnVal == JFileChooser.APPROVE_OPTION) {
                        jNuevaLibreriaTextField.setText(libreria.getSelectedFile().toString());
                    }
                }
            });
        }
        return jExaminarButton1;
    }

    /**
     * This method initializes jAceptarAgregarButton   
     *    
     * @return javax.swing.JButton   
     */
    private JButton getJAceptarAgregarButton() {
        if (jAceptarAgregarButton == null) {
            jAceptarAgregarButton = new JButton();
            jAceptarAgregarButton.setPreferredSize(new Dimension(90, 20));
            jAceptarAgregarButton.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_12));
            jAceptarAgregarButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    FileOutputStream fos = null;
                    if (jNombreTarjetaTextField.getText().trim() == null
                            || jNombreTarjetaTextField.getText().trim().equals(CADENA_VACIA)) {
                        JOptionPane.showMessageDialog(jAgregarTarjetaDialog,
                                I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_28),
                                I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_22), JOptionPane.ERROR_MESSAGE);
                    } else if (jNuevaLibreriaTextField.getText() == null
                            || jNuevaLibreriaTextField.getText().equals(CADENA_VACIA)) {
                        JOptionPane.showMessageDialog(jAgregarTarjetaDialog,
                                I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_29),
                                I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_22), JOptionPane.ERROR_MESSAGE);
                    } else {
                        tarjetasLibrerias.setProperty(jNombreTarjetaTextField.getText().trim(),
                                jNuevaLibreriaTextField.getText());
                        try {
                            fos = new FileOutputStream(TARJETAS_PROPERTIES);
                            tarjetasLibrerias.store(fos, null);
                            jTarjetaComboBox.removeItem(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_2));
                            jTarjetaComboBox.addItem(jNombreTarjetaTextField.getText().trim());
                            jTarjetaComboBox.addItem(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_2));
                            jTarjetaComboBox.setSelectedIndex(0);
                        } catch (FileNotFoundException e1) {
                            JOptionPane.showMessageDialog(jAgregarTarjetaDialog,
                                    I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_30),
                                    I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_31),
                                    JOptionPane.ERROR_MESSAGE);
                        } catch (IOException e1) {
                            JOptionPane.showMessageDialog(jAgregarTarjetaDialog,
                                    I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_32),
                                    I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_31),
                                    JOptionPane.ERROR_MESSAGE);
                        } finally {
                            if (fos != null) {
                                try {
                                    fos.close();
                                } catch (IOException e1) {
                                    logger.error(e1);
                                }
                            }
                        }
                        jAgregarTarjetaDialog.setVisible(false);
                    }
                }
            });
        }
        return jAceptarAgregarButton;
    }

    /**
     * This method initializes jCancelarAgregarButton   
     *    
     * @return javax.swing.JButton   
     */
    private JButton getJCancelarAgregarButton() {
        if (jCancelarAgregarButton == null) {
            jCancelarAgregarButton = new JButton();
            jCancelarAgregarButton.setPreferredSize(new Dimension(90, 20));
            jCancelarAgregarButton.setText(I18n.getResource(LIBRERIAXADES_VALIDARTARJETA_TEXTO_13));
            jCancelarAgregarButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    jAgregarTarjetaDialog.setVisible(false);
                }
            });
        }
        return jCancelarAgregarButton;
    }

}