1 16 17 package de.schlichtherle.key.passwd.swing; 18 19 import de.schlichtherle.swing.EnhancedPanel; 20 21 import java.awt.*; 22 import java.awt.event.*; 23 import java.io.*; 24 import java.util.*; 25 26 import javax.swing.*; 27 import javax.swing.event.*; 28 import javax.swing.text.*; 29 30 45 public class OpenKeyPanel extends EnhancedPanel { 46 47 private static final String CLASS_NAME 48 = "de/schlichtherle/key/passwd/swing/OpenKeyPanel".replace('/', '.'); private static final ResourceBundle resources 50 = ResourceBundle.getBundle(CLASS_NAME); 51 52 private final Color defaultForeground; 53 54 private JComponent extraDataUI; 55 56 private Feedback feedback; 57 58 61 public OpenKeyPanel() { 62 initComponents(); 63 final DocumentListener dl = new DocumentListener() { 64 public void insertUpdate(DocumentEvent e) { 65 setError(null); 66 } 67 68 public void removeUpdate(DocumentEvent e) { 69 setError(null); 70 } 71 72 public void changedUpdate(DocumentEvent e) { 73 setError(null); 74 } 75 }; 76 passwd.getDocument().addDocumentListener(dl); 77 authenticationPanel.getKeyFileDocument().addDocumentListener(dl); 78 defaultForeground = resourceID.getForeground(); 79 } 80 81 private Font getBoldFont() { 82 return resourceID.getFont().deriveFont(Font.BOLD); 83 } 84 85 90 public void setResourceID(final String resourceID) { 91 final String lastResourceID = PromptingKeyProviderUI.lastResourceID; 92 if (!lastResourceID.equals(resourceID) && !"".equals(lastResourceID)) { 93 this.resourceID.setForeground(Color.RED); 94 } else { 95 this.resourceID.setForeground(defaultForeground); 96 } 97 this.resourceID.setText(resourceID); 98 PromptingKeyProviderUI.lastResourceID = resourceID; 99 } 100 101 106 public String getResourceID() { 107 return resourceID.getText(); 108 } 109 110 113 public String getError() { 114 final String error = this.error.getText(); 115 return error.trim().length() > 0 ? error : null; 116 } 117 118 123 public void setError(final String error) { 124 this.error.setText(error != null ? error : " "); 128 } 129 130 139 public Object getOpenKey() { 140 switch (authenticationPanel.getAuthenticationMethod()) { 141 case AuthenticationPanel.AUTH_PASSWD: 142 return passwd.getPassword(); 143 144 case AuthenticationPanel.AUTH_KEY_FILE: 145 final String keyFilePathname 146 = authenticationPanel.getKeyFilePath(); 147 try { 148 return PromptingKeyProviderUI.readKeyFile(keyFilePathname); 149 } catch (EOFException failure) { 150 setError(resources.getString("keyFile.eofException")); 151 return null; 152 } catch (FileNotFoundException failure) { 153 setError(resources.getString("keyFile.fileNotFoundException")); 154 return null; 155 } catch (IOException failure) { 156 setError(resources.getString("keyFile.ioException")); 157 return null; 158 } 159 160 default: 161 throw new AssertionError ("Unsupported authentication method!"); 162 } 163 } 164 165 171 public void setKeyChangeRequested(final boolean changeKeyRequested) { 172 this.changeKey.setSelected(changeKeyRequested); 173 } 174 175 180 public boolean isKeyChangeRequested() { 181 return changeKey.isSelected(); 182 } 183 184 189 public JComponent getExtraDataUI() { 190 return extraDataUI; 191 } 192 193 203 public void setExtraDataUI(final JComponent extraDataUI) { 204 if (this.extraDataUI == extraDataUI) 205 return; 206 207 if (this.extraDataUI != null) { 208 remove(this.extraDataUI); 209 } 210 if (extraDataUI != null) { 211 java.awt.GridBagConstraints gridBagConstraints; 212 gridBagConstraints = new java.awt.GridBagConstraints (); 213 gridBagConstraints.gridx = 0; 214 gridBagConstraints.gridy = 4; 215 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 216 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 217 gridBagConstraints.insets = new java.awt.Insets (15, 0, 0, 0); 218 add(extraDataUI, gridBagConstraints); 219 } 220 this.extraDataUI = extraDataUI; 221 222 revalidate(); 223 } 224 225 229 public Feedback getFeedback() { 230 return feedback; 231 } 232 233 237 public void setFeedback(final Feedback feedback) { 238 this.feedback = feedback; 239 } 240 241 246 private void initComponents() { 248 java.awt.GridBagConstraints gridBagConstraints; 249 250 passwdPanel = new de.schlichtherle.swing.EnhancedPanel(); 251 passwdLabel = new javax.swing.JLabel (); 252 passwd = new javax.swing.JPasswordField (); 253 final javax.swing.JLabel prompt = new javax.swing.JLabel (); 254 resourceID = new javax.swing.JTextPane (); 255 authenticationPanel = new de.schlichtherle.key.passwd.swing.AuthenticationPanel(); 256 error = new javax.swing.JLabel (); 257 258 passwdPanel.setLayout(new java.awt.GridBagLayout ()); 259 260 passwdPanel.addPanelListener(new de.schlichtherle.swing.event.PanelListener() { 261 public void ancestorWindowShown(de.schlichtherle.swing.event.PanelEvent evt) { 262 passwdPanelAncestorWindowShown(evt); 263 } 264 public void ancestorWindowHidden(de.schlichtherle.swing.event.PanelEvent evt) { 265 } 266 }); 267 268 passwdLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("de/schlichtherle/key/passwd/swing/OpenKeyPanel").getString("passwd").charAt(0)); 269 passwdLabel.setLabelFor(passwd); 270 passwdLabel.setText(resources.getString("passwd")); gridBagConstraints = new java.awt.GridBagConstraints (); 272 gridBagConstraints.gridx = 0; 273 gridBagConstraints.gridy = 0; 274 gridBagConstraints.insets = new java.awt.Insets (0, 0, 0, 5); 275 passwdPanel.add(passwdLabel, gridBagConstraints); 276 277 passwd.setColumns(20); 278 gridBagConstraints = new java.awt.GridBagConstraints (); 279 gridBagConstraints.gridx = 1; 280 gridBagConstraints.gridy = 0; 281 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 282 gridBagConstraints.weightx = 1.0; 283 passwdPanel.add(passwd, gridBagConstraints); 284 285 setLayout(new java.awt.GridBagLayout ()); 286 287 addPanelListener(new de.schlichtherle.swing.event.PanelListener() { 288 public void ancestorWindowShown(de.schlichtherle.swing.event.PanelEvent evt) { 289 formAncestorWindowShown(evt); 290 } 291 public void ancestorWindowHidden(de.schlichtherle.swing.event.PanelEvent evt) { 292 } 293 }); 294 295 prompt.setLabelFor(resourceID); 296 prompt.setText(resources.getString("prompt")); gridBagConstraints = new java.awt.GridBagConstraints (); 298 gridBagConstraints.gridx = 0; 299 gridBagConstraints.gridy = 0; 300 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 301 gridBagConstraints.insets = new java.awt.Insets (0, 0, 5, 0); 302 add(prompt, gridBagConstraints); 303 304 resourceID.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createEtchedBorder(), javax.swing.BorderFactory.createEmptyBorder(2, 2, 2, 2))); 305 resourceID.setEditable(false); 306 resourceID.setFont(getBoldFont()); 307 resourceID.setOpaque(false); 308 gridBagConstraints = new java.awt.GridBagConstraints (); 309 gridBagConstraints.gridx = 0; 310 gridBagConstraints.gridy = 1; 311 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 312 gridBagConstraints.weightx = 1.0; 313 gridBagConstraints.insets = new java.awt.Insets (0, 0, 15, 0); 314 add(resourceID, gridBagConstraints); 315 316 authenticationPanel.setPasswdPanel(passwdPanel); 317 gridBagConstraints = new java.awt.GridBagConstraints (); 318 gridBagConstraints.gridx = 0; 319 gridBagConstraints.gridy = 2; 320 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 321 add(authenticationPanel, gridBagConstraints); 322 323 changeKey.setText(resources.getString("changeKey")); gridBagConstraints = new java.awt.GridBagConstraints (); 325 gridBagConstraints.gridx = 0; 326 gridBagConstraints.gridy = 3; 327 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 328 gridBagConstraints.insets = new java.awt.Insets (15, 0, 0, 0); 329 add(changeKey, gridBagConstraints); 330 331 error.setForeground(java.awt.Color.red); 332 error.setText(" "); 333 error.setName("error"); 334 gridBagConstraints = new java.awt.GridBagConstraints (); 335 gridBagConstraints.gridx = 0; 336 gridBagConstraints.gridy = 5; 337 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 338 gridBagConstraints.weighty = 1.0; 339 gridBagConstraints.insets = new java.awt.Insets (15, 0, 0, 0); 340 add(error, gridBagConstraints); 341 342 } 344 private void formAncestorWindowShown(de.schlichtherle.swing.event.PanelEvent evt) { final Feedback feedback = getFeedback(); 346 if (feedback != null) { 347 feedback.setPanel(this); 348 feedback.run(); 349 } 350 } 352 private void passwdPanelAncestorWindowShown(de.schlichtherle.swing.event.PanelEvent evt) { final Window window = evt.getAncestorWindow(); 384 window.addWindowFocusListener(new WindowFocusListener() { 385 public void windowGainedFocus(WindowEvent e) { 386 window.removeWindowFocusListener(this); 387 EventQueue.invokeLater(new Runnable () { 388 public void run() { 389 if (passwd.requestFocusInWindow()) 390 passwd.selectAll(); 391 } 392 }); 393 } 394 395 public void windowLostFocus(WindowEvent e) { 396 } 397 }); 398 } 400 private de.schlichtherle.key.passwd.swing.AuthenticationPanel authenticationPanel; 402 private final javax.swing.JCheckBox changeKey = new javax.swing.JCheckBox (); 403 private javax.swing.JLabel error; 404 private javax.swing.JPasswordField passwd; 405 private javax.swing.JLabel passwdLabel; 406 private de.schlichtherle.swing.EnhancedPanel passwdPanel; 407 private javax.swing.JTextPane resourceID; 408 } 410 | Popular Tags |