? src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entres/.cvsignore Index: .cvsignore =================================================================== RCS file: /cvs/j2ee/ejbcore/.cvsignore,v retrieving revision 1.1 retrieving revision 1.1.106.1 diff -u -r1.1 -r1.1.106.1 --- .cvsignore 31 May 2005 22:11:25 -0000 1.1 +++ .cvsignore 26 Mar 2007 09:49:02 -0000 1.1.106.1 @@ -1 +1,2 @@ build +.swp Index: nbproject/project.xml =================================================================== RCS file: /cvs/j2ee/ejbcore/nbproject/project.xml,v retrieving revision 1.11.4.1 retrieving revision 1.11.4.1.2.1 diff -u -r1.11.4.1 -r1.11.4.1.2.1 --- nbproject/project.xml 28 Feb 2007 18:01:53 -0000 1.11.4.1 +++ nbproject/project.xml 26 Mar 2007 09:49:02 -0000 1.11.4.1.2.1 @@ -368,6 +368,14 @@ 6.2 + + org.netbeans.api.web.webmodule + + + + 1.8 + + Index: src/org/netbeans/modules/j2ee/ejbcore/action/UseDatabaseGenerator.java =================================================================== RCS file: /cvs/j2ee/ejbcore/src/org/netbeans/modules/j2ee/ejbcore/action/UseDatabaseGenerator.java,v retrieving revision 1.4.4.1 retrieving revision 1.4.4.1.2.1 diff -u -r1.4.4.1 -r1.4.4.1.2.1 --- src/org/netbeans/modules/j2ee/ejbcore/action/UseDatabaseGenerator.java 28 Feb 2007 18:01:59 -0000 1.4.4.1 +++ src/org/netbeans/modules/j2ee/ejbcore/action/UseDatabaseGenerator.java 26 Mar 2007 09:49:03 -0000 1.4.4.1.2.1 @@ -13,7 +13,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * * The Original Software is NetBeans. The Initial Developer of the Original - * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun + * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun * Microsystems, Inc. All Rights Reserved. */ @@ -37,7 +37,14 @@ import org.netbeans.modules.j2ee.common.queries.api.InjectionTargetQuery; import org.netbeans.modules.j2ee.common.source.AbstractTask; import org.netbeans.modules.j2ee.dd.api.common.ResourceRef; +import org.netbeans.modules.j2ee.dd.api.ejb.EjbJar; +import org.netbeans.modules.j2ee.dd.api.ejb.EnterpriseBeans; +import org.netbeans.modules.j2ee.dd.api.ejb.Ejb; +import org.netbeans.modules.j2ee.dd.api.ejb.DDProvider; +import org.netbeans.modules.j2ee.deployment.common.api.ConfigurationException; import org.netbeans.modules.j2ee.deployment.common.api.Datasource; +import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule; +import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider; import org.netbeans.modules.j2ee.ejbcore.Utils; import org.netbeans.modules.j2ee.ejbcore._RetoucheUtil; import org.netbeans.modules.j2ee.ejbcore.ui.logicalview.entres.ServiceLocatorStrategy; @@ -52,8 +59,11 @@ public UseDatabaseGenerator() { } - public void generate(final FileObject fileObject, final ElementHandle elementHandle, final Datasource datasource, - final boolean createServerResources, String serviceLocator) throws IOException { + public void generate(final FileObject fileObject, final ElementHandle elementHandle, + final J2eeModuleProvider j2eeModuleProvider, final String datasourceReferenceName, + final Datasource datasource, final boolean createServerResources, String serviceLocator) + throws IOException, ConfigurationException + { Project project = FileOwnerQuery.getOwner(fileObject); ServiceLocatorStrategy serviceLocatorStrategy = (serviceLocator == null) ? null : ServiceLocatorStrategy.create(project, fileObject, serviceLocator); @@ -73,9 +83,105 @@ generateLookupMethod(fileObject, className, jndiName, serviceLocatorStrategy); } } + +if (System.getProperties().getProperty("resource-api-redesign") != null) { + J2eeModule module = j2eeModuleProvider.getJ2eeModule(); + if (isWebModule(module)) { + bindDataSourceReference(j2eeModuleProvider, datasourceReferenceName, datasource); + } + else if (isEjbModule(module)) { + bindDataSourceReferenceEjb(j2eeModuleProvider, datasourceReferenceName, datasource, fileObject, elementHandle); + } +} + if (serviceLocator != null) { erc.setServiceLocatorName(serviceLocator); } + } + + private void bindDataSourceReference(J2eeModuleProvider j2eeModuleProvider, String dsRefName, Datasource datasource) + throws ConfigurationException { + + String dsJndiName = datasource.getJndiName(); + j2eeModuleProvider.getConfigSupport().bindDatasourceReference(dsRefName, dsJndiName); + } + + private void bindDataSourceReferenceEjb(J2eeModuleProvider j2eeModuleProvider, String dsRefName, Datasource datasource, + FileObject fileObject, ElementHandle elementHandle) throws ConfigurationException { + + String dsJndiName = datasource.getJndiName(); + + EjbJar dd = null; + try { + dd = findDDRoot(fileObject); + } + catch (IOException ioe) { + // TODO + } + if (dd == null) { + return; + } + + EnterpriseBeans beans = dd.getEnterpriseBeans(); + if (beans == null) { + return; + } + + String ejbName = getEjbName(beans, elementHandle.getQualifiedName()); + if (ejbName == null) { + return; + } + + String ejbType = getEjbType(beans, elementHandle.getQualifiedName()); + if (ejbType == null) { + return; + } + + j2eeModuleProvider.getConfigSupport().bindDatasourceReferenceEjb(dsRefName, dsJndiName, ejbName, ejbType); + } + + private EjbJar findDDRoot(FileObject fileObject) throws IOException { + org.netbeans.modules.j2ee.api.ejbjar.EjbJar ejbJar = org.netbeans.modules.j2ee.api.ejbjar.EjbJar.getEjbJar(fileObject); + assert ejbJar != null; + return DDProvider.getDefault().getMergedDDRoot(ejbJar.getMetadataUnit()); + } + + private boolean isWebModule(J2eeModule module) { + return module.getModuleType().equals(J2eeModule.WAR); + } + + private boolean isEjbModule(J2eeModule module) { + return module.getModuleType().equals(J2eeModule.EJB); + } + + private String getEjbName(EnterpriseBeans beans, String className) { + Ejb ejb = (Ejb) beans.findBeanByName(EnterpriseBeans.SESSION, Ejb.EJB_CLASS, className); + if (ejb == null) { + ejb = (Ejb) beans.findBeanByName(EnterpriseBeans.ENTITY, Ejb.EJB_CLASS, className); + } + if (ejb == null) { + ejb = (Ejb) beans.findBeanByName(EnterpriseBeans.MESSAGE_DRIVEN, Ejb.EJB_CLASS, className); + } + + return ejb.getEjbName(); + } + + private String getEjbType(EnterpriseBeans beans, String className) { + String type = null; + + if (beans.findBeanByName(EnterpriseBeans.SESSION, Ejb.EJB_CLASS, className) != null) { + type = EnterpriseBeans.SESSION; + } + else + if (beans.findBeanByName(EnterpriseBeans.ENTITY, Ejb.EJB_CLASS, className) != null) { + type = EnterpriseBeans.ENTITY; + } + else + if (beans.findBeanByName(EnterpriseBeans.MESSAGE_DRIVEN, Ejb.EJB_CLASS, className) != null) { + type = EnterpriseBeans.MESSAGE_DRIVEN; + } + + return type; } private String generateJNDILookup(String jndiName, EnterpriseReferenceContainer enterpriseReferenceContainer, Index: src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageEJBWizard.java =================================================================== RCS file: /cvs/j2ee/ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageEJBWizard.java,v retrieving revision 1.4.6.1 retrieving revision 1.4.6.1.2.1 diff -u -r1.4.6.1 -r1.4.6.1.2.1 --- src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageEJBWizard.java 28 Feb 2007 18:02:15 -0000 1.4.6.1 +++ src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MessageEJBWizard.java 26 Mar 2007 09:49:03 -0000 1.4.6.1.2.1 @@ -13,13 +13,14 @@ * "Portions Copyrighted [year] [name of copyright owner]" * * The Original Software is NetBeans. The Initial Developer of the Original - * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun + * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.j2ee.ejbcore.ejb.wizard.mdb; import java.io.IOException; +import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider; import org.netbeans.modules.j2ee.ejbcore.api.codegeneration.MessageGenerator; import java.util.Collections; import java.util.NoSuchElementException; @@ -34,6 +35,8 @@ import org.netbeans.spi.project.ui.templates.support.Templates; import org.openide.filesystems.FileObject; import org.netbeans.modules.j2ee.common.Util; +import org.netbeans.modules.j2ee.deployment.common.api.ConfigurationException; +import org.netbeans.modules.j2ee.deployment.common.api.MessageDestination; import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule; import org.netbeans.modules.j2ee.ejbcore.Utils; import org.openide.WizardDescriptor; @@ -73,6 +76,27 @@ Util.hideLabelAndLabelFor(jComponent, NbBundle.getMessage(MessageEJBWizard.class, "LBL_JavaTargetChooserPanelGUI_CreatedFile_Label")); panels = new WizardDescriptor.Panel[] {wizardPanel}; Utils.mergeSteps(wiz, panels, SESSION_STEPS); + +if (System.getProperties().getProperty("resource-api-redesign") != null) { + J2eeModuleProvider provider = project.getLookup().lookup(J2eeModuleProvider.class); + try { + Set moduleDestinations = provider.getConfigSupport().getMessageDestinations(); + for (MessageDestination md : moduleDestinations) { + System.out.println(md.getJndiName() + " ~ " + md.getType()); + } + if (provider.getConfigSupport().supportsCreateMessageDestination()) { + MessageDestination dest = provider.getConfigSupport().createMessageDestination("TestMsgDest01", MessageDestination.Type.TOPIC); + } + Set serverDestinations = provider.getConfigSupport().getServerMessageDestinations(); + for (MessageDestination md : serverDestinations) { + System.out.println(md.getJndiName() + " ~ " + md.getType()); + } + } + catch (ConfigurationException ce) { + + } +} + } public Set instantiate() throws IOException { Index: src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entres/UseDatabaseAction.java =================================================================== RCS file: /cvs/j2ee/ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entres/UseDatabaseAction.java,v retrieving revision 1.10.4.1 retrieving revision 1.10.4.1.2.1 diff -u -r1.10.4.1 -r1.10.4.1.2.1 --- src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entres/UseDatabaseAction.java 28 Feb 2007 18:03:11 -0000 1.10.4.1 +++ src/org/netbeans/modules/j2ee/ejbcore/ui/logicalview/entres/UseDatabaseAction.java 26 Mar 2007 09:49:04 -0000 1.10.4.1.2.1 @@ -13,7 +13,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * * The Original Software is NetBeans. The Initial Developer of the Original - * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun + * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun * Microsystems, Inc. All Rights Reserved. */ @@ -22,6 +22,8 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import javax.lang.model.element.ElementKind; import javax.lang.model.element.TypeElement; import javax.swing.Action; @@ -33,9 +35,18 @@ import org.netbeans.api.project.Project; import org.netbeans.modules.j2ee.api.ejbjar.EnterpriseReferenceContainer; import org.netbeans.modules.j2ee.common.source.AbstractTask; +import org.netbeans.modules.j2ee.dd.api.common.ResourceRef; +import org.netbeans.modules.j2ee.dd.api.ejb.EjbJar; +import org.netbeans.modules.j2ee.dd.api.ejb.EnterpriseBeans; +import org.netbeans.modules.j2ee.dd.api.ejb.Ejb; +import org.netbeans.modules.j2ee.dd.api.web.WebApp; +import org.netbeans.modules.j2ee.deployment.common.api.ConfigurationException; +import org.netbeans.modules.j2ee.deployment.common.api.Datasource; +import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule; import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider; import org.netbeans.modules.j2ee.ejbcore._RetoucheUtil; import org.netbeans.modules.j2ee.ejbcore.action.UseDatabaseGenerator; +import org.netbeans.modules.web.api.webmodule.WebModule; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; import org.openide.ErrorManager; @@ -97,20 +108,110 @@ } }); selectDatabasePanel.checkDatasource(); + +if (System.getProperties().getProperty("resource-api-redesign") != null) { + try { + Map refs = getDataSourceReferences(j2eeModuleProvider, fileObject); + } + catch (ConfigurationException ce) { + //TODO notify user + } +} +String refName = "NameOfSelectedReference"; + Object option = DialogDisplayer.getDefault().notify(dialogDescriptor); if (option == NotifyDescriptor.OK_OPTION) { + UseDatabaseGenerator generator = new UseDatabaseGenerator(); - generator.generate( - fileObject, - elementHandle, - selectDatabasePanel.getDatasource(), - selectDatabasePanel.createServerResources(), - selectDatabasePanel.getServiceLocator() - ); + try { + generator.generate( + fileObject, + elementHandle, + j2eeModuleProvider, + refName, + selectDatabasePanel.getDatasource(), + selectDatabasePanel.createServerResources(), + selectDatabasePanel.getServiceLocator() + ); + } + catch (ConfigurationException ex) { + //TODO + } } return false; } + + private Map getDataSourceReferences(J2eeModuleProvider j2eeModuleProvider, FileObject fileObject) + throws ConfigurationException { + + HashMap references = new HashMap(); + + if (j2eeModuleProvider.getJ2eeModule().getModuleType().equals(J2eeModule.EJB)) { + EjbJar dd = findEjbDDRoot(fileObject); + if (dd == null) { + return references; + } + EnterpriseBeans beans = dd.getEnterpriseBeans(); + if (beans == null) { + return references; + } + + Ejb[] ejbs = beans.getEjbs(); + for (Ejb ejb : ejbs) { + ResourceRef[] refs = ejb.getResourceRef(); + for (ResourceRef ref : refs) { + String refName = ref.getResRefName(); + Datasource ds = j2eeModuleProvider.getConfigSupport().findDatasourceForReferenceEjb(refName, ejb.getEjbName()); + if (ds != null) { + references.put(refName, ds); + System.out.println(refName + " ~ " + ds.getUrl()); + } + } + } + } + else + if (j2eeModuleProvider.getJ2eeModule().getModuleType().equals(J2eeModule.WAR)) { + WebApp dd = findWebDDRoot(fileObject); + if (dd == null) { + return references; + } + ResourceRef[] refs = dd.getResourceRef(); + for (ResourceRef ref : refs) { + String refName = ref.getResRefName(); + Datasource ds = j2eeModuleProvider.getConfigSupport().findDatasourceForReference(refName); + if (ds != null) { + references.put(refName, ds); + System.out.println(refName + " ~ " + ds.getUrl()); + } + } + } + + return references; + } + + private EjbJar findEjbDDRoot(FileObject fileObject) throws ConfigurationException { + org.netbeans.modules.j2ee.api.ejbjar.EjbJar ejbJar = org.netbeans.modules.j2ee.api.ejbjar.EjbJar.getEjbJar(fileObject); + assert ejbJar != null; + try { + return org.netbeans.modules.j2ee.dd.api.ejb.DDProvider.getDefault().getMergedDDRoot(ejbJar.getMetadataUnit()); + } + catch (IOException ioe) { + String msg = NbBundle.getMessage(UseDatabaseAction.class, "ERR_CannotReadEjbDD"); + throw new ConfigurationException(msg, ioe); + } + } + private WebApp findWebDDRoot(FileObject fileObject) throws ConfigurationException { + WebModule mod = WebModule.getWebModule(fileObject); + try { + return org.netbeans.modules.j2ee.dd.api.web.DDProvider.getDefault().getMergedDDRoot(mod); + } + catch (IOException ioe) { + String msg = NbBundle.getMessage(UseDatabaseAction.class, "ERR_CannotReadWebDD"); + throw new ConfigurationException(msg, ioe); + } + } + protected boolean enable(Node[] nodes) { if (nodes == null || nodes.length != 1) { return false;