blob: 19509e1dd5820b31bd5995d439a4b2d66800f66f [file] [log] [blame]
/***********************************************************************
* Copyright (c) 2008 by SAP AG, Walldorf.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
***********************************************************************/
package org.eclipse.jst.jee.model.ejb.tests;
import junit.framework.TestSuite;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jst.j2ee.dependency.tests.util.ProjectUtil;
import org.eclipse.jst.j2ee.ejb.internal.operations.AddSessionBeanOperation;
import org.eclipse.jst.j2ee.ejb.internal.operations.INewSessionBeanClassDataModelProperties;
import org.eclipse.jst.j2ee.ejb.internal.operations.NewSessionBeanClassDataModelProvider;
import org.eclipse.jst.j2ee.ejb.internal.operations.StateType;
import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
import org.eclipse.jst.j2ee.model.IModelProvider;
import org.eclipse.jst.j2ee.model.ModelProviderManager;
import org.eclipse.jst.javaee.ejb.EJBJar;
import org.eclipse.jst.jee.model.tests.AbstractAnnotationModelTest;
import org.eclipse.jst.jee.model.tests.AbstractTest;
import org.eclipse.jst.jee.model.tests.SynchronousModelChangedListener;
import org.eclipse.jst.jee.model.tests.TestUtils;
import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
/**
* @author Kiril Mitov k.mitov@sap.com
*
*/
public class EJB3MergedModelProviderTest extends AbstractAnnotationModelTest {
private static final String EJB_PROJECT_NAME = EJB3MergedModelProviderTest.class.getSimpleName();
private static final String EAR_PROJECT_NAME = EJB_PROJECT_NAME + "ear";
private static final String CLIENT_NAME = EJB_PROJECT_NAME + "Client";
public static TestSuite suite() throws Exception {
TestSuite suite = new TestSuite(EJB3MergedModelProviderTest.class);
setUpProject();
return suite;
}
// @BeforeClass
public static void setUpProject() throws Exception {
ProjectUtil.createEARProject(EAR_PROJECT_NAME);
IProject project = ProjectUtil.createEJBProject(EJB_PROJECT_NAME, EAR_PROJECT_NAME, CLIENT_NAME,
J2EEVersionConstants.EJB_3_0_ID, true);
IFacetedProject facetedProject = ProjectFacetsManager.create(project);
IProject clientProject = ResourcesPlugin.getWorkspace().getRoot().getProject(CLIENT_NAME);
createProjectContent(facetedProject.getProject());
createClientProjectContent(clientProject);
}
private static void createClientProjectContent(IProject clientProject) throws Exception {
IJavaProject javaProject = JavaCore.create(clientProject);
IFolder comFolder = javaProject.getProject().getFolder("ejbModule/com");
comFolder.create(true, true, new NullProgressMonitor());
comFolder.getFolder("sap").create(true, true, null);
IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(comFolder);
IPackageFragment fragment = root.createPackageFragment("sap", true, new NullProgressMonitor());
createSessionBeanLocal(fragment);
}
// @AfterClass
public static void tearDownAfterClass() throws InterruptedException {
AbstractTest.deleteProject(EJB3MergedModelProviderTest.class.getSimpleName());
}
private static void createProjectContent(IProject project) throws Exception {
IJavaProject javaProject = JavaCore.create(project);
IFolder comFolder = javaProject.getProject().getFolder("ejbModule/com");
comFolder.create(true, true, new NullProgressMonitor());
comFolder.getFolder("sap").create(true, true, null);
IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(comFolder);
IPackageFragment fragment = root.createPackageFragment("sap", true, new NullProgressMonitor());
createSessionBean(fragment);
}
// @Before
public void setUp() throws Exception {
super.setUp();
// fixture = new EJB3MergedModelProvider(facetedProject.getProject());
if (facetedProject == null)
return;
fixture = ModelProviderManager.getModelProvider(facetedProject.getProject());
clientProject = ResourcesPlugin.getWorkspace().getRoot().getProject(CLIENT_NAME);
}
// @After
public void tearDown() throws Exception {
}
// @Test
public void testAddBeanWithOperation() throws Exception {
final String ejbProjectName = this.getClass().getSimpleName() + this.getName();
final String clientName = ejbProjectName + "Client";
IProject project = ProjectUtil.createEJBProject(ejbProjectName, ejbProjectName + "ear", clientName,
J2EEVersionConstants.EJB_3_0_ID, true);
IDataModelOperation operation = createBeanOperation("testAddBeanWithOperation", "com.sap", project.getName());
IModelProvider provider = ModelProviderManager.getModelProvider(project);
EJBJar result = (EJBJar) provider.getModelObject();
assertEquals(new Integer(0), new Integer(result.getEnterpriseBeans().getSessionBeans().size()));
SynchronousModelChangedListener listener = new SynchronousModelChangedListener(1);
provider.addListener(listener);
operation.execute(null, null);
assertTrue(listener.waitForEvents());
provider.removeListener(listener);
result = (EJBJar) provider.getModelObject();
assertEquals(new Integer(1), new Integer(result.getEnterpriseBeans().getSessionBeans().size()));
assertNotNull(TestUtils.getSessionBean(result, "testAddBeanWithOperation"));
}
// public void testCreateClientProjectWithOperation() throws Exception {
// final String ejbProjectName = this.getClass().getSimpleName() + this.getName();
// final String earProjectName = ejbProjectName + "ear";
// Map<String, Object> facetModelProperties = new HashMap<String, Object>();
// facetModelProperties.put(IEjbFacetInstallDataModelProperties.CREATE_CLIENT, false);
// facetModelProperties.put(IJ2EEFacetInstallDataModelProperties.GENERATE_DD, true);
// final IProject project = ProjectUtil.createEJBProject(ejbProjectName, earProjectName, facetModelProperties,
// J2EEVersionConstants.EJB_3_0_ID, true);
// final IModelProvider provider = new Ejb3ModelProvider(project);
// provider.getModelObject();
// final IDataModel model = DataModelFactory.createDataModel(new EjbClientJarCreationDataModelProvider());
// model.setProperty(IEjbClientJarCreationDataModelProperties.EJB_PROJECT_NAME, ejbProjectName);
// model.setProperty(IEjbClientJarCreationDataModelProperties.PROJECT_NAME, CLIENT_NAME + "newName");
//
// SynchronousModelChangedListener listener = new SynchronousModelChangedListener(1);
// provider.addListener(listener);
// model.getDefaultOperation().execute(null, null);
// assertTrue(listener.waitForEvents());
// provider.removeListener(listener);
//
// EJBJar result = (EJBJar) provider.getModelObject();
// assertEquals(CLIENT_NAME + "newName" + ".jar", result.getEjbClientJar());
// }
// @Test
// public void testChangeClientProject() throws Exception {
// final String ejbProjectName = this.getClass().getSimpleName() + this.getName();
// final String clientName = ejbProjectName + "Client";
// IProject project = ProjectUtil.createEJBProject(ejbProjectName, ejbProjectName + "ear", clientName,
// J2EEVersionConstants.EJB_3_0_ID, true);
//
// IFile dd = facetedProject.getProject().getFile("ejbModule/META-INF/ejb-jar.xml");
// final String ddWithClient = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
// + "<ejb-jar xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://java.sun.com/xml/ns/javaee\" xmlns:ejb=\"http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd\" version=\"3.0\">"
// + "<ejb-client-jar>" + clientName + ".jar</ejb-client-jar></ejb-jar>";
// final String ddNoClient = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
// + "<ejb-jar xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://java.sun.com/xml/ns/javaee\" xmlns:ejb=\"http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd\" version=\"3.0\">"
// + "</ejb-jar>";
// // load the model
// IModelProvider provider = ModelProviderManager.getModelProvider(project);
//
// EJBJar result = (EJBJar) provider.getModelObject();
// /*
// * From now on the model provider should not listener for changes in
// * the client project since it is not described in the deployment
// * descriptor.
// */
// saveFileAndUpdate(dd, ddNoClient, provider);
//
// /*
// * Change the interface. The model should not be updated.
// */
// final String remoteInterface = "package com.sap;" + "import javax.ejb.Remote;"
// + "@Remote public interface SessionBeanLocal {}";
// IFile interfaceFile = clientProject.getFile("ejbModule/com/sap/SessionBeanLocal.java");
// SynchronousModelChangedListener listener = new SynchronousModelChangedListener(1);
// provider.addListener(listener);
// AbstractTest.saveFile(interfaceFile, remoteInterface);
// assertFalse(listener.waitForEvents());
// provider.removeListener(listener);
// result = (EJBJar) provider.getModelObject();
// SessionBean bean = TestUtils.getSessionBean(result, "SessionBean");
// assertEquals(new Integer(1), new Integer(bean.getBusinessLocals().size()));
// assertTrue(bean.getBusinessRemotes().isEmpty());
//
// /*
// * The deployment descriptor is changed. The bean should now contain the
// * interface in the remotes list
// */
// saveFileAndUpdate(dd, ddWithClient, provider);
// bean = TestUtils.getSessionBean(result, "SessionBean");
// assertEquals(new Integer(1), new Integer(bean.getBusinessRemotes().size()));
// assertTrue(bean.getBusinessLocals().isEmpty());
//
// // revet the changes
// saveFileAndUpdate(facetedProject.getProject().getFile("ejbModule/com/sap/SessionBean.java"), beanContent);
// saveFileAndUpdate(interfaceFile, localInterfaceContent);
// }
/**
* Create an ejb project with a client project. Add a session bean to the
* project. After creating the ejb project a client project is created. The
* modify method of the provider is called passing a runnable for setting
* the ejbClient. This is the current implementation of how a client is
* create.
*
* The test doing exactly this. Create an ear project. Create and ejb
* project with a client project. Check that the model nows about the
* ejbClient project. Then add a session bean to the ejb project. The
* listener must be notified.
*
* @throws Exception
*/
public void testAddSessionBean() throws Exception {
final String ejbProjectName = this.getClass().getSimpleName() + this.getName();
// create the project
ProjectUtil.createEARProject(ejbProjectName + "ear", true);
IProject project = ProjectUtil.createEJBProject(ejbProjectName, ejbProjectName + "ear", ejbProjectName
+ "client", J2EEVersionConstants.EJB_3_0_ID, true);
IFolder comFolder = project.getFolder("ejbModule/com");
comFolder.create(true, true, null);
comFolder.getFolder("sap").create(true, true, null);
// get the model provider
IModelProvider provider = ModelProviderManager.getModelProvider(project);
EJBJar result = (EJBJar) provider.getModelObject();
assertEquals(ejbProjectName + "Client.jar", result.getEjbClientJar());
IDataModelOperation operation = createBeanOperation("testAddSessionBeanClientExists", "com.sap", project
.getName());
SynchronousModelChangedListener listener = new SynchronousModelChangedListener(1);
provider.addListener(listener);
operation.execute(null, null);
listener.waitForEvents();
provider.removeListener(listener);
result = (EJBJar) provider.getModelObject();
assertNotNull(TestUtils.getSessionBean(result, "testAddSessionBeanClientExists"));
}
protected IDataModelOperation createBeanOperation(String className, String javaPackage, String projectName) {
NewSessionBeanClassDataModelProvider dataProvider = new NewSessionBeanClassDataModelProvider();
IDataModel dataModel = DataModelFactory.createDataModel(dataProvider);
dataModel.setStringProperty(INewSessionBeanClassDataModelProperties.CLASS_NAME, className);
dataModel.setStringProperty(INewSessionBeanClassDataModelProperties.STATE_TYPE,
StateType.STATELESS.toString());
dataModel.setStringProperty(INewSessionBeanClassDataModelProperties.EJB_NAME, className);
dataModel.setStringProperty(INewSessionBeanClassDataModelProperties.JAVA_PACKAGE, javaPackage);
dataModel.setStringProperty(INewSessionBeanClassDataModelProperties.PROJECT_NAME, projectName);
AddSessionBeanOperation operation = new AddSessionBeanOperation(dataModel);
return operation;
}
}