1 19 24 25 package org.netbeans.modules.j2ee.sun.share.configbean.customizers.webapp; 26 27 import java.util.ArrayList ; 28 import java.util.Iterator ; 29 import java.util.List ; 30 import java.util.Map ; 31 import java.util.ResourceBundle ; 32 import java.util.SortedMap ; 33 34 import java.awt.GridBagConstraints ; 35 import java.awt.Insets ; 36 import java.awt.event.ActionListener ; 37 import java.beans.PropertyChangeListener ; 38 import java.beans.PropertyChangeEvent ; 39 import javax.swing.DefaultComboBoxModel ; 40 import javax.swing.event.TableModelEvent ; 41 import javax.swing.event.TableModelListener ; 42 43 import org.netbeans.modules.j2ee.sun.dd.api.CommonDDBean; 44 import org.netbeans.modules.j2ee.sun.dd.api.web.LocaleCharsetInfo; 45 import org.netbeans.modules.j2ee.sun.dd.api.web.LocaleCharsetMap; 46 47 import org.netbeans.modules.j2ee.sun.share.configbean.StorageBeanFactory; 48 import org.netbeans.modules.j2ee.sun.share.configbean.Utils; 49 import org.netbeans.modules.j2ee.sun.share.configbean.WebAppRoot; 50 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.GenericTableModel; 51 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.GenericTablePanel; 52 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.HelpContext; 53 54 import org.netbeans.modules.j2ee.sun.share.CharsetMapping; 55 import org.netbeans.modules.j2ee.sun.share.configbean.ASDDVersion; 56 57 61 public class WebAppLocalePanel extends javax.swing.JPanel implements TableModelListener { 62 63 private static final ResourceBundle webappBundle = ResourceBundle.getBundle( 64 "org.netbeans.modules.j2ee.sun.share.configbean.customizers.webapp.Bundle"); 66 private static final ResourceBundle commonBundle = ResourceBundle.getBundle( 67 "org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.Bundle"); 69 private WebAppRootCustomizer masterPanel; 70 71 private String defaultCharset; 74 private String formHintField; 75 76 private DefaultComboBoxModel defaultCharsetCbxModel; 77 private DefaultComboBoxModel defaultLocaleCbxModel; 78 79 private GenericTableModel localeCharsetMapModel; 81 private GenericTablePanel localeCharsetMapPanel; 82 83 private PropertyChangeListener charsetChangeListener; 84 85 86 87 public WebAppLocalePanel(WebAppRootCustomizer src) { 88 masterPanel = src; 89 90 initComponents(); 91 initUserComponents(); 92 } 93 94 99 private void initComponents() { 101 java.awt.GridBagConstraints gridBagConstraints; 102 103 jBtnGrpCharsetAliases = new javax.swing.ButtonGroup (); 104 jLabel1 = new javax.swing.JLabel (); 105 jPnlLocaleSettings = new javax.swing.JPanel (); 106 jLblDefaultLocale = new javax.swing.JLabel (); 107 jCbxDefaultLocale = new javax.swing.JComboBox (); 108 jLblParameterEncoding = new javax.swing.JLabel (); 109 jPnlParameterEncoding = new javax.swing.JPanel (); 110 jLblDefaultCharset = new javax.swing.JLabel (); 111 jCbxDefaultCharset = new javax.swing.JComboBox (); 112 jLblFormHintField = new javax.swing.JLabel (); 113 jTxtFormHintField = new javax.swing.JTextField (); 114 115 setLayout(new java.awt.GridBagLayout ()); 116 117 getAccessibleContext().setAccessibleName(webappBundle.getString("ACSN_WebAppLocaleTab")); 118 getAccessibleContext().setAccessibleDescription(webappBundle.getString("ACSD_WebAppLocaleTab")); 119 jLabel1.setText(webappBundle.getString("LBL_LocaleInfoPanelDescription")); 120 gridBagConstraints = new java.awt.GridBagConstraints (); 121 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 122 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 123 gridBagConstraints.insets = new java.awt.Insets (6, 6, 0, 0); 124 add(jLabel1, gridBagConstraints); 125 126 jPnlLocaleSettings.setLayout(new java.awt.GridBagLayout ()); 127 128 jLblDefaultLocale.setLabelFor(jCbxDefaultLocale); 129 jLblDefaultLocale.setText(webappBundle.getString("LBL_DefaultLocaleMapping_1")); 130 gridBagConstraints = new java.awt.GridBagConstraints (); 131 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 132 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 133 jPnlLocaleSettings.add(jLblDefaultLocale, gridBagConstraints); 134 135 jCbxDefaultLocale.setPrototypeDisplayValue(""); 136 gridBagConstraints = new java.awt.GridBagConstraints (); 137 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 138 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 139 gridBagConstraints.weightx = 1.0; 140 gridBagConstraints.insets = new java.awt.Insets (0, 6, 0, 0); 141 jPnlLocaleSettings.add(jCbxDefaultLocale, gridBagConstraints); 142 jCbxDefaultLocale.getAccessibleContext().setAccessibleName(webappBundle.getString("ACSN_DefaultLocaleMapping")); 143 jCbxDefaultLocale.getAccessibleContext().setAccessibleDescription(webappBundle.getString("ACSD_DefaultLocaleMapping")); 144 145 gridBagConstraints = new java.awt.GridBagConstraints (); 146 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 147 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; 148 gridBagConstraints.weightx = 1.0; 149 gridBagConstraints.insets = new java.awt.Insets (6, 6, 0, 5); 150 add(jPnlLocaleSettings, gridBagConstraints); 151 152 jLblParameterEncoding.setLabelFor(jPnlParameterEncoding); 153 jLblParameterEncoding.setText(webappBundle.getString("LBL_ParameterEncoding")); 154 gridBagConstraints = new java.awt.GridBagConstraints (); 155 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 156 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 157 gridBagConstraints.insets = new java.awt.Insets (6, 6, 0, 0); 158 add(jLblParameterEncoding, gridBagConstraints); 159 160 jPnlParameterEncoding.setLayout(new java.awt.GridBagLayout ()); 161 162 jPnlParameterEncoding.setBorder(javax.swing.BorderFactory.createEtchedBorder()); 163 jLblDefaultCharset.setLabelFor(jCbxDefaultCharset); 164 jLblDefaultCharset.setText(webappBundle.getString("LBL_DefaultCharset_1")); 165 gridBagConstraints = new java.awt.GridBagConstraints (); 166 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 167 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 168 gridBagConstraints.insets = new java.awt.Insets (6, 6, 0, 0); 169 jPnlParameterEncoding.add(jLblDefaultCharset, gridBagConstraints); 170 171 jCbxDefaultCharset.setPrototypeDisplayValue(""); 172 gridBagConstraints = new java.awt.GridBagConstraints (); 173 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 174 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 175 gridBagConstraints.weightx = 1.0; 176 gridBagConstraints.insets = new java.awt.Insets (6, 6, 0, 5); 177 jPnlParameterEncoding.add(jCbxDefaultCharset, gridBagConstraints); 178 jCbxDefaultCharset.getAccessibleContext().setAccessibleName(webappBundle.getString("ACSN_DefaultCharset")); 179 jCbxDefaultCharset.getAccessibleContext().setAccessibleDescription(webappBundle.getString("ACSD_DefaultCharset")); 180 181 jLblFormHintField.setLabelFor(jTxtFormHintField); 182 jLblFormHintField.setText(webappBundle.getString("LBL_FormHintField_1")); 183 gridBagConstraints = new java.awt.GridBagConstraints (); 184 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 185 gridBagConstraints.ipady = 4; 186 gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; 187 gridBagConstraints.insets = new java.awt.Insets (6, 6, 5, 0); 188 jPnlParameterEncoding.add(jLblFormHintField, gridBagConstraints); 189 190 jTxtFormHintField.addKeyListener(new java.awt.event.KeyAdapter () { 191 public void keyReleased(java.awt.event.KeyEvent evt) { 192 jTxtFormHintFieldKeyReleased(evt); 193 } 194 }); 195 196 gridBagConstraints = new java.awt.GridBagConstraints (); 197 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 198 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 199 gridBagConstraints.weightx = 1.0; 200 gridBagConstraints.insets = new java.awt.Insets (6, 6, 5, 5); 201 jPnlParameterEncoding.add(jTxtFormHintField, gridBagConstraints); 202 jTxtFormHintField.getAccessibleContext().setAccessibleName(webappBundle.getString("ACSN_FormHintField")); 203 jTxtFormHintField.getAccessibleContext().setAccessibleDescription(webappBundle.getString("ACSD_FormHintField")); 204 205 gridBagConstraints = new java.awt.GridBagConstraints (); 206 gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; 207 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 208 gridBagConstraints.weightx = 1.0; 209 gridBagConstraints.insets = new java.awt.Insets (0, 6, 5, 5); 210 add(jPnlParameterEncoding, gridBagConstraints); 211 212 } 214 private void jTxtFormHintFieldKeyReleased(java.awt.event.KeyEvent evt) { WebAppRoot bean = masterPanel.getBean(); 217 if(bean != null) { 218 LocaleCharsetInfo localeInfo = bean.getLocaleCharsetInfo(); 219 formHintField = jTxtFormHintField.getText(); 220 localeInfo.setParameterEncodingFormHintField(formHintField); 221 localeInfo.setParameterEncoding(hasParameterEncoding()); 222 bean.setDirty(); 223 224 masterPanel.validateField(WebAppRoot.FIELD_FORM_HINT); 225 } 226 } 228 private void jCbxDefaultCharsetActionPerformed(java.awt.event.ActionEvent evt) { 229 WebAppRoot bean = masterPanel.getBean(); 231 if(bean != null) { 232 LocaleCharsetInfo localeInfo = bean.getLocaleCharsetInfo(); 233 Object item = defaultCharsetCbxModel.getSelectedItem(); 234 if(item instanceof CharsetMapping) { 235 defaultCharset = ((CharsetMapping) item).getAlias(); 236 localeInfo.setParameterEncodingDefaultCharset(defaultCharset); 237 } else { 238 defaultCharset = null; 239 localeInfo.setParameterEncodingDefaultCharset(null); 240 } 241 localeInfo.setParameterEncoding(hasParameterEncoding()); 242 bean.setDirty(); 243 } 244 } 245 246 private void jCbxDefaultLocaleActionPerformed(java.awt.event.ActionEvent evt) { 247 WebAppRoot bean = masterPanel.getBean(); 249 if(bean != null) { 250 LocaleCharsetInfo localeInfo = bean.getLocaleCharsetInfo(); 251 Object item = defaultLocaleCbxModel.getSelectedItem(); 252 if(item instanceof LocaleMapping) { 253 localeInfo.setDefaultLocale(((LocaleMapping) item).getLocale().toString()); 254 } else { 255 localeInfo.setDefaultLocale(null); 256 } 257 bean.setDirty(); 258 } 259 } 260 261 private javax.swing.ButtonGroup jBtnGrpCharsetAliases; 263 private javax.swing.JComboBox jCbxDefaultCharset; 264 private javax.swing.JComboBox jCbxDefaultLocale; 265 private javax.swing.JLabel jLabel1; 266 private javax.swing.JLabel jLblDefaultCharset; 267 private javax.swing.JLabel jLblDefaultLocale; 268 private javax.swing.JLabel jLblFormHintField; 269 private javax.swing.JLabel jLblParameterEncoding; 270 private javax.swing.JPanel jPnlLocaleSettings; 271 private javax.swing.JPanel jPnlParameterEncoding; 272 private javax.swing.JTextField jTxtFormHintField; 273 275 private ActionListener defaultLocaleActionListener; 276 private ActionListener defaultCharsetActionListener; 277 278 private void initUserComponents() { 279 defaultLocaleActionListener = new java.awt.event.ActionListener () { 282 public void actionPerformed(java.awt.event.ActionEvent evt) { 283 jCbxDefaultLocaleActionPerformed(evt); 284 } 285 }; 286 287 defaultCharsetCbxModel = new DefaultComboBoxModel (); 289 defaultCharsetCbxModel.addElement(""); SortedMap charsets = CharsetMapping.getSortedAvailableCharsetMappings(); 291 for(Iterator iter = charsets.entrySet().iterator(); iter.hasNext(); ) { 292 CharsetMapping cm = (CharsetMapping) ((Map.Entry ) iter.next()).getValue(); 293 defaultCharsetCbxModel.addElement(cm); 294 } 295 jCbxDefaultCharset.setModel(defaultCharsetCbxModel); 296 297 defaultCharsetActionListener = new java.awt.event.ActionListener () { 298 public void actionPerformed(java.awt.event.ActionEvent evt) { 299 jCbxDefaultCharsetActionPerformed(evt); 300 } 301 }; 302 303 306 ArrayList tableColumns = new ArrayList (4); 307 tableColumns.add(new GenericTableModel.AttributeEntry(LocaleCharsetMap.LOCALE, 308 webappBundle.getString("LBL_Locale"), true)); tableColumns.add(new GenericTableModel.AttributeEntry(LocaleCharsetMap.CHARSET, 310 webappBundle.getString("LBL_CharacterSet"), true)); tableColumns.add(new GenericTableModel.AttributeEntry(LocaleCharsetMap.AGENT, 312 webappBundle.getString("LBL_Agent"))); tableColumns.add(new GenericTableModel.ValueEntry(LocaleCharsetMap.DESCRIPTION, 314 webappBundle.getString("LBL_LocaleDescription"))); 316 localeCharsetMapModel = new LocaleCharsetTableModel(tableColumns); 319 localeCharsetMapPanel = new GenericTablePanel(localeCharsetMapModel, 320 webappBundle, "LocaleCharsetMapping", LocaleCharsetMapEntryPanel.class, 322 HelpContext.HELP_WEBAPP_LOCALE_MAPPING_POPUP); 323 324 GridBagConstraints gridBagConstraints = new GridBagConstraints (); 325 gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER; 326 gridBagConstraints.fill = GridBagConstraints.BOTH; 327 gridBagConstraints.weightx = 1.0; 328 gridBagConstraints.weighty = 1.0; 329 gridBagConstraints.insets = new Insets (0, 6, 0, 5); 330 add(localeCharsetMapPanel, gridBagConstraints); 331 332 charsetChangeListener = new PropertyChangeListener () { 333 public void propertyChange(PropertyChangeEvent pce) { 334 updateDefaultCharsetModel(); 335 } 336 }; 337 } 338 339 public void addListeners() { 340 localeCharsetMapModel.addTableModelListener(this); 341 jCbxDefaultLocale.addActionListener(defaultLocaleActionListener); 342 jCbxDefaultCharset.addActionListener(defaultCharsetActionListener); 343 CharsetMapping.addPropertyChangeListener(charsetChangeListener); 344 } 345 346 public void removeListeners() { 347 localeCharsetMapModel.removeTableModelListener(this); 348 jCbxDefaultLocale.removeActionListener(defaultLocaleActionListener); 349 jCbxDefaultCharset.removeActionListener(defaultCharsetActionListener); 350 CharsetMapping.removePropertyChangeListener(charsetChangeListener); 351 } 352 353 356 public void initFields(WebAppRoot bean) { 357 LocaleCharsetInfo localeInfo = bean.getLocaleCharsetInfo(); 358 359 if(enableDefaultFields(localeInfo.sizeLocaleCharsetMap() > 0)) { 360 defaultLocaleCbxModel = getDefaultLocales(localeInfo); 362 jCbxDefaultLocale.setModel(defaultLocaleCbxModel); 363 364 defaultLocaleCbxModel.setSelectedItem( 365 LocaleMapping.getLocaleMapping(localeInfo.getDefaultLocale())); 366 367 if(localeInfo.isParameterEncoding()) { 369 defaultCharset = localeInfo.getParameterEncodingDefaultCharset(); 370 formHintField = localeInfo.getParameterEncodingFormHintField(); 371 372 defaultCharsetCbxModel.setSelectedItem(CharsetMapping.getCharsetMapping(defaultCharset)); 373 } else { 374 defaultCharset = null; formHintField = ""; 377 defaultCharsetCbxModel.setSelectedItem(defaultCharset); 378 } 379 380 jTxtFormHintField.setText(formHintField); 381 } else { 382 jCbxDefaultLocale.setSelectedItem(null); 383 jCbxDefaultCharset.setSelectedItem(null); 384 jTxtFormHintField.setText(""); 385 } 386 387 localeCharsetMapPanel.setModel(localeInfo, bean.getAppServerVersion()); 388 } 389 390 private boolean enableDefaultFields(boolean hasMappings) { 391 jLblDefaultLocale.setEnabled(hasMappings); 392 jCbxDefaultLocale.setEnabled(hasMappings); 393 394 jLblParameterEncoding.setEnabled(hasMappings); 395 jLblDefaultCharset.setEnabled(hasMappings); 396 jCbxDefaultCharset.setEnabled(hasMappings); 397 jLblFormHintField.setEnabled(hasMappings); 398 jTxtFormHintField.setEnabled(hasMappings); 399 jTxtFormHintField.setEditable(hasMappings); 400 401 return hasMappings; 402 } 403 404 private boolean hasParameterEncoding() { 405 return (Utils.notEmpty(defaultCharset) || Utils.notEmpty(formHintField)); 406 } 407 408 private DefaultComboBoxModel getDefaultLocales(LocaleCharsetInfo localeInfo) { 409 DefaultComboBoxModel defaultLocaleModel = new DefaultComboBoxModel (); 410 411 if(localeInfo.sizeLocaleCharsetMap() > 0) { 412 LocaleCharsetMap [] maps = localeInfo.getLocaleCharsetMap(); 413 for(int i = 0; i < maps.length; i++) { 414 LocaleMapping lm = LocaleMapping.getLocaleMapping(maps[i].getLocale()); 415 if(lm != null) { 416 defaultLocaleModel.addElement(lm); 417 } 418 } 419 } 420 421 return defaultLocaleModel; 422 } 423 424 private void updateDefaultLocale(LocaleCharsetInfo localeInfo) { 425 int oldSize = (defaultLocaleCbxModel != null) ? defaultLocaleCbxModel.getSize() : 0; 426 defaultLocaleCbxModel = getDefaultLocales(localeInfo); 427 jCbxDefaultLocale.setModel(defaultLocaleCbxModel); 428 429 int newSize = defaultLocaleCbxModel.getSize(); 430 431 if(oldSize == 0 && newSize > 0) { 432 LocaleMapping lm = (LocaleMapping) defaultLocaleCbxModel.getElementAt(0); 433 localeInfo.setDefaultLocale(lm.getLocale().toString()); 434 defaultLocaleCbxModel.setSelectedItem(lm); 435 } else { 436 LocaleMapping lm = LocaleMapping.getLocaleMapping(localeInfo.getDefaultLocale()); 437 if(defaultLocaleCbxModel.getIndexOf(lm) >= 0) { 438 localeInfo.setDefaultLocale(lm.getLocale().toString()); 439 defaultLocaleCbxModel.setSelectedItem(lm); 440 } else { 441 localeInfo.setDefaultLocale(null); 442 443 defaultCharset = null; 444 localeInfo.setParameterEncodingDefaultCharset(null); 445 defaultCharsetCbxModel.setSelectedItem(null); 446 447 formHintField = null; 448 localeInfo.setParameterEncodingFormHintField(null); 449 jTxtFormHintField.setText(null); 450 451 masterPanel.validateField(WebAppRoot.FIELD_FORM_HINT); 453 } 454 } 455 456 enableDefaultFields(localeInfo.sizeLocaleCharsetMap() > 0); 457 } 458 459 private void updateDefaultCharsetModel() { 460 Object mapping = defaultCharsetCbxModel.getSelectedItem(); 461 CharsetMapping oldMapping; 462 463 if(mapping instanceof CharsetMapping) { 464 oldMapping = (CharsetMapping) mapping; 465 } else { 466 oldMapping = null; 467 } 468 469 defaultCharsetCbxModel = new DefaultComboBoxModel (); 470 defaultCharsetCbxModel.addElement(""); SortedMap charsets = CharsetMapping.getSortedAvailableCharsetMappings(); 472 for(Iterator iter = charsets.entrySet().iterator(); iter.hasNext(); ) { 473 CharsetMapping cm = (CharsetMapping) ((Map.Entry ) iter.next()).getValue(); 474 defaultCharsetCbxModel.addElement(cm); 475 } 476 jCbxDefaultCharset.setModel(defaultCharsetCbxModel); 477 478 if(oldMapping != null) { 479 oldMapping = CharsetMapping.getCharsetMapping(oldMapping.getCharset()); 480 } 481 482 defaultCharsetCbxModel.setSelectedItem(oldMapping); 483 } 484 485 public void tableChanged(TableModelEvent e) { 486 WebAppRoot bean = masterPanel.getBean(); 487 if(bean != null) { 488 if(e.getSource() == localeCharsetMapModel) { 491 updateDefaultLocale(bean.getLocaleCharsetInfo()); 492 } 493 494 bean.setDirty(); 496 } 497 } 498 499 private static class LocaleCharsetTableModel extends GenericTableModel { 500 public LocaleCharsetTableModel(List tableColumns) { 501 super(LocaleCharsetInfo.LOCALE_CHARSET_MAP, localeCharsetMapFactory, tableColumns); 502 } 503 504 public boolean alreadyExists(Object [] values) { 505 boolean exists = false; 506 507 List children = getChildren(); 508 for(Iterator iter = children.iterator(); iter.hasNext(); ) { 509 LocaleCharsetMap map = (LocaleCharsetMap) iter.next(); 510 if(match((String ) values[0], map.getLocale()) && 511 match((String ) values[1], map.getCharset()) && 512 match((String ) values[2], map.getAgent())) { 513 exists = true; 514 break; 515 } 516 } 517 518 return exists; 519 } 520 521 private final boolean match(String a, String b) { 522 boolean result = false; 523 524 if(a == b) { 525 result = true; 526 } else if(a != null && b != null && a.equals(b)) { 527 result = true; 528 } 529 530 return result; 531 } 532 533 public boolean alreadyExists(String keyPropertyValue) { 534 return false; 537 } 538 } 539 540 static GenericTableModel.ParentPropertyFactory localeCharsetMapFactory = 543 new GenericTableModel.ParentPropertyFactory() { 544 public CommonDDBean newParentProperty(ASDDVersion asVersion) { 545 return StorageBeanFactory.getStorageBeanFactory(asVersion).createLocaleCharsetMap(); 546 } 547 }; 548 } 549 | Popular Tags |