KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > websvc > dev > wizard > WebServiceTypePanel


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.websvc.dev.wizard;
21
22 import java.awt.event.ItemEvent JavaDoc;
23 import java.awt.event.ItemListener JavaDoc;
24 import java.beans.PropertyChangeEvent JavaDoc;
25 import java.beans.PropertyChangeListener JavaDoc;
26 import java.util.ArrayList JavaDoc;
27 import java.util.Iterator JavaDoc;
28 import java.util.LinkedList JavaDoc;
29 import java.util.List JavaDoc;
30 import javax.swing.Action JavaDoc;
31 import javax.swing.event.ChangeEvent JavaDoc;
32 import javax.swing.event.ChangeListener JavaDoc;
33 import org.netbeans.api.project.Project;
34 import org.netbeans.api.project.ui.OpenProjects;
35 import org.netbeans.modules.j2ee.api.ejbjar.EjbJar;
36 import org.netbeans.modules.j2ee.common.Util;
37 import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule;
38 import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider;
39 import org.netbeans.modules.web.api.webmodule.WebModule;
40 import org.netbeans.spi.project.ui.LogicalViewProvider;
41 import org.openide.DialogDescriptor;
42 import org.openide.DialogDisplayer;
43 import org.openide.WizardDescriptor;
44 import org.openide.nodes.AbstractNode;
45 import org.openide.nodes.Children;
46 import org.openide.nodes.FilterNode;
47 import org.openide.nodes.Node;
48 import org.openide.util.HelpCtx;
49 import org.openide.util.NbBundle;
50
51 /**
52  *
53  * @author radko
54  */

55 public class WebServiceTypePanel extends javax.swing.JPanel JavaDoc implements HelpCtx.Provider, ItemListener JavaDoc {
56     
57     private Project project;
58     private Node[] sessionBeanNodes;
59     
60     private final List JavaDoc/*<ChangeListener>*/ listeners = new ArrayList JavaDoc();
61     
62     private boolean isWaitingForScan = false;
63     private boolean jsr109Supported;
64     private boolean jsr109oldSupported;
65     private boolean jwsdpSupported;
66     
67     /** Creates new form WebServiceTypePanel */
68     public WebServiceTypePanel(Project project) {
69         this.project = project;
70         
71         initComponents();
72         
73         jsr109Supported = PlatformUtil.isJsr109Supported(project);
74         jsr109oldSupported = PlatformUtil.isJsr109OldSupported(project);
75         jwsdpSupported = PlatformUtil.isJWSDPSupported(project);
76         
77         //convert Java class not implemented for 5.5 release, disable components
78
jRadioButtonConvert.setEnabled(false);
79         jLabelConvert.setEnabled(false);
80         jTextFieldConvert.setEnabled(false);
81         jButtonConvert.setEnabled(false);
82         jRadioButtonConvert.setVisible(false);
83         jLabelConvert.setVisible(false);
84         jTextFieldConvert.setVisible(false);
85         jButtonConvert.setVisible(false);
86         
87         //disable encapsulate session bean for j2se project
88
WebModule wm = WebModule.getWebModule(project.getProjectDirectory());
89         EjbJar em = EjbJar.getEjbJar(project.getProjectDirectory());
90         if ((em == null && wm == null)
91         || //disable encapsulate session beans for Tomcat
92
((!jsr109Supported && !jsr109oldSupported ||
93                 (!jsr109Supported && jsr109oldSupported && jwsdpSupported ))) ) {
94             disableDelegateToEJB();
95         }
96         
97         addItemListener(this);
98     }
99     
100     /** This method is called from within the constructor to
101      * initialize the form.
102      * WARNING: Do NOT modify this code. The content of this method is
103      * always regenerated by the Form Editor.
104      */

105     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
106
private void initComponents() {
107         buttonGroup1 = new javax.swing.ButtonGroup JavaDoc();
108         jRadioButtonScratch = new javax.swing.JRadioButton JavaDoc();
109         jRadioButtonDelegate = new javax.swing.JRadioButton JavaDoc();
110         jLabelDelegate = new javax.swing.JLabel JavaDoc();
111         jTextFieldDelegate = new javax.swing.JTextField JavaDoc();
112         jButtonDelegate = new javax.swing.JButton JavaDoc();
113         jRadioButtonConvert = new javax.swing.JRadioButton JavaDoc();
114         jLabelConvert = new javax.swing.JLabel JavaDoc();
115         jTextFieldConvert = new javax.swing.JTextField JavaDoc();
116         jButtonConvert = new javax.swing.JButton JavaDoc();
117
118         buttonGroup1.add(jRadioButtonScratch);
119         jRadioButtonScratch.setMnemonic(org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "MNE_CreateEmptyWS").charAt(0));
120         jRadioButtonScratch.setSelected(true);
121         jRadioButtonScratch.setText(org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "LBL_EmptyWebService"));
122         jRadioButtonScratch.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
123         jRadioButtonScratch.setMargin(new java.awt.Insets JavaDoc(0, 0, 0, 0));
124
125         buttonGroup1.add(jRadioButtonDelegate);
126         jRadioButtonDelegate.setMnemonic(org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "MNE_DelegateSessionBean").charAt(0));
127         jRadioButtonDelegate.setText(org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "LBL_EncapsulateSessionBean"));
128         jRadioButtonDelegate.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
129         jRadioButtonDelegate.setMargin(new java.awt.Insets JavaDoc(0, 0, 0, 0));
130
131         jLabelDelegate.setDisplayedMnemonic(org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "MNE_EnterpriseBeans").charAt(0));
132         jLabelDelegate.setLabelFor(jTextFieldDelegate);
133         jLabelDelegate.setText(org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "LBL_EnterpriseBean"));
134
135         jTextFieldDelegate.setEditable(false);
136         jTextFieldDelegate.setEnabled(false);
137
138         jButtonDelegate.setMnemonic(org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "MNE_Browse").charAt(0));
139         jButtonDelegate.setText(org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "LBL_Browse"));
140         jButtonDelegate.setEnabled(false);
141         jButtonDelegate.addActionListener(new java.awt.event.ActionListener JavaDoc() {
142             public void actionPerformed(java.awt.event.ActionEvent JavaDoc evt) {
143                 jButtonDelegateActionPerformed(evt);
144             }
145         });
146
147         buttonGroup1.add(jRadioButtonConvert);
148         jRadioButtonConvert.setText(org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "LBL_ConvertJavaClass"));
149         jRadioButtonConvert.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
150         jRadioButtonConvert.setMargin(new java.awt.Insets JavaDoc(0, 0, 0, 0));
151
152         jLabelConvert.setLabelFor(jTextFieldConvert);
153         jLabelConvert.setText(org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "LBL_JavaClass"));
154
155         jTextFieldConvert.setEditable(false);
156         jTextFieldConvert.setEnabled(false);
157
158         jButtonConvert.setText(org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "LBL_Browse"));
159         jButtonConvert.setEnabled(false);
160
161         org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
162         this.setLayout(layout);
163         layout.setHorizontalGroup(
164             layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
165             .add(layout.createSequentialGroup()
166                 .add(jRadioButtonScratch)
167                 .addContainerGap(313, Short.MAX_VALUE))
168             .add(layout.createSequentialGroup()
169                 .add(jRadioButtonDelegate)
170                 .addContainerGap())
171             .add(layout.createSequentialGroup()
172                 .add(17, 17, 17)
173                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
174                     .add(jLabelConvert)
175                     .add(jLabelDelegate))
176                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
177                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
178                     .add(jTextFieldConvert)
179                     .add(jTextFieldDelegate))
180                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
181                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
182                     .add(jButtonConvert)
183                     .add(jButtonDelegate)))
184             .add(layout.createSequentialGroup()
185                 .add(jRadioButtonConvert, 0, 497, Short.MAX_VALUE)
186                 .addContainerGap())
187         );
188
189         layout.linkSize(new java.awt.Component JavaDoc[] {jLabelConvert, jLabelDelegate}, org.jdesktop.layout.GroupLayout.HORIZONTAL);
190
191         layout.setVerticalGroup(
192             layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
193             .add(layout.createSequentialGroup()
194                 .add(jRadioButtonScratch)
195                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
196                 .add(jRadioButtonDelegate, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 15, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
197                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
198                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
199                     .add(jButtonDelegate)
200                     .add(jLabelDelegate)
201                     .add(jTextFieldDelegate, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
202                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
203                 .add(jRadioButtonConvert)
204                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
205                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
206                     .add(jLabelConvert)
207                     .add(jButtonConvert)
208                     .add(jTextFieldConvert, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
209                 .addContainerGap(184, Short.MAX_VALUE))
210         );
211     }// </editor-fold>//GEN-END:initComponents
212

213     private void jButtonDelegateActionPerformed(java.awt.event.ActionEvent JavaDoc evt) {//GEN-FIRST:event_jButtonDelegateActionPerformed
214
Project[] allProjects = getCallableEjbProjects(project);
215         List JavaDoc ejbProjectNodes = new LinkedList JavaDoc();
216         
217         for (int i = 0; i < allProjects.length; i++) {
218             LogicalViewProvider lvp = (LogicalViewProvider) allProjects[i].getLookup().lookup(LogicalViewProvider.class);
219             Node projectView = lvp.createLogicalView();
220             ejbProjectNodes.add(new FilterNode(projectView, new EJBListViewChildren(allProjects[i])) {
221                 public Action JavaDoc[] getActions(boolean context) {
222                     return new Action JavaDoc[0];
223                 }
224             });
225         }
226         
227         Children.Array children = new Children.Array();
228         children.add((Node[]) ejbProjectNodes.toArray(new Node[ejbProjectNodes.size()]));
229         Node root = new AbstractNode(children);
230         EjbChooser chooser = new EjbChooser(root);
231         final DialogDescriptor dd = new DialogDescriptor(chooser, org.openide.util.NbBundle.getMessage(WebServiceTypePanel.class, "LBL_BrowseBean_Title"));
232         
233         dd.setValid(false);
234         chooser.addPropertyChangeListener(new PropertyChangeListener JavaDoc() {
235             public void propertyChange(PropertyChangeEvent JavaDoc evt) {
236                 if (evt.getPropertyName().equals(EjbChooser.IS_VALID)) {
237                     Object JavaDoc newvalue = evt.getNewValue();
238                     if ((newvalue != null) && (newvalue instanceof Boolean JavaDoc)) {
239                         dd.setValid(((Boolean JavaDoc) newvalue).booleanValue());
240                     }
241                 }
242             }
243         });
244         
245         Object JavaDoc result = DialogDisplayer.getDefault().notify(dd);
246         
247         if (result == DialogDescriptor.OK_OPTION) {
248             jTextFieldDelegate.setText(chooser.getSelectedEJBProjectName() + "#" + chooser.getSelectedNodes()[0].getDisplayName());
249             sessionBeanNodes = chooser.getSelectedNodes();
250             fireChange();
251         }
252     }//GEN-LAST:event_jButtonDelegateActionPerformed
253

254     void validate(WizardDescriptor wizardDescriptor) {
255     }
256     
257     boolean valid(WizardDescriptor wizardDescriptor) {
258         //first check for JDK compliance (for non-JSR 109)
259
if(!checkNonJsr109Valid(wizardDescriptor)){
260             return false;
261         }
262         
263         if (getServiceType() == WizardProperties.ENCAPSULATE_SESSION_BEAN &&
264             jTextFieldDelegate.getText().length() == 0) {
265             wizardDescriptor.putProperty("WizardPanel_errorMessage", NbBundle.getMessage(WebServiceTypePanel.class, "LBL_SelectOneEJB")); //NOI18N
266
return false;
267         }
268 // Retouche
269
// if (JavaMetamodel.getManager().isScanInProgress()) {
270
// if (!isWaitingForScan) {
271
// isWaitingForScan = true;
272
// RequestProcessor.getDefault().post(new Runnable() {
273
// public void run() {
274
// JavaMetamodel.getManager().waitScanFinished();
275
// isWaitingForScan = false;
276
// fireChange();
277
// }
278
// });
279
// }
280
// wizardDescriptor.putProperty("WizardPanel_errorMessage", NbBundle.getMessage(WebServiceTypePanel.class, "MSG_ScanningInProgress")); //NOI18N
281
// return false;
282
// } else
283
wizardDescriptor.putProperty("WizardPanel_errorMessage", ""); //NOI18N
284

285         return true;
286     }
287     
288     /**
289      * If the project the web service is being created is not on a JSR 109 platform,
290      * its Java source level must be at least 1.5
291      */

292     private boolean checkNonJsr109Valid(WizardDescriptor wizardDescriptor){
293         if(!jsr109Supported && !jsr109oldSupported ||
294                 (!jsr109Supported && jsr109oldSupported && jwsdpSupported )){
295             if (Util.isSourceLevel14orLower(project)) {
296                 wizardDescriptor.putProperty("WizardPanel_errorMessage",
297                         NbBundle.getMessage(WebServiceTypePanel.class, "ERR_NeedProperSourceLevel")); // NOI18N
298
return false;
299             }
300         }
301         return true;
302     }
303     
304     
305     void store(WizardDescriptor d) {
306         d.putProperty(WizardProperties.WEB_SERVICE_TYPE, new Integer JavaDoc(getServiceType()));
307         if (getServiceType() == WizardProperties.ENCAPSULATE_SESSION_BEAN)
308             d.putProperty(WizardProperties.DELEGATE_TO_SESSION_BEAN, sessionBeanNodes);
309     }
310     
311     void read(WizardDescriptor wizardDescriptor) {
312     }
313     
314     public HelpCtx getHelpCtx() {
315         return new HelpCtx(WebServiceTypePanel.class);
316     }
317     
318     public void itemStateChanged(ItemEvent JavaDoc e) {
319         Object JavaDoc src = e.getSource();
320         if (src.equals(jRadioButtonScratch)) {
321             jButtonDelegate.setEnabled(false);
322             jTextFieldDelegate.setEnabled(false);
323 //convert Java class not implemented for 5.5 release
324
// jButtonConvert.setEnabled(false);
325
// jTextFieldConvert.setEnabled(false);
326
} else if (src.equals(jRadioButtonDelegate)) {
327             jButtonDelegate.setEnabled(true);
328             jTextFieldDelegate.setEnabled(true);
329 //convert Java class not implemented for 5.5 release
330
// jButtonConvert.setEnabled(false);
331
// jTextFieldConvert.setEnabled(false);
332
}
333 //convert Java class not implemented for 5.5 release
334
// else if (src.equals(jRadioButtonConvert)) {
335
// jButtonDelegate.setEnabled(false);
336
// jTextFieldDelegate.setEnabled(false);
337
// jButtonConvert.setEnabled(true);
338
// jTextFieldConvert.setEnabled(true);
339
// }
340

341         fireChange();
342     }
343     
344     public void addItemListener(ItemListener JavaDoc l) {
345         jRadioButtonScratch.addItemListener(l);
346         jRadioButtonDelegate.addItemListener(l);
347 //convert Java class not implemented for 5.5 release
348
// jRadioButtonConvert.addItemListener(l);
349
}
350     
351     public void removeItemListener(ItemListener JavaDoc l) {
352         jRadioButtonScratch.removeItemListener(l);
353         jRadioButtonDelegate.removeItemListener(l);
354 //convert Java class not implemented for 5.5 release
355
// jRadioButtonConvert.removeItemListener(l);
356
}
357     
358     public int getServiceType() {
359         if (jRadioButtonScratch.isSelected())
360             return WizardProperties.FROM_SCRATCH;
361         else
362 // else if (jRadioButtonDelegate.isSelected())
363
return WizardProperties.ENCAPSULATE_SESSION_BEAN;
364 //convert Java class not implemented for 5.5 release
365
// else
366
// return NewWebServiceWizardIterator.CONVERT_JAVA_CLASS;
367
}
368     
369     // Variables declaration - do not modify//GEN-BEGIN:variables
370
private javax.swing.ButtonGroup JavaDoc buttonGroup1;
371     private javax.swing.JButton JavaDoc jButtonConvert;
372     private javax.swing.JButton JavaDoc jButtonDelegate;
373     private javax.swing.JLabel JavaDoc jLabelConvert;
374     private javax.swing.JLabel JavaDoc jLabelDelegate;
375     private javax.swing.JRadioButton JavaDoc jRadioButtonConvert;
376     private javax.swing.JRadioButton JavaDoc jRadioButtonDelegate;
377     private javax.swing.JRadioButton JavaDoc jRadioButtonScratch;
378     private javax.swing.JTextField JavaDoc jTextFieldConvert;
379     private javax.swing.JTextField JavaDoc jTextFieldDelegate;
380     // End of variables declaration//GEN-END:variables
381

382     private void disableDelegateToEJB(){
383         jRadioButtonDelegate.setEnabled(false);
384         jLabelDelegate.setEnabled(false);
385         jTextFieldDelegate.setEnabled(false);
386         jButtonDelegate.setEnabled(false);
387     }
388     
389     /** Returns list of all EJB projects that can be called from the caller project.
390      *
391      * @param enterpriseProject the caller enterprise project
392      */

393     private Project [] getCallableEjbProjects(Project enterpriseProject) {
394         Project[] allProjects = OpenProjects.getDefault().getOpenProjects();
395         
396         boolean isCallerEJBModule = false;
397         J2eeModuleProvider callerJ2eeModuleProvider = (J2eeModuleProvider) enterpriseProject.getLookup().lookup(J2eeModuleProvider.class);
398         if (callerJ2eeModuleProvider != null && callerJ2eeModuleProvider.getJ2eeModule().getModuleType().equals(J2eeModule.EJB)) {
399             // TODO: HACK - this should be set by calling AntArtifactQuery.findArtifactsByType(p, EjbProjectConstants.ARTIFACT_TYPE_EJBJAR)
400
// but now freeform doesn't implement this correctly
401
isCallerEJBModule = true;
402         }
403         // TODO: HACK - this must be solved by freeform's own implementation of EnterpriseReferenceContainer, see issue 57003
404
// call ejb should not make this check, all should be handled in EnterpriseReferenceContainer
405
boolean isCallerFreeform = enterpriseProject.getClass().getName().equals("org.netbeans.modules.ant.freeform.FreeformProject");
406         
407         List JavaDoc /*<Project>*/ filteredResults = new ArrayList JavaDoc(allProjects.length);
408         for (int i = 0; i < allProjects.length; i++) {
409             boolean isEJBModule = false;
410             J2eeModuleProvider j2eeModuleProvider = (J2eeModuleProvider) allProjects[i].getLookup().lookup(J2eeModuleProvider.class);
411             if (j2eeModuleProvider != null && j2eeModuleProvider.getJ2eeModule().getModuleType().equals(J2eeModule.EJB)) {
412                 isEJBModule = true;
413             }
414             if ((isEJBModule && !isCallerFreeform) ||
415                     (isCallerFreeform && enterpriseProject.equals(allProjects[i]))) {
416                 filteredResults.add(allProjects[i]);
417             }
418         }
419         return (Project []) filteredResults.toArray(new Project[filteredResults.size()]);
420     }
421     
422     public void addChangeListener(ChangeListener JavaDoc l) {
423         listeners.add(l);
424     }
425     
426     public void removeChangeListener(ChangeListener JavaDoc l) {
427         listeners.remove(l);
428     }
429     
430     private void fireChange() {
431         ChangeEvent JavaDoc e = new ChangeEvent JavaDoc(this);
432         Iterator JavaDoc it = listeners.iterator();
433         while (it.hasNext()) {
434             ((ChangeListener JavaDoc)it.next()).stateChanged(e);
435         }
436     }
437     
438 }
439
Popular Tags