KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > j2ee > persistence > wizard > unit > PersistenceUnitWizardPanelDS


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 package org.netbeans.modules.j2ee.persistence.wizard.unit;
21
22 import java.awt.Color JavaDoc;
23 import java.awt.event.ActionEvent JavaDoc;
24 import java.awt.event.ActionListener JavaDoc;
25 import javax.swing.event.ChangeListener JavaDoc;
26 import javax.swing.event.DocumentEvent JavaDoc;
27 import javax.swing.event.DocumentListener JavaDoc;
28 import javax.swing.text.JTextComponent JavaDoc;
29 import org.netbeans.api.project.Project;
30 import org.netbeans.api.project.ProjectUtils;
31 import org.netbeans.modules.j2ee.persistence.dd.persistence.model_1_0.Persistence;
32 import org.netbeans.modules.j2ee.persistence.dd.persistence.model_1_0.PersistenceUnit;
33 import org.netbeans.modules.j2ee.persistence.provider.DefaultProvider;
34 import org.netbeans.modules.j2ee.persistence.provider.InvalidPersistenceXmlException;
35 import org.netbeans.modules.j2ee.persistence.unit.PUDataObject;
36 import org.netbeans.modules.j2ee.persistence.provider.Provider;
37 import org.netbeans.modules.j2ee.persistence.provider.ProviderUtil;
38 import org.netbeans.modules.j2ee.persistence.spi.datasource.JPADataSource;
39 import org.netbeans.modules.j2ee.persistence.spi.datasource.JPADataSourcePopulator;
40 import org.netbeans.modules.j2ee.persistence.util.PersistenceProviderComboboxHelper;
41 import org.netbeans.modules.j2ee.persistence.wizard.unit.PersistenceUnitWizardPanel.TableGeneration;
42 import org.openide.util.NbBundle;
43
44 /**
45  *
46  * @author Martin Adamek
47  */

48 public class PersistenceUnitWizardPanelDS extends PersistenceUnitWizardPanel {
49     
50     private Project project;
51     
52     public PersistenceUnitWizardPanelDS(Project project, ChangeListener JavaDoc changeListener, boolean editName) {
53         this(project, changeListener, editName, TableGeneration.CREATE);
54     }
55     
56     public PersistenceUnitWizardPanelDS(Project project, ChangeListener JavaDoc changeListener,
57             boolean editName, TableGeneration tg) {
58         
59         initComponents();
60         setTableGeneration(tg);
61         this.project = project;
62        
63         if (ProviderUtil.isValidServerInstanceOrNone(project)){
64             connectDatasources();
65         }
66         
67         PersistenceProviderComboboxHelper comboHelper = new PersistenceProviderComboboxHelper(project);
68         comboHelper.connect(providerCombo);
69         
70         unitNameTextField.setText(ProjectUtils.getInformation(project).getName() + "PU"); //NOI18N
71
// unit name editing is not available when adding first PU
72
unitNameTextField.setVisible(editName);
73         unitNameLabel.setVisible(editName);
74         
75         unitNameTextField.getDocument().addDocumentListener(new ValidationListener());
76         errorMessage.setForeground(Color.RED);
77     }
78     
79     /**
80      * Pre-selects appropriate table generation strategy radio button.
81      */

82     private void setTableGeneration(TableGeneration tg){
83         if (TableGeneration.CREATE.equals(tg)){
84             ddlCreate.setSelected(true);
85         } else if (TableGeneration.DROP_CREATE.equals(tg)){
86             ddlDropCreate.setSelected(true);
87         } else {
88             ddlUnkown.setSelected(true);
89         }
90     }
91     
92     private void connectDatasources() {
93         JPADataSourcePopulator dsPopulator = project.getLookup().lookup(JPADataSourcePopulator.class);
94         dsPopulator.connect(dsCombo);
95         
96         dsCombo.addActionListener(new ActionListener JavaDoc() {
97             public void actionPerformed(ActionEvent JavaDoc e) {
98                 checkValidity();
99             }
100         });
101         
102         ((JTextComponent JavaDoc)dsCombo.getEditor().getEditorComponent()).
103                 getDocument().addDocumentListener(new DocumentListener JavaDoc() {
104             public void changedUpdate(DocumentEvent JavaDoc e) {
105                 checkValidity();
106             }
107             public void insertUpdate(DocumentEvent JavaDoc e) {
108                 checkValidity();
109             }
110             public void removeUpdate(DocumentEvent JavaDoc e) {
111                 checkValidity();
112             }
113         });
114     }
115     
116     
117     /**
118      * Checks whether this panel is in valid state (see <code>#isValidPanel()</code>)
119      * and fires appropriate property changes.
120      */

121     private void checkValidity(){
122         if (isValidPanel()) {
123             firePropertyChange(IS_VALID, false, true);
124         } else {
125             firePropertyChange(IS_VALID, true, false);
126         }
127     }
128     
129     public String JavaDoc getPersistenceUnitName() {
130         return unitNameTextField.getText();
131     }
132     
133     public String JavaDoc getDatasource() {
134         return ((JTextComponent JavaDoc)dsCombo.getEditor().getEditorComponent()).getText();
135     }
136     
137     public void setPreselectedDB(String JavaDoc db) {
138         boolean hasItem = false;
139         for (int i = 0; i < dsCombo.getItemCount(); i++) {
140             if (dsCombo.getItemAt(i) instanceof JPADataSource) {
141                 JPADataSource ds = (JPADataSource) dsCombo.getItemAt(i);
142                 if (ds.getJndiName().equals(db)) {
143                     hasItem = true;
144                     break;
145                 }
146             }
147         }
148         dsCombo.setSelectedItem(db);
149         dsCombo.setEnabled(!hasItem);
150     }
151     
152     public boolean isNonDefaultProviderEnabled() {
153         return !(providerCombo.getSelectedItem() instanceof DefaultProvider);
154     }
155     
156     public String JavaDoc getNonDefaultProvider() {
157         return ((Provider) providerCombo.getSelectedItem()).getProviderClass();
158     }
159     
160     
161     public boolean isJTA() {
162         return jtaCheckBox.isEnabled() && jtaCheckBox.isSelected();
163     }
164     
165     
166     public String JavaDoc getTableGeneration() {
167         if (ddlCreate.isSelected()) {
168             return Provider.TABLE_GENERATION_CREATE;
169         } else if (ddlDropCreate.isSelected()) {
170             return Provider.TABLE_GENERATION_DROPCREATE;
171         } else {
172             return Provider.TABLE_GENERATTION_UNKOWN;
173         }
174     }
175     
176     public boolean isValidPanel() {
177         try{
178             if (!isNameValid()){
179                 return false;
180             }
181         } catch (InvalidPersistenceXmlException ipx){
182             setErrorMessage(NbBundle.getMessage(PersistenceUnitWizardDescriptor.class,"ERR_InvalidPersistenceXml", ipx.getPath())); //NO18N
183
return false;
184         }
185         return true;
186     }
187     
188     /**
189      * Checks whether name of the persistence unit is valid, i.e. it's not
190      * empty and it's unique.
191      */

192     private boolean isNameValid() throws InvalidPersistenceXmlException{
193         return isEmptyOrNull(getPersistenceUnitName()) ? false : isNameUnique();
194     }
195     
196     /**
197      * @see PersistenceUnitWizardPanel#isNameUnique
198      */

199     public boolean isNameUnique() throws InvalidPersistenceXmlException{
200         if (!ProviderUtil.persistenceExists(project)){
201             return true;
202         }
203         Persistence persistence = null;
204         PUDataObject pud = ProviderUtil.getPUDataObject(project);
205         persistence = pud.getPersistence();
206         
207         PersistenceUnit[] punits = persistence.getPersistenceUnit();
208         for (int i = 0; i < punits.length; i++) {
209             if (punits[i].getName().equals(getPersistenceUnitName())){
210                 return false;
211             }
212         }
213         return true;
214     }
215     
216     /**
217      * @return true if given str is null, empty or contains only spaces.
218      */

219     private boolean isEmptyOrNull(String JavaDoc str){
220         return str == null || "".equals(str.trim());
221     }
222     
223     public Provider getSelectedProvider() {
224         return (Provider) providerCombo.getSelectedItem();
225     }
226     
227     public void setErrorMessage(String JavaDoc msg){
228         errorMessage.setText(msg);
229     }
230     
231     /** This method is called from within the constructor to
232      * initialize the form.
233      * WARNING: Do NOT modify this code. The content of this method is
234      * always regenerated by the Form Editor.
235      */

236     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
237
private void initComponents() {
238         buttonGroup1 = new javax.swing.ButtonGroup JavaDoc();
239         tableCreationButtonGroup = new javax.swing.ButtonGroup JavaDoc();
240         unitNameLabel = new javax.swing.JLabel JavaDoc();
241         unitNameTextField = new javax.swing.JTextField JavaDoc();
242         jLabel1 = new javax.swing.JLabel JavaDoc();
243         jLabel2 = new javax.swing.JLabel JavaDoc();
244         ddlCreate = new javax.swing.JRadioButton JavaDoc();
245         ddlDropCreate = new javax.swing.JRadioButton JavaDoc();
246         ddlUnkown = new javax.swing.JRadioButton JavaDoc();
247         datasourceLabel = new javax.swing.JLabel JavaDoc();
248         jtaCheckBox = new javax.swing.JCheckBox JavaDoc();
249         dsCombo = new javax.swing.JComboBox JavaDoc();
250         persistenceProviderLabel = new javax.swing.JLabel JavaDoc();
251         providerCombo = new javax.swing.JComboBox JavaDoc();
252         errorMessage = new javax.swing.JLabel JavaDoc();
253
254         setName(org.openide.util.NbBundle.getMessage(PersistenceUnitWizardPanelDS.class, "LBL_Step1"));
255         unitNameLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("MN_UnitName").charAt(0));
256         unitNameLabel.setLabelFor(unitNameTextField);
257         unitNameLabel.setText(org.openide.util.NbBundle.getMessage(PersistenceUnitWizardPanelDS.class, "LBL_UnitName"));
258         unitNameLabel.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("ACSD_UnitName"));
259
260         unitNameTextField.setColumns(40);
261         unitNameTextField.setText("em");
262         unitNameTextField.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("ACSD_UnitName"));
263
264         jLabel1.setText(org.openide.util.NbBundle.getMessage(PersistenceUnitWizardPanelDS.class, "LBL_SpecifyPersistenceProvider"));
265
266         jLabel2.setText(org.openide.util.NbBundle.getMessage(PersistenceUnitWizardPanelDS.class, "LBL_TableGeneration"));
267         jLabel2.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("ACSD_TableGeneration"));
268
269         tableCreationButtonGroup.add(ddlCreate);
270         ddlCreate.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("CHB_Create_mnem").charAt(0));
271         ddlCreate.setSelected(true);
272         ddlCreate.setText(org.openide.util.NbBundle.getMessage(PersistenceUnitWizardPanelDS.class, "LBL_Create"));
273         ddlCreate.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
274         ddlCreate.setMargin(new java.awt.Insets JavaDoc(0, 0, 0, 0));
275         ddlCreate.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("ACSD_Create"));
276
277         tableCreationButtonGroup.add(ddlDropCreate);
278         ddlDropCreate.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("CHB_DropCreate_mnem").charAt(0));
279         ddlDropCreate.setText(org.openide.util.NbBundle.getMessage(PersistenceUnitWizardPanelDS.class, "LBL_DropCreate"));
280         ddlDropCreate.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
281         ddlDropCreate.setMargin(new java.awt.Insets JavaDoc(0, 0, 0, 0));
282         ddlDropCreate.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("ACSD_DropCreate"));
283
284         tableCreationButtonGroup.add(ddlUnkown);
285         ddlUnkown.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("CHB_None_mnem").charAt(0));
286         ddlUnkown.setText(org.openide.util.NbBundle.getMessage(PersistenceUnitWizardPanelDS.class, "LBL_None"));
287         ddlUnkown.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
288         ddlUnkown.setMargin(new java.awt.Insets JavaDoc(0, 0, 0, 0));
289         ddlUnkown.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("ACSD_None"));
290
291         datasourceLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("MN_DatasourceName").charAt(0));
292         datasourceLabel.setLabelFor(dsCombo);
293         datasourceLabel.setText(org.openide.util.NbBundle.getMessage(PersistenceUnitWizardPanelDS.class, "LBL_ServerDataSource"));
294         datasourceLabel.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("ACSD_DatasourceName"));
295
296         jtaCheckBox.setMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("CHB_JTA_mnem").charAt(0));
297         jtaCheckBox.setSelected(true);
298         jtaCheckBox.setText(org.openide.util.NbBundle.getMessage(PersistenceUnitWizardPanelDS.class, "LBL_JTA"));
299         jtaCheckBox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
300         jtaCheckBox.setMargin(new java.awt.Insets JavaDoc(0, 0, 0, 0));
301         jtaCheckBox.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("ACSD_JTA"));
302
303         dsCombo.setEditable(true);
304
305         persistenceProviderLabel.setDisplayedMnemonic(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("MN_Provider").charAt(0));
306         persistenceProviderLabel.setLabelFor(providerCombo);
307         persistenceProviderLabel.setText(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("LBL_PersistenceProvider"));
308         persistenceProviderLabel.getAccessibleContext().setAccessibleName(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("ACSD_Provider"));
309         persistenceProviderLabel.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("ACSD_Provider"));
310
311         providerCombo.getAccessibleContext().setAccessibleDescription(java.util.ResourceBundle.getBundle("org/netbeans/modules/j2ee/persistence/wizard/unit/Bundle").getString("ACSD_Provider"));
312
313         org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
314         this.setLayout(layout);
315         layout.setHorizontalGroup(
316             layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
317             .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
318                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
319                     .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
320                         .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
321                             .add(unitNameLabel)
322                             .add(persistenceProviderLabel)
323                             .add(datasourceLabel))
324                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
325                         .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
326                             .add(unitNameTextField, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 360, Short.MAX_VALUE)
327                             .add(providerCombo, 0, 360, Short.MAX_VALUE)
328                             .add(dsCombo, 0, 360, Short.MAX_VALUE)))
329                     .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
330                         .add(jLabel2)
331                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
332                         .add(ddlCreate)
333                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
334                         .add(ddlDropCreate)
335                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
336                         .add(ddlUnkown))
337                     .add(org.jdesktop.layout.GroupLayout.LEADING, jtaCheckBox)
338                     .add(org.jdesktop.layout.GroupLayout.LEADING, jLabel1)
339                     .add(errorMessage, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE))
340                 .addContainerGap())
341         );
342         layout.setVerticalGroup(
343             layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
344             .add(layout.createSequentialGroup()
345                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
346                     .add(unitNameLabel)
347                     .add(unitNameTextField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 20, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
348                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
349                 .add(jLabel1)
350                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
351                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
352                     .add(persistenceProviderLabel)
353                     .add(providerCombo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
354                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
355                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
356                     .add(datasourceLabel)
357                     .add(dsCombo, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
358                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
359                 .add(jtaCheckBox)
360                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
361                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
362                     .add(ddlCreate)
363                     .add(ddlDropCreate)
364                     .add(ddlUnkown)
365                     .add(jLabel2))
366                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
367                 .add(errorMessage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 22, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
368                 .addContainerGap())
369         );
370     }// </editor-fold>//GEN-END:initComponents
371

372     // Variables declaration - do not modify//GEN-BEGIN:variables
373
private javax.swing.ButtonGroup JavaDoc buttonGroup1;
374     private javax.swing.JLabel JavaDoc datasourceLabel;
375     private javax.swing.JRadioButton JavaDoc ddlCreate;
376     private javax.swing.JRadioButton JavaDoc ddlDropCreate;
377     private javax.swing.JRadioButton JavaDoc ddlUnkown;
378     private javax.swing.JComboBox JavaDoc dsCombo;
379     private javax.swing.JLabel JavaDoc errorMessage;
380     private javax.swing.JLabel JavaDoc jLabel1;
381     private javax.swing.JLabel JavaDoc jLabel2;
382     private javax.swing.JCheckBox JavaDoc jtaCheckBox;
383     private javax.swing.JLabel JavaDoc persistenceProviderLabel;
384     private javax.swing.JComboBox JavaDoc providerCombo;
385     private javax.swing.ButtonGroup JavaDoc tableCreationButtonGroup;
386     private javax.swing.JLabel JavaDoc unitNameLabel;
387     private javax.swing.JTextField JavaDoc unitNameTextField;
388     // End of variables declaration//GEN-END:variables
389

390     /**
391      * Document listener that invokes <code>checkValidity</code> when
392      * changes are made.
393      */

394     private class ValidationListener implements DocumentListener JavaDoc {
395         public void insertUpdate(DocumentEvent JavaDoc e) {
396             checkValidity();
397         }
398         public void removeUpdate(DocumentEvent JavaDoc e) {
399             checkValidity();
400         }
401         public void changedUpdate(DocumentEvent JavaDoc e) {
402             checkValidity();
403         }
404     }
405 }
406
407
Popular Tags