diff options
Diffstat (limited to 'plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/ComponentLoadStrategyImpl.java')
-rw-r--r-- | plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/ComponentLoadStrategyImpl.java | 692 |
1 files changed, 0 insertions, 692 deletions
diff --git a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/ComponentLoadStrategyImpl.java b/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/ComponentLoadStrategyImpl.java deleted file mode 100644 index 462461d91..000000000 --- a/plugins/org.eclipse.jst.j2ee/archiveops/org/eclipse/jst/j2ee/internal/archive/operations/ComponentLoadStrategyImpl.java +++ /dev/null @@ -1,692 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2003, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.j2ee.internal.archive.operations; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.zip.ZipEntry; -import java.util.zip.ZipException; -import java.util.zip.ZipFile; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase; -import org.eclipse.jem.util.logger.proxy.Logger; -import org.eclipse.jst.j2ee.classpathdep.IClasspathDependencyConstants; -import org.eclipse.jst.j2ee.commonarchivecore.internal.File; -import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.ResourceLoadException; -import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.FileIterator; -import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.FileIteratorImpl; -import org.eclipse.jst.j2ee.commonarchivecore.internal.impl.ContainerImpl; -import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.LoadStrategyImpl; -import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil; -import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent; -import org.eclipse.jst.j2ee.internal.J2EEConstants; -import org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyManifestUtil; -import org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyVirtualComponent; -import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities; -import org.eclipse.jst.j2ee.internal.project.ProjectSupportResourceHandler; -import org.eclipse.wst.common.componentcore.ArtifactEdit; -import org.eclipse.wst.common.componentcore.UnresolveableURIException; -import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel; -import org.eclipse.wst.common.componentcore.internal.ComponentResource; -import org.eclipse.wst.common.componentcore.internal.DependencyType; -import org.eclipse.wst.common.componentcore.internal.StructureEdit; -import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent; -import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants; -import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; -import org.eclipse.wst.common.componentcore.resources.IVirtualContainer; -import org.eclipse.wst.common.componentcore.resources.IVirtualFile; -import org.eclipse.wst.common.componentcore.resources.IVirtualFolder; -import org.eclipse.wst.common.componentcore.resources.IVirtualReference; -import org.eclipse.wst.common.componentcore.resources.IVirtualResource; - -public abstract class ComponentLoadStrategyImpl extends LoadStrategyImpl { - - protected static final String DOT_PROJECT = ".project"; //$NON-NLS-1$ - protected static final String DOT_CLASSPATH = ".classpath"; //$NON-NLS-1$ - protected static final String DOT_SETTINGS = ".settings"; //$NON-NLS-1$ - protected static final String DOT_CVS_IGORE = ".cvsignore"; //$NON-NLS-1$ - - protected IVirtualComponent vComponent; - protected boolean exportSource; - protected ArtifactEdit artifactEdit; - private List zipFiles = new ArrayList(); - private List javaClasspathURIs = new ArrayList(); - protected boolean includeClasspathComponents = true; - - protected class FilesHolder { - - private Map urisToFiles = new HashMap(); - private Map urisToResources = new HashMap(); - private Map resourcesToURI = new HashMap(); - private Map urisToDiskFiles; - private Map urisToZipEntry = new HashMap(); - - public void removeIFile(IFile file) { - String uri = (String) resourcesToURI.get(file); - remove(uri); - } - - public void remove(String uri) { - urisToFiles.remove(uri); - Object resource = urisToResources.remove(uri); - if (resource != null) { - resourcesToURI.remove(resource); - } - if (urisToDiskFiles != null) { - urisToDiskFiles.remove(uri); - } - } - - public void addDirectory(File directory) { - String uri = directory.getURI(); - urisToFiles.put(uri, directory); - } - - public void addFile(File file) { - String uri = file.getURI(); - urisToFiles.put(uri, file); - } - - public void addFile(File file, java.io.File externalDiskFile) { - String uri = file.getURI(); - urisToFiles.put(uri, file); - if (null == urisToDiskFiles) { - urisToDiskFiles = new HashMap(); - } - urisToDiskFiles.put(uri, externalDiskFile); - } - - public void addFile(File file, IResource resource) { - String uri = file.getURI(); - urisToFiles.put(uri, file); - urisToResources.put(uri, resource); - } - - public InputStream getInputStream(String uri) throws IOException, FileNotFoundException { - java.io.File diskFile = null; - - if (urisToDiskFiles != null && urisToDiskFiles.containsKey(uri)) { - diskFile = (java.io.File) urisToDiskFiles.get(uri); - } else if (urisToResources != null && urisToResources.containsKey(uri)) { - IResource resource = (IResource) urisToResources.get(uri); - diskFile = new java.io.File(resource.getLocation().toOSString()); - } else { - Map fileURIMap = (Map) urisToZipEntry.get(uri); - Iterator it = fileURIMap.keySet().iterator(); - - String sourceFileUri = ""; //$NON-NLS-1$ - ZipFile zipFile = null; - - // there is only one key, pair - while (it.hasNext()) { - sourceFileUri = (String) it.next(); - zipFile = (ZipFile) fileURIMap.get(sourceFileUri); - } - ZipEntry entry = zipFile.getEntry(sourceFileUri); - InputStream in = zipFile.getInputStream(entry); - return in; - } - return new FileInputStream(diskFile); - } - - public List getFiles() { - return new ArrayList(urisToFiles.values()); - } - - public boolean contains(String uri) { - return urisToFiles.containsKey(uri); - } - - public void addEntry(ZipEntry entry, ZipFile zipFile, IPath runtimePath) { - String uri = runtimePath == null ? null : runtimePath.toString(); - String fileURI = ""; //$NON-NLS-1$ - if (uri != null) { - if (!uri.equals("/")) //$NON-NLS-1$ - fileURI = uri + entry.getName(); - else - fileURI = entry.getName(); - } else { - fileURI = entry.getName(); - } - - File file = createFile(fileURI); - - Map fileURIMap = new HashMap(); - fileURIMap.put(entry.getName(), zipFile); - - urisToZipEntry.put(file.getURI(), fileURIMap); - urisToFiles.put(file.getURI(), file); - } - } - - protected FilesHolder filesHolder; - - private Exception exception; //TEMP TODO REMOVE - - private IVirtualFile manifestFile = null; - - public ComponentLoadStrategyImpl(IVirtualComponent vComponent) { - this(vComponent, true); - } - - public ComponentLoadStrategyImpl(IVirtualComponent vComponent, boolean includeClasspathComponents) { - this.vComponent = vComponent; - filesHolder = new FilesHolder(); - exception = new Exception(); - this.includeClasspathComponents = includeClasspathComponents; - if (includeClasspathComponents) { - this.manifestFile = vComponent.getRootFolder().getFile(new Path(J2EEConstants.MANIFEST_URI)); - saveJavaClasspathReferences(); - } - } - - public boolean contains(String uri) { - IVirtualFolder rootFolder = vComponent.getRootFolder(); - return rootFolder.getFile(new Path(uri)).exists(); - } - - protected void initializeResourceSet() { - resourceSet = WorkbenchResourceHelperBase.getResourceSet(vComponent.getProject()); - } - - protected boolean primContains(String uri) { - return false; - } - - public List getFiles() { - aggregateSourceFiles(); - aggregateClassFiles(); - addUtilities(); - return filesHolder.getFiles(); - } - - /** - * Adds library cp entries that point to class folders and have been tagged with the publish/export attribute. - */ - protected void addMappedClassFolders(final IPath targetRuntimePath) { - // retrieve all mapped class folders - if (vComponent instanceof J2EEModuleVirtualComponent) { - try { - final J2EEModuleVirtualComponent j2eeComponent = (J2EEModuleVirtualComponent) vComponent; - final IVirtualReference[] cpRefs = j2eeComponent.getJavaClasspathReferences(); - for (int j = 0; j < cpRefs.length; j++) { - final IVirtualReference ref = cpRefs[j]; - final IPath runtimePath = ref.getRuntimePath(); - // only process mappings with the specified runtime path - if (ref.getReferencedComponent() instanceof ClasspathDependencyVirtualComponent - && runtimePath.equals(targetRuntimePath)) { - final ClasspathDependencyVirtualComponent comp = (ClasspathDependencyVirtualComponent) ref.getReferencedComponent(); - if (comp.isClassFolder()) { - final IContainer classFolder = comp.getClassFolder(); - if (classFolder != null && classFolder.exists()) { - aggregateOutputFiles(new IResource[]{classFolder}, runtimePath.makeRelative(), classFolder.getProjectRelativePath().segmentCount()); - } - } - } - } - } catch (CoreException e) { - Logger.getLogger().logError(e); - } - } - } - - protected void saveJavaClasspathReferences() { - if (vComponent instanceof J2EEModuleVirtualComponent) { - final J2EEModuleVirtualComponent j2eeComp = (J2EEModuleVirtualComponent) vComponent; - final IVirtualReference[] refs = j2eeComp.getJavaClasspathReferences(); - if (refs == null) { - return; - } - for (int i = 0; i < refs.length; i++) { - if (refs[i].getRuntimePath().equals(IClasspathDependencyConstants.RUNTIME_MAPPING_INTO_CONTAINER_PATH)) { - javaClasspathURIs.add(refs[i].getArchiveName()); - } - } - } - } - - protected void addUtilities() { - IVirtualReference[] components = vComponent.getReferences(); - for (int i = 0; i < components.length; i++) { - IVirtualReference reference = components[i]; - IVirtualComponent referencedComponent = reference.getReferencedComponent(); - if (referencedComponent.isBinary() && reference.getDependencyType() == DependencyType.CONSUMES) { - java.io.File diskFile = ((VirtualArchiveComponent) referencedComponent).getUnderlyingDiskFile(); - ZipFile zipFile; - IPath path = reference.getRuntimePath(); - try { - zipFile = new ZipFile(diskFile); - zipFiles.add(zipFile); - Enumeration enumeration = zipFile.entries(); - while (enumeration.hasMoreElements()) { - ZipEntry entry = (ZipEntry) enumeration.nextElement(); - filesHolder.addEntry(entry, zipFile, path); - } - } catch (ZipException e) { - Logger.getLogger().logError(e); - } catch (IOException e) { - Logger.getLogger().logError(e); - } - } - } - } - - /** - * This is a cache of the IResource roots for all java source folders and is used by - * {@link #inJavaSrc(IVirtualResource)}. - */ - private IResource[] sourceRoots = null; - - protected void aggregateSourceFiles() { - try { - IVirtualFolder rootFolder = vComponent.getRootFolder(); - IVirtualResource[] members = rootFolder.members(); - IPackageFragmentRoot[] srcPkgs = J2EEProjectUtilities.getSourceContainers(vComponent.getProject()); - sourceRoots = new IResource[srcPkgs.length]; - for (int i = 0; i < srcPkgs.length; i++) { - sourceRoots[i] = srcPkgs[i].getCorrespondingResource(); - } - inJavaSrc = false; - aggregateFiles(members); - } catch (CoreException e) { - Logger.getLogger().logError(e); - } - } - - protected void aggregateClassFiles() { - StructureEdit se = null; - try { - IPackageFragmentRoot[] sourceRoots = J2EEProjectUtilities.getSourceContainers(vComponent.getProject()); - se = StructureEdit.getStructureEditForRead(vComponent.getProject()); - for (int i = 0; i < sourceRoots.length; i++) { - IPath outputPath = sourceRoots[i].getRawClasspathEntry().getOutputLocation(); - if (outputPath == null) { - IProject project = vComponent.getProject(); - if (project.hasNature(JavaCore.NATURE_ID)) { - IJavaProject javaProject = JavaCore.create(project); - outputPath = javaProject.getOutputLocation(); - } - } - if (outputPath != null) { - IContainer javaOutputContainer = outputPath.segmentCount() > 1 ? (IContainer) ResourcesPlugin.getWorkspace().getRoot().getFolder(outputPath) : (IContainer) ResourcesPlugin.getWorkspace().getRoot().getProject(outputPath.lastSegment()); - IPath runtimePath = null; - try { - ComponentResource[] componentResources = se.findResourcesBySourcePath(sourceRoots[i].getResource().getProjectRelativePath()); - if (componentResources.length > 0) { - IPath tmpRuntimePath = componentResources[0].getRuntimePath(); - IPath tmpSourcePath = componentResources[0].getSourcePath(); - if (!tmpRuntimePath.equals(tmpSourcePath)) { - while (tmpSourcePath.segmentCount() > 0 && tmpRuntimePath.segmentCount() > 0 && tmpRuntimePath.lastSegment().equals(tmpSourcePath.lastSegment())) { - tmpRuntimePath = tmpRuntimePath.removeLastSegments(1); - tmpSourcePath = tmpSourcePath.removeLastSegments(1); - } - if (tmpRuntimePath.segmentCount() != 0) { - runtimePath = tmpRuntimePath.makeRelative(); - } - } - } - } catch (UnresolveableURIException e) { - Logger.getLogger().logError(e); - } - if (null == runtimePath) { - runtimePath = new Path(""); //$NON-NLS-1$ - } - aggregateOutputFiles(new IResource[]{javaOutputContainer}, runtimePath, javaOutputContainer.getProjectRelativePath().segmentCount()); - } - } - } catch (CoreException e) { - Logger.getLogger().logError(e); - } finally { - if (se != null) { - se.dispose(); - } - } - } - - protected boolean aggregateOutputFiles(IResource[] resources, final IPath runtimePathPrefix, int outputFolderSegmentCount) throws CoreException { - boolean fileAdded = false; - for (int i = 0; i < resources.length; i++) { - File cFile = null; - if (!resources[i].exists()) { - continue; - } - // We have to avoid duplicates between the source and output folders (non-java - // resources) - IPath runtimePath = runtimePathPrefix.append(resources[i].getProjectRelativePath().removeFirstSegments(outputFolderSegmentCount)); - String uri = runtimePath == null ? null : runtimePath.toString(); - if (uri == null) - continue; - if (resources[i].getType() == IResource.FILE) { - if (!shouldInclude(uri)) - continue; - cFile = createFile(uri); - cFile.setLastModified(getLastModified(resources[i])); - filesHolder.addFile(cFile, resources[i]); - fileAdded = true; - } else if (shouldInclude((IContainer) resources[i])) { - IResource[] nestedResources = ((IContainer) resources[i]).members(); - aggregateOutputFiles(nestedResources, runtimePathPrefix, outputFolderSegmentCount); - if(!filesHolder.contains(uri)){ - if (!shouldInclude(uri)) - continue; - cFile = createDirectory(uri); - cFile.setLastModified(getLastModified(resources[i])); - filesHolder.addDirectory(cFile); - fileAdded = true; - } - } - } - return fileAdded; - } - - /** - * This is used to track whether {@link #aggregateFiles(IVirtualResource[])} is currently within a Java Source folder. - */ - private boolean inJavaSrc = false; - - protected boolean aggregateFiles(IVirtualResource[] virtualResources) throws CoreException { - boolean fileAdded = false; - for (int i = 0; i < virtualResources.length; i++) { - File cFile = null; - if (!virtualResources[i].exists()) { - continue; - } - // We have to avoid duplicates between the source and output folders (non-java - // resources) - IPath runtimePath = virtualResources[i].getRuntimePath(); - String uri = runtimePath == null ? null : runtimePath.toString(); - if (uri == null) - continue; - if (uri.charAt(0) == IPath.SEPARATOR) { - uri = uri.substring(1); - } - if (filesHolder.contains(uri)) - continue; - - if (virtualResources[i].getType() == IVirtualResource.FILE) { - if (!shouldInclude(uri)) - continue; - IResource resource = virtualResources[i].getUnderlyingResource(); - // want to ignore derived resources nested within Java src directories; this covers the case where - // a user has nested a Java output directory within a Java src directory (note: should ideally be - // respecting Java src path exclusion filters) - if (inJavaSrc && resource.isDerived()) { - continue; - } - cFile = createFile(uri); - cFile.setLastModified(getLastModified(resource)); - filesHolder.addFile(cFile, resource); - fileAdded = true; - } else if (shouldInclude((IVirtualContainer) virtualResources[i])) { - boolean inJavaSrcAtThisLevel = inJavaSrc; - try { - if (!inJavaSrc) { - // if not already inside a Java src dir, check again - inJavaSrc = inJavaSrc(virtualResources[i]); - } - IVirtualResource[] nestedVirtualResources = ((IVirtualContainer) virtualResources[i]).members(); - aggregateFiles(nestedVirtualResources); - if(!filesHolder.contains(uri)){ - if (!shouldInclude(uri)) - continue; - IResource resource = virtualResources[i].getUnderlyingResource(); - if (inJavaSrc && resource.isDerived()) { - continue; - } - cFile = createDirectory(uri); - cFile.setLastModified(getLastModified(resource)); - filesHolder.addDirectory(cFile); - fileAdded = true; - } - } finally { - inJavaSrc = inJavaSrcAtThisLevel; - } - } - } - return fileAdded; - } - - /** - * Determines if the specified IVirtualResource maps to a IResource that is contained within a Java src root. - * @param virtualResource IVirtualResource to check. - * @param sourceRoots Current Java src roots. - * @return True if contained in a Java src root, false otherwise. - */ - protected boolean inJavaSrc(final IVirtualResource virtualResource) { - if (sourceRoots.length == 0) { - return false; - } - // all mapped resources must be associated with Java src for the resource to be considered in Java src - final IResource[] resources = virtualResource.getUnderlyingResources(); - boolean inJavaSrc = false; - for (int i = 0; i < resources.length; i++) { - inJavaSrc = false; - for (int j = 0; j < sourceRoots.length; j++) { - if (sourceRoots[j].getFullPath().isPrefixOf(resources[i].getFullPath())) { - inJavaSrc = true; - break; - } - } - // if this one was not in Java src, can break - if (!inJavaSrc) { - break; - } - } - - return inJavaSrc; - } - - protected long getLastModified(IResource aResource) { - return aResource.getLocation().toFile().lastModified(); - } - - public void setExportSource(boolean newExportSource) { - exportSource = newExportSource; - } - - public boolean isExportSource() { - return exportSource; - } - - protected boolean shouldInclude(IContainer aContainer) { - return true; - } - - protected boolean shouldInclude(IVirtualContainer vContainer) { - IContainer iContainer = (IContainer) vContainer.getUnderlyingResource(); - return shouldInclude(iContainer); - } - - protected boolean shouldInclude(String uri) { - if (uri.length() == 0 || DOT_PROJECT.equals(uri) || DOT_CLASSPATH.equals(uri) || uri.endsWith(DOT_CVS_IGORE) || uri.startsWith(DOT_SETTINGS)){ - return false; - } - return isExportSource() || !isSource(uri); - } - - protected boolean isSource(String uri) { - if (uri == null) - return false; - return uri.endsWith(ArchiveUtil.DOT_JAVA) || uri.endsWith(ArchiveUtil.DOT_SQLJ); - } - - protected void addExternalFile(String uri, java.io.File externalDiskFile) { - File aFile = createFile(uri); - filesHolder.addFile(aFile, externalDiskFile); - } - - public InputStream getInputStream(String uri) throws IOException, FileNotFoundException { - // If the MANIFEST.MF of a module component is being requested and that module component references - // Java build path-based components, need to dynamically update the manifest classpath to reflect the resolved - // contributions from the build path - if (includeClasspathComponents && - uri.equals(J2EEConstants.MANIFEST_URI) && !javaClasspathURIs.isEmpty() && - manifestFile != null && manifestFile.getUnderlyingFile() != null && - manifestFile.getUnderlyingFile().exists()) { - //update the manifest classpath for the component - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ClasspathDependencyManifestUtil.updateManifestClasspath(manifestFile.getUnderlyingFile(), javaClasspathURIs, baos); - return new ByteArrayInputStream(baos.toByteArray()); - } - - if (filesHolder.contains(uri)) { - return filesHolder.getInputStream(uri); - } - IVirtualFolder rootFolder = vComponent.getRootFolder(); - IVirtualResource vResource = rootFolder.findMember(uri); - String filePath = null; - if (null != vResource && vResource.exists()) { - filePath = vResource.getUnderlyingResource().getLocation().toOSString(); - java.io.File file = new java.io.File(filePath); - return new FileInputStream(file); - } - String eString = EARArchiveOpsResourceHandler.ARCHIVE_OPERATION_FileNotFound; - throw new FileNotFoundException(eString); - } - - public Collection getLoadedMofResources() { - Collection resources = super.getLoadedMofResources(); - Collection resourcesToRemove = new ArrayList(); - Iterator iterator = resources.iterator(); - while (iterator.hasNext()) { - Resource res = (Resource) iterator.next(); - //only remove component files that are in the settings directory - if (res.getURI().toString().endsWith(IModuleConstants.COMPONENT_FILE_NAME) && res.getURI().segmentsList().contains(IModuleConstants.DOT_SETTINGS)) - resourcesToRemove.add(res); - } - if (null != resourcesToRemove) { - resources.removeAll(resourcesToRemove); - } - - return resources; - } - - protected synchronized ArtifactEdit getArtifactEditForRead() { - if(artifactEdit == null){ - artifactEdit = ArtifactEdit.getArtifactEditForRead(vComponent); - } - return artifactEdit; - } - - public Resource getMofResource(String uri) throws FileNotFoundException, ResourceLoadException { - return getArtifactEditForRead().getResource(URI.createURI(uri)); - } - - public boolean isClassLoaderNeeded() { - return false; - } - - public IVirtualComponent getComponent() { - return vComponent; - } - - protected IProgressMonitor monitor = null; - - public void setProgressMonitor(IProgressMonitor monitor){ - this.monitor = monitor; - } - - protected final int FILE_SAVE_WORK = 100; - - public FileIterator getFileIterator() throws IOException { - return new FileIteratorImpl(getContainer().getFiles()){ - protected SubProgressMonitor lastSubMon = null; - boolean firstVisit = true; - - public File next() { - if(firstVisit){ - firstVisit = false; - if(monitor != null){ - monitor.beginTask(ProjectSupportResourceHandler.getString(ProjectSupportResourceHandler.Exporting_archive, new Object [] { getContainer().getURI() }), files.size() * FILE_SAVE_WORK); - } - } - if(lastSubMon != null){ - lastSubMon.done(); - lastSubMon = null; - } else if(monitor != null){ - monitor.worked(FILE_SAVE_WORK); - } - File file = super.next(); - if(monitor != null){ - if(file.isContainer() && ComponentLoadStrategyImpl.class.isInstance(((ContainerImpl)file).getLoadStrategy())){ - ComponentLoadStrategyImpl ls = (ComponentLoadStrategyImpl)((ContainerImpl)file).getLoadStrategy(); - lastSubMon = new SubProgressMonitor(monitor, FILE_SAVE_WORK, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); - ls.setProgressMonitor(lastSubMon); - } else { - monitor.subTask(file.getURI()); - } - } - return file; - } - }; - - } - - public void close() { - if(Thread.currentThread().toString().toLowerCase().indexOf("finalizer") != -1){ - System.err.println("Opener of Archive didn't close! "+this); - exception.printStackTrace(System.err); - } - - try{ - Iterator it = zipFiles.iterator(); - while (it.hasNext()) { - ZipFile file = (ZipFile) it.next(); - try { - file.close(); - } catch (IOException e) { - Logger.getLogger().logError(e); - } - } - } finally{ - try{ - synchronized(this) { - if(artifactEdit != null){ - ArtifactEditModel editModel = (ArtifactEditModel)artifactEdit.getAdapter(ArtifactEditModel.class); - if(editModel != null && !editModel.isDisposed()){ - artifactEdit.dispose(); - } - artifactEdit = null; - } - } - } finally { - super.close(); - } - } - - } -} |