1 19 24 25 package org.netbeans.modules.j2ee.sun.share.configbean.customizers; 26 27 import java.awt.BorderLayout ; 28 import java.awt.Dimension ; 29 import java.awt.GridBagConstraints ; 30 import java.awt.Insets ; 31 import java.beans.PropertyChangeEvent ; 32 import java.beans.PropertyChangeListener ; 33 import java.text.MessageFormat ; 34 import java.util.ArrayList ; 35 import java.util.Collection ; 36 import java.util.ResourceBundle ; 37 import javax.swing.JPanel ; 38 import javax.swing.JScrollPane ; 39 import javax.swing.JTable ; 40 import javax.swing.ListSelectionModel ; 41 import javax.swing.event.ListSelectionEvent ; 42 import javax.swing.event.ListSelectionListener ; 43 import javax.swing.event.TableModelListener ; 44 import javax.swing.table.TableModel ; 45 46 import org.netbeans.modules.j2ee.sun.share.Constants; 47 import org.netbeans.modules.j2ee.sun.share.PrincipalNameMapping; 48 import org.netbeans.modules.j2ee.sun.share.SecurityMasterListModel; 49 import org.netbeans.modules.j2ee.sun.share.configbean.ASDDVersion; 50 import org.netbeans.modules.j2ee.sun.share.configbean.Utils; 51 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.FixedHeightJTable; 52 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.HelpContext; 53 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.InputDialog; 54 55 59 public class SecurityAddPrincipalPanel extends JPanel implements ListSelectionListener { 60 61 private static final ResourceBundle customizerBundle = ResourceBundle.getBundle( 62 "org.netbeans.modules.j2ee.sun.share.configbean.customizers.Bundle"); 64 private final PrincipalTableModel principalModel; 65 66 private Dimension initialPreferredSize; 67 68 private String principalName; 69 private String className; 70 71 73 private JTable existingPrincipalsTable; 74 private SecurityMasterListModel existingPrincipalsModel; 75 private TableModel versionedModel; 76 77 private final boolean as90FeaturesVisible; 79 80 83 private SecurityAddPrincipalPanel(PrincipalTableModel pml, ASDDVersion asVersion) { 84 principalModel = pml; 85 principalName = className = null; 86 87 as90FeaturesVisible = ASDDVersion.SUN_APPSERVER_9_0.compareTo(asVersion) <= 0; 88 89 initComponents(); 90 initUserComponents(); 91 initFields(); 92 } 93 94 protected String getPrincipalName() { 95 return principalName; 96 } 97 98 protected String getClassName() { 99 return className; 100 } 101 102 107 private void initComponents() { 109 java.awt.GridBagConstraints gridBagConstraints; 110 111 buttonGroup = new javax.swing.ButtonGroup (); 112 jLblPrincipalEntryDesc = new javax.swing.JLabel (); 113 jLblRequiredMark = new javax.swing.JLabel (); 114 jLblPrincipalName = new javax.swing.JLabel (); 115 jTxtPrincipalName = new javax.swing.JTextField (); 116 jLblClassName = new javax.swing.JLabel (); 117 jTxtClassName = new javax.swing.JTextField (); 118 jLblPrincipalTableDesc = new javax.swing.JLabel (); 119 120 setLayout(new java.awt.GridBagLayout ()); 121 122 jLblPrincipalEntryDesc.setText(customizerBundle.getString("LBL_PrincipalEntryDesc90")); 123 gridBagConstraints = new java.awt.GridBagConstraints (); 124 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 125 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 126 gridBagConstraints.insets = new java.awt.Insets (6, 6, 0, 5); 127 add(jLblPrincipalEntryDesc, gridBagConstraints); 128 129 jLblRequiredMark.setLabelFor(jTxtPrincipalName); 130 jLblRequiredMark.setText("*"); 131 gridBagConstraints = new java.awt.GridBagConstraints (); 132 gridBagConstraints.insets = new java.awt.Insets (6, 30, 0, 0); 133 add(jLblRequiredMark, gridBagConstraints); 134 135 jLblPrincipalName.setLabelFor(jTxtPrincipalName); 136 jLblPrincipalName.setText(customizerBundle.getString("LBL_PrincipalName_1")); 137 gridBagConstraints = new java.awt.GridBagConstraints (); 138 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 139 gridBagConstraints.insets = new java.awt.Insets (6, 6, 0, 0); 140 add(jLblPrincipalName, gridBagConstraints); 141 142 jTxtPrincipalName.addKeyListener(new java.awt.event.KeyAdapter () { 143 public void keyReleased(java.awt.event.KeyEvent evt) { 144 jTxtPrincipalNameKeyReleased(evt); 145 } 146 }); 147 148 gridBagConstraints = new java.awt.GridBagConstraints (); 149 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 150 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 151 gridBagConstraints.weightx = 1.0; 152 gridBagConstraints.insets = new java.awt.Insets (6, 6, 0, 11); 153 add(jTxtPrincipalName, gridBagConstraints); 154 jTxtPrincipalName.getAccessibleContext().setAccessibleName(customizerBundle.getString("ACSN_PrincipalName")); 155 jTxtPrincipalName.getAccessibleContext().setAccessibleDescription(customizerBundle.getString("ACSD_PrincipalName")); 156 157 jLblClassName.setLabelFor(jTxtClassName); 158 jLblClassName.setText(customizerBundle.getString("LBL_ClassName_1")); 159 gridBagConstraints = new java.awt.GridBagConstraints (); 160 gridBagConstraints.gridx = 1; 161 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 162 gridBagConstraints.insets = new java.awt.Insets (6, 6, 0, 0); 163 add(jLblClassName, gridBagConstraints); 164 165 jTxtClassName.addKeyListener(new java.awt.event.KeyAdapter () { 166 public void keyReleased(java.awt.event.KeyEvent evt) { 167 jTxtClassNameKeyReleased(evt); 168 } 169 }); 170 171 gridBagConstraints = new java.awt.GridBagConstraints (); 172 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 173 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 174 gridBagConstraints.weightx = 1.0; 175 gridBagConstraints.insets = new java.awt.Insets (6, 6, 0, 11); 176 add(jTxtClassName, gridBagConstraints); 177 jTxtClassName.getAccessibleContext().setAccessibleName(customizerBundle.getString("ACSN_ClassName")); 178 jTxtClassName.getAccessibleContext().setAccessibleDescription(customizerBundle.getString("ACSD_ClassName")); 179 180 jLblPrincipalTableDesc.setText(customizerBundle.getString("LBL_PrincipalTableDescription")); 181 gridBagConstraints = new java.awt.GridBagConstraints (); 182 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 183 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 184 gridBagConstraints.insets = new java.awt.Insets (6, 6, 0, 5); 185 add(jLblPrincipalTableDesc, gridBagConstraints); 186 187 } 189 private void jTxtClassNameKeyReleased(java.awt.event.KeyEvent evt) { className = jTxtClassName.getText(); 191 firePropertyChange(Constants.USER_DATA_CHANGED, null, null); 192 } 194 private void jTxtPrincipalNameKeyReleased(java.awt.event.KeyEvent evt) { principalName = jTxtPrincipalName.getText(); 196 firePropertyChange(Constants.USER_DATA_CHANGED, null, null); 197 } 199 200 private javax.swing.ButtonGroup buttonGroup; 202 private javax.swing.JLabel jLblClassName; 203 private javax.swing.JLabel jLblPrincipalEntryDesc; 204 private javax.swing.JLabel jLblPrincipalName; 205 private javax.swing.JLabel jLblPrincipalTableDesc; 206 private javax.swing.JLabel jLblRequiredMark; 207 private javax.swing.JTextField jTxtClassName; 208 private javax.swing.JTextField jTxtPrincipalName; 209 211 private void initUserComponents() { 212 214 if(!as90FeaturesVisible) { 215 jLblPrincipalEntryDesc.setText(customizerBundle.getString("LBL_PrincipalEntryDesc81")); jLblClassName.setVisible(false); 217 jTxtClassName.setVisible(false); 218 } 219 220 223 initialPreferredSize = getPreferredSize(); 224 225 227 existingPrincipalsTable = new FixedHeightJTable(); 228 existingPrincipalsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 229 existingPrincipalsTable.getSelectionModel().addListSelectionListener(this); 230 231 JScrollPane scrollPane = new JScrollPane (); 232 scrollPane.setViewportView(existingPrincipalsTable); 233 GridBagConstraints gridBagConstraints = new GridBagConstraints (); 234 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 235 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 236 gridBagConstraints.weightx = 1.0; 237 gridBagConstraints.weighty = 1.0; 238 gridBagConstraints.insets = new Insets (2, 30, 11, 11); 239 add(scrollPane, gridBagConstraints); 240 241 getAccessibleContext().setAccessibleName(customizerBundle.getString("ACSN_AddPrincipalName")); getAccessibleContext().setAccessibleDescription(customizerBundle.getString("ACSD_AddPrincipalName")); } 244 245 private void initFields() { 246 existingPrincipalsModel = SecurityMasterListModel.getPrincipalMasterModel(); 248 versionedModel = new VersionedPrincipalTableModel(existingPrincipalsModel, as90FeaturesVisible); 249 existingPrincipalsTable.setModel(versionedModel); 250 251 updateTextFields(); 253 254 setPreferredSize(new Dimension (initialPreferredSize.width, initialPreferredSize.height + 148)); 257 } 258 259 private void updateTextFields() { 260 jTxtPrincipalName.setText(principalName); 261 jTxtClassName.setText(className); 262 } 263 264 public void valueChanged(ListSelectionEvent e) { 265 ListSelectionModel selModel = existingPrincipalsTable.getSelectionModel(); 266 if(!selModel.getValueIsAdjusting()) { 267 int selectedRow = existingPrincipalsTable.getSelectedRow(); 268 if(selectedRow != -1) { 269 Object entry = existingPrincipalsModel.getRow(selectedRow); 270 if(entry instanceof PrincipalNameMapping) { 271 PrincipalNameMapping principalEntry = (PrincipalNameMapping) entry; 272 273 principalName = principalEntry.getPrincipalName(); 274 className = principalEntry.getClassName(); 275 updateTextFields(); 276 277 firePropertyChange(Constants.USER_DATA_CHANGED, null, null); 278 } 279 } 280 } 281 } 282 283 Collection getErrors() { 284 ArrayList errors = new ArrayList (); 286 String newPrincipalName = getPrincipalName(); 287 288 290 if(!Utils.notEmpty(newPrincipalName)) { 291 errors.add(customizerBundle.getString("ERR_BlankPrincipalName")); } 293 294 298 if(newPrincipalName != null && principalModel.contains(new PrincipalNameMapping(newPrincipalName))) { 299 errors.add(MessageFormat.format(customizerBundle.getString("ERR_PrincipalExists"), new Object [] { newPrincipalName })); } 301 302 306 if(as90FeaturesVisible) { 307 String newClassName = getClassName(); 308 if(Utils.notEmpty(newClassName) && !Utils.isJavaClass(newClassName)) { 309 errors.add(customizerBundle.getString("ERR_InvalidJavaClassName")); } 311 } 312 313 return errors; 314 } 315 316 private void commit() { 317 String newPrincipalName = getPrincipalName(); 318 String newClassName = getClassName(); 319 320 principalModel.addElement(new PrincipalNameMapping(newPrincipalName, newClassName)); 322 323 PrincipalNameMapping tmpMapping = new PrincipalNameMapping(newPrincipalName, newClassName); 325 if(!existingPrincipalsModel.contains(tmpMapping)) { 326 existingPrincipalsModel.addElement(tmpMapping); 327 } 328 } 329 330 337 static void addPrincipalName(JPanel parent, PrincipalTableModel model, ASDDVersion asVersion) { 338 SecurityAddPrincipalPanel addPrincipalPanel = new SecurityAddPrincipalPanel(model, asVersion); 339 addPrincipalPanel.displayDialog(parent, customizerBundle.getString("TITLE_AddPrincipal"), HelpContext.HELP_SECURITY_NEW_PRINCIPAL); 341 } 342 343 private void displayDialog(JPanel parent, String title, String helpId) { 344 BetterInputDialog dialog = new BetterInputDialog(parent, title, helpId, this); 345 346 do { 347 int dialogChoice = dialog.display(); 348 349 if(dialogChoice == dialog.CANCEL_OPTION) { 350 break; 351 } 352 353 if(dialogChoice == dialog.OK_OPTION) { 354 Collection errors = getErrors(); 355 356 if(dialog.hasErrors()) { 357 dialog.showErrors(); 359 } else { 360 commit(); 361 } 362 } 363 } while(dialog.hasErrors()); 364 } 365 366 private static class BetterInputDialog extends InputDialog { 367 private final SecurityAddPrincipalPanel dialogPanel; 368 private final String panelHelpId; 369 370 public BetterInputDialog(JPanel parent, String title, String helpId, SecurityAddPrincipalPanel childPanel) { 371 super(parent, title); 372 373 dialogPanel = childPanel; 374 panelHelpId = helpId; 375 376 dialogPanel.setPreferredSize(new Dimension (parent.getWidth()*3/4, 377 dialogPanel.getPreferredSize().height)); 378 379 this.getAccessibleContext().setAccessibleName(dialogPanel.getAccessibleContext().getAccessibleName()); 380 this.getAccessibleContext().setAccessibleDescription(dialogPanel.getAccessibleContext().getAccessibleDescription()); 381 382 getContentPane().add(childPanel, BorderLayout.CENTER); 383 addListeners(); 384 pack(); 385 setLocationInside(parent); 386 handleErrorDisplay(); 387 } 388 389 private void addListeners() { 390 dialogPanel.addPropertyChangeListener(Constants.USER_DATA_CHANGED, new PropertyChangeListener () { 391 public void propertyChange(PropertyChangeEvent evt) { 392 handleErrorDisplay(); 393 } 394 }); 395 } 396 397 private void handleErrorDisplay() { 398 ArrayList errors = new ArrayList (); 399 errors.addAll(dialogPanel.getErrors()); 400 setErrors(errors); 401 } 402 403 protected String getHelpId() { 404 return panelHelpId; 405 } 406 } 407 408 411 private static class VersionedPrincipalTableModel implements TableModel { 412 413 private final SecurityMasterListModel realModel; 414 private final boolean showClassColumn; 415 416 public VersionedPrincipalTableModel(SecurityMasterListModel model, boolean showClasses) { 417 realModel = model; 418 showClassColumn = showClasses; 419 } 420 421 public void removeTableModelListener(TableModelListener l) { 422 realModel.removeTableModelListener(l); 423 } 424 425 public void addTableModelListener(TableModelListener l) { 426 realModel.addTableModelListener(l); 427 } 428 429 public void setValueAt(Object aValue, int rowIndex, int columnIndex) { 430 realModel.setValueAt(aValue, rowIndex, columnIndex); 431 } 432 433 public String getColumnName(int columnIndex) { 434 return realModel.getColumnName(columnIndex); 435 } 436 437 public Class getColumnClass(int columnIndex) { 438 return realModel.getColumnClass(columnIndex); 439 } 440 441 public boolean isCellEditable(int rowIndex, int columnIndex) { 442 return realModel.isCellEditable(rowIndex, columnIndex); 443 } 444 445 public Object getValueAt(int rowIndex, int columnIndex) { 446 return realModel.getValueAt(rowIndex, columnIndex); 447 } 448 449 public int getRowCount() { 450 return realModel.getRowCount(); 451 } 452 453 public int getColumnCount() { 454 return showClassColumn ? realModel.getColumnCount() : 1; 455 } 456 } 457 } 458 | Popular Tags |