[224185] Binary Java EE 5 IArchive support
diff --git a/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/internal/jca/operations/ConnectorComponentImportOperation.java b/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/internal/jca/operations/ConnectorComponentImportOperation.java
index 7f54a91..4d15d36 100644
--- a/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/internal/jca/operations/ConnectorComponentImportOperation.java
+++ b/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/internal/jca/operations/ConnectorComponentImportOperation.java
@@ -24,6 +24,8 @@
 import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.SaveStrategy;
 import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentImportDataModelProperties;
+import org.eclipse.jst.j2ee.internal.archive.ComponentArchiveSaveAdapter;
+import org.eclipse.jst.j2ee.internal.archive.ConnectorComponentArchiveSaveAdapter;
 import org.eclipse.jst.j2ee.internal.archive.operations.ConnectorComponentSaveStrategyImpl;
 import org.eclipse.jst.j2ee.internal.archive.operations.J2EEArtifactImportOperation;
 import org.eclipse.jst.jee.archive.IArchive;
@@ -108,6 +110,9 @@
 	protected SaveStrategy createSaveStrategy(IVirtualComponent component) {
 		ConnectorComponentSaveStrategyImpl saveStrat = new ConnectorComponentSaveStrategyImpl(component);
 		return saveStrat;
-
+	}
+	
+	protected ComponentArchiveSaveAdapter getArchiveSaveAdapter(IVirtualComponent virtualComponent){
+		return new ConnectorComponentArchiveSaveAdapter(virtualComponent);
 	}
 }
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/EARComponentArchiveSaveAdapter.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/EARComponentArchiveSaveAdapter.java
index c47c6f5..7a5ff80 100644
--- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/EARComponentArchiveSaveAdapter.java
+++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/EARComponentArchiveSaveAdapter.java
@@ -10,67 +10,12 @@
  *******************************************************************************/
 package org.eclipse.jst.j2ee.internal.archive;
 
-import java.util.List;
-
-import org.eclipse.core.runtime.SubProgressMonitor;
-import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
-import org.eclipse.jst.j2ee.datamodel.properties.IEARComponentImportDataModelProperties;
-import org.eclipse.jst.jee.archive.IArchiveResource;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 
 public class EARComponentArchiveSaveAdapter extends ComponentArchiveSaveAdapter {
 
-
 	public EARComponentArchiveSaveAdapter(IVirtualComponent component) {
 		super(component);
 	}
 
-	public void setDataModel(IDataModel dataModel) {
-		super.setDataModel(dataModel);
-	}
-
-	
-	protected SubProgressMonitor subMonitor() {
-		return new SubProgressMonitor(progressMonitor, 10);
-	}
-
-	public void setMonitor(org.eclipse.core.runtime.IProgressMonitor newMonitor) {
-		progressMonitor = newMonitor;
-	}
-
-	protected boolean shouldSave(IArchiveResource aRes) {
-	
-		// TODO: go back and revisit it in the future.
-		
-		/*if (aRes.getType() == IArchiveResource.ARCHIVE_TYPE) {
-		//	return getFilter().shouldSave(aFile.getURI(), getArchive());
-		}*/
-		return super.shouldSave(aRes);
-	}
-
-	protected boolean shouldLinkAsComponentRef(Archive archive) {
-		if (null != dataModel) {
-			List list = (List) dataModel.getProperty(IEARComponentImportDataModelProperties.HANDLED_PROJECT_MODELS_LIST);
-			for (int i = 0; i < list.size(); i++) {
-				if (archive == ((IDataModel) list.get(i)).getProperty(IEARComponentImportDataModelProperties.FILE)) {
-					return false;
-				}
-			}
-		}
-		return true;
-	}
-
-	/*protected boolean shouldSave(String uri) {
-		if (overwriteHandler != null) {
-			if (overwriteHandler.isOverwriteNone())
-				return false;
-			return ((super.shouldSave(uri)) && (overwriteHandler.isOverwriteAll() || overwriteHandler.isOverwriteResources() || overwriteHandler.shouldOverwrite(uri)));
-		}
-		return true;
-	}*/
-
-
-
-
 }
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactImportOperation.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactImportOperation.java
index d4006aa..f78aae0 100644
--- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactImportOperation.java
+++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/J2EEArtifactImportOperation.java
@@ -24,7 +24,6 @@
 import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentImportDataModelProperties;
 import org.eclipse.jst.j2ee.internal.archive.ArchiveWrapper;
 import org.eclipse.jst.j2ee.internal.archive.ComponentArchiveSaveAdapter;
-import org.eclipse.jst.j2ee.internal.archive.ConnectorComponentArchiveSaveAdapter;
 import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathUpdater;
 import org.eclipse.jst.j2ee.internal.project.ProjectSupportResourceHandler;
 import org.eclipse.jst.jee.archive.ArchiveOptions;
@@ -120,7 +119,7 @@
 	}
 	
 	protected ComponentArchiveSaveAdapter getArchiveSaveAdapter(IVirtualComponent virtualComponent){
-		return new ConnectorComponentArchiveSaveAdapter(virtualComponent);
+		return new ComponentArchiveSaveAdapter(virtualComponent);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEDeployableFactory.java b/plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEDeployableFactory.java
index 9fec645..06f68e3 100644
--- a/plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEDeployableFactory.java
+++ b/plugins/org.eclipse.jst.j2ee/j2eeplugin/org/eclipse/jst/j2ee/internal/deployables/J2EEDeployableFactory.java
@@ -21,20 +21,15 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jem.util.logger.proxy.Logger;
-import org.eclipse.jst.j2ee.application.Application;
-import org.eclipse.jst.j2ee.application.Module;
-import org.eclipse.jst.j2ee.client.ApplicationClient;
-import org.eclipse.jst.j2ee.componentcore.util.EARArtifactEdit;
-import org.eclipse.jst.j2ee.ejb.EJBJar;
 import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
+import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
+import org.eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper;
 import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
-import org.eclipse.jst.j2ee.jca.Connector;
-import org.eclipse.jst.j2ee.webapplication.WebApp;
-import org.eclipse.wst.common.componentcore.ArtifactEdit;
+import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
+import org.eclipse.jst.jee.util.internal.JavaEEQuickPeek;
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.ModuleCoreNature;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
-import org.eclipse.wst.common.componentcore.internal.util.ComponentUtilities;
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
@@ -108,79 +103,59 @@
 	
 	protected IModule[] createBinaryModules(IVirtualComponent component) {
 		List projectModules = new ArrayList();
-		EARArtifactEdit earEdit = null;
-		try {
-			Application app = null;
-			IVirtualReference[] references = component.getReferences();
-			for (int i=0; i<references.length; i++) {
-				IVirtualComponent moduleComponent = references[i].getReferencedComponent();
-				// Is referenced component a J2EE binary module archive or binary utility project?
-				if (moduleComponent.isBinary()) {
-					// create an ear edit, app only if the module is binary prevents exceptions when there
-					// is no deployment descriptor in many cases see bug 174711
-					if(earEdit == null){
-						earEdit = EARArtifactEdit.getEARArtifactEditForRead(component.getProject());
-						app = earEdit.getApplication();
-					}
-					// Check if module URI exists on EAR DD for binary j2ee archive
-					Module j2eeModule = app.getFirstModule(references[i].getArchiveName());
-					// If it is not a j2ee module and the component project is the ear, it is just an archive
-					// and we can ignore as it will be processed by the EAR deployable.members() method
-					if (j2eeModule == null && (moduleComponent.getProject() == component.getProject()))
-						continue;
-					
-					String moduleVersion = null;
-					String moduleType = null;
-					// Handle the binary J2EE module case
-					if(j2eeModule != null){
-						ArtifactEdit moduleEdit = null;
-						try {
-							if (j2eeModule.isEjbModule()) {
-								moduleEdit = ComponentUtilities.getArtifactEditForRead(moduleComponent, J2EEProjectUtilities.EJB);
-								EJBJar ejbJar = (EJBJar) moduleEdit.getContentModelRoot();
-								moduleType = J2EEProjectUtilities.EJB;
-								moduleVersion = ejbJar.getVersion();
-							}
-							else if (j2eeModule.isWebModule()) {
-								moduleEdit = ComponentUtilities.getArtifactEditForRead(moduleComponent, J2EEProjectUtilities.DYNAMIC_WEB);
-								WebApp webApp = (WebApp) moduleEdit.getContentModelRoot();
-								moduleType = J2EEProjectUtilities.DYNAMIC_WEB;
-								moduleVersion = webApp.getVersion();
-							}
-							else if (j2eeModule.isConnectorModule()) {
-								moduleEdit = ComponentUtilities.getArtifactEditForRead(moduleComponent, J2EEProjectUtilities.JCA);
-								Connector connector = (Connector) moduleEdit.getContentModelRoot();
-								moduleType = J2EEProjectUtilities.JCA;
-								moduleVersion = connector.getVersion();
-							}
-							else if (j2eeModule.isJavaModule()) {
-								moduleEdit = ComponentUtilities.getArtifactEditForRead(moduleComponent, J2EEProjectUtilities.APPLICATION_CLIENT);
-								ApplicationClient appClient = (ApplicationClient) moduleEdit.getContentModelRoot();
-								moduleType = J2EEProjectUtilities.APPLICATION_CLIENT;
-								moduleVersion = appClient.getVersion();
-							}
-						} finally {
-							if (moduleEdit!=null)
-								moduleEdit.dispose();
-						}
-					} else { // Handle the binary utility component outside the EAR case.
-						moduleVersion = J2EEProjectUtilities.UTILITY;
-						moduleType = J2EEVersionConstants.VERSION_1_0_TEXT;
-					}
-					
-					IModule nestedModule = createModule(moduleComponent.getDeployedName(), moduleComponent.getDeployedName(), moduleType, moduleVersion, moduleComponent.getProject());
-					if (nestedModule!=null) {
-						J2EEFlexProjDeployable moduleDelegate = new J2EEFlexProjDeployable(moduleComponent.getProject(), moduleComponent);
-						moduleDelegates.put(nestedModule, moduleDelegate);
-						projectModules.add(nestedModule);
-						moduleDelegate.getURI(nestedModule);
-					}
+		IVirtualReference[] references = component.getReferences();
+		for (int i = 0; i < references.length; i++) {
+			IVirtualComponent moduleComponent = references[i].getReferencedComponent();
+			// Is referenced component a J2EE binary module archive or binary
+			// utility project?
+			if (moduleComponent.isBinary()) {
+
+				JavaEEQuickPeek qp = JavaEEBinaryComponentHelper.getJavaEEQuickPeek(moduleComponent);
+				// If it is not a j2ee module and the component project is the
+				// ear, it is just an archive
+				// and we can ignore as it will be processed by the EAR
+				// deployable.members() method
+				if (qp.getType() == JavaEEQuickPeek.UNKNOWN) {
+					continue;
+				}
+
+				String moduleType = null;
+				String moduleVersion = null;
+
+				switch (qp.getType()) {
+				case JavaEEQuickPeek.APPLICATION_CLIENT_TYPE:
+					moduleType = J2EEProjectUtilities.APPLICATION_CLIENT;
+					break;
+				case JavaEEQuickPeek.WEB_TYPE:
+					moduleType = JavaEEProjectUtilities.DYNAMIC_WEB;
+					break;
+				case JavaEEQuickPeek.EJB_TYPE:
+					moduleType = JavaEEProjectUtilities.EJB;
+					break;
+				case JavaEEQuickPeek.CONNECTOR_TYPE:
+					moduleType = JavaEEProjectUtilities.JCA;
+					break;
+				case JavaEEQuickPeek.APPLICATION_TYPE:
+					moduleType = JavaEEProjectUtilities.ENTERPRISE_APPLICATION;
+					break;
+				default:
+					moduleType = JavaEEProjectUtilities.UTILITY;
+					moduleVersion = J2EEVersionConstants.VERSION_1_0_TEXT;
+				}
+
+				int version = qp.getVersion();
+				moduleVersion = J2EEVersionUtil.convertVersionIntToString(version);
+
+				IModule nestedModule = createModule(moduleComponent.getDeployedName(), moduleComponent.getDeployedName(), moduleType, moduleVersion, moduleComponent.getProject());
+				if (nestedModule != null) {
+					J2EEFlexProjDeployable moduleDelegate = new J2EEFlexProjDeployable(moduleComponent.getProject(), moduleComponent);
+					moduleDelegates.put(nestedModule, moduleDelegate);
+					projectModules.add(nestedModule);
+					moduleDelegate.getURI(nestedModule);
 				}
 			}
-		} finally {
-			if (earEdit!=null)
-				earEdit.dispose();
 		}
+
 		return (IModule[]) projectModules.toArray(new IModule[projectModules.size()]);
 	}