KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > j2ee > sun > share > configbean > customizers > ejbmodule > EjbJarPmDescriptorsPanel


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  * EjbJarPmDescriptorsPanel.java
21  *
22  * Created on November 5, 2003, 4:56 PM
23  */

24
25 package org.netbeans.modules.j2ee.sun.share.configbean.customizers.ejbmodule;
26
27 import java.util.ArrayList JavaDoc;
28 import java.util.Iterator JavaDoc;
29 import java.util.List JavaDoc;
30 import java.util.ResourceBundle JavaDoc;
31
32 import java.awt.GridBagConstraints JavaDoc;
33 import java.awt.Insets JavaDoc;
34 import java.beans.PropertyVetoException JavaDoc;
35 import javax.swing.ComboBoxModel JavaDoc;
36 import javax.swing.DefaultComboBoxModel JavaDoc;
37 import javax.swing.event.ListDataEvent JavaDoc;
38 import javax.swing.event.ListDataListener 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.CommonDDBean;
43 import org.netbeans.modules.j2ee.sun.dd.api.ejb.PmDescriptor;
44 import org.netbeans.modules.j2ee.sun.dd.api.ejb.PmDescriptors;
45 import org.netbeans.modules.j2ee.sun.dd.api.ejb.PmInuse;
46 import org.netbeans.modules.j2ee.sun.share.configbean.ASDDVersion;
47
48 import org.netbeans.modules.j2ee.sun.share.configbean.EjbJarRoot;
49 import org.netbeans.modules.j2ee.sun.share.configbean.StorageBeanFactory;
50 import org.netbeans.modules.j2ee.sun.share.configbean.Utils;
51 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.GenericTableModel;
52 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.GenericTablePanel;
53 import org.netbeans.modules.j2ee.sun.share.configbean.customizers.common.HelpContext;
54 import org.openide.util.Utilities;
55
56 /**
57  *
58  * @author Peter Williams
59  */

60 public class EjbJarPmDescriptorsPanel extends javax.swing.JPanel JavaDoc implements TableModelListener JavaDoc, ListDataListener JavaDoc {
61
62     private static final ResourceBundle JavaDoc ejbjarBundle = ResourceBundle.getBundle(
63         "org.netbeans.modules.j2ee.sun.share.configbean.customizers.ejbmodule.Bundle"); // NOI18N
64

65     private EjbJarRootCustomizer masterPanel;
66
67     private PmDescriptors pmDescriptors;
68
69     private PmInUseCbxModel pmInUseModel;
70
71     // Table for editing PM Descriptor entries
72
private GenericTableModel pmDescriptorModel;
73     private GenericTablePanel pmDescriptorPanel;
74
75     /**
76      * Creates new form EjbJarPmDescriptorsPanel
77      */

78     public EjbJarPmDescriptorsPanel(EjbJarRootCustomizer src) {
79         masterPanel = src;
80
81         initComponents();
82         initUserComponents();
83     }
84
85     /** This method is called from within the constructor to
86      * initialize the form.
87      * WARNING: Do NOT modify this code. The content of this method is
88      * always regenerated by the Form Editor.
89      */

90     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
91
private void initComponents() {
92         java.awt.GridBagConstraints JavaDoc gridBagConstraints;
93
94         jLblPmInUse = new javax.swing.JLabel JavaDoc();
95         jCbxPmInUse = new javax.swing.JComboBox JavaDoc();
96
97         setLayout(new java.awt.GridBagLayout JavaDoc());
98
99         getAccessibleContext().setAccessibleName(ejbjarBundle.getString("ACSN_PmDescriptorsTab"));
100         getAccessibleContext().setAccessibleDescription(ejbjarBundle.getString("ACSD_PmDescriptorsTab"));
101         jLblPmInUse.setLabelFor(jCbxPmInUse);
102         jLblPmInUse.setText(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/sun/share/configbean/customizers/ejbmodule/Bundle").getString("LBL_Pm_In_Use"));
103         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
104         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
105         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 0);
106         add(jLblPmInUse, gridBagConstraints);
107
108         jCbxPmInUse.setToolTipText(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/sun/share/configbean/customizers/ejbmodule/Bundle").getString("Pm_In_Use_Tool_Tip"));
109         jCbxPmInUse.addActionListener(new java.awt.event.ActionListener JavaDoc() {
110             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
111                 jCbxPmInUseActionPerformed(evt);
112             }
113         });
114
115         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
116         gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
117         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
118         gridBagConstraints.weightx = 1.0;
119         gridBagConstraints.insets = new java.awt.Insets JavaDoc(6, 6, 0, 5);
120         add(jCbxPmInUse, gridBagConstraints);
121         jCbxPmInUse.getAccessibleContext().setAccessibleName(ejbjarBundle.getString("Pm_In_Use_Acsbl_Name"));
122         jCbxPmInUse.getAccessibleContext().setAccessibleDescription(ejbjarBundle.getString("Pm_In_Use_Acsbl_Desc"));
123
124     }// </editor-fold>//GEN-END:initComponents
125

126     private void jCbxPmInUseActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jCbxPmInUseActionPerformed
127
updatePmInuse((PmDescriptorMapping) jCbxPmInUse.getSelectedItem());
128     }//GEN-LAST:event_jCbxPmInUseActionPerformed
129

130     private void updatePmInuse(PmDescriptorMapping mapping) {
131         PmInuse oldPmInuse = pmDescriptors.getPmInuse();
132         PmInuse newPmInuse = null;
133         
134         if(mapping == null || mapping.getPmDescriptor() == null) {
135             pmDescriptors.setPmInuse(null);
136         } else {
137             PmDescriptor pmDescriptor = mapping.getPmDescriptor();
138             String JavaDoc newPmIdentifier = pmDescriptor.getPmIdentifier();
139             String JavaDoc newPmVersion = pmDescriptor.getPmVersion();
140             
141             if(oldPmInuse == null) {
142                 newPmInuse = pmDescriptors.newPmInuse();
143                 pmDescriptors.setPmInuse(newPmInuse);
144                 
145                 newPmInuse.setPmIdentifier(newPmIdentifier);
146                 newPmInuse.setPmVersion(newPmVersion);
147             } else {
148                 newPmInuse = oldPmInuse;
149                 
150                 if(!Utils.strEquals(newPmIdentifier, newPmInuse.getPmIdentifier())) {
151                     newPmInuse.setPmIdentifier(newPmIdentifier);
152                     oldPmInuse = null;
153                 }
154                 if(!Utils.strEquals(newPmVersion, newPmInuse.getPmVersion())) {
155                     newPmInuse.setPmVersion(newPmVersion);
156                     oldPmInuse = null;
157                 }
158             }
159         }
160         
161         EjbJarRoot bean = masterPanel.getBean();
162         if(bean != null && oldPmInuse != newPmInuse) {
163             bean.firePropertyChange("pmInuse", oldPmInuse, newPmInuse); // NOI18N
164
bean.validateField(EjbJarRoot.FIELD_PM_DESCRIPTORS);
165         }
166     }
167     
168     // Variables declaration - do not modify//GEN-BEGIN:variables
169
private javax.swing.JComboBox JavaDoc jCbxPmInUse;
170     private javax.swing.JLabel JavaDoc jLblPmInUse;
171     // End of variables declaration//GEN-END:variables
172

173     private void initUserComponents() {
174         /* Add persistence manager descriptor table panel :
175          * TableEntry list has five properties: id, version, config, class generator, and mapping factory.
176          */

177         ArrayList JavaDoc tableColumns = new ArrayList JavaDoc(5);
178         tableColumns.add(new GenericTableModel.ValueEntry(null, PmDescriptor.PM_IDENTIFIER,
179             ejbjarBundle, "PmIdentifier", true, true)); // NOI18N - property name
180
tableColumns.add(new GenericTableModel.ValueEntry(null, PmDescriptor.PM_VERSION,
181             ejbjarBundle, "PmVersion", true, false)); // NOI18N - property name
182
tableColumns.add(new GenericTableModel.ValueEntry(null, PmDescriptor.PM_CONFIG,
183             ejbjarBundle, "PmConfig", false, false)); // NOI18N - property name
184
tableColumns.add(new GenericTableModel.ValueEntry(null, PmDescriptor.PM_CLASS_GENERATOR,
185             ejbjarBundle, "PmClassGenerator", false, false)); // NOI18N - property name
186
tableColumns.add(new GenericTableModel.ValueEntry(null, PmDescriptor.PM_MAPPING_FACTORY,
187             ejbjarBundle, "PmMappingFactory", false, false)); // NOI18N - property name
188

189         pmDescriptorModel = new PmDescriptorTableModel(tableColumns);
190         pmDescriptorPanel = new GenericTablePanel(pmDescriptorModel,
191             ejbjarBundle, "PmDescriptors", // NOI18N - property name
192
HelpContext.HELP_EJBJAR_PM_DESCRIPTOR_POPUP);
193
194         GridBagConstraints JavaDoc gridBagConstraints = new GridBagConstraints JavaDoc();
195         gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
196         gridBagConstraints.fill = GridBagConstraints.BOTH;
197         gridBagConstraints.weightx = 1.0;
198         gridBagConstraints.weighty = 1.0;
199         gridBagConstraints.insets = new Insets JavaDoc(6,6,0,5);
200         add(pmDescriptorPanel, gridBagConstraints);
201     }
202
203     public void addListeners() {
204         pmDescriptorModel.addTableModelListener(this);
205         pmDescriptorModel.addTableModelListener(pmInUseModel);
206         pmInUseModel.addListDataListener(this);
207     }
208
209     public void removeListeners() {
210         pmInUseModel.removeListDataListener(this);
211         pmDescriptorModel.removeTableModelListener(pmInUseModel);
212         pmDescriptorModel.removeTableModelListener(this);
213     }
214
215     /** Initialization of all the fields in this panel from the bean that
216      * was passed in.
217      */

218     public void initFields(EjbJarRoot bean) {
219         pmDescriptors = bean.getPmDescriptors();
220         pmDescriptorPanel.setModel(pmDescriptors, bean.getAppServerVersion());
221
222         pmInUseModel = new PmInUseCbxModel(pmDescriptorModel);
223         jCbxPmInUse.setModel(pmInUseModel);
224
225         Object JavaDoc selectedPmDescriptor = null;
226         PmInuse pmInuse = pmDescriptors.getPmInuse();
227         if(pmInuse != null) {
228             selectedPmDescriptor = pmInUseModel.getElementByName(pmInuse.getPmIdentifier(), pmInuse.getPmVersion());
229         }
230         jCbxPmInUse.setSelectedItem(selectedPmDescriptor);
231     }
232
233     private static class PmInUseCbxModel extends DefaultComboBoxModel JavaDoc implements TableModelListener JavaDoc {
234             
235         private final GenericTableModel pmDescriptorTableModel;
236         
237         public PmInUseCbxModel(final GenericTableModel tableModel) {
238             pmDescriptorTableModel = tableModel;
239
240             // !PW I originally added the listener here, but there is no easy way to remove
241
// it. So now, the listener is added in the panel's addListeners() method and
242
// removed in the removedListeners() method. This forces the assumption that the
243
// table model in the constructor is the same one, which is error prone. Thus
244
// this requires further refactoring that is probably not worth effort right now.
245

246             // Add existing data.
247
List JavaDoc rows = pmDescriptorTableModel.getData();
248             Iterator JavaDoc iter = rows.iterator();
249             while(iter.hasNext()) {
250                 addElement(new PmDescriptorMapping((PmDescriptor) iter.next()));
251             }
252         }
253         
254         public Object JavaDoc getElementByName(String JavaDoc pmIdentifier, String JavaDoc pmVersion) {
255             int len = getSize();
256             for(int i = 0; i < len; i++) {
257                 PmDescriptorMapping mapping = (PmDescriptorMapping) getElementAt(i);
258                 if(mapping != null) {
259                     PmDescriptor pmDescriptor = mapping.getPmDescriptor();
260                     if(pmDescriptor != null &&
261                             Utils.strEquals(pmDescriptor.getPmIdentifier(), pmIdentifier) &&
262                             Utils.strEquals(pmDescriptor.getPmVersion(), pmVersion)) {
263                         return mapping;
264                     }
265                 }
266             }
267             return null;
268         }
269
270         public void tableChanged(TableModelEvent JavaDoc e) {
271             if(TableModelEvent.UPDATE == e.getType()) {
272                 fireContentsChanged(this, e.getFirstRow(), e.getLastRow());
273             } else if(TableModelEvent.DELETE == e.getType()) {
274                 int firstRow = Math.min(e.getFirstRow(), e.getLastRow());
275                 int lastRow = Math.max(e.getFirstRow(), e.getLastRow());
276                 for(int i = lastRow; i >= firstRow; i--) {
277                     removeElementAt(i);
278                 }
279             } else if(TableModelEvent.INSERT == e.getType()) {
280                 int firstRow = Math.min(e.getFirstRow(), e.getLastRow());
281                 int lastRow = Math.max(e.getFirstRow(), e.getLastRow());
282                 List JavaDoc rows = pmDescriptorTableModel.getData();
283                 for(int i = firstRow; i <= lastRow; i++) {
284                     insertElementAt(new PmDescriptorMapping((PmDescriptor) rows.get(i)), i);
285                 }
286             }
287         }
288     }
289     
290     private static class PmDescriptorTableModel extends GenericTableModel {
291         public PmDescriptorTableModel(List JavaDoc tableColumns) {
292             super(PmDescriptors.PM_DESCRIPTOR, pmDescriptorFactory, tableColumns);
293         }
294         
295         public boolean alreadyExists(Object JavaDoc[] values) {
296             boolean exists = false;
297             
298             List JavaDoc children = getChildren();
299             for(Iterator JavaDoc iter = children.iterator(); iter.hasNext(); ) {
300                 PmDescriptor descriptor = (PmDescriptor) iter.next();
301                 if(match((String JavaDoc) values[0], descriptor.getPmIdentifier()) &&
302                    match((String JavaDoc) values[1], descriptor.getPmVersion())) {
303                        exists = true;
304                        break;
305                 }
306             }
307
308             return exists;
309         }
310         
311         private final boolean match(String JavaDoc a, String JavaDoc b) {
312             boolean result = false;
313             
314             if(a == b) {
315                 result = true;
316             } else if(a != null && b != null && a.equals(b)) {
317                 result = true;
318             }
319             
320             return result;
321         }
322
323         public boolean alreadyExists(String JavaDoc keyPropertyValue) {
324             // FIXME we can't actually support this API properly with the current
325
// design so just have it fail.
326
return false;
327         }
328     }
329     
330     /** -----------------------------------------------------------------------
331      * Implementation of javax.swing.event.TableModelListener
332      */

333     public void tableChanged(TableModelEvent JavaDoc e) {
334         EjbJarRoot bean = masterPanel.getBean();
335         if(bean != null) {
336             Object JavaDoc eventSource = e.getSource();
337             if(eventSource == pmDescriptorModel) {
338                 // Force property change to be issued by the bean
339
bean.firePropertyChange("pmDescriptors", null, pmDescriptors);
340             }
341         }
342     }
343
344     /** -----------------------------------------------------------------------
345      * Implementation of javax.swing.event.ListDataListener
346      */

347     public void intervalRemoved(ListDataEvent JavaDoc e) {
348         // Default behavior is acceptable.
349
}
350
351     public void intervalAdded(ListDataEvent JavaDoc e) {
352         Object JavaDoc eventSource = e.getSource();
353         if(eventSource == pmInUseModel) {
354             Object JavaDoc selectedItem = jCbxPmInUse.getSelectedItem();
355             if(selectedItem == null && pmInUseModel.getSize() > 0) {
356                 jCbxPmInUse.setSelectedIndex(0);
357             }
358         }
359     }
360
361     public void contentsChanged(ListDataEvent JavaDoc e) {
362         Object JavaDoc eventSource = e.getSource();
363         if(eventSource == pmInUseModel) {
364             // In case the id or version of the current selected item changed.
365
updatePmInuse((PmDescriptorMapping) jCbxPmInUse.getSelectedItem());
366         }
367     }
368     
369     // New for migration to sun DD API model. Factory instance to pass to generic table model
370
// to allow it to create messageDestination beans.
371
static GenericTableModel.ParentPropertyFactory pmDescriptorFactory =
372         new GenericTableModel.ParentPropertyFactory() {
373             public CommonDDBean newParentProperty(ASDDVersion asVersion) {
374                 return StorageBeanFactory.getStorageBeanFactory(asVersion).createPmDescriptor();
375             }
376         };
377
378 }
379
Popular Tags