Package frost.gui

Source Code of frost.gui.ManageLocalIdentitiesDialog

/*
  ManageLocalIdentitiesDialog.java / Frost
  Copyright (C) 2006  Frost Project <jtcfrost.sourceforge.net>
  Some changes by Stefan Majewski <e9926279@stud3.tuwien.ac.at>

  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License as
  published by the Free Software Foundation; either version 2 of
  the License, or (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package frost.gui;

import java.awt.*;
import java.io.*;
import java.util.List;

import javax.swing.*;
import javax.swing.filechooser.FileFilter;

import org.w3c.dom.*;

import frost.*;
import frost.identities.*;
import frost.storage.*;
import frost.util.*;
import frost.util.gui.translation.*;

@SuppressWarnings("serial")
public class ManageLocalIdentitiesDialog extends JDialog {

//    private static final Logger logger = Logger.getLogger(ManageLocalIdentitiesDialog.class.getName());

    private Language language = null;

    private JPanel jContentPane = null;
    private JPanel buttonPanel = null;
    private JPanel mainPanel = null;
    private JButton Bclose = null;
    private JLabel jLabel = null;
    private JScrollPane SPlist = null;
    private JPanel jPanel = null;
    private JList identitiesList = null;
    private JButton BaddNewIdentity = null;
    private JButton BdeleteIdentity = null;
    private JButton BimportIdentityXml = null;
    private JLabel Ldummy = null;

    private JButton BimportXml = null;

    private JButton BexportXml = null;

    private JButton BsetSignature = null;

    private boolean identitiesImported = false;

    /**
     * This is the default constructor
     */
    public ManageLocalIdentitiesDialog() {
        super(MainFrame.getInstance());
        language = Language.getInstance();
        initialize();
        setModal(true);
        setLocationRelativeTo(MainFrame.getInstance());
    }

    /**
     * This method initializes this
     *
     * @return void
     */
    private void initialize() {
        this.setSize(488, 311);
        this.setTitle(language.getString("ManageLocalIdentities.title"));
        this.setContentPane(getJContentPane());

        jLabel.setText(language.getString("ManageLocalidentities.listLabel")+":");
        BimportIdentityXml.setText(language.getString("ManageLocalIdentities.button.importIdentity"));
        BdeleteIdentity.setText(language.getString("ManageLocalIdentities.button.deleteIdentity"));
        BaddNewIdentity.setText(language.getString("ManageLocalIdentities.button.createNewIdentity"));
        BimportXml.setText(language.getString("ManageLocalIdentities.button.importXml"));
        BexportXml.setText(language.getString("ManageLocalIdentities.button.exportXml"));
        Bclose.setText(language.getString("ManageLocalIdentities.button.close"));
        BsetSignature.setText(language.getString("ManageLocalIdentities.button.editSignature"));
    }

    /**
     * This method initializes jContentPane
     *
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if( jContentPane == null ) {
            jContentPane = new JPanel();
            jContentPane.setLayout(new BorderLayout());
            jContentPane.add(getButtonPanel(), java.awt.BorderLayout.SOUTH);
            jContentPane.add(getMainPanel(), java.awt.BorderLayout.CENTER);
        }
        return jContentPane;
    }

    /**
     * This method initializes buttonPanel
     *
     * @return javax.swing.JPanel
     */
    private JPanel getButtonPanel() {
        if( buttonPanel == null ) {
            final FlowLayout flowLayout = new FlowLayout();
            flowLayout.setAlignment(java.awt.FlowLayout.RIGHT);
            buttonPanel = new JPanel();
            buttonPanel.setLayout(flowLayout);
            buttonPanel.add(getBclose(), null);
        }
        return buttonPanel;
    }

    /**
     * This method initializes mainPanel
     *
     * @return javax.swing.JPanel
     */
    private JPanel getMainPanel() {
        if( mainPanel == null ) {
            final GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
            gridBagConstraints2.gridx = 1;
            gridBagConstraints2.gridheight = 1;
            gridBagConstraints2.weightx = 0.0;
            gridBagConstraints2.fill = java.awt.GridBagConstraints.VERTICAL;
            gridBagConstraints2.weighty = 1.0;
            gridBagConstraints2.insets = new java.awt.Insets(3,0,0,0);
            gridBagConstraints2.gridy = 1;
            final GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
            gridBagConstraints1.fill = java.awt.GridBagConstraints.BOTH;
            gridBagConstraints1.gridy = 1;
            gridBagConstraints1.weightx = 0.3;
            gridBagConstraints1.weighty = 1.0;
            gridBagConstraints1.anchor = java.awt.GridBagConstraints.NORTHWEST;
            gridBagConstraints1.insets = new java.awt.Insets(3,5,3,5);
            gridBagConstraints1.gridx = 0;
            final GridBagConstraints gridBagConstraints = new GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
            gridBagConstraints.insets = new java.awt.Insets(5,5,0,5);
            gridBagConstraints.gridy = 0;
            jLabel = new JLabel();
            jLabel.setText("Local Identities:");
            mainPanel = new JPanel();
            mainPanel.setLayout(new GridBagLayout());
            mainPanel.add(jLabel, gridBagConstraints);
            mainPanel.add(getSPlist(), gridBagConstraints1);
            mainPanel.add(getJPanel(), gridBagConstraints2);
        }
        return mainPanel;
    }

    /**
     * This method initializes Bclose
     *
     * @return javax.swing.JButton
     */
    private JButton getBclose() {
        if( Bclose == null ) {
            Bclose = new JButton();
            Bclose.setText("ManageLocalIdentities.button.close");
            Bclose.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(final java.awt.event.ActionEvent e) {
                    setVisible(false);
                }
            });
        }
        return Bclose;
    }

    /**
     * This method initializes SPlist
     *
     * @return javax.swing.JScrollPane
     */
    private JScrollPane getSPlist() {
        if( SPlist == null ) {
            SPlist = new JScrollPane();
            SPlist.setViewportView(getIdentitiesList());
        }
        return SPlist;
    }

    /**
     * This method initializes jPanel
     *
     * @return javax.swing.JPanel
     */
    private JPanel getJPanel() {
        if( jPanel == null ) {
            final GridBagConstraints gridBagConstraints9 = new GridBagConstraints();
            gridBagConstraints9.gridx = 0;
            gridBagConstraints9.insets = new Insets(15, 3, 0, 5);
            gridBagConstraints9.fill = GridBagConstraints.HORIZONTAL;
            gridBagConstraints9.gridy = 2;
            final GridBagConstraints gridBagConstraints8 = new GridBagConstraints();
            gridBagConstraints8.gridx = 0;
            gridBagConstraints8.fill = java.awt.GridBagConstraints.HORIZONTAL;
            gridBagConstraints8.insets = new java.awt.Insets(5,3,0,5);
            gridBagConstraints8.gridy = 5;
            final GridBagConstraints gridBagConstraints7 = new GridBagConstraints();
            gridBagConstraints7.gridx = 0;
            gridBagConstraints7.fill = java.awt.GridBagConstraints.HORIZONTAL;
            gridBagConstraints7.insets = new java.awt.Insets(15,3,0,5);
            gridBagConstraints7.gridy = 4;
            final GridBagConstraints gridBagConstraints6 = new GridBagConstraints();
            gridBagConstraints6.gridx = 0;
            gridBagConstraints6.fill = java.awt.GridBagConstraints.VERTICAL;
            gridBagConstraints6.weighty = 1.0;
            gridBagConstraints6.gridy = 6;
            Ldummy = new JLabel();
            Ldummy.setText("");
            final GridBagConstraints gridBagConstraints5 = new GridBagConstraints();
            gridBagConstraints5.gridx = 0;
            gridBagConstraints5.insets = new java.awt.Insets(15,3,0,5);
            gridBagConstraints5.fill = java.awt.GridBagConstraints.HORIZONTAL;
            gridBagConstraints5.gridy = 3;
            final GridBagConstraints gridBagConstraints4 = new GridBagConstraints();
            gridBagConstraints4.gridx = 0;
            gridBagConstraints4.insets = new java.awt.Insets(5,3,0,5);
            gridBagConstraints4.anchor = java.awt.GridBagConstraints.NORTHWEST;
            gridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL;
            gridBagConstraints4.gridy = 1;
            final GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
            gridBagConstraints3.gridx = 0;
            gridBagConstraints3.insets = new Insets(0, 3, 0, 5);
            gridBagConstraints3.anchor = java.awt.GridBagConstraints.NORTHWEST;
            gridBagConstraints3.fill = java.awt.GridBagConstraints.HORIZONTAL;
            gridBagConstraints3.gridy = 0;
            jPanel = new JPanel();
            jPanel.setLayout(new GridBagLayout());
            jPanel.add(getBaddNewIdentity(), gridBagConstraints3);
            jPanel.add(getBdeleteIdentity(), gridBagConstraints4);
            jPanel.add(getBimportIdentityXml(), gridBagConstraints5);
            jPanel.add(Ldummy, gridBagConstraints6);
            jPanel.add(getBimportXml(), gridBagConstraints7);
            jPanel.add(getBexportXml(), gridBagConstraints8);
            jPanel.add(getBsetSignature(), gridBagConstraints9);
        }
        return jPanel;
    }

    /**
     * This method initializes identitiesList
     *
     * @return javax.swing.JList
     */
    private JList getIdentitiesList() {
        if( identitiesList == null ) {
            identitiesList = new JList();
            identitiesList.setModel(new DefaultListModel());
            for( final Object element : Core.getIdentities().getLocalIdentities() ) {
                ((DefaultListModel)identitiesList.getModel()).addElement(element);
            }
        }
        return identitiesList;
    }

    /**
     * This method initializes BaddNewIdentity
     *
     * @return javax.swing.JButton
     */
    private JButton getBaddNewIdentity() {
        if( BaddNewIdentity == null ) {
            BaddNewIdentity = new JButton();
            BaddNewIdentity.setText("ManageLocalIdentities.button.createNewIdentity");
            BaddNewIdentity.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(final java.awt.event.ActionEvent e) {
                    final LocalIdentity newIdentity = Core.getIdentities().createIdentity();
                    if( newIdentity != null ) {
                        final DefaultListModel m = (DefaultListModel)getIdentitiesList().getModel();
                        m.addElement(newIdentity);
                    }
                }
            });
        }
        return BaddNewIdentity;
    }

    /**
     * This method initializes BdeleteIdentity
     *
     * @return javax.swing.JButton
     */
    private JButton getBdeleteIdentity() {
        if( BdeleteIdentity == null ) {
            BdeleteIdentity = new JButton();
            BdeleteIdentity.setText("ManageLocalIdentities.button.deleteIdentity");
            BdeleteIdentity.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(final java.awt.event.ActionEvent e) {

                    final LocalIdentity li = (LocalIdentity)getIdentitiesList().getSelectedValue();
                    if( li == null ) {
                        return;
                    }

                    if( Core.getIdentities().getLocalIdentities().size() <= 1 ) {
                        JOptionPane.showMessageDialog(
                                ManageLocalIdentitiesDialog.this,
                                language.getString("ManageLocalIdentities.cannotDeleteLastIdentity.body"),
                                language.getString("ManageLocalIdentities.cannotDeleteLastIdentity.title"),
                                JOptionPane.INFORMATION_MESSAGE);
                    }

                    int answer = JOptionPane.showConfirmDialog(
                            ManageLocalIdentitiesDialog.this,
                            language.formatMessage("ManageLocalIdentities.deleteIdentityConfirmation.body", li.getUniqueName()),
                            language.getString("ManageLocalIdentities.deleteIdentityConfirmation.title"),
                            JOptionPane.YES_NO_OPTION,
                            JOptionPane.WARNING_MESSAGE);
                    if (answer == JOptionPane.NO_OPTION) {
                        return; // do not delete
                    }

                    // check if files are shared with this identity
                    final int count = Core.getInstance().getFileTransferManager().countFilesSharedByLocalIdentity(li);
                    if( count > 0 ) {
                        answer =
                            JOptionPane.showConfirmDialog(
                                ManageLocalIdentitiesDialog.this,
                                language.formatMessage("ManageLocalIdentities.deleteIdentitiesSharedFilesConfirmation.body",
                                        li.getUniqueName(),
                                        Integer.toString(count)),
                                language.getString("ManageLocalIdentities.deleteIdentitiesSharedFilesConfirmation.title"),
                                JOptionPane.YES_NO_OPTION,
                                JOptionPane.WARNING_MESSAGE);
                        if (answer == JOptionPane.NO_OPTION) {
                            return; // do not delete
                        }
                    }

                    Core.getInstance().getFileTransferManager().removeFilesSharedByLocalIdentity(li);
                    Core.getIdentities().deleteLocalIdentity(li);
                    // put deleted into GOOD state
                    final Identity myOld = new Identity(li);
                    myOld.setGOODWithoutUpdate();
                    Core.getIdentities().addIdentity( myOld );

                    ((DefaultListModel)getIdentitiesList().getModel()).removeElement(li);
                }
            });
        }
        return BdeleteIdentity;
    }

    protected LocalIdentity importLocalIdentityFromIdentityXml(final File identitiesXmlFile) {
        final Document d = XMLTools.parseXmlFile(identitiesXmlFile);
        final Element rootEl = d.getDocumentElement();

        final Element myself = XMLTools.getChildElementsByTagName(rootEl, "MyIdentity").get(0);
        LocalIdentity myId = null;
        if( myself != null ) {
            myId = LocalIdentity.createLocalIdentityFromXmlElement(myself);
        }
        return myId;
    }

    /**
     * This method initializes BimportIdentityXml
     *
     * @return javax.swing.JButton
     */
    private JButton getBimportIdentityXml() {
        if( BimportIdentityXml == null ) {
            BimportIdentityXml = new JButton();
            BimportIdentityXml.setText("ManageLocalIdentities.button.importIdentity");
            BimportIdentityXml.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(final java.awt.event.ActionEvent e) {
                    final File xmlFile = chooseIdentitiesFile();
                    if( xmlFile == null ) {
                        return;
                    }
                    final LocalIdentity importedIdentity = importLocalIdentityFromIdentityXml(xmlFile);
                    if( importedIdentity == null ) {
                        // load failed
                        JOptionPane.showMessageDialog(
                                ManageLocalIdentitiesDialog.this,
                                language.getString("ManageLocalIdentities.noIdentityToImport.body"),
                                language.getString("ManageLocalIdentities.noIdentityToImport.title"),
                                JOptionPane.WARNING_MESSAGE);
                        return;
                    }
                    if( !Core.getIdentities().addLocalIdentity(importedIdentity) ) {
                        // duplicate identity
                        JOptionPane.showMessageDialog(
                                ManageLocalIdentitiesDialog.this,
                                language.formatMessage("ManageLocalIdentities.duplicateIdentity.body", importedIdentity.getUniqueName()),
                                language.getString("ManageLocalIdentities.duplicateIdentity.title"),
                                JOptionPane.WARNING_MESSAGE);
                        return;
                    }
                    JOptionPane.showMessageDialog(
                            ManageLocalIdentitiesDialog.this,
                            language.formatMessage("ManageLocalIdentities.identityImported.body",importedIdentity.getUniqueName()),
                            language.getString("ManageLocalIdentities.identityImported.title"),
                            JOptionPane.INFORMATION_MESSAGE);
                    ((DefaultListModel)getIdentitiesList().getModel()).addElement(importedIdentity);
                    identitiesImported = true;
                    return;
                }
            });
        }
        return BimportIdentityXml;
    }

    private File chooseIdentitiesFile() {

        final FileFilter myFilter = new FileFilter() {
            @Override
            public boolean accept(final File file) {
                if( file.isDirectory() ) {
                    return true;
                }
                if( file.getName().equals("identities.xml") ) {
                    return true;
                }
                return false;
            }
            @Override
            public String getDescription() {
                return "identities.xml";
            }
        };

        final JFileChooser chooser = new JFileChooser();
        chooser.setFileFilter(myFilter);
        final int returnVal = chooser.showOpenDialog(this);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            return chooser.getSelectedFile();
        }
        return null;
    }

    private File chooseXmlImportFile() {

        final FileFilter myFilter = new FileFilter() {
            @Override
            public boolean accept(final File file) {
                if( file.isDirectory() ) {
                    return true;
                }
                if( file.getName().endsWith(".xml") ) {
                    return true;
                }
                return false;
            }
            @Override
            public String getDescription() {
                return "localidentities.xml";
            }
        };

        final JFileChooser chooser = new JFileChooser();
        chooser.setFileFilter(myFilter);
        final int returnVal = chooser.showOpenDialog(this);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            return chooser.getSelectedFile();
        }
        return null;
    }

    private File chooseXmlExportFile() {

        final FileFilter myFilter = new FileFilter() {
            @Override
            public boolean accept(final File file) {
                if( file.isDirectory() ) {
                    return true;
                }
                if( file.getName().endsWith(".xml") ) {
                    return true;
                }
                return false;
            }
            @Override
            public String getDescription() {
                return "localidentities.xml";
            }
        };

        final JFileChooser chooser = new JFileChooser();
        chooser.setFileFilter(myFilter);
        final int returnVal = chooser.showSaveDialog(this);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            File f = chooser.getSelectedFile();
            if( !f.getName().endsWith(".xml") ) {
                f = new File(f.getPath() + ".xml");
            }
            if( f.exists() ) {
                final int answer = JOptionPane.showConfirmDialog(
                        this,
                        language.formatMessage("ManageLocalIdentities.exportIdentitiesConfirmXmlFileOverwrite.body", f.getName()),
                        language.getString("ManageLocalIdentities.exportIdentitiesConfirmXmlFileOverwrite.title"),
                        JOptionPane.YES_NO_OPTION,
                        JOptionPane.WARNING_MESSAGE);
                if( answer == JOptionPane.NO_OPTION ) {
                    return null;
                }
            }
            return f;
        }
        return null;
    }

    /**
     * This method initializes BimportXml
     *
     * @return javax.swing.JButton
     */
    private JButton getBimportXml() {
        if( BimportXml == null ) {
            BimportXml = new JButton();
            BimportXml.setText("ManageLocalIdentities.button.importXml");
            BimportXml.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(final java.awt.event.ActionEvent e) {
                    final File xmlFile = chooseXmlImportFile();
                    if( xmlFile == null ) {
                        return;
                    }
                    final List<LocalIdentity> localIdentities = LocalIdentitiesXmlDAO.loadLocalidentities(xmlFile);
                    if( null == localIdentities || localIdentities.size() == 0 ) {
                        // nothing loaded
                        JOptionPane.showMessageDialog(
                                ManageLocalIdentitiesDialog.this,
                                language.getString("ManageLocalIdentities.noLocalIdentityToImport.body"),
                                language.getString("ManageLocalIdentities.noLocalIdentityToImport.title"),
                                JOptionPane.WARNING_MESSAGE);
                        return;
                    }
                    int count = 0;
                    for( final LocalIdentity localIdentity : localIdentities ) {
                        final LocalIdentity lId = localIdentity;
                        if( !Core.getIdentities().addLocalIdentity(lId) ) {
                            // duplicate identity
                            JOptionPane.showMessageDialog(
                                    ManageLocalIdentitiesDialog.this,
                                    language.formatMessage("ManageLocalIdentities.duplicateLocalIdentity.body", lId.getUniqueName()),
                                    language.getString("ManageLocalIdentities.duplicateLocalIdentity.title"),
                                    JOptionPane.WARNING_MESSAGE);
                        } else {
                            count++;
                            ((DefaultListModel)getIdentitiesList().getModel()).addElement(lId);
                        }
                    }
                    JOptionPane.showMessageDialog(
                            ManageLocalIdentitiesDialog.this,
                            language.formatMessage("ManageLocalIdentities.localIdentitiesImported.body", Integer.toString(count)),
                            language.getString("ManageLocalIdentities.localIdentitiesImported.title"),
                            JOptionPane.WARNING_MESSAGE);
                    if( count > 0 ) {
                        identitiesImported = true;
                    }
                    return;
                }
            });
        }
        return BimportXml;
    }

    /**
     * This method initializes BexportXml
     *
     * @return javax.swing.JButton
     */
    private JButton getBexportXml() {
        if( BexportXml == null ) {
            BexportXml = new JButton();
            BexportXml.setText("ManageLocalIdentities.button.exportXml");
            BexportXml.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(final java.awt.event.ActionEvent e) {

                    JOptionPane.showMessageDialog(
                            ManageLocalIdentitiesDialog.this,
                            language.getString("ManageLocalIdentities.privateKeyExportWarning.body"),
                            language.getString("ManageLocalIdentities.privateKeyExportWarning.title"),
                            JOptionPane.WARNING_MESSAGE);

                    final File xmlFile = chooseXmlExportFile();
                    if( xmlFile == null ) {
                        return;
                    }
                    final List<LocalIdentity> lIds = Core.getIdentities().getLocalIdentities();
                    final boolean wasOk = LocalIdentitiesXmlDAO.saveLocalIdentities(xmlFile, lIds);
                    if( wasOk ) {
                        JOptionPane.showMessageDialog(
                                ManageLocalIdentitiesDialog.this,
                                language.formatMessage("ManageLocalIdentities.identitiesExported.body", Integer.toString(lIds.size())),
                                language.getString("ManageLocalIdentities.identitiesExported.title"),
                                JOptionPane.INFORMATION_MESSAGE);
                    } else {
                        JOptionPane.showMessageDialog(
                                ManageLocalIdentitiesDialog.this,
                                language.getString("ManageLocalIdentities.identitiesExportFailed.body"),
                                language.getString("ManageLocalIdentities.identitiesExportFailed.title"),
                                JOptionPane.ERROR_MESSAGE);
                    }
                }
            });
        }
        return BexportXml;
    }

    /**
     * This method initializes BsetSignature
     *
     * @return javax.swing.JButton
     */
    private JButton getBsetSignature() {
        if( BsetSignature == null ) {
            BsetSignature = new JButton();
            BsetSignature.setText("ManageLocalIdentities.button.editSignature");
            BsetSignature.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(final java.awt.event.ActionEvent e) {
                    final LocalIdentity li = (LocalIdentity)getIdentitiesList().getSelectedValue();
                    if( li == null ) {
                        return;
                    }
                    final String idString = li.getUniqueName();
                    final String signature = li.getSignature();
                    final ManageLocalIdentitiesSignatureDialog dlg = new ManageLocalIdentitiesSignatureDialog(ManageLocalIdentitiesDialog.this);
                    String newSig = dlg.startDialog(idString, signature);
                    if( newSig != null ) {
                        newSig = newSig.trim();
                        if( newSig.length() == 0 ) {
                            newSig = null;
                        }
                        li.setSignature(newSig);
                    }
                }
            });
        }
        return BsetSignature;
    }

    public boolean isIdentitiesImported() {
        return identitiesImported;
    }
//  @jve:decl-index=0:visual-constraint="10,10"
TOP

Related Classes of frost.gui.ManageLocalIdentitiesDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.