[234399] Archive problems when mixing CommonArchive and IArchive
diff --git a/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/jca/modulecore/util/ConnectorArtifactEdit.java b/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/jca/modulecore/util/ConnectorArtifactEdit.java index 9dc880c..30f8442 100644 --- a/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/jca/modulecore/util/ConnectorArtifactEdit.java +++ b/plugins/org.eclipse.jst.j2ee.jca/rarproject/org/eclipse/jst/j2ee/jca/modulecore/util/ConnectorArtifactEdit.java
@@ -31,8 +31,6 @@ import org.eclipse.jst.j2ee.jca.ConnectorResource; import org.eclipse.jst.j2ee.jca.JcaFactory; import org.eclipse.jst.j2ee.model.IModelProvider; -import org.eclipse.jst.jee.archive.ArchiveOptions; -import org.eclipse.jst.jee.archive.IArchive; import org.eclipse.wst.common.componentcore.ArtifactEdit; import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.ModuleCoreNature; @@ -390,18 +388,7 @@ public Archive asArchive(boolean includeSource, boolean includeClasspathComponents) throws OpenFailureException { if (isBinary()) { JavaEEBinaryComponentHelper helper = (JavaEEBinaryComponentHelper)getBinaryComponentHelper(); - IArchive iArchive = null; - try{ - iArchive = helper.accessArchive(); - IPath path = (IPath)iArchive.getArchiveOptions().getOption(ArchiveOptions.ARCHIVE_PATH); - org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions options = new org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions(); - options.setIsReadOnly(true); - options.setRendererType(org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions.SAX); - options.setUseJavaReflection(false); - return CommonarchiveFactory.eINSTANCE.openRARFile(options, path.toOSString()); - } finally { - helper.releaseArchive(iArchive); - } + return helper.accessLegacyArchive(); } else { ConnectorComponentLoadStrategyImpl loader = new ConnectorComponentLoadStrategyImpl(getComponent(), includeClasspathComponents); loader.setExportSource(includeSource);
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/componentcore/util/WebArtifactEdit.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/componentcore/util/WebArtifactEdit.java index 9622a10..f3f19e6 100644 --- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/componentcore/util/WebArtifactEdit.java +++ b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/componentcore/util/WebArtifactEdit.java
@@ -39,8 +39,6 @@ import org.eclipse.jst.j2ee.webapplication.WebapplicationFactory; import org.eclipse.jst.j2ee.webapplication.WelcomeFile; import org.eclipse.jst.j2ee.webapplication.WelcomeFileList; -import org.eclipse.jst.jee.archive.ArchiveOptions; -import org.eclipse.jst.jee.archive.IArchive; import org.eclipse.wst.common.componentcore.ArtifactEdit; import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.ModuleCoreNature; @@ -634,18 +632,7 @@ verifyOperationSupported(); if (isBinary()) { JavaEEBinaryComponentHelper helper = (JavaEEBinaryComponentHelper)getBinaryComponentHelper(); - IArchive iArchive = null; - try{ - iArchive = helper.accessArchive(); - IPath path = (IPath)iArchive.getArchiveOptions().getOption(ArchiveOptions.ARCHIVE_PATH); - org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions options = new org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions(); - options.setIsReadOnly(true); - options.setRendererType(org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions.SAX); - options.setUseJavaReflection(false); - return CommonarchiveFactory.eINSTANCE.openWARFile(options, path.toOSString()); - } finally { - helper.releaseArchive(iArchive); - } + return helper.accessLegacyArchive(); } else { WebComponentLoadStrategyImpl loader = new WebComponentLoadStrategyImpl(getComponent(), includeClasspathComponents); loader.setExportSource(includeSource);
diff --git a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/componentcore/util/AppClientArtifactEdit.java b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/componentcore/util/AppClientArtifactEdit.java index 28c627d..aa9d2f2 100644 --- a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/componentcore/util/AppClientArtifactEdit.java +++ b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/applicationclient/componentcore/util/AppClientArtifactEdit.java
@@ -35,8 +35,6 @@ import org.eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper; import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities; import org.eclipse.jst.j2ee.model.IModelProvider; -import org.eclipse.jst.jee.archive.ArchiveOptions; -import org.eclipse.jst.jee.archive.IArchive; import org.eclipse.wst.common.componentcore.ArtifactEdit; import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.ModuleCoreNature; @@ -388,18 +386,7 @@ public Archive asArchive(boolean includeSource, boolean includeClasspathComponents) throws OpenFailureException{ if (isBinary()) { JavaEEBinaryComponentHelper helper = (JavaEEBinaryComponentHelper)getBinaryComponentHelper(); - IArchive iArchive = null; - try{ - iArchive = helper.accessArchive(); - IPath path = (IPath)iArchive.getArchiveOptions().getOption(ArchiveOptions.ARCHIVE_PATH); - org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions options = new org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions(); - options.setIsReadOnly(true); - options.setRendererType(org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions.SAX); - options.setUseJavaReflection(false); - return CommonarchiveFactory.eINSTANCE.openApplicationClientFile(options, path.toOSString()); - } finally { - helper.releaseArchive(iArchive); - } + return helper.accessLegacyArchive(); } else { AppClientComponentLoadStrategyImpl loader = new AppClientComponentLoadStrategyImpl(getComponent()); loader.setExportSource(includeSource);
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/ArchiveWrapper.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/ArchiveWrapper.java index 54ed138..9d10f37 100644 --- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/ArchiveWrapper.java +++ b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/ArchiveWrapper.java
@@ -118,10 +118,10 @@ public void close() { try { - if (commonArchive != null) { + if (commonArchive != null && commonArchive.isOpen()) { commonArchive.close(); } - if (archive != null) { + if (archive != null && archive.isOpen()) { JavaEEArchiveUtilities.INSTANCE.closeArchive(archive); } } catch (RuntimeException e) {
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 257e486..5831ab6 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,14 @@ *******************************************************************************/ package org.eclipse.jst.j2ee.internal.componentcore; +import java.io.File; 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.exception.SaveFailureException; 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; @@ -69,6 +71,7 @@ } public void close() { + helper.aboutToClose(); synchronized (this) { count--; if (count > 0) { @@ -80,6 +83,7 @@ public void forceClose(){ count = 0; + helper.aboutToClose(); super.close(); } @@ -100,13 +104,20 @@ throw new IOException(e.getMessage()); } } - + + @Override + protected void cleanupAfterTempSave(String uri, File original, File destinationFile) throws SaveFailureException { + helper.preCleanupAfterTempSave(uri, original, destinationFile); + super.cleanupAfterTempSave(uri, original, destinationFile); + helper.postCleanupAfterTempSave(uri, original, destinationFile); + } } protected ArchiveTypeDiscriminator getDiscriminator() { return Discriminator.getInstance(); } + public AppClientBinaryComponentHelper(IVirtualComponent component) { super(component); }
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 3a34a35..234ddbb 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,14 @@ *******************************************************************************/ package org.eclipse.jst.j2ee.internal.componentcore; +import java.io.File; 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.exception.SaveFailureException; 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; @@ -69,6 +71,7 @@ } public void close() { + helper.aboutToClose(); synchronized (this) { count--; if (count > 0) { @@ -80,6 +83,7 @@ public void forceClose(){ count = 0; + helper.aboutToClose(); super.close(); } @@ -100,6 +104,13 @@ throw new IOException(e.getMessage()); } } + + @Override + protected void cleanupAfterTempSave(String uri, File original, File destinationFile) throws SaveFailureException { + helper.preCleanupAfterTempSave(uri, original, destinationFile); + super.cleanupAfterTempSave(uri, original, destinationFile); + helper.postCleanupAfterTempSave(uri, original, destinationFile); + } } 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 9a07a24..ad70d64 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
@@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.jst.j2ee.internal.componentcore; +import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -64,7 +65,7 @@ return helper; } - private IReferenceCountedArchive archive = null; + IReferenceCountedArchive archive = null; protected EnterpriseBinaryComponentHelper(IVirtualComponent component) { super(component); @@ -197,6 +198,17 @@ protected static void physicallyClose(IReferenceCountedArchive archive) { ((BinaryZipFileLoadStrategy)archive.getLoadStrategy()).physicallyClose(); } + + protected void aboutToClose() { + //default is to do nothing + } + + protected void preCleanupAfterTempSave(String uri, File original, File destinationFile) { + //default is to do nothing + } + protected void postCleanupAfterTempSave(String uri, File original, File destinationFile) { + //default is to do nothing + } private static class BinaryZipFileLoadStrategy extends ZipFileLoadStrategyImpl { @@ -209,6 +221,11 @@ public BinaryZipFileLoadStrategy(java.io.File file) throws IOException { super(file); } + + public void close() { + physicallyOpen = false; + super.close(); + } public boolean isPhysicallyOpen(){ return physicallyOpen;
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 4fdfdf0..a7f5110 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,12 +10,14 @@ *******************************************************************************/ package org.eclipse.jst.j2ee.internal.componentcore; +import java.io.File; 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.exception.SaveFailureException; 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; @@ -69,6 +71,7 @@ } public void close() { + helper.aboutToClose(); synchronized (this) { count--; if (count > 0) { @@ -80,6 +83,7 @@ public void forceClose(){ count = 0; + helper.aboutToClose(); super.close(); } @@ -99,7 +103,14 @@ } catch (OpenFailureException e) { throw new IOException(e.getMessage()); } - } + } + + @Override + protected void cleanupAfterTempSave(String uri, File original, File destinationFile) throws SaveFailureException { + helper.preCleanupAfterTempSave(uri, original, destinationFile); + super.cleanupAfterTempSave(uri, original, destinationFile); + helper.postCleanupAfterTempSave(uri, original, destinationFile); + } } protected ArchiveTypeDiscriminator getDiscriminator() {
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentHelper.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentHelper.java index 0c770ba..5eaf259 100644 --- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentHelper.java +++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentHelper.java
@@ -1,5 +1,6 @@ package org.eclipse.jst.j2ee.internal.componentcore; +import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.Hashtable; @@ -14,8 +15,10 @@ import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive; import org.eclipse.jst.j2ee.internal.J2EEConstants; import org.eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities; +import org.eclipse.jst.j2ee.internal.componentcore.EnterpriseBinaryComponentHelper.IReferenceCountedArchive; import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin; import org.eclipse.jst.javaee.applicationclient.ApplicationClient; import org.eclipse.jst.javaee.applicationclient.ApplicationclientFactory; @@ -40,6 +43,7 @@ public class JavaEEBinaryComponentHelper extends BinaryComponentHelper { private IArchive archive; + private EnterpriseBinaryComponentHelper legacyBinaryHelper; private int localArchiveAccessCount = 0; @@ -155,6 +159,16 @@ } return archive; } + + protected void safeReleaseArchive(IArchive archive){ + int count = 0; + synchronized(this){ + count = localArchiveAccessCount; + } + if(count > 0){ + releaseArchive(archive); + } + } public void releaseArchive(IArchive archive) { if (archive != this.archive) { @@ -169,10 +183,113 @@ } } + private int preSwapAccessCount = 0; + protected void preFileSwap(){ + int count = 0; + synchronized (this) { + preSwapAccessCount = localArchiveAccessCount; + count = preSwapAccessCount; + } + while (count > 0){ + count --; + releaseArchive(archive); + } + } + + protected void postFileSwap() { + int count = 0; + synchronized (this) { + count = preSwapAccessCount; + preSwapAccessCount = 0; + } + while(count > 0){ + count --; + accessArchive(); + } + } + + public Archive accessLegacyArchive() { + if(legacyBinaryHelper == null){ + JavaEEQuickPeek qp = getJavaEEQuickPeek(getComponent()); + IPath ddPath = null; + switch (qp.getType()) { + case JavaEEQuickPeek.APPLICATION_CLIENT_TYPE: + legacyBinaryHelper = new AppClientBinaryComponentHelper(getComponent()){ + protected void aboutToClose() { + safeReleaseArchive(JavaEEBinaryComponentHelper.this.archive); + } + protected void preCleanupAfterTempSave(String uri, File original, File destinationFile) { + preFileSwap(); + } + protected void postCleanupAfterTempSave(String uri, File original, File destinationFile) { + postFileSwap(); + } + }; + break; + case JavaEEQuickPeek.EJB_TYPE: + legacyBinaryHelper = new EJBBinaryComponentHelper(getComponent()){ + protected void aboutToClose() { + safeReleaseArchive(JavaEEBinaryComponentHelper.this.archive); + } + protected void preCleanupAfterTempSave(String uri, File original, File destinationFile) { + preFileSwap(); + } + protected void postCleanupAfterTempSave(String uri, File original, File destinationFile) { + postFileSwap(); + } + }; + break; + case JavaEEQuickPeek.WEB_TYPE: + legacyBinaryHelper = new WebBinaryComponentHelper(getComponent()){ + protected void aboutToClose() { + safeReleaseArchive(JavaEEBinaryComponentHelper.this.archive); + } + protected void preCleanupAfterTempSave(String uri, File original, File destinationFile) { + preFileSwap(); + } + protected void postCleanupAfterTempSave(String uri, File original, File destinationFile) { + postFileSwap(); + } + }; + break; + case JavaEEQuickPeek.CONNECTOR_TYPE: + legacyBinaryHelper = new JCABinaryComponentHelper(getComponent()){ + protected void aboutToClose() { + safeReleaseArchive(JavaEEBinaryComponentHelper.this.archive); + } + protected void preCleanupAfterTempSave(String uri, File original, File destinationFile) { + preFileSwap(); + } + protected void postCleanupAfterTempSave(String uri, File original, File destinationFile) { + postFileSwap(); + } + }; + break; + default: //utility jar + legacyBinaryHelper = new UtilityBinaryComponentHelper(getComponent()){ + protected void aboutToClose() { + safeReleaseArchive(JavaEEBinaryComponentHelper.this.archive); + } + protected void preCleanupAfterTempSave(String uri, File original, File destinationFile) { + preFileSwap(); + } + protected void postCleanupAfterTempSave(String uri, File original, File destinationFile) { + postFileSwap(); + } + }; + break; + } + } + accessArchive(); + Archive legacyArchive = legacyBinaryHelper.accessArchive(); + return legacyArchive; + } + @Override public void dispose() { super.dispose(); int count = 0; + int legacyCount = 0; synchronized (this) { count = localArchiveAccessCount; } @@ -185,6 +302,12 @@ } } } + if(legacyBinaryHelper != null){ + IReferenceCountedArchive legacyArchive = legacyBinaryHelper.archive; + if(legacyArchive != null){ + legacyArchive.forceClose(); + } + } } protected IArchive getArchive() {
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 a5ea3dd..d400135 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
@@ -10,11 +10,13 @@ *******************************************************************************/ package org.eclipse.jst.j2ee.internal.componentcore; +import java.io.File; 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; +import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.SaveFailureException; import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveTypeDiscriminator; import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveTypeDiscriminatorImpl; import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.ArchiveImpl; @@ -73,6 +75,7 @@ } public void close() { + helper.aboutToClose(); synchronized (this) { count--; if (count > 0) { @@ -84,6 +87,7 @@ public void forceClose(){ count = 0; + helper.aboutToClose(); super.close(); } @@ -104,6 +108,13 @@ throw new IOException(e.getMessage()); } } + + @Override + protected void cleanupAfterTempSave(String uri, File original, File destinationFile) throws SaveFailureException { + helper.preCleanupAfterTempSave(uri, original, destinationFile); + super.cleanupAfterTempSave(uri, original, destinationFile); + helper.postCleanupAfterTempSave(uri, original, destinationFile); + } } 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 a5b1296..9b7591e 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,12 +10,14 @@ *******************************************************************************/ package org.eclipse.jst.j2ee.internal.componentcore; +import java.io.File; 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.exception.SaveFailureException; 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; @@ -69,6 +71,7 @@ } public void close() { + helper.aboutToClose(); synchronized (this) { count--; if (count > 0) { @@ -80,6 +83,7 @@ public void forceClose(){ count = 0; + helper.aboutToClose(); super.close(); } @@ -100,6 +104,13 @@ throw new IOException(e.getMessage()); } } + + @Override + protected void cleanupAfterTempSave(String uri, File original, File destinationFile) throws SaveFailureException { + helper.preCleanupAfterTempSave(uri, original, destinationFile); + super.cleanupAfterTempSave(uri, original, destinationFile); + helper.postCleanupAfterTempSave(uri, original, destinationFile); + } } protected ArchiveTypeDiscriminator getDiscriminator() {