[241507] No notification from JEEModelProvider after calling JEE5ModelProvider.modify
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/ejb/tests/Ejb3ModelProviderTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/ejb/tests/Ejb3ModelProviderTest.java
new file mode 100644
index 0000000..b5d99bc
--- /dev/null
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/ejb/tests/Ejb3ModelProviderTest.java
@@ -0,0 +1,78 @@
+/***********************************************************************
+ * 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 java.util.Collection;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jst.j2ee.dependency.tests.util.ProjectUtil;
+import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
+import org.eclipse.jst.j2ee.model.IModelProviderEvent;
+import org.eclipse.jst.javaee.core.Description;
+import org.eclipse.jst.javaee.core.JavaeeFactory;
+import org.eclipse.jst.javaee.ejb.EJBJar;
+import org.eclipse.jst.jee.model.internal.Ejb3ModelProvider;
+import org.eclipse.jst.jee.model.tests.SynchronousModelChangedListener;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * @author  Kiril Mitov k.mitov@sap.com
+ *
+ */
+public class Ejb3ModelProviderTest extends TestCase {
+
+	private static final String EAR_PROJECT_NAME = "earProject";
+	private static final String EJB_PROJECT_NAME = "ejbProject";
+
+	public static TestSuite suite() throws Exception {
+		TestSuite suite = new TestSuite(Ejb3ModelProviderTest.class);
+		setUpProject();
+		return suite;
+	}
+
+	// @BeforeClass
+	public static void setUpProject() throws Exception {
+	}
+
+	/**
+	 * A notification should be send after a modification on the model.
+	 * @throws Exception 
+	 */
+	public void testModifyOnlyModelWithOperation() throws Exception {
+		ProjectUtil.createEARProject(EAR_PROJECT_NAME);
+		IProject project = ProjectUtil.createEJBProject(EJB_PROJECT_NAME, EAR_PROJECT_NAME,
+				J2EEVersionConstants.EJB_3_0_ID, true);
+		IFacetedProject facetedProject = ProjectFacetsManager.create(project);
+		SynchronousModelChangedListener listener = new SynchronousModelChangedListener(1);
+		final Ejb3ModelProvider modelProvider = new Ejb3ModelProvider(facetedProject.getProject());
+		assertNotNull(modelProvider.getModelObject());
+		modelProvider.addListener(listener);
+		modelProvider.modify(new Runnable() {
+			public void run() {
+				EJBJar modelObject = (EJBJar) modelProvider.getModelObject();
+				changeModelObject(modelObject);
+			}
+
+			private void changeModelObject(EJBJar modelObject) {
+				Description description = JavaeeFactory.eINSTANCE.createDescription();
+				modelObject.getDescriptions().add(description);
+			}
+		}, null);
+		assertTrue(listener.waitForEvents());
+		Collection<IModelProviderEvent> events = listener.getReceivedEvents();
+		assertEquals(1, events.size());
+		modelProvider.removeListener(listener);
+	}
+}
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/ejb/tests/EjbAnnotationReaderTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/ejb/tests/EjbAnnotationReaderTest.java
index 566eb09..be8d1bd 100644
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/ejb/tests/EjbAnnotationReaderTest.java
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/ejb/tests/EjbAnnotationReaderTest.java
@@ -7,7 +7,7 @@
  * it only in accordance with the terms of the license agreement you entered
  * into with SAP.
  * 
- * $Id: EjbAnnotationReaderTest.java,v 1.4 2008/03/28 19:57:50 canderson Exp $
+ * $Id: EjbAnnotationReaderTest.java,v 1.5 2008/10/07 18:01:48 kmitov Exp $
  ***********************************************************************/
 package org.eclipse.jst.jee.model.ejb.tests;
 
@@ -29,7 +29,9 @@
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jst.j2ee.dependency.tests.util.ProjectUtil;
 import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
+import org.eclipse.jst.j2ee.model.IModelProvider;
 import org.eclipse.jst.javaee.ejb.ActivationConfigProperty;
+import org.eclipse.jst.javaee.ejb.EJBJar;
 import org.eclipse.jst.javaee.ejb.EnterpriseBeans;
 import org.eclipse.jst.javaee.ejb.InitMethodType;
 import org.eclipse.jst.javaee.ejb.MessageDrivenBean;
@@ -41,6 +43,7 @@
 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.project.facet.core.ProjectFacetsManager;
 
 /**
  * @author Kiril Mitov k.mitov@sap.com
@@ -58,11 +61,11 @@
 	}
 
 	public static void setUpProject() throws Exception {
-		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(EjbAnnotationReaderTest.class.getSimpleName());
-		if (!project.exists())
-		{
+		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(
+				EjbAnnotationReaderTest.class.getSimpleName());
+		if (!project.exists()) {
 			project = ProjectUtil.createEJBProject(EjbAnnotationReaderTest.class.getSimpleName(), null,
-				J2EEVersionConstants.EJB_3_0_ID, true);
+					J2EEVersionConstants.EJB_3_0_ID, true);
 			createProjectContent(project);
 		}
 	}
@@ -131,6 +134,36 @@
 		}
 	}
 
+	public void testLoadForEmptyProject() throws Exception {
+		String projectName = EjbAnnotationReaderTest.class.getSimpleName() + "testLoadForEmptyProject";
+		IProject emptyProject = ProjectUtil.createEJBProject(projectName, null, J2EEVersionConstants.EJB_3_0_ID, true);
+		IModelProvider provider = new EJBAnnotationReader(ProjectFacetsManager.create(emptyProject), null);
+		EJBJar ejbJar = (EJBJar) provider.getModelObject();
+		assertNull(ejbJar.getEnterpriseBeans());
+		AbstractTest.deleteProject(projectName);
+	}
+
+	public void testNullEnterpriseBeanAfterDelete() throws Exception {
+		final String projectName = EjbAnnotationReaderTest.class.getSimpleName() + "testNullEnterpriseBeanAfterDelete";
+		IProject oneBeanProject = ProjectUtil
+				.createEJBProject(projectName, null, J2EEVersionConstants.EJB_3_0_ID, true);
+		facetedProject = ProjectFacetsManager.create(oneBeanProject);
+		fixture = new EJBAnnotationReader(facetedProject, clientProject);
+
+		IFile beanFile = oneBeanProject.getFile("ejbModule/testNullEnterpriseBeanAfterDelete.java");
+		assertFalse(beanFile.exists());
+		final String content = "import javax.ejb.Stateless;"
+				+ "@Stateless public class testNullEnterpriseBeanAfterDelete implements SessionBeanLocal {}";
+		// add the file
+		saveFileAndUpdate(beanFile, content);
+		SessionBean result = TestUtils.getSessionBean(getEJBJar(), "testNullEnterpriseBeanAfterDelete");
+		assertNotNull(result);
+		// delete the file
+		deleteFileAndUpdate(beanFile);
+		assertNull(getEJBJar().getEnterpriseBeans());
+		AbstractTest.deleteProject(projectName);
+	}
+
 	// @Test
 	public void testGetSessionBeans() {
 		EnterpriseBeans beans = getEJBJar().getEnterpriseBeans();
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/ejb/tests/GenerateDDTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/ejb/tests/GenerateDDTest.java
index 0ec91cc..c117ef6 100644
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/ejb/tests/GenerateDDTest.java
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/ejb/tests/GenerateDDTest.java
@@ -21,7 +21,6 @@
 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.jee.model.tests.AbstractTest;
 import org.eclipse.jst.jee.model.tests.SynchronousModelChangedListener;
 import org.eclipse.jst.jee.project.facet.ICreateDeploymentFilesDataModelProperties;
 import org.eclipse.jst.jee.project.facet.IEJBCreateDeploymentFilesDataModelProperties;
@@ -78,8 +77,6 @@
 		dataModel.setProperty(ICreateDeploymentFilesDataModelProperties.TARGET_PROJECT, project);
 		dataModel.getDefaultOperation().execute(new NullProgressMonitor(), null);
 
-		AbstractTest.saveFile(file, EJB_JAR_CONTENT);
-
 		listener.waitForEvents();
 		fixture.removeListener(listener);
 		assertEquals(new Integer(1), new Integer(listener.getReceivedEvents().size()));
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/AllAnnotationModelTests.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/AllAnnotationModelTests.java
index 65bdf48..4c77f98 100644
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/AllAnnotationModelTests.java
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/AllAnnotationModelTests.java
@@ -19,9 +19,11 @@
 import org.eclipse.jst.jee.model.ejb.tests.EJB3MergedModelProviderFactoryTest;
 import org.eclipse.jst.jee.model.ejb.tests.EJB3MergedModelProviderTest;
 import org.eclipse.jst.jee.model.ejb.tests.EJBAnnotationReaderWithClientTest;
+import org.eclipse.jst.jee.model.ejb.tests.Ejb3ModelProviderTest;
 import org.eclipse.jst.jee.model.ejb.tests.EjbAnnotationFactoryTest;
 import org.eclipse.jst.jee.model.ejb.tests.EjbAnnotationReaderTest;
 import org.eclipse.jst.jee.model.ejb.tests.EjbReferenceTest;
+import org.eclipse.jst.jee.model.ejb.tests.GenerateDDTest;
 import org.eclipse.jst.jee.model.ejb.tests.LifecycleAnnotationsTest;
 import org.eclipse.jst.jee.model.ejb.tests.NotifyCloseProjectTest;
 import org.eclipse.jst.jee.model.ejb.tests.ResourceReferenceTest;
@@ -64,9 +66,10 @@
 			suite.addTest(DeleteWebProjectTest.suite());
 			suite.addTest(NotifyCloseProjectTest.suite());
 			suite.addTest(Web25MergedModelProviderTest.suite());
-//			suite.addTest(GenerateDDTest.suite());
+			suite.addTest(GenerateDDTest.suite());
 			suite.addTest(EJB3MergedModelProviderFactoryTest.suite());
 			suite.addTest(EJB3MergedModelProviderTest.suite());
+			suite.addTest(Ejb3ModelProviderTest.suite());
 			return suite;
 		} catch (Exception e) {
 			HeadlessTestsPlugin.getDefault().getLog().log(
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/TestUtils.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/TestUtils.java
index 1b3036e..428c6ba 100644
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/TestUtils.java
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/TestUtils.java
@@ -119,6 +119,8 @@
 	}
 
 	public static SessionBean getSessionBean(EJBJar jar, String name) {
+		if (jar.getEnterpriseBeans() == null)
+			return null;
 		for (Iterator iter = jar.getEnterpriseBeans().getSessionBeans().iterator(); iter.hasNext();) {
 			SessionBean bean = (SessionBean) iter.next();
 			if (name.equals(bean.getEjbName())) {
@@ -129,6 +131,8 @@
 	}
 
 	public static MessageDrivenBean getMessageDrivenBean(EJBJar jar, String name) {
+		if (jar.getEnterpriseBeans() == null)
+			return null;
 		for (Iterator iter = jar.getEnterpriseBeans().getMessageDrivenBeans().iterator(); iter.hasNext();) {
 			MessageDrivenBean bean = (MessageDrivenBean) iter.next();
 			if (name.equals(bean.getEjbName())) {