KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > SnowMailClient > gnupg > Views > GenerateGPGKeypairDialog


1 package SnowMailClient.gnupg.Views;
2
3
4 import SnowMailClient.gnupg.*;
5 import SnowMailClient.gnupg.Main.GnuPGCommands;
6 import SnowMailClient.Language.Language;
7 import SnowMailClient.SnowMailClientApp;
8 import snow.sortabletable.*;
9 import snow.utils.gui.*;
10 import SnowMailClient.model.accounts.*;
11
12 import SnowMailClient.gnupg.model.*;
13
14 import java.awt.*;
15 import java.awt.event.*;
16 import javax.swing.*;
17 import javax.swing.event.*;
18 import javax.swing.border.*;
19 import java.util.*;
20
21
22 public final class GenerateGPGKeypairDialog extends JDialog implements ItemListener
23 {
24   private final CloseControlPanel ccp;
25   private final JComboBox mailAddressesCB;
26   private final JTextField nameField = new JTextField(20);
27   private final JPasswordField passphraseField = new JPasswordField(20);
28   private final JPasswordField passphraseVerifField = new JPasswordField(20);
29   private final JTextField commentField = new JTextField("Snowmail", 20);
30   private final JComboBox strengthCB = new JComboBox(new String JavaDoc[]{"4096", "2048", "1024"});
31   private final JComboBox validityCB = new JComboBox(new String JavaDoc[]{Language.translate("Never expires"), "2010-01-01"});
32
33   private final KeysTableModel tableModel;
34
35
36
37   public GenerateGPGKeypairDialog(JDialog parent, KeysTableModel tableModel)
38   {
39     super(parent, Language.translate("Generate a new GnuPG keypair (DSA & El-Gamal)"), true);
40     this.tableModel = tableModel;
41
42     getContentPane().setLayout(new BorderLayout());
43
44     // center
45
mailAddressesCB = new JComboBox(SnowMailClientApp.getInstance().getAccounts().getAllMailAddresses());
46     JPanel centerPanel = new JPanel();
47     GridLayout3 gl = new GridLayout3(2,centerPanel);
48     centerPanel.setLayout(gl);
49     getContentPane().add(centerPanel, BorderLayout.CENTER);
50
51     gl.add(Language.translate("Mail Address"));
52     gl.add(mailAddressesCB, true);
53     mailAddressesCB.setEditable(true);
54     mailAddressesCB.setMaximumRowCount(20);
55     mailAddressesCB.addItemListener(this);
56
57     gl.add(Language.translate("Name"));
58     gl.add(nameField, false);
59
60     gl.add(Language.translate("Comment"));
61     gl.add(commentField, false);
62
63     gl.add(Language.translate("Passphrase"));
64     gl.add(passphraseField, false);
65
66     gl.add(Language.translate("Verification"));
67     gl.add(passphraseVerifField, false);
68
69
70     gl.add(Language.translate("El-Gamal key length"));
71     gl.add(strengthCB, false);
72     strengthCB.setSelectedIndex(1);
73
74     gl.add(Language.translate("Expiration date"));
75     gl.add(validityCB, false);
76     validityCB.setSelectedIndex(1);
77     validityCB.setEditable(true);
78
79     // south
80
ccp = new CloseControlPanel(this, true, true, Language.translate("Generate keypair"));
81     getContentPane().add(ccp, BorderLayout.SOUTH);
82
83     // initial field fill
84
itemStateChanged(null);
85
86     // Modal visibility
87
pack();
88     SnowMailClientApp.centerComponentOnMainFrame(this);
89     setVisible(true);
90
91     if(!ccp.getWasCancelled())
92     {
93        generateKeyPair();
94     }
95
96   } // Constructor
97

98
99 // public boolean wasCancelled() { return ccp.cancelled; }
100

101   public String JavaDoc getMailAddress() { return (String JavaDoc) mailAddressesCB.getSelectedItem(); }
102   public String JavaDoc getUserName() { return this.nameField.getText(); }
103   public String JavaDoc getComment() { return this.commentField.getText(); }
104   public String JavaDoc getKeyLength() { return (String JavaDoc) this.strengthCB.getSelectedItem(); }
105   private final String JavaDoc getPassphrase() { return new String JavaDoc(passphraseField.getPassword()); }
106   public String JavaDoc getValidity()
107   {
108     if(validityCB.getSelectedIndex()==0) return "0";
109     return (String JavaDoc) validityCB.getSelectedItem();
110   }
111
112
113   public void itemStateChanged(ItemEvent e)
114   {
115      String JavaDoc mail = (String JavaDoc) mailAddressesCB.getSelectedItem();
116      MailAccount ma = SnowMailClientApp.getInstance().getAccounts().getMailAccount(mail);
117      if(ma!=null)
118      {
119         nameField.setText(ma.getName());
120      }
121      else
122      {
123         // let all field stay
124
}
125   }
126
127   private void checkParams() throws Exception JavaDoc
128   {
129      if(getPassphrase().length()<6) throw new Exception JavaDoc(Language.translate("Passphrase should have at least 6 characters"));
130      if(!Arrays.equals(passphraseVerifField.getPassword(), passphraseField.getPassword()))
131      {
132        throw new Exception JavaDoc(Language.translate("Passphrase verification failed"));
133      }
134   }
135
136   private void generateKeyPair()
137   {
138      final ProgressModalDialog progress = new ProgressModalDialog(this, Language.translate("Generating GnuPG keypair"), false);
139      SnowMailClientApp.centerComponentOnMainFrame(progress);
140
141      Thread JavaDoc t = new Thread JavaDoc()
142      {
143        public void run()
144        {
145          try
146          {
147            checkParams();
148
149            GnuPGCommands.generateNew_DSA_ElG_KeyPair(SnowMailClientApp.getInstance().getGnuPGLink().getPathToGPG(),
150               getUserName(),
151               getComment(),
152               getMailAddress(),
153               getPassphrase(),
154               getKeyLength(),
155               getValidity(),
156               progress);
157
158            EventQueue.invokeLater(new Runnable JavaDoc() { public void run() {
159              tableModel.refreshModel(SnowMailClientApp.getInstance().getGnuPGLink());
160            }});
161          }
162          catch(Exception JavaDoc ex)
163          {
164            JOptionPane.showMessageDialog(progress,
165               Language.translate("Error:")+"\n"+ex.getMessage(),
166               Language.translate("Cannot generate keys"), JOptionPane.ERROR_MESSAGE);
167            ex.printStackTrace();
168          }
169          finally
170          {
171            progress.closeDialog();
172          }
173        }
174      };
175
176      t.start();
177      t.setPriority(Thread.NORM_PRIORITY-1);
178      // Wait
179
progress.start();
180
181
182   }
183
184 } // GenerateGPGKeypairDialog
Popular Tags