[265862] ClassCastExceptions for EAR with 5.0 facet and 1.4 DD
diff --git a/plugins/org.eclipse.jst.j2ee.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.j2ee.ui/META-INF/MANIFEST.MF
index d5ff631..60c1f4a 100644
--- a/plugins/org.eclipse.jst.j2ee.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.j2ee.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name.0
 Bundle-SymbolicName: org.eclipse.jst.j2ee.ui; singleton:=true
-Bundle-Version: 1.1.206.qualifier
+Bundle-Version: 1.1.210.qualifier
 Bundle-Activator: org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin
 Bundle-Vendor: %Bundle-Vendor.0
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/AvailableJ2EEComponentsForEARContentProvider.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/AvailableJ2EEComponentsForEARContentProvider.java
index 3eed372..38638c9 100644
--- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/AvailableJ2EEComponentsForEARContentProvider.java
+++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/AvailableJ2EEComponentsForEARContentProvider.java
@@ -35,6 +35,7 @@
 import org.eclipse.jst.j2ee.model.IEARModelProvider;
 import org.eclipse.jst.j2ee.model.IModelProvider;
 import org.eclipse.jst.j2ee.model.ModelProviderManager;
+import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
 import org.eclipse.jst.javaee.application.Application;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.wst.common.componentcore.ComponentCore;
@@ -94,13 +95,17 @@
 					}
 				}else if(null != earComponent && J2EEProjectUtilities.isEARProject(project)){
 					//find the ArchiveComponent
-					if(component.equals( earComponent )){
+					if (component.equals( earComponent )) {
 						if (isEE5) {
-							Application app = (Application)ModelProviderManager.getModelProvider(project).getModelObject();
-							if (libDir == null)
-								libDir = app.getLibraryDirectory();
-							if (libDir == null)
-								libDir = J2EEConstants.EAR_DEFAULT_LIB_DIR;
+							String earDDVersion = JavaEEProjectUtilities.getJ2EEDDProjectVersion(project);
+							boolean isDDVersion5 = earDDVersion.equals(J2EEVersionConstants.VERSION_5_0_TEXT) ? true : false;
+							if (isDDVersion5) {
+								Application app = (Application)ModelProviderManager.getModelProvider(project).getModelObject();
+								if (libDir == null)
+									libDir = app.getLibraryDirectory();
+								if (libDir == null)
+									libDir = J2EEConstants.EAR_DEFAULT_LIB_DIR;
+							}
 						}
 						IVirtualReference[] newrefs = component.getReferences();
 						for( int k=0; k< newrefs.length; k++ ){
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathContainer.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathContainer.java
index b5cf536..23dc97b 100644
--- a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathContainer.java
+++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathContainer.java
@@ -485,7 +485,7 @@
 	private String getEARLibDir(EARVirtualComponent earComponent) {
 		// check if the EAR component's version is 5 or greater
 		IProject project = earComponent.getProject();
-		if (!JavaEEProjectUtilities.isJEEComponent(earComponent)) return null;
+		if (!JavaEEProjectUtilities.isJEEComponent(earComponent, JavaEEProjectUtilities.DD_VERSION)) return null;
 		
 		// retrieve the model provider
 		IModelProvider modelProvider = ModelProviderManager.getModelProvider(project);
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/project/JavaEEProjectUtilities.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/project/JavaEEProjectUtilities.java
index c3b2a82..252027c 100644
--- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/project/JavaEEProjectUtilities.java
+++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/project/JavaEEProjectUtilities.java
@@ -38,7 +38,9 @@
 
 public class JavaEEProjectUtilities extends ProjectUtilities implements IJ2EEFacetConstants {
 	protected static final IVirtualReference[] NO_REFERENCES = new IVirtualReference[0];
-
+	public static final int FACET_VERSION = 0;
+	public static final int DD_VERSION = 1;
+	
 	public JavaEEProjectUtilities() {
 		// TODO Auto-generated constructor stub
 	}
@@ -374,6 +376,93 @@
 	}
 	
 	/**
+	 * Given a component returns whether the component has
+	 * Java EE version greater than or equal to 5
+	 * 
+	 * @param component   - IVirtualComponent
+	 * @param versionType - flag to specify whether to use the facet version
+	 *                      or the DD XML file version
+	 * @return true if the component is Java EE version 5 or greater, false otherwise
+	 */
+	public static boolean isJEEComponent(IVirtualComponent component, int versionType){
+		if (component.isBinary()) {
+			JavaEEQuickPeek qp = JavaEEBinaryComponentHelper.getJavaEEQuickPeek(component);
+			int javaEEVersion = qp.getJavaEEVersion();
+			return javaEEVersion >= J2EEConstants.JEE_5_0_ID;
+		} 
+		
+		IProject project = component.getProject();
+		if (versionType == FACET_VERSION) {
+			IProjectFacetVersion facetVersion = getProjectFacetVersion(project, ENTERPRISE_APPLICATION);
+			if(facetVersion != null){
+				if(facetVersion == IJ2EEFacetConstants.ENTERPRISE_APPLICATION_12 ||
+				   facetVersion == IJ2EEFacetConstants.ENTERPRISE_APPLICATION_13 ||
+				   facetVersion == IJ2EEFacetConstants.ENTERPRISE_APPLICATION_14){
+					return false;
+				}
+				return true;
+			}
+			
+			facetVersion = getProjectFacetVersion(project, APPLICATION_CLIENT);
+			if(facetVersion != null){
+				if(facetVersion == IJ2EEFacetConstants.APPLICATION_CLIENT_12 ||
+				   facetVersion == IJ2EEFacetConstants.APPLICATION_CLIENT_13 ||
+				   facetVersion == IJ2EEFacetConstants.APPLICATION_CLIENT_14){
+					return false;
+				}
+				return true;
+			}
+			
+			facetVersion = getProjectFacetVersion(project, EJB);
+			if(facetVersion != null){
+				if(facetVersion == IJ2EEFacetConstants.EJB_11 ||
+				   facetVersion == IJ2EEFacetConstants.EJB_20 ||
+				   facetVersion == IJ2EEFacetConstants.EJB_21){
+					return false;
+				}
+				return true;
+			}
+			
+			facetVersion = getProjectFacetVersion(project, DYNAMIC_WEB);
+			if(facetVersion != null){
+				if(facetVersion == IJ2EEFacetConstants.DYNAMIC_WEB_22 ||
+				   facetVersion == IJ2EEFacetConstants.DYNAMIC_WEB_23 ||
+				   facetVersion == IJ2EEFacetConstants.DYNAMIC_WEB_24){
+					return false;
+				}
+				return true;
+			}
+			
+			facetVersion = getProjectFacetVersion(project, JCA);
+			if(facetVersion != null){
+				if(facetVersion == IJ2EEFacetConstants.JCA_10 ||
+				   facetVersion == IJ2EEFacetConstants.JCA_15 ){
+					return false;
+				}
+				return true;
+			}
+			
+			return false;
+		}
+		else {
+			String ddVersion = getJ2EEDDProjectVersion(project);
+			int j2eeLevel = 0;
+			if (isEARProject(project))
+				j2eeLevel = J2EEVersionUtil.convertVersionStringToInt(ddVersion);
+			else if (isDynamicWebProject(project))
+				j2eeLevel = J2EEVersionUtil.convertWebVersionStringToJ2EEVersionID(ddVersion);
+			else if (isEJBProject(project))
+				j2eeLevel = J2EEVersionUtil.convertEJBVersionStringToJ2EEVersionID(ddVersion);
+			else if (isJCAProject(project))
+				j2eeLevel = J2EEVersionUtil.convertConnectorVersionStringToJ2EEVersionID(ddVersion);
+			else if (isApplicationClientProject(project))
+				j2eeLevel = J2EEVersionUtil.convertAppClientVersionStringToJ2EEVersionID(ddVersion);
+			
+			return j2eeLevel >= J2EEVersionConstants.JEE_5_0_ID;
+		}
+	}
+	
+	/**
 	 * Given a component returns whether the component has Java EE version less than 5
 	 * 
 	 * @param component