[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