KickJava   Java API By Example, From Geeks To Geeks.

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


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  * ConstraintFieldEntryPanel.java
21  *
22  * Created on January 9, 2004, 12:15 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.Collection JavaDoc;
29 import java.util.List JavaDoc;
30 import java.util.ResourceBundle JavaDoc;
31 import java.text.MessageFormat JavaDoc;
32
33 import java.awt.Dimension JavaDoc;
34 import java.awt.GridBagConstraints JavaDoc;
35 import java.awt.Insets JavaDoc;
36
37 import javax.swing.JPanel JavaDoc;
38 import javax.swing.DefaultComboBoxModel JavaDoc;
39 import javax.swing.event.TableModelEvent JavaDoc;
40 import javax.swing.event.TableModelListener JavaDoc;
41
42 import org.netbeans.modules.j2ee.sun.dd.api.web.ConstraintField;
43
44 import org.netbeans.modules.j2ee.sun.share.Constants;
45 import org.netbeans.modules.j2ee.sun.share.configbean.ASDDVersion;
46 import org.netbeans.modules.j2ee.sun.share.configbean.StorageBeanFactory;
47 import org.netbeans.modules.j2ee.sun.share.configbean.Utils;
48 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.GenericTableModel;
49 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.GenericTablePanel;
50 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.GenericTableDialogPanelAccessor;
51 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.HelpContext;
52 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.BeanListMapping;
53 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.TextMapping;
54 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.ValidationSupport;
55
56 /**
57  *
58  * @author Peter Williams
59  */

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

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

68     private static final TextMapping [] scopeTypes = ScopeMapping.getScopeMappings();
69     
70     // Field indices (maps to values[] handled by get/setValues()
71
private static final int NAME_FIELD = 0;
72     private static final int SCOPE_FIELD = 1;
73     private static final int CACHEONMATCH_FIELD = 2;
74     private static final int CACHEONMATCHFAILURE_FIELD = 3;
75     private static final int VALUES_FIELD = 4;
76     private static final int NUM_FIELDS = 5; // Number of objects expected in get/setValue methods.
77

78     // Appserver version current referenced
79
private ASDDVersion appServerVersion;
80     
81     // Local storage for data entered by user
82
private String JavaDoc constraintFieldName;
83     private String JavaDoc constraintFieldScope;
84     private boolean cacheOnMatch;
85     private boolean cacheOnMatchFailure;
86     private List JavaDoc constraintValues;
87     private ConstraintField constraintValuesBean;
88     
89     // Table for editing default helper web properties
90
private GenericTableModel constraintFieldValueModel;
91     private GenericTablePanel constraintFieldValuePanel;
92     
93     private DefaultComboBoxModel JavaDoc constraintFieldScopeModel;
94     
95     private Dimension JavaDoc basicPreferredSize;
96     
97     /** Creates new form ConstraintFieldEntryPanel */
98     public ConstraintFieldEntryPanel() {
99         constraintFieldName = ""; // NOI18N
100
constraintFieldScope = ""; // NOI18N
101
cacheOnMatch = true;
102         cacheOnMatchFailure = false;
103 // constraintValuesBean = null; // initialized in init()
104

105         initComponents();
106         initUserComponents();
107     }
108     
109     /** This method is called from within the constructor to
110      * initialize the form.
111      * WARNING: Do NOT modify this code. The content of this method is
112      * always regenerated by the Form Editor.
113      */

114     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
115
private void initComponents() {
116         java.awt.GridBagConstraints JavaDoc gridBagConstraints;
117
118         jLblNameReqFlag = new javax.swing.JLabel JavaDoc();
119         jLblName = new javax.swing.JLabel JavaDoc();
120         jTxtName = new javax.swing.JTextField JavaDoc();
121         jLblFiller1 = new javax.swing.JLabel JavaDoc();
122         jLblScope = new javax.swing.JLabel JavaDoc();
123         jCbxScope = new javax.swing.JComboBox JavaDoc();
124         jLblFiller2 = new javax.swing.JLabel JavaDoc();
125         jLblCacheOnMatch = new javax.swing.JLabel JavaDoc();
126         jChkCacheOnMatch = new javax.swing.JCheckBox JavaDoc();
127         jLblFiller3 = new javax.swing.JLabel JavaDoc();
128         jLblCacheOnMatchFailure = new javax.swing.JLabel JavaDoc();
129         jChkCacheOnMatchFailure = new javax.swing.JCheckBox JavaDoc();
130
131         setLayout(new java.awt.GridBagLayout JavaDoc());
132
133         jLblNameReqFlag.setLabelFor(jTxtName);
134         jLblNameReqFlag.setText(commonBundle.getString("LBL_RequiredMark"));
135         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
136         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 0);
137         add(jLblNameReqFlag, gridBagConstraints);
138         jLblNameReqFlag.getAccessibleContext().setAccessibleName(commonBundle.getString("ACSN_RequiredMark"));
139         jLblNameReqFlag.getAccessibleContext().setAccessibleDescription(commonBundle.getString("ACSD_RequiredMark"));
140
141         jLblName.setDisplayedMnemonic(webappBundle.getString("MNE_ConstraintFieldName").charAt(0));
142         jLblName.setLabelFor(jTxtName);
143         jLblName.setText(webappBundle.getString("LBL_ConstraintFieldName_1"));
144         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
145         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
146         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 0);
147         add(jLblName, gridBagConstraints);
148
149         jTxtName.addKeyListener(new java.awt.event.KeyAdapter JavaDoc() {
150             public void keyReleased(java.awt.event.KeyEvent JavaDoc evt) {
151                 jTxtNameKeyReleased(evt);
152             }
153         });
154
155         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
156         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
157         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
158         gridBagConstraints.weightx = 1.0;
159         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 5);
160         add(jTxtName, gridBagConstraints);
161         jTxtName.getAccessibleContext().setAccessibleName(webappBundle.getString("ACSN_ConstraintFieldName"));
162         jTxtName.getAccessibleContext().setAccessibleDescription(webappBundle.getString("ACSD_ConstraintFieldName"));
163
164         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
165         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 0);
166         add(jLblFiller1, gridBagConstraints);
167
168         jLblScope.setDisplayedMnemonic(webappBundle.getString("MNE_ConstraintFieldScope").charAt(0));
169         jLblScope.setLabelFor(jCbxScope);
170         jLblScope.setText(webappBundle.getString("LBL_ConstraintFieldScope_1"));
171         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
172         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
173         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 0);
174         add(jLblScope, gridBagConstraints);
175
176         jCbxScope.addActionListener(new java.awt.event.ActionListener JavaDoc() {
177             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
178                 jCbxScopeActionPerformed(evt);
179             }
180         });
181
182         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
183         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
184         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
185         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 5);
186         add(jCbxScope, gridBagConstraints);
187         jCbxScope.getAccessibleContext().setAccessibleName(webappBundle.getString("ACSN_ConstraintFieldScope"));
188         jCbxScope.getAccessibleContext().setAccessibleDescription(webappBundle.getString("ACSD_ConstraintFieldScope"));
189
190         jLblFiller2.setLabelFor(jChkCacheOnMatch);
191         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
192         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 0);
193         add(jLblFiller2, gridBagConstraints);
194
195         jLblCacheOnMatch.setDisplayedMnemonic(webappBundle.getString("MNE_CacheOnMatch").charAt(0));
196         jLblCacheOnMatch.setLabelFor(jChkCacheOnMatch);
197         jLblCacheOnMatch.setText(webappBundle.getString("LBL_CacheOnMatch_1"));
198         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
199         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
200         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 0);
201         add(jLblCacheOnMatch, gridBagConstraints);
202
203         jChkCacheOnMatch.addItemListener(new java.awt.event.ItemListener JavaDoc() {
204             public void itemStateChanged(java.awt.event.ItemEvent JavaDoc evt) {
205                 jChkCacheOnMatchItemStateChanged(evt);
206             }
207         });
208
209         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
210         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
211         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
212         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 5);
213         add(jChkCacheOnMatch, gridBagConstraints);
214         jChkCacheOnMatch.getAccessibleContext().setAccessibleName(webappBundle.getString("ACSN_CacheOnMatch"));
215         jChkCacheOnMatch.getAccessibleContext().setAccessibleDescription(webappBundle.getString("ACSD_CacheOnMatch"));
216
217         jLblFiller3.setLabelFor(jChkCacheOnMatchFailure);
218         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
219         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 5, 0);
220         add(jLblFiller3, gridBagConstraints);
221
222         jLblCacheOnMatchFailure.setDisplayedMnemonic(webappBundle.getString("MNE_CacheOnMatchFailure").charAt(0));
223         jLblCacheOnMatchFailure.setLabelFor(jChkCacheOnMatchFailure);
224         jLblCacheOnMatchFailure.setText(webappBundle.getString("LBL_CacheOnMatchFailure_1"));
225         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
226         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
227         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 5, 0);
228         add(jLblCacheOnMatchFailure, gridBagConstraints);
229
230         jChkCacheOnMatchFailure.addItemListener(new java.awt.event.ItemListener JavaDoc() {
231             public void itemStateChanged(java.awt.event.ItemEvent JavaDoc evt) {
232                 jChkCacheOnMatchFailureItemStateChanged(evt);
233             }
234         });
235
236         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
237         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
238         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
239         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 5, 5);
240         add(jChkCacheOnMatchFailure, gridBagConstraints);
241         jChkCacheOnMatchFailure.getAccessibleContext().setAccessibleName(webappBundle.getString("ACSN_CacheOnMatchFailure"));
242         jChkCacheOnMatchFailure.getAccessibleContext().setAccessibleDescription(webappBundle.getString("ACSD_CacheOnMatchFailure"));
243
244     }// </editor-fold>//GEN-END:initComponents
245

246     private void jChkCacheOnMatchFailureItemStateChanged(java.awt.event.ItemEvent JavaDoc evt) {//GEN-FIRST:event_jChkCacheOnMatchFailureItemStateChanged
247
cacheOnMatchFailure = Utils.interpretCheckboxState(evt);
248         firePropertyChange(Constants.USER_DATA_CHANGED, null, null);
249     }//GEN-LAST:event_jChkCacheOnMatchFailureItemStateChanged
250

251     private void jChkCacheOnMatchItemStateChanged(java.awt.event.ItemEvent JavaDoc evt) {//GEN-FIRST:event_jChkCacheOnMatchItemStateChanged
252
cacheOnMatch = Utils.interpretCheckboxState(evt);
253         firePropertyChange(Constants.USER_DATA_CHANGED, null, null);
254     }//GEN-LAST:event_jChkCacheOnMatchItemStateChanged
255

256     private void jCbxScopeActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jCbxScopeActionPerformed
257
TextMapping scope = (TextMapping) constraintFieldScopeModel.getSelectedItem();
258         constraintFieldScope = scope.getXMLString();
259         firePropertyChange(Constants.USER_DATA_CHANGED, null, null);
260     }//GEN-LAST:event_jCbxScopeActionPerformed
261

262     private void jTxtNameKeyReleased(java.awt.event.KeyEvent JavaDoc evt) {//GEN-FIRST:event_jTxtNameKeyReleased
263
constraintFieldName = jTxtName.getText();
264         firePropertyChange(Constants.USER_DATA_CHANGED, null, null);
265     }//GEN-LAST:event_jTxtNameKeyReleased
266

267     
268     // Variables declaration - do not modify//GEN-BEGIN:variables
269
private javax.swing.JComboBox JavaDoc jCbxScope;
270     private javax.swing.JCheckBox JavaDoc jChkCacheOnMatch;
271     private javax.swing.JCheckBox JavaDoc jChkCacheOnMatchFailure;
272     private javax.swing.JLabel JavaDoc jLblCacheOnMatch;
273     private javax.swing.JLabel JavaDoc jLblCacheOnMatchFailure;
274     private javax.swing.JLabel JavaDoc jLblFiller1;
275     private javax.swing.JLabel JavaDoc jLblFiller2;
276     private javax.swing.JLabel JavaDoc jLblFiller3;
277     private javax.swing.JLabel JavaDoc jLblName;
278     private javax.swing.JLabel JavaDoc jLblNameReqFlag;
279     private javax.swing.JLabel JavaDoc jLblScope;
280     private javax.swing.JTextField JavaDoc jTxtName;
281     // End of variables declaration//GEN-END:variables
282

283     private void initUserComponents() {
284         /* Save preferred size before adding table. We have our own width and
285          * will add a constant of our own choosing for the height in init(), below.
286          */

287         basicPreferredSize = getPreferredSize();
288         
289         /** Add constraint field value table panel :
290          * TableEntry list has four properties: Match Expression, Cache on Match,
291          * Cache on Match Failure, and Value.
292          */

293         ArrayList JavaDoc tableColumns = new ArrayList JavaDoc(4);
294         tableColumns.add(new GenericTableModel.AttributeEntry(ConstraintField.CONSTRAINT_FIELD_VALUE, "MatchExpr", // NOI18N
295
webappBundle.getString("LBL_MatchExpression"), true)); // NOI18N
296
tableColumns.add(new GenericTableModel.AttributeEntry(ConstraintField.CONSTRAINT_FIELD_VALUE, "CacheOnMatch", // NOI18N
297
webappBundle.getString("LBL_CacheOnMatch"), false)); // NOI18N
298
tableColumns.add(new GenericTableModel.AttributeEntry(ConstraintField.CONSTRAINT_FIELD_VALUE, "CacheOnMatchFailure", // NOI18N
299
webappBundle.getString("LBL_CacheOnMatchFailure"), false)); // NOI18N
300
tableColumns.add(new GenericTableModel.ValueEntry(ConstraintField.CONSTRAINT_FIELD_VALUE, ConstraintField.CONSTRAINT_FIELD_VALUE,
301             webappBundle.getString("LBL_MatchFieldValue"), true)); // NOI18N
302

303         // add key fields table
304
constraintFieldValueModel = new ConstraintFieldValueTableModel(tableColumns);
305         constraintFieldValueModel.addTableModelListener(this);
306         constraintFieldValuePanel = new GenericTablePanel(constraintFieldValueModel,
307             webappBundle, "ConstraintFieldValue", // NOI18N - property name
308
ConstraintFieldValueEntryPanel.class, HelpContext.HELP_CACHE_MAPPING_CONSTRAINT_VALUE_POPUP);
309         constraintFieldValuePanel.setHeadingMnemonic(webappBundle.getString("MNE_ConstraintFieldValue").charAt(0)); // NOI18N
310

311         GridBagConstraints JavaDoc gridBagConstraints = new GridBagConstraints JavaDoc();
312         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
313         gridBagConstraints.fill = GridBagConstraints.BOTH;
314         gridBagConstraints.weightx = 1.0;
315         gridBagConstraints.weighty = 1.0;
316         gridBagConstraints.insets = new Insets JavaDoc(0, 6, 0, 5);
317         add(constraintFieldValuePanel, gridBagConstraints);
318         
319         // Setup refresh field scope combobox
320
constraintFieldScopeModel = new DefaultComboBoxModel JavaDoc();
321         for(int i = 0; i < scopeTypes.length; i++) {
322             constraintFieldScopeModel.addElement(scopeTypes[i]);
323         }
324         jCbxScope.setModel(constraintFieldScopeModel);
325     }
326     
327     private TextMapping getScopeMapping(String JavaDoc xmlKey) {
328         TextMapping result = null;
329         if(xmlKey == null) {
330             xmlKey = ""; // NOI18N
331
}
332         for(int i = 0; i < scopeTypes.length; i++) {
333             if(scopeTypes[i].getXMLString().compareTo(xmlKey) == 0) {
334                 result = scopeTypes[i];
335                 break;
336             }
337         }
338         return result;
339     }
340     
341     /** -----------------------------------------------------------------------
342      * Implementation of TableModelListener interface
343      */

344     public void tableChanged(TableModelEvent JavaDoc e) {
345         // constraint values were stored as indexed children in model, so get
346
// base bean to get them back.
347
// constraintValues = constraintFieldValueModel.getData();
348
ConstraintField bean = (ConstraintField) constraintFieldValueModel.getDataBaseBean();
349         if(constraintValuesBean == bean) {
350         }
351     }
352     
353     /** -----------------------------------------------------------------------
354      * Implementation of GenericTableDialogPanelAccessor interface
355      */

356     public void init(ASDDVersion asVersion, int preferredWidth, List JavaDoc entries, Object JavaDoc data) {
357         /* Cache appserver version for use in setComponentValues.
358          */

359         appServerVersion = asVersion;
360         
361         /* Set preferred size to pre-table saved height plus constant, width is
362          * precalculated to be 3/4 of width of parent table.
363          */

364         setPreferredSize(new Dimension JavaDoc(preferredWidth, basicPreferredSize.height + 148));
365
366         /* Initialize value table model with our bean. We'll fill this bean with
367          * any existing rows in setValues() (!PW or however I figure this out)
368          */

369         constraintValuesBean = StorageBeanFactory.getStorageBeanFactory(appServerVersion).createConstraintField();
370         constraintFieldValuePanel.setModelBaseBean(constraintValuesBean, asVersion);
371     }
372     
373     public Object JavaDoc[] getValues() {
374         Object JavaDoc [] result = new Object JavaDoc[NUM_FIELDS];
375         
376         result[NAME_FIELD] = constraintFieldName;
377         result[SCOPE_FIELD] = constraintFieldScope;
378         result[CACHEONMATCH_FIELD] = Boolean.toString(cacheOnMatch);
379         result[CACHEONMATCHFAILURE_FIELD] = Boolean.toString(cacheOnMatchFailure);
380         result[VALUES_FIELD] = new BeanListMapping(constraintValuesBean, ConstraintField.CONSTRAINT_FIELD_VALUE);
381         
382         return result;
383     }
384
385     public void setValues(Object JavaDoc[] values) {
386         if(values != null && values.length == NUM_FIELDS) {
387             constraintFieldName = (String JavaDoc) values[NAME_FIELD];
388             constraintFieldScope = (String JavaDoc) values[SCOPE_FIELD];
389             cacheOnMatch = Utils.booleanValueOf((String JavaDoc) values[CACHEONMATCH_FIELD]);
390             cacheOnMatchFailure = Utils.booleanValueOf((String JavaDoc) values[CACHEONMATCHFAILURE_FIELD]);
391             constraintValuesBean = (ConstraintField) ((BeanListMapping) values[VALUES_FIELD]).getBean();
392         } else {
393             if(values != null) {
394                 assert (values.length == NUM_FIELDS); // Should fail
395
}
396             
397             // default values
398
constraintFieldName = ""; // NOI18N
399
constraintFieldScope = ""; // NOI18N
400
cacheOnMatch = true;
401             cacheOnMatchFailure = false;
402             constraintValuesBean = StorageBeanFactory.getStorageBeanFactory(appServerVersion).createConstraintField();
403         }
404
405         setComponentValues();
406     }
407     
408     private void setComponentValues() {
409         jTxtName.setText(constraintFieldName);
410         constraintFieldScopeModel.setSelectedItem(getScopeMapping(constraintFieldScope));
411         jChkCacheOnMatch.setSelected(cacheOnMatch);
412         jChkCacheOnMatchFailure.setSelected(cacheOnMatchFailure);
413         constraintFieldValuePanel.setModelBaseBean(constraintValuesBean, appServerVersion);
414     }
415
416     public Collection JavaDoc getErrors(ValidationSupport validationSupport) {
417         ArrayList JavaDoc errorList = new ArrayList JavaDoc();
418         
419         if(!Utils.notEmpty(constraintFieldName)) {
420             Object JavaDoc [] args = new Object JavaDoc [1];
421             args[0] = webappBundle.getString("LBL_ConstraintFieldName"); // NOI18N
422
errorList.add(MessageFormat.format(commonBundle.getString("ERR_SpecifiedFieldIsEmpty"), args)); // NOI18N
423
} else if(!Utils.isJavaIdentifier(constraintFieldName)) {
424             Object JavaDoc [] args = new Object JavaDoc [1];
425             args[0] = constraintFieldName;
426             errorList.add(MessageFormat.format(commonBundle.getString("ERR_NotValidIdentifier"), args)); // NOI18N
427
}
428         
429         return errorList;
430     }
431     
432     public boolean requiredFieldsFilled() {
433         return (constraintFieldName != null && constraintFieldName.length() > 0);
434     }
435     
436     private static class ConstraintFieldValueTableModel extends GenericTableModel {
437         public ConstraintFieldValueTableModel(List JavaDoc tableColumns) {
438             super(ConstraintField.CONSTRAINT_FIELD_VALUE, tableColumns);
439         }
440         
441         public boolean alreadyExists(Object JavaDoc[] values) {
442             boolean exists = false;
443             
444             Object JavaDoc bean = getDataBaseBean();
445             if(bean instanceof ConstraintField) {
446                 ConstraintField parentField = (ConstraintField) bean;
447                 for(int i = 0, limit = parentField.sizeConstraintFieldValue(); i < limit; i++) {
448                     if(match((String JavaDoc) values[0], parentField.getConstraintFieldValueMatchExpr(i)) &&
449                        match((String JavaDoc) values[3], parentField.getConstraintFieldValue(i))) {
450                         exists = true;
451                         break;
452                     }
453                 }
454             }
455
456             return exists;
457         }
458         
459         private final boolean match(String JavaDoc a, String JavaDoc b) {
460             boolean result = false;
461             
462             if(a == b) {
463                 result = true;
464             } else if(a != null && b != null && a.equals(b)) {
465                 result = true;
466             }
467             
468             return result;
469         }
470
471         public boolean alreadyExists(String JavaDoc keyPropertyValue) {
472             // FIXME we can't actually support this API properly with the current
473
// design so just have it fail.
474
return false;
475         }
476     }
477 }
478
Popular Tags