[173140] fix reopen for bnary components
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/AppClientBinaryComponentHelper.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/AppClientBinaryComponentHelper.java
index 0503d0b..574b3ca 100644
--- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/AppClientBinaryComponentHelper.java
+++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/AppClientBinaryComponentHelper.java
@@ -10,12 +10,16 @@
  *******************************************************************************/
 package org.eclipse.jst.j2ee.internal.componentcore;
 
+import java.io.IOException;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.ApplicationClientFile;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveTypeDiscriminator;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.ApplicationClientFileImpl;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.AppClient12ImportStrategyImpl;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.LoadStrategy;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 
 public class AppClientBinaryComponentHelper extends EnterpriseBinaryComponentHelper {
@@ -73,6 +77,25 @@
 			count = 0;
 			super.close();
 		}
+		
+		private EnterpriseBinaryComponentHelper helper = null;
+		
+		public EnterpriseBinaryComponentHelper getEnterpriseBinaryComponentHelper() {
+			return helper;
+		}
+
+		public void setEnterpriseBinaryComponentHelper(EnterpriseBinaryComponentHelper helper) {
+			this.helper = helper;
+		}
+		
+		protected LoadStrategy createLoadStrategyForReopen(Archive parent) throws IOException {
+			try {
+				return createBinaryLoadStrategy(getEnterpriseBinaryComponentHelper());
+			} catch (OpenFailureException e) {
+				throw new IOException(e.getMessage());
+			}
+		}
+
 	}
 
 	protected ArchiveTypeDiscriminator getDiscriminator() {
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/EJBBinaryComponentHelper.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/EJBBinaryComponentHelper.java
index e582af5..25e293a 100644
--- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/EJBBinaryComponentHelper.java
+++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/EJBBinaryComponentHelper.java
@@ -10,12 +10,16 @@
  *******************************************************************************/
 package org.eclipse.jst.j2ee.internal.componentcore;
 
+import java.io.IOException;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveTypeDiscriminator;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.EJBJarFileImpl;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.EjbJar11ImportStrategyImpl;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.LoadStrategy;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 
 public class EJBBinaryComponentHelper extends EnterpriseBinaryComponentHelper {
@@ -73,6 +77,24 @@
 			count = 0;
 			super.close();
 		}
+		
+		private EnterpriseBinaryComponentHelper helper = null;
+		
+		public EnterpriseBinaryComponentHelper getEnterpriseBinaryComponentHelper() {
+			return helper;
+		}
+
+		public void setEnterpriseBinaryComponentHelper(EnterpriseBinaryComponentHelper helper) {
+			this.helper = helper;
+		}
+		
+		protected LoadStrategy createLoadStrategyForReopen(Archive parent) throws IOException {
+			try {
+				return createBinaryLoadStrategy(getEnterpriseBinaryComponentHelper());
+			} catch (OpenFailureException e) {
+				throw new IOException(e.getMessage());
+			}
+		}
 	}
 
 	protected ArchiveTypeDiscriminator getDiscriminator() {
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/EnterpriseBinaryComponentHelper.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/EnterpriseBinaryComponentHelper.java
index 0982711..0ac7369 100644
--- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/EnterpriseBinaryComponentHelper.java
+++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/EnterpriseBinaryComponentHelper.java
@@ -327,17 +327,8 @@
 		public synchronized IReferenceCountedArchive openArchive(EnterpriseBinaryComponentHelper helper) throws OpenFailureException {
 			ArchiveOptions options = helper.getArchiveOptions();
 			String archiveURI = helper.getArchiveURI();
-			String filename = archiveURI.replace('/', java.io.File.separatorChar);
-			java.io.File file = new java.io.File(filename);
-			if (!file.exists()) {
-				throw new OpenFailureException(CommonArchiveResourceHandler.getString(CommonArchiveResourceHandler.file_not_found_EXC_, (new Object[] { archiveURI, file.getAbsolutePath() }))); 
-			}
-			try {
-				BinaryZipFileLoadStrategy strategy = new BinaryZipFileLoadStrategy(file);
-				options.setLoadStrategy(strategy);
-			} catch (IOException ex) {
-				throw new OpenFailureException(CommonArchiveResourceHandler.getString(CommonArchiveResourceHandler.could_not_open_EXC_, (new Object[] { archiveURI })), ex); 
-			}
+			
+			options.setLoadStrategy(createBinaryLoadStrategy(helper));
 
 			Archive anArchive = CommonarchiveFactory.eINSTANCE.primOpenArchive(options, archiveURI);
 
@@ -348,12 +339,28 @@
 				throw new OpenFailureException(discriminator.getUnableToOpenMessage());
 			}
 			IReferenceCountedArchive specificArchive = (IReferenceCountedArchive) discriminator.openArchive(anArchive);
+			specificArchive.setEnterpriseBinaryComponentHelper(helper);
 			specificArchive.initializeAfterOpen();
 			specificArchive.access();
 			componentsToArchives.put(helper.getComponent(), specificArchive);
 			return specificArchive;
 		}
 	}
+	
+	protected static BinaryZipFileLoadStrategy createBinaryLoadStrategy(EnterpriseBinaryComponentHelper helper) throws OpenFailureException {
+		String archiveURI = helper.getArchiveURI();
+		String filename = archiveURI.replace('/', java.io.File.separatorChar);
+		java.io.File file = new java.io.File(filename);
+		if (!file.exists()) {
+			throw new OpenFailureException(CommonArchiveResourceHandler.getString(CommonArchiveResourceHandler.file_not_found_EXC_, (new Object[] { archiveURI, file.getAbsolutePath() }))); 
+		}
+		try {
+			BinaryZipFileLoadStrategy strategy = new BinaryZipFileLoadStrategy(file);
+			return strategy;
+		} catch (IOException ex) {
+			throw new OpenFailureException(CommonArchiveResourceHandler.getString(CommonArchiveResourceHandler.could_not_open_EXC_, (new Object[] { archiveURI })), ex); 
+		}
+	}
 
 	protected interface IReferenceCountedArchive extends Archive {
 
@@ -366,6 +373,10 @@
 
 		public void forceClose();
 		
+		public void setEnterpriseBinaryComponentHelper(EnterpriseBinaryComponentHelper helper);
+		
+		public EnterpriseBinaryComponentHelper getEnterpriseBinaryComponentHelper();
+		
 	}
 
 }
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JCABinaryComponentHelper.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JCABinaryComponentHelper.java
index 8cffb3e..d11299a 100644
--- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JCABinaryComponentHelper.java
+++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JCABinaryComponentHelper.java
@@ -10,11 +10,15 @@
  *******************************************************************************/
 package org.eclipse.jst.j2ee.internal.componentcore;
 
+import java.io.IOException;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.RARFile;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveTypeDiscriminator;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.RARFileImpl;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.LoadStrategy;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.RarImportStrategyImpl;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 
@@ -73,6 +77,24 @@
 			count = 0;
 			super.close();
 		}
+		
+		private EnterpriseBinaryComponentHelper helper = null;
+		
+		public EnterpriseBinaryComponentHelper getEnterpriseBinaryComponentHelper() {
+			return helper;
+		}
+
+		public void setEnterpriseBinaryComponentHelper(EnterpriseBinaryComponentHelper helper) {
+			this.helper = helper;
+		}
+		
+		protected LoadStrategy createLoadStrategyForReopen(Archive parent) throws IOException {
+			try {
+				return createBinaryLoadStrategy(getEnterpriseBinaryComponentHelper());
+			} catch (OpenFailureException e) {
+				throw new IOException(e.getMessage());
+			}
+		}		
 	}
 
 	protected ArchiveTypeDiscriminator getDiscriminator() {
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/UtilityBinaryComponentHelper.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/UtilityBinaryComponentHelper.java
index 6d1cf30..968c976 100644
--- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/UtilityBinaryComponentHelper.java
+++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/UtilityBinaryComponentHelper.java
@@ -1,5 +1,7 @@
 package org.eclipse.jst.j2ee.internal.componentcore;
 
+import java.io.IOException;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
@@ -7,6 +9,7 @@
 import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveTypeDiscriminatorImpl;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.ArchiveImpl;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.ImportStrategy;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.LoadStrategy;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 
 public class UtilityBinaryComponentHelper extends EnterpriseBinaryComponentHelper {
@@ -68,6 +71,24 @@
 			count = 0;
 			super.close();
 		}
+		
+		private EnterpriseBinaryComponentHelper helper = null;
+		
+		public EnterpriseBinaryComponentHelper getEnterpriseBinaryComponentHelper() {
+			return helper;
+		}
+
+		public void setEnterpriseBinaryComponentHelper(EnterpriseBinaryComponentHelper helper) {
+			this.helper = helper;
+		}
+		
+		protected LoadStrategy createLoadStrategyForReopen(Archive parent) throws IOException {
+			try {
+				return createBinaryLoadStrategy(getEnterpriseBinaryComponentHelper());
+			} catch (OpenFailureException e) {
+				throw new IOException(e.getMessage());
+			}
+		}
 	}
 
 	protected ArchiveTypeDiscriminator getDiscriminator() {
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/WebBinaryComponentHelper.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/WebBinaryComponentHelper.java
index 438121c..29eb071 100644
--- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/WebBinaryComponentHelper.java
+++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/WebBinaryComponentHelper.java
@@ -10,11 +10,15 @@
  *******************************************************************************/
 package org.eclipse.jst.j2ee.internal.componentcore;
 
+import java.io.IOException;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveTypeDiscriminator;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.WARFileImpl;
+import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.LoadStrategy;
 import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.War22ImportStrategyImpl;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 
@@ -73,6 +77,24 @@
 			count = 0;
 			super.close();
 		}
+		
+		private EnterpriseBinaryComponentHelper helper = null;
+		
+		public EnterpriseBinaryComponentHelper getEnterpriseBinaryComponentHelper() {
+			return helper;
+		}
+
+		public void setEnterpriseBinaryComponentHelper(EnterpriseBinaryComponentHelper helper) {
+			this.helper = helper;
+		}
+		
+		protected LoadStrategy createLoadStrategyForReopen(Archive parent) throws IOException {
+			try {
+				return createBinaryLoadStrategy(getEnterpriseBinaryComponentHelper());
+			} catch (OpenFailureException e) {
+				throw new IOException(e.getMessage());
+			}
+		}
 	}
 
 	protected ArchiveTypeDiscriminator getDiscriminator() {