1 19 20 package org.netbeans.modules.websvc.dev.wizard; 21 22 import java.awt.event.ItemEvent ; 23 import java.awt.event.ItemListener ; 24 import java.beans.PropertyChangeEvent ; 25 import java.beans.PropertyChangeListener ; 26 import java.util.ArrayList ; 27 import java.util.Iterator ; 28 import java.util.LinkedList ; 29 import java.util.List ; 30 import javax.swing.Action ; 31 import javax.swing.event.ChangeEvent ; 32 import javax.swing.event.ChangeListener ; 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 55 public class WebServiceTypePanel extends javax.swing.JPanel implements HelpCtx.Provider, ItemListener { 56 57 private Project project; 58 private Node[] sessionBeanNodes; 59 60 private final List listeners = new ArrayList (); 61 62 private boolean isWaitingForScan = false; 63 private boolean jsr109Supported; 64 private boolean jsr109oldSupported; 65 private boolean jwsdpSupported; 66 67 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 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 WebModule wm = WebModule.getWebModule(project.getProjectDirectory()); 89 EjbJar em = EjbJar.getEjbJar(project.getProjectDirectory()); 90 if ((em == null && wm == null) 91 || ((!jsr109Supported && !jsr109oldSupported || 93 (!jsr109Supported && jsr109oldSupported && jwsdpSupported ))) ) { 94 disableDelegateToEJB(); 95 } 96 97 addItemListener(this); 98 } 99 100 105 private void initComponents() { 107 buttonGroup1 = new javax.swing.ButtonGroup (); 108 jRadioButtonScratch = new javax.swing.JRadioButton (); 109 jRadioButtonDelegate = new javax.swing.JRadioButton (); 110 jLabelDelegate = new javax.swing.JLabel (); 111 jTextFieldDelegate = new javax.swing.JTextField (); 112 jButtonDelegate = new javax.swing.JButton (); 113 jRadioButtonConvert = new javax.swing.JRadioButton (); 114 jLabelConvert = new javax.swing.JLabel (); 115 jTextFieldConvert = new javax.swing.JTextField (); 116 jButtonConvert = new javax.swing.JButton (); 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 (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 (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 () { 142 public void actionPerformed(java.awt.event.ActionEvent 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 (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 [] {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 } 213 private void jButtonDelegateActionPerformed(java.awt.event.ActionEvent evt) { Project[] allProjects = getCallableEjbProjects(project); 215 List ejbProjectNodes = new LinkedList (); 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 [] getActions(boolean context) { 222 return new Action [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 () { 235 public void propertyChange(PropertyChangeEvent evt) { 236 if (evt.getPropertyName().equals(EjbChooser.IS_VALID)) { 237 Object newvalue = evt.getNewValue(); 238 if ((newvalue != null) && (newvalue instanceof Boolean )) { 239 dd.setValid(((Boolean ) newvalue).booleanValue()); 240 } 241 } 242 } 243 }); 244 245 Object 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 } 254 void validate(WizardDescriptor wizardDescriptor) { 255 } 256 257 boolean valid(WizardDescriptor wizardDescriptor) { 258 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")); return false; 267 } 268 wizardDescriptor.putProperty("WizardPanel_errorMessage", ""); 285 return true; 286 } 287 288 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")); return false; 299 } 300 } 301 return true; 302 } 303 304 305 void store(WizardDescriptor d) { 306 d.putProperty(WizardProperties.WEB_SERVICE_TYPE, new Integer (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 e) { 319 Object src = e.getSource(); 320 if (src.equals(jRadioButtonScratch)) { 321 jButtonDelegate.setEnabled(false); 322 jTextFieldDelegate.setEnabled(false); 323 } else if (src.equals(jRadioButtonDelegate)) { 327 jButtonDelegate.setEnabled(true); 328 jTextFieldDelegate.setEnabled(true); 329 } 333 341 fireChange(); 342 } 343 344 public void addItemListener(ItemListener l) { 345 jRadioButtonScratch.addItemListener(l); 346 jRadioButtonDelegate.addItemListener(l); 347 } 350 351 public void removeItemListener(ItemListener l) { 352 jRadioButtonScratch.removeItemListener(l); 353 jRadioButtonDelegate.removeItemListener(l); 354 } 357 358 public int getServiceType() { 359 if (jRadioButtonScratch.isSelected()) 360 return WizardProperties.FROM_SCRATCH; 361 else 362 return WizardProperties.ENCAPSULATE_SESSION_BEAN; 364 } 368 369 private javax.swing.ButtonGroup buttonGroup1; 371 private javax.swing.JButton jButtonConvert; 372 private javax.swing.JButton jButtonDelegate; 373 private javax.swing.JLabel jLabelConvert; 374 private javax.swing.JLabel jLabelDelegate; 375 private javax.swing.JRadioButton jRadioButtonConvert; 376 private javax.swing.JRadioButton jRadioButtonDelegate; 377 private javax.swing.JRadioButton jRadioButtonScratch; 378 private javax.swing.JTextField jTextFieldConvert; 379 private javax.swing.JTextField jTextFieldDelegate; 380 382 private void disableDelegateToEJB(){ 383 jRadioButtonDelegate.setEnabled(false); 384 jLabelDelegate.setEnabled(false); 385 jTextFieldDelegate.setEnabled(false); 386 jButtonDelegate.setEnabled(false); 387 } 388 389 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 isCallerEJBModule = true; 402 } 403 boolean isCallerFreeform = enterpriseProject.getClass().getName().equals("org.netbeans.modules.ant.freeform.FreeformProject"); 406 407 List filteredResults = new ArrayList (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 l) { 423 listeners.add(l); 424 } 425 426 public void removeChangeListener(ChangeListener l) { 427 listeners.remove(l); 428 } 429 430 private void fireChange() { 431 ChangeEvent e = new ChangeEvent (this); 432 Iterator it = listeners.iterator(); 433 while (it.hasNext()) { 434 ((ChangeListener )it.next()).stateChanged(e); 435 } 436 } 437 438 } 439 | Popular Tags |