[119311] Create Default Session Bean option
diff --git a/plugins/org.eclipse.jst.jee.ejb/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.jee.ejb/META-INF/MANIFEST.MF
index cde7e40..eb5bf4b 100644
--- a/plugins/org.eclipse.jst.jee.ejb/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.jee.ejb/META-INF/MANIFEST.MF
@@ -22,7 +22,8 @@
  org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,3.0.0)",
  org.eclipse.jst.j2ee.ejb;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.common.emf;bundle-version="[1.1.0,2.0.0)",
- org.eclipse.wst.common.emfworkbench.integration;bundle-version="[1.1.0,2.0.0)"
+ org.eclipse.wst.common.emfworkbench.integration;bundle-version="[1.1.0,2.0.0)",
+ org.eclipse.wst.validation;bundle-version="[1.2.0,2.0.0)"
 Eclipse-LazyStart: true
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor.0
diff --git a/plugins/org.eclipse.jst.jee.ejb/ejb/org/eclipse/jst/jee/ejb/validation/internal/Messages.java b/plugins/org.eclipse.jst.jee.ejb/ejb/org/eclipse/jst/jee/ejb/validation/internal/Messages.java
new file mode 100644
index 0000000..6e41d72
--- /dev/null
+++ b/plugins/org.eclipse.jst.jee.ejb/ejb/org/eclipse/jst/jee/ejb/validation/internal/Messages.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jee.ejb.validation.internal;
+
+import org.eclipse.osgi.util.NLS;
+
+
+public class Messages extends NLS {
+
+	private static final String BUNDLE_NAME = "org.eclipse.jst.jee.ejb.validation.internal.messages"; //$NON-NLS-1$
+	
+
+	private Messages() {
+		// Do not instantiate
+	}
+	
+	public static String NO_BEANS_ERROR;
+	public static String NO_BEANS_ERROR_LOCATION;
+
+	static {
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+}
diff --git a/plugins/org.eclipse.jst.jee.ejb/ejb/org/eclipse/jst/jee/ejb/validation/internal/UIEJB3Validator.java b/plugins/org.eclipse.jst.jee.ejb/ejb/org/eclipse/jst/jee/ejb/validation/internal/UIEJB3Validator.java
new file mode 100644
index 0000000..a145ae6
--- /dev/null
+++ b/plugins/org.eclipse.jst.jee.ejb/ejb/org/eclipse/jst/jee/ejb/validation/internal/UIEJB3Validator.java
@@ -0,0 +1,81 @@
+package org.eclipse.jst.jee.ejb.validation.internal;
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jst.j2ee.model.ModelProviderManager;
+import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
+import org.eclipse.jst.javaee.ejb.EJBJar;
+import org.eclipse.jst.javaee.ejb.EnterpriseBeans;
+import org.eclipse.jst.jee.ejb.Activator;
+import org.eclipse.wst.validation.AbstractValidator;
+import org.eclipse.wst.validation.ValidationEvent;
+import org.eclipse.wst.validation.ValidationResult;
+import org.eclipse.wst.validation.ValidationState;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.ValidatorMessage;
+import org.eclipse.wst.validation.internal.MarkerManager;
+import org.eclipse.wst.validation.internal.ValManager;
+import org.eclipse.wst.validation.internal.ValOperation;
+
+@SuppressWarnings("restriction")
+public class UIEJB3Validator extends AbstractValidator {
+
+	public static String ID = "org.eclipse.jst.jee.ejb3.validator"; //$NON-NLS-1$
+	public static String MARKER_ID_NO_BEANS = "org.eclipse.jst.jee.ejb3.nobeans"; //$NON-NLS-1$
+		
+	@Override
+	public void validationStarting(IProject project, ValidationState state, IProgressMonitor monitor){		
+		Validator v = ValManager.getDefault().getValidator(UIEJB3Validator.ID, project);
+		if (project != null) 
+			ValManager.getDefault().validate(v, new ValOperation(), project, IResourceDelta.NO_CHANGE, new NullProgressMonitor(), null);
+	}	
+	
+	@Override
+	public ValidationResult validate(IResource resource, int kind, ValidationState state, IProgressMonitor monitor) {
+		if ((resource == null) || !IProject.class.isInstance(resource))  
+			return null;
+		IProject proj = (IProject)resource;
+		try {
+			MarkerManager.getDefault().clearMarker(proj, getParent());
+		} catch (CoreException e) {
+			Activator.logError(e);
+		}
+		if (!JavaEEProjectUtilities.isEJBProject(proj)) 
+			return null;
+		EJBJar ejbJar = (EJBJar)ModelProviderManager.getModelProvider(proj).getModelObject();
+		EnterpriseBeans ebs = ejbJar.getEnterpriseBeans();
+		if (ebs.getSessionBeans().size() + ebs.getMessageDrivenBeans().size() == 0) {
+			ValidationResult vRes = new ValidationResult();
+			ValidatorMessage vMsg = createValidatorMessage(Messages.NO_BEANS_ERROR, proj, IMarker.SEVERITY_ERROR, IMarker.PRIORITY_HIGH); 
+			vRes.add(vMsg);
+			return vRes;
+		}		
+		return null;
+	}	
+	
+	@Override
+	public ValidationResult validate(ValidationEvent event, ValidationState state, IProgressMonitor monitor){
+		IResource res = event.getResource();
+		return validate(res, 0, state, monitor);
+	}	
+	
+	private static ValidatorMessage createValidatorMessage(String txt, 
+			  IResource res,
+			  int severity,
+			  int priority) {
+		ValidatorMessage msg = ValidatorMessage.create(txt, res);
+		msg.setAttribute(IMarker.SEVERITY, severity);
+		msg.setAttribute(IMarker.PRIORITY, priority);
+		msg.setAttribute(IMarker.LOCATION, MessageFormat.format(Messages.NO_BEANS_ERROR_LOCATION, new Object[] { res.getName() }));
+		msg.setType(MARKER_ID_NO_BEANS); 
+		return msg;
+	}	
+	
+}
diff --git a/plugins/org.eclipse.jst.jee.ejb/ejb/org/eclipse/jst/jee/ejb/validation/internal/messages.properties b/plugins/org.eclipse.jst.jee.ejb/ejb/org/eclipse/jst/jee/ejb/validation/internal/messages.properties
new file mode 100644
index 0000000..8cc1f5d
--- /dev/null
+++ b/plugins/org.eclipse.jst.jee.ejb/ejb/org/eclipse/jst/jee/ejb/validation/internal/messages.properties
@@ -0,0 +1,2 @@
+NO_BEANS_ERROR=An EJB module must contain one or more enterprise beans.
+NO_BEANS_ERROR_LOCATION={0} project
diff --git a/plugins/org.eclipse.jst.jee.ejb/plugin.properties b/plugins/org.eclipse.jst.jee.ejb/plugin.properties
index cfcd596..9b1a896 100644
--- a/plugins/org.eclipse.jst.jee.ejb/plugin.properties
+++ b/plugins/org.eclipse.jst.jee.ejb/plugin.properties
@@ -10,4 +10,7 @@
 ###############################################################################
 # properties file for org.eclipse.jst.jee.ejb
 Bundle-Name.0 = JEE Ejb Plug-in
-Bundle-Vendor.0 = Eclipse.org
\ No newline at end of file
+Bundle-Vendor.0 = Eclipse.org
+org.eclipse.jst.jee.ejb3.nobeans.marker.type = EJB Problem
+org.eclipse.jst.jee.ejb3.validator.name = EJB 3.x Validator
+org.eclipse.jst.jee.ejb3.nobeansmessage.label = No enterprise bean in the EJB project
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.jee.ejb/plugin.xml b/plugins/org.eclipse.jst.jee.ejb/plugin.xml
index 9b9a806..5a71d0f 100644
--- a/plugins/org.eclipse.jst.jee.ejb/plugin.xml
+++ b/plugins/org.eclipse.jst.jee.ejb/plugin.xml
@@ -13,5 +13,38 @@
 
       		<facet id="jst.ejb" versions="3.0,3.1"/>
       	</provider>
-   </extension>
+   </extension>      
+   <extension
+         id="org.eclipse.jst.jee.ejb3.validator"
+         name="%org.eclipse.jst.jee.ejb3.validator.name"
+         point="org.eclipse.wst.validation.validatorV2">
+      <validator
+            build="true"
+            class="org.eclipse.jst.jee.ejb.validation.internal.UIEJB3Validator"
+            manual="true"
+            markerId="org.eclipse.jst.jee.ejb3.nobeans">
+         <include>
+            <rules>
+               <facet
+                     id="jst.ejb"
+                     version="3.0,3.1">
+               </facet>     
+            </rules>
+         </include>
+         <messageCategory
+               id="org.eclipse.jst.jee.ejb3.nobeansmessage"
+               label="%org.eclipse.jst.jee.ejb3.nobeansmessage.label"
+               severity="error">
+         </messageCategory>
+      </validator>
+   </extension>  
+	<extension
+            id="org.eclipse.jst.jee.ejb3.nobeans"
+            name="%org.eclipse.jst.jee.ejb3.nobeans.marker.type"
+            point="org.eclipse.core.resources.markers">
+         <super
+               type="org.eclipse.wst.validation.problemmarker">
+         </super>
+	</extension>
+  
 </plugin>