KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > j2ee > sun > share > configbean > customizers > webapp > WebAppLocalePanel


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19 /*
20  * WebAppLocalePanel.java
21  *
22  * Created on November 5, 2003, 4:56 PM
23  */

24
25 package org.netbeans.modules.j2ee.sun.share.configbean.customizers.webapp;
26
27 import java.util.ArrayList JavaDoc;
28 import java.util.Iterator JavaDoc;
29 import java.util.List JavaDoc;
30 import java.util.Map JavaDoc;
31 import java.util.ResourceBundle JavaDoc;
32 import java.util.SortedMap JavaDoc;
33
34 import java.awt.GridBagConstraints JavaDoc;
35 import java.awt.Insets JavaDoc;
36 import java.awt.event.ActionListener JavaDoc;
37 import java.beans.PropertyChangeListener JavaDoc;
38 import java.beans.PropertyChangeEvent JavaDoc;
39 import javax.swing.DefaultComboBoxModel JavaDoc;
40 import javax.swing.event.TableModelEvent JavaDoc;
41 import javax.swing.event.TableModelListener JavaDoc;
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 /**
58  *
59  * @author Peter Williams
60  */

61 public class WebAppLocalePanel extends javax.swing.JPanel JavaDoc implements TableModelListener JavaDoc {
62     
63     private static final ResourceBundle JavaDoc webappBundle = ResourceBundle.getBundle(
64         "org.netbeans.modules.j2ee.sun.share.configbean.customizers.webapp.Bundle"); // NOI18N
65

66     private static final ResourceBundle JavaDoc commonBundle = ResourceBundle.getBundle(
67         "org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.Bundle"); // NOI18N
68

69     private WebAppRootCustomizer masterPanel;
70
71     // Temporary storage for quick determination of presence of parameter encoding
72
// entry
73
private String JavaDoc defaultCharset;
74     private String JavaDoc formHintField;
75     
76     private DefaultComboBoxModel JavaDoc defaultCharsetCbxModel;
77     private DefaultComboBoxModel JavaDoc defaultLocaleCbxModel;
78
79     // Table for editing locale-charset mapping entries
80
private GenericTableModel localeCharsetMapModel;
81     private GenericTablePanel localeCharsetMapPanel;
82
83     private PropertyChangeListener JavaDoc charsetChangeListener;
84     
85     
86     /** Creates new form WebAppLocalePanel */
87     public WebAppLocalePanel(WebAppRootCustomizer src) {
88         masterPanel = src;
89
90         initComponents();
91         initUserComponents();
92     }
93     
94     /** This method is called from within the constructor to
95      * initialize the form.
96      * WARNING: Do NOT modify this code. The content of this method is
97      * always regenerated by the Form Editor.
98      */

99     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
100
private void initComponents() {
101         java.awt.GridBagConstraints JavaDoc gridBagConstraints;
102
103         jBtnGrpCharsetAliases = new javax.swing.ButtonGroup JavaDoc();
104         jLabel1 = new javax.swing.JLabel JavaDoc();
105         jPnlLocaleSettings = new javax.swing.JPanel JavaDoc();
106         jLblDefaultLocale = new javax.swing.JLabel JavaDoc();
107         jCbxDefaultLocale = new javax.swing.JComboBox JavaDoc();
108         jLblParameterEncoding = new javax.swing.JLabel JavaDoc();
109         jPnlParameterEncoding = new javax.swing.JPanel JavaDoc();
110         jLblDefaultCharset = new javax.swing.JLabel JavaDoc();
111         jCbxDefaultCharset = new javax.swing.JComboBox JavaDoc();
112         jLblFormHintField = new javax.swing.JLabel JavaDoc();
113         jTxtFormHintField = new javax.swing.JTextField JavaDoc();
114
115         setLayout(new java.awt.GridBagLayout JavaDoc());
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 JavaDoc();
121         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
122         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
123         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 0);
124         add(jLabel1, gridBagConstraints);
125
126         jPnlLocaleSettings.setLayout(new java.awt.GridBagLayout JavaDoc());
127
128         jLblDefaultLocale.setLabelFor(jCbxDefaultLocale);
129         jLblDefaultLocale.setText(webappBundle.getString("LBL_DefaultLocaleMapping_1"));
130         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
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 JavaDoc();
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 JavaDoc(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 JavaDoc();
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 JavaDoc(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 JavaDoc();
155         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
156         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
157         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 0);
158         add(jLblParameterEncoding, gridBagConstraints);
159
160         jPnlParameterEncoding.setLayout(new java.awt.GridBagLayout JavaDoc());
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 JavaDoc();
166         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
167         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
168         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 0);
169         jPnlParameterEncoding.add(jLblDefaultCharset, gridBagConstraints);
170
171         jCbxDefaultCharset.setPrototypeDisplayValue("");
172         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
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 JavaDoc(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 JavaDoc();
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 JavaDoc(6, 6, 5, 0);
188         jPnlParameterEncoding.add(jLblFormHintField, gridBagConstraints);
189
190         jTxtFormHintField.addKeyListener(new java.awt.event.KeyAdapter JavaDoc() {
191             public void keyReleased(java.awt.event.KeyEvent JavaDoc evt) {
192                 jTxtFormHintFieldKeyReleased(evt);
193             }
194         });
195
196         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
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 JavaDoc(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 JavaDoc();
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 JavaDoc(0, 6, 5, 5);
210         add(jPnlParameterEncoding, gridBagConstraints);
211
212     }// </editor-fold>//GEN-END:initComponents
213

214     private void jTxtFormHintFieldKeyReleased(java.awt.event.KeyEvent JavaDoc evt) {//GEN-FIRST:event_jTxtFormHintFieldKeyReleased
215
// Add your handling code here:
216
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     }//GEN-LAST:event_jTxtFormHintFieldKeyReleased
227

228     private void jCbxDefaultCharsetActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
229         // Add your handling code here:
230
WebAppRoot bean = masterPanel.getBean();
231         if(bean != null) {
232             LocaleCharsetInfo localeInfo = bean.getLocaleCharsetInfo();
233             Object JavaDoc 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 JavaDoc evt) {
247         // Add your handling code here:
248
WebAppRoot bean = masterPanel.getBean();
249         if(bean != null) {
250             LocaleCharsetInfo localeInfo = bean.getLocaleCharsetInfo();
251             Object JavaDoc 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     // Variables declaration - do not modify//GEN-BEGIN:variables
262
private javax.swing.ButtonGroup JavaDoc jBtnGrpCharsetAliases;
263     private javax.swing.JComboBox JavaDoc jCbxDefaultCharset;
264     private javax.swing.JComboBox JavaDoc jCbxDefaultLocale;
265     private javax.swing.JLabel JavaDoc jLabel1;
266     private javax.swing.JLabel JavaDoc jLblDefaultCharset;
267     private javax.swing.JLabel JavaDoc jLblDefaultLocale;
268     private javax.swing.JLabel JavaDoc jLblFormHintField;
269     private javax.swing.JLabel JavaDoc jLblParameterEncoding;
270     private javax.swing.JPanel JavaDoc jPnlLocaleSettings;
271     private javax.swing.JPanel JavaDoc jPnlParameterEncoding;
272     private javax.swing.JTextField JavaDoc jTxtFormHintField;
273     // End of variables declaration//GEN-END:variables
274

275     private ActionListener JavaDoc defaultLocaleActionListener;
276     private ActionListener JavaDoc defaultCharsetActionListener;
277
278     private void initUserComponents() {
279         // Default locale combo box is initialized in initFields, when bean
280
// being edited is known.
281
defaultLocaleActionListener = new java.awt.event.ActionListener JavaDoc() {
282             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
283                 jCbxDefaultLocaleActionPerformed(evt);
284             }
285         };
286
287         // Init default charset combo box
288
defaultCharsetCbxModel = new DefaultComboBoxModel JavaDoc();
289         defaultCharsetCbxModel.addElement(""); // NOI18N
290
SortedMap JavaDoc charsets = CharsetMapping.getSortedAvailableCharsetMappings();
291         for(Iterator JavaDoc iter = charsets.entrySet().iterator(); iter.hasNext(); ) {
292             CharsetMapping cm = (CharsetMapping) ((Map.Entry JavaDoc) iter.next()).getValue();
293             defaultCharsetCbxModel.addElement(cm);
294         }
295         jCbxDefaultCharset.setModel(defaultCharsetCbxModel);
296
297         defaultCharsetActionListener = new java.awt.event.ActionListener JavaDoc() {
298             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
299                 jCbxDefaultCharsetActionPerformed(evt);
300             }
301         };
302
303         /* Add locale-charset mapping table panel :
304          * TableEntry list has four properties: locale, agent, charset, description
305          */

306         ArrayList JavaDoc tableColumns = new ArrayList JavaDoc(4);
307         tableColumns.add(new GenericTableModel.AttributeEntry(LocaleCharsetMap.LOCALE,
308             webappBundle.getString("LBL_Locale"), true)); // NOI18N
309
tableColumns.add(new GenericTableModel.AttributeEntry(LocaleCharsetMap.CHARSET,
310             webappBundle.getString("LBL_CharacterSet"), true)); // NOI18N
311
tableColumns.add(new GenericTableModel.AttributeEntry(LocaleCharsetMap.AGENT,
312             webappBundle.getString("LBL_Agent"))); // NOI18N
313
tableColumns.add(new GenericTableModel.ValueEntry(LocaleCharsetMap.DESCRIPTION,
314             webappBundle.getString("LBL_LocaleDescription"))); // NOI18N
315

316 // localeCharsetMapModel = new GenericTableModel(LocaleCharsetInfo.LOCALE_CHARSET_MAP,
317
// LocaleCharsetMap.class, tableColumns);
318
localeCharsetMapModel = new LocaleCharsetTableModel(tableColumns);
319         localeCharsetMapPanel = new GenericTablePanel(localeCharsetMapModel,
320             webappBundle, "LocaleCharsetMapping", // NOI18N - property name
321
LocaleCharsetMapEntryPanel.class,
322             HelpContext.HELP_WEBAPP_LOCALE_MAPPING_POPUP);
323
324         GridBagConstraints JavaDoc gridBagConstraints = new GridBagConstraints JavaDoc();
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 JavaDoc(0, 6, 0, 5);
330         add(localeCharsetMapPanel, gridBagConstraints);
331         
332         charsetChangeListener = new PropertyChangeListener JavaDoc() {
333             public void propertyChange(PropertyChangeEvent JavaDoc 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     /** Initialization of all the fields in this panel from the bean that
354      * was passed in.
355      */

356     public void initFields(WebAppRoot bean) {
357         LocaleCharsetInfo localeInfo = bean.getLocaleCharsetInfo();
358
359         if(enableDefaultFields(localeInfo.sizeLocaleCharsetMap() > 0)) {
360             // init default locale combo
361
defaultLocaleCbxModel = getDefaultLocales(localeInfo);
362             jCbxDefaultLocale.setModel(defaultLocaleCbxModel);
363             
364             defaultLocaleCbxModel.setSelectedItem(
365                 LocaleMapping.getLocaleMapping(localeInfo.getDefaultLocale()));
366
367             // init parameter encoding fields
368
if(localeInfo.isParameterEncoding()) {
369                 defaultCharset = localeInfo.getParameterEncodingDefaultCharset();
370                 formHintField = localeInfo.getParameterEncodingFormHintField();
371
372                 defaultCharsetCbxModel.setSelectedItem(CharsetMapping.getCharsetMapping(defaultCharset));
373             } else {
374                 defaultCharset = null; // NOI18N
375
formHintField = ""; // NOI18N
376

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 JavaDoc getDefaultLocales(LocaleCharsetInfo localeInfo) {
409         DefaultComboBoxModel JavaDoc defaultLocaleModel = new DefaultComboBoxModel JavaDoc();
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                 // In case it was invalid before...
452
masterPanel.validateField(WebAppRoot.FIELD_FORM_HINT);
453             }
454         }
455         
456         enableDefaultFields(localeInfo.sizeLocaleCharsetMap() > 0);
457     }
458     
459     private void updateDefaultCharsetModel() {
460         Object JavaDoc 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 JavaDoc();
470         defaultCharsetCbxModel.addElement(""); // NOI18N
471
SortedMap JavaDoc charsets = CharsetMapping.getSortedAvailableCharsetMappings();
472         for(Iterator JavaDoc iter = charsets.entrySet().iterator(); iter.hasNext(); ) {
473             CharsetMapping cm = (CharsetMapping) ((Map.Entry JavaDoc) 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 JavaDoc e) {
486         WebAppRoot bean = masterPanel.getBean();
487         if(bean != null) {
488 // LocaleCharsetInfo info = bean.getLocaleCharsetInfo();
489
// info.setLocaleCharsetMap(localeCharsetMapModel.getData().toArray(new LocaleCharsetMap[0]));
490
if(e.getSource() == localeCharsetMapModel) {
491                 updateDefaultLocale(bean.getLocaleCharsetInfo());
492             }
493             
494             // Force property change to be issued by the bean
495
bean.setDirty();
496         }
497     }
498     
499     private static class LocaleCharsetTableModel extends GenericTableModel {
500         public LocaleCharsetTableModel(List JavaDoc tableColumns) {
501             super(LocaleCharsetInfo.LOCALE_CHARSET_MAP, localeCharsetMapFactory, tableColumns);
502         }
503         
504         public boolean alreadyExists(Object JavaDoc[] values) {
505             boolean exists = false;
506             
507             List JavaDoc children = getChildren();
508             for(Iterator JavaDoc iter = children.iterator(); iter.hasNext(); ) {
509                 LocaleCharsetMap map = (LocaleCharsetMap) iter.next();
510                 if(match((String JavaDoc) values[0], map.getLocale()) &&
511                    match((String JavaDoc) values[1], map.getCharset()) &&
512                    match((String JavaDoc) values[2], map.getAgent())) {
513                        exists = true;
514                        break;
515                 }
516             }
517
518             return exists;
519         }
520         
521         private final boolean match(String JavaDoc a, String JavaDoc 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 JavaDoc keyPropertyValue) {
534             // FIXME we can't actually support this API properly with the current
535
// design so just have it fail.
536
return false;
537         }
538     }
539     
540     // New for migration to sun DD API model. Factory instance to pass to generic table model
541
// to allow it to create localeCharsetMap beans.
542
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