diff options
Diffstat (limited to 'plugins/org.eclipse.jst.j2ee.core/commonArchive/org/eclipse/jst/j2ee/commonarchivecore/internal/impl/ArchiveImpl.java')
-rw-r--r-- | plugins/org.eclipse.jst.j2ee.core/commonArchive/org/eclipse/jst/j2ee/commonarchivecore/internal/impl/ArchiveImpl.java | 1602 |
1 files changed, 0 insertions, 1602 deletions
diff --git a/plugins/org.eclipse.jst.j2ee.core/commonArchive/org/eclipse/jst/j2ee/commonarchivecore/internal/impl/ArchiveImpl.java b/plugins/org.eclipse.jst.j2ee.core/commonArchive/org/eclipse/jst/j2ee/commonarchivecore/internal/impl/ArchiveImpl.java deleted file mode 100644 index 8d53a8031..000000000 --- a/plugins/org.eclipse.jst.j2ee.core/commonArchive/org/eclipse/jst/j2ee/commonarchivecore/internal/impl/ArchiveImpl.java +++ /dev/null @@ -1,1602 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2001, 2004 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.commonarchivecore.internal.impl; - - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.emf.common.notify.NotificationChain; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.common.util.WrappedException; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.ecore.InternalEObject; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.ResourceSet; -import org.eclipse.emf.ecore.util.EDataTypeUniqueEList; -import org.eclipse.emf.ecore.util.EcoreUtil; -import org.eclipse.emf.ecore.util.InternalEList; -import org.eclipse.jem.internal.java.adapters.ReadAdaptor; -import org.eclipse.jem.internal.java.adapters.jdk.JavaJDKAdapterFactory; -import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive; -import org.eclipse.jst.j2ee.commonarchivecore.internal.ArchiveTypeDiscriminatorRegistry; -import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonArchiveResourceHandler; -import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchivePackage; -import org.eclipse.jst.j2ee.commonarchivecore.internal.Container; -import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile; -import org.eclipse.jst.j2ee.commonarchivecore.internal.File; -import org.eclipse.jst.j2ee.commonarchivecore.internal.ReadOnlyDirectory; -import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException; -import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.ManifestException; -import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException; -import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.ReopenException; -import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.ResourceLoadException; -import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.SaveFailureException; -import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveManifest; -import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveManifestImpl; -import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions; -import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.RuntimeClasspathEntry; -import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.RuntimeClasspathEntryImpl; -import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.SaveFilter; -import org.eclipse.jst.j2ee.commonarchivecore.internal.looseconfig.LooseArchive; -import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.DirectorySaveStrategyImpl; -import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.LoadStrategy; -import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.SaveStrategy; -import org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.ZipStreamSaveStrategyImpl; -import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveFileDynamicClassLoader; -import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ArchiveUtil; -import org.eclipse.jst.j2ee.commonarchivecore.internal.util.ClasspathUtil; -import org.eclipse.jst.j2ee.internal.J2EEConstants; -import org.eclipse.wst.common.internal.emf.utilities.EtoolsCopyUtility; -import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil; - - -/** - * @generated - */ -public class ArchiveImpl extends ContainerImpl implements Archive { - - /** - * The cached value of the '{@link #getTypes() <em>Types</em>}' attribute list. <!-- - * begin-user-doc --> <!-- end-user-doc --> - * - * @see #getTypes() - * @generated - * @ordered - */ - protected EList types = null; - - /** Our specialized manifest */ - protected ArchiveManifest manifest; - - /** Implementer for saving this archive */ - protected SaveStrategy saveStrategy; - - /** - * Optional filter for saving a subset of files; filter will be applied for all save and extract - * invokations - */ - protected SaveFilter saveFilter; - - /** Encoding to be used for all xmi resources and xml dds; defaults to UTF-8 */ - protected String xmlEncoding = J2EEConstants.DEFAULT_XML_ENCODING; - - /** Custom class loader used to load classes from the archive */ - protected ClassLoader archiveClassLoader; - - /** - * path of the standard classpath format where the archive may look for classes not found in the - * system classpath or in the archive - used for java reflection - */ - protected String extraClasspath; - - protected ArchiveOptions options; - - public ArchiveImpl() { - super(); - getCommonArchiveFactory().archiveOpened(this); - } - - /** - * <!-- begin-user-doc --> <!-- end-user-doc --> - * - * @generated - */ - protected EClass eStaticClass() { - return CommonarchivePackage.eINSTANCE.getArchive(); - } - - /** - * <!-- begin-user-doc --> <!-- end-user-doc --> - * - * @generated - */ - public EList getTypes() { - if (types == null) { - types = new EDataTypeUniqueEList(String.class, this, CommonarchivePackage.ARCHIVE__TYPES); - } - return types; - } - - /** - * <!-- begin-user-doc --> <!-- end-user-doc --> - * - * @generated - */ - public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, Class baseClass, NotificationChain msgs) { - if (featureID >= 0) { - switch (eDerivedStructuralFeatureID(featureID, baseClass)) { - case CommonarchivePackage.ARCHIVE__CONTAINER : - if (eContainer != null) - msgs = eBasicRemoveFromContainer(msgs); - return eBasicSetContainer(otherEnd, CommonarchivePackage.ARCHIVE__CONTAINER, msgs); - case CommonarchivePackage.ARCHIVE__FILES : - return ((InternalEList) getFiles()).basicAdd(otherEnd, msgs); - default : - return eDynamicInverseAdd(otherEnd, featureID, baseClass, msgs); - } - } - if (eContainer != null) - msgs = eBasicRemoveFromContainer(msgs); - return eBasicSetContainer(otherEnd, featureID, msgs); - } - - /** - * <!-- begin-user-doc --> <!-- end-user-doc --> - * - * @generated - */ - public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, Class baseClass, NotificationChain msgs) { - if (featureID >= 0) { - switch (eDerivedStructuralFeatureID(featureID, baseClass)) { - case CommonarchivePackage.ARCHIVE__CONTAINER : - return eBasicSetContainer(null, CommonarchivePackage.ARCHIVE__CONTAINER, msgs); - case CommonarchivePackage.ARCHIVE__FILES : - return ((InternalEList) getFiles()).basicRemove(otherEnd, msgs); - default : - return eDynamicInverseRemove(otherEnd, featureID, baseClass, msgs); - } - } - return eBasicSetContainer(null, featureID, msgs); - } - - /** - * <!-- begin-user-doc --> <!-- end-user-doc --> - * - * @generated - */ - public NotificationChain eBasicRemoveFromContainer(NotificationChain msgs) { - if (eContainerFeatureID >= 0) { - switch (eContainerFeatureID) { - case CommonarchivePackage.ARCHIVE__CONTAINER : - return eContainer.eInverseRemove(this, CommonarchivePackage.CONTAINER__FILES, Container.class, msgs); - default : - return eDynamicBasicRemoveFromContainer(msgs); - } - } - return eContainer.eInverseRemove(this, EOPPOSITE_FEATURE_BASE - eContainerFeatureID, null, msgs); - } - - /** - * <!-- begin-user-doc --> <!-- end-user-doc --> - * - * @generated - */ - public Object eGet(EStructuralFeature eFeature, boolean resolve) { - switch (eDerivedStructuralFeatureID(eFeature)) { - case CommonarchivePackage.ARCHIVE__URI : - return getURI(); - case CommonarchivePackage.ARCHIVE__LAST_MODIFIED : - return new Long(getLastModified()); - case CommonarchivePackage.ARCHIVE__SIZE : - return new Long(getSize()); - case CommonarchivePackage.ARCHIVE__DIRECTORY_ENTRY : - return isDirectoryEntry() ? Boolean.TRUE : Boolean.FALSE; - case CommonarchivePackage.ARCHIVE__ORIGINAL_URI : - return getOriginalURI(); - case CommonarchivePackage.ARCHIVE__LOADING_CONTAINER : - if (resolve) - return getLoadingContainer(); - return basicGetLoadingContainer(); - case CommonarchivePackage.ARCHIVE__CONTAINER : - return getContainer(); - case CommonarchivePackage.ARCHIVE__FILES : - return getFiles(); - case CommonarchivePackage.ARCHIVE__TYPES : - return getTypes(); - } - return eDynamicGet(eFeature, resolve); - } - - /** - * <!-- begin-user-doc --> <!-- end-user-doc --> - * - * @generated - */ - public void eSet(EStructuralFeature eFeature, Object newValue) { - switch (eDerivedStructuralFeatureID(eFeature)) { - case CommonarchivePackage.ARCHIVE__URI : - setURI((String) newValue); - return; - case CommonarchivePackage.ARCHIVE__LAST_MODIFIED : - setLastModified(((Long) newValue).longValue()); - return; - case CommonarchivePackage.ARCHIVE__SIZE : - setSize(((Long) newValue).longValue()); - return; - case CommonarchivePackage.ARCHIVE__DIRECTORY_ENTRY : - setDirectoryEntry(((Boolean) newValue).booleanValue()); - return; - case CommonarchivePackage.ARCHIVE__ORIGINAL_URI : - setOriginalURI((String) newValue); - return; - case CommonarchivePackage.ARCHIVE__LOADING_CONTAINER : - setLoadingContainer((Container) newValue); - return; - case CommonarchivePackage.ARCHIVE__CONTAINER : - setContainer((Container) newValue); - return; - case CommonarchivePackage.ARCHIVE__FILES : - getFiles().clear(); - getFiles().addAll((Collection) newValue); - return; - case CommonarchivePackage.ARCHIVE__TYPES : - getTypes().clear(); - getTypes().addAll((Collection) newValue); - return; - } - eDynamicSet(eFeature, newValue); - } - - /** - * <!-- begin-user-doc --> <!-- end-user-doc --> - * - * @generated - */ - public void eUnset(EStructuralFeature eFeature) { - switch (eDerivedStructuralFeatureID(eFeature)) { - case CommonarchivePackage.ARCHIVE__URI : - setURI(URI_EDEFAULT); - return; - case CommonarchivePackage.ARCHIVE__LAST_MODIFIED : - unsetLastModified(); - return; - case CommonarchivePackage.ARCHIVE__SIZE : - unsetSize(); - return; - case CommonarchivePackage.ARCHIVE__DIRECTORY_ENTRY : - unsetDirectoryEntry(); - return; - case CommonarchivePackage.ARCHIVE__ORIGINAL_URI : - setOriginalURI(ORIGINAL_URI_EDEFAULT); - return; - case CommonarchivePackage.ARCHIVE__LOADING_CONTAINER : - setLoadingContainer((Container) null); - return; - case CommonarchivePackage.ARCHIVE__CONTAINER : - setContainer((Container) null); - return; - case CommonarchivePackage.ARCHIVE__FILES : - getFiles().clear(); - return; - case CommonarchivePackage.ARCHIVE__TYPES : - getTypes().clear(); - return; - } - eDynamicUnset(eFeature); - } - - /** - * <!-- begin-user-doc --> <!-- end-user-doc --> - * - * @generated - */ - public boolean eIsSet(EStructuralFeature eFeature) { - switch (eDerivedStructuralFeatureID(eFeature)) { - case CommonarchivePackage.ARCHIVE__URI : - return URI_EDEFAULT == null ? uri != null : !URI_EDEFAULT.equals(uri); - case CommonarchivePackage.ARCHIVE__LAST_MODIFIED : - return isSetLastModified(); - case CommonarchivePackage.ARCHIVE__SIZE : - return isSetSize(); - case CommonarchivePackage.ARCHIVE__DIRECTORY_ENTRY : - return isSetDirectoryEntry(); - case CommonarchivePackage.ARCHIVE__ORIGINAL_URI : - return ORIGINAL_URI_EDEFAULT == null ? originalURI != null : !ORIGINAL_URI_EDEFAULT.equals(originalURI); - case CommonarchivePackage.ARCHIVE__LOADING_CONTAINER : - return loadingContainer != null; - case CommonarchivePackage.ARCHIVE__CONTAINER : - return getContainer() != null; - case CommonarchivePackage.ARCHIVE__FILES : - return files != null && !files.isEmpty(); - case CommonarchivePackage.ARCHIVE__TYPES : - return types != null && !types.isEmpty(); - } - return eDynamicIsSet(eFeature); - } - - /** - * <!-- begin-user-doc --> <!-- end-user-doc --> - * - * @generated - */ - public String toString() { - if (eIsProxy()) - return super.toString(); - - StringBuffer result = new StringBuffer(super.toString()); - result.append(" (types: "); //$NON-NLS-1$ - result.append(types); - result.append(')'); - return result.toString(); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public Archive addCopy(Archive anArchive) throws org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException { - checkAddValid(anArchive); - Archive copy = getCommonArchiveFactory().copy(anArchive); - getFiles().add(copy); - return copy; - } - - /** - * @see com.ibm.etools.commonarchive.Archive Adds a copy of the parameter to this archive - * @throws com.ibm.etools.archive.exception.DuplicateObjectException - * if the archive already contains a file with the specified uri - */ - public File addCopy(File aFile) throws DuplicateObjectException { - if (aFile.isReadOnlyDirectory()) { - addCopy((ReadOnlyDirectory) aFile); - return null; - } - checkAddValid(aFile); - File copy = copy(aFile); - getFiles().add(copy); - return copy; - } - - /** - * Get a flattened list from the directory, then addCopy the list - * - * @throws com.ibm.etools.archive.exception.DuplicateObjectException - * if a file with a uri that equals one of the nested files in the directory exists - * - * @return java.util.List the copied files that were added to the archive - */ - public java.util.List addCopy(ReadOnlyDirectory dir) throws org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException { - return addCopyFiles(dir.getFilesRecursive()); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public List addCopyFiles(java.util.List list) throws org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DuplicateObjectException { - //Optimization - make sure the fileIndex is already built to speed up - // containsFile - getFiles(); - List copyList = new ArrayList(); - for (int i = 0; i < list.size(); i++) { - File aFile = (File) list.get(i); - checkAddValid(aFile); - copyList.add(copy(aFile)); - } - getFiles().addAll(copyList); - return copyList; - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void addOrReplaceMofResource(org.eclipse.emf.ecore.resource.Resource aResource) { - getLoadStrategy().addOrReplaceMofResource(aResource); - } - - /** - * @deprecated Use {@link #getDependentOpenArchives()} - * @see com.ibm.etools.commonarchive.Archive - */ - public boolean canClose() { - return !getCommonArchiveFactory().getOpenArchivesDependingOn(this).isEmpty(); - } - - protected void checkAddValid(File aFile) throws DuplicateObjectException { - checkAddValid(aFile.getURI()); - } - - protected void checkAddValid(String aUri) throws DuplicateObjectException { - try { - File f = getFile(aUri); - if (f != null) - throw new DuplicateObjectException(CommonArchiveResourceHandler.getString("duplicate_file_EXC_", (new Object[]{getURI(), aUri})), f); //$NON-NLS-1$ = "The archive named {0} already contains a file named {1}" - } catch (FileNotFoundException ok) { - //Ignore - } - } - - protected void cleanupAfterTempSave(String aUri, java.io.File original, java.io.File destinationFile) throws SaveFailureException { - - checkWriteable(original); - boolean deleteWorked = false; - if (original.isDirectory() && !isRenameable(original)) { - throw new SaveFailureException(CommonArchiveResourceHandler.getString("unable_replace_EXC_", (new Object[]{original.getAbsolutePath()}))); //$NON-NLS-1$ = "Unable to replace original archive " - } - - for (int i = 0; i < 10; i++) { - if (ArchiveUtil.delete(original)) { - deleteWorked = true; - break; - } - try { - // TODO Major hack here; the problem is that a previous call - // to close the source file may not yet have - //been reflected in the os/vm; therefore a subsequent call - // to delete fails. To get around this, - //wait for a bit and retry; if it continues to fail, then - // time out and throw an exception - Thread.sleep(250); - } catch (InterruptedException e) { - //Ignore - } - } - if (deleteWorked) { - for (int i = 0; i < 10; i++) { - if (destinationFile.renameTo(original)) - return; - try { - Thread.sleep(250); - } catch (InterruptedException e) { - //Ignore - } - } - } - throw new SaveFailureException(CommonArchiveResourceHandler.getString("unable_replace_EXC_", (new Object[]{original.getAbsolutePath()}))); //$NON-NLS-1$ = "Unable to replace original archive " - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void close() { - getLoadStrategy().close(); - releaseClassLoader(); - getCommonArchiveFactory().archiveClosed(this); - if (isIndexed()) { - List archives = getArchiveFiles(); - for (int i = 0; i < archives.size(); i++) { - ((Archive) archives.get(i)).close(); - } - } - } - - protected File copy(File aFile) { - File copy = null; - if (aFile.isArchive()) - copy = getCommonArchiveFactory().copy((Archive) aFile); - else - copy = (File) EtoolsCopyUtility.createCopy(aFile); - return copy; - } - - protected LoadStrategy createLoadStrategyForReopen(Archive parent) throws IOException { - LoadStrategy aLoadStrategy = null; - LooseArchive loose = getLoadStrategy().getLooseArchive(); - - if (loose != null) { - aLoadStrategy = getCommonArchiveFactory().createLoadStrategy(loose.getBinariesPath()); - aLoadStrategy.setLooseArchive(loose); - } else if (parent == null) - aLoadStrategy = getCommonArchiveFactory().createLoadStrategy(getURI()); - else - aLoadStrategy = getCommonArchiveFactory().createChildLoadStrategy(getURI(), parent.getLoadStrategy()); - - return aLoadStrategy; - } - - protected RuntimeClasspathEntry createRuntimeClasspathEntry(String absolutePath) { - RuntimeClasspathEntry entry = new RuntimeClasspathEntryImpl(); - entry.setAbsolutePath(absolutePath); - return entry; - } - - /** - * Convert all the classpath entries to absolute paths - */ - protected List createRuntimeClasspathEntries(String[] entries, String parentPath) { - - List aList = new ArrayList(entries.length); - for (int i = 0; i < entries.length; i++) { - String entry = entries[i]; - /* - * Added for loose module support - if the cananonicalized entry resolves to an archive - * in the containing ear, then add the absolute path of that archive - */ - Archive dependentJar = resolveClasspathEntryInEAR(entry); - if (dependentJar != null) { - try { - RuntimeClasspathEntry runEntry = createRuntimeClasspathEntry(dependentJar.getBinariesPath(), entry); - runEntry.setReferencedArchive(dependentJar); - aList.add(runEntry); - continue; - } catch (FileNotFoundException shouldntHappenInRuntime) { - //Ignore - } - } - //Otherwise, compute the absolute path of the entry relative to - // this jar - java.io.File aFile = new java.io.File(entry); - String absPath = null; - if (aFile.isAbsolute()) - absPath = aFile.getAbsolutePath(); - else { - absPath = ArchiveUtil.getOSUri(parentPath, entry); - absPath = ClasspathUtil.normalizePath(absPath); - } - aList.add(createRuntimeClasspathEntry(absPath, entry)); - } - - return aList; - } - - protected RuntimeClasspathEntry createRuntimeClasspathEntry(String absolutePath, String manifestValue) { - RuntimeClasspathEntry entry = createRuntimeClasspathEntry(absolutePath); - entry.setManifestValue(manifestValue); - return entry; - } - - protected SaveStrategy createSaveStrategyForDirectory(java.io.File dir, int expansionFlags) { - return new DirectorySaveStrategyImpl(dir.getAbsolutePath(), expansionFlags); - } - - protected SaveStrategy createSaveStrategyForDirectory(String aUri, int expansionFlags) { - return new DirectorySaveStrategyImpl(aUri, expansionFlags); - } - - protected SaveStrategy createSaveStrategyForJar(java.io.File aFile) throws java.io.IOException { - if (aFile.exists() && aFile.isDirectory()) - throw new IOException(CommonArchiveResourceHandler.getString("file_exist_as_dir_EXC_", (new Object[]{aFile.getAbsolutePath()})));//$NON-NLS-1$ = "A file named {0} exists and is a directory" - java.io.File parent = aFile.getParentFile(); - if (parent != null) - parent.mkdirs(); - java.io.OutputStream out = new java.io.FileOutputStream(aFile); - return new ZipStreamSaveStrategyImpl(out); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void extract(int expansionFlags) throws SaveFailureException, ReopenException { - extractNoReopen(expansionFlags); - reopen(); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void extractNoReopen(int expansionFlags) throws SaveFailureException { - String aUri = getURI(); - java.io.File aDir = new java.io.File(aUri); - boolean inUse = getLoadStrategy().isUsing(aDir); - - try { - java.io.File destinationDir = inUse ? ArchiveUtil.createTempDirectory(aUri, aDir.getCanonicalFile().getParentFile()) : aDir; - SaveStrategy aSaveStrategy = createSaveStrategyForDirectory(destinationDir, expansionFlags); - save(aSaveStrategy); - aSaveStrategy.close(); - close(); - if (inUse) { - cleanupAfterTempSave(aUri, aDir, destinationDir); - } - } catch (java.io.IOException ex) { - throw new SaveFailureException(CommonArchiveResourceHandler.getString("error_saving_EXC_", (new Object[]{uri})), ex); //$NON-NLS-1$ = "Error saving " - } - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void extractTo(java.lang.String aUri, int expansionFlags) throws SaveFailureException { - java.io.File aDir = new java.io.File(aUri); - if (getLoadStrategy().isUsing(aDir)) - throw new SaveFailureException(CommonArchiveResourceHandler.getString("Extract_destination_is_the_EXC_")); //$NON-NLS-1$ = "Extract destination is the same path as source file" - - try { - SaveStrategy aSaveStrategy = createSaveStrategyForDirectory(aDir, expansionFlags); - save(aSaveStrategy); - aSaveStrategy.close(); - } catch (java.io.IOException ex) { - throw new SaveFailureException(CommonArchiveResourceHandler.getString("error_saving_EXC_", (new Object[]{aUri})), ex); //$NON-NLS-1$ = "Error saving " - } - - } - - public java.util.List filterFilesByPrefix(String prefix) { - return filterFiles(prefix, null); - } - - public java.util.List filterFiles(String prefix, String[] suffixes) { - List subset = new ArrayList(); - List theFiles = getFiles(); - for (int i = 0; i < theFiles.size(); i++) { - File aFile = (File) theFiles.get(i); - if (!aFile.isDirectoryEntry() && aFile.getURI().startsWith(prefix)) - if (suffixes == null || hasSuffix(aFile.getURI(), suffixes)) - subset.add(aFile); - } - return subset; - } - - /** - * @param uri - * @param suffixes - * @return - */ - private boolean hasSuffix(String aUri, String[] suffixes) { - for (int i = 0; i < suffixes.length; i++) { - if (aUri.endsWith(suffixes[i])) - return true; - } - return false; - } - - public java.util.List filterFilesWithoutPrefix(String[] prefixes) { - List subset = new ArrayList(); - List theFiles = getFiles(); - for (int i = 0; i < theFiles.size(); i++) { - File aFile = (File) theFiles.get(i); - if (aFile.isDirectoryEntry()) - continue; - boolean shouldAdd = true; - for (int j = 0; j < prefixes.length; j++) { - if (aFile.getURI().startsWith(prefixes[j])) { - shouldAdd = false; - break; - } - } - if (shouldAdd) - subset.add(aFile); - } - return subset; - } - - /** - * Insert the method's description here. Creation date: (11/29/00 6:35:08 PM) - * - * @return java.lang.ClassLoader - */ - public java.lang.ClassLoader getArchiveClassLoader() { - if (archiveClassLoader == null) - initializeClassLoader(); - return archiveClassLoader; - } - - /** - * @see com.ibm.etools.commonarchive.EARFile - */ - public java.util.List getArchiveFiles() { - List archives = new ArrayList(); - List fileList = getFiles(); - for (int i = 0; i < fileList.size(); i++) { - File aFile = (File) fileList.get(i); - if (aFile.isArchive()) { - archives.add(aFile); - } - } - return archives; - } - - /** - * Parse the manifest class path and the extra class path, and instantiate a URL classloader, - * with a parent of the archiveClassLoader - */ - protected ClassLoader getClassPathClassLoader(ClassLoader parentCl) { - - List classPathComponents = new ArrayList(); - if (getManifest() != null) - classPathComponents.addAll(Arrays.asList(getManifest().getClassPathTokenized())); - String extraCp = getExtraClasspath(); - if (extraCp != null) - classPathComponents.addAll(Arrays.asList(ArchiveUtil.getTokens(extraCp, ";")));//$NON-NLS-1$ - - java.net.URL[] urlArray = ArchiveUtil.toLocalURLs(classPathComponents, getRootForRelativeDependentJars()); - return new java.net.URLClassLoader(urlArray, parentCl); - } - - public ResourceSet getResourceSet() { - return getLoadStrategy().getResourceSet(); - } - - /** - * Helper method to determine the parent for the custom class loader used by this archive - */ - protected ClassLoader getDefaultClassLoader() { - ClassLoader pluginClassLoader = getClass().getClassLoader(); - return pluginClassLoader == null ? ClassLoader.getSystemClassLoader() : pluginClassLoader; - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public java.util.Set getDependentOpenArchives() { - return getCommonArchiveFactory().getOpenArchivesDependingOn(this); - } - - /** - * Convert all the classpath entries to absolute paths - */ - protected List getEntriesAsAbsolutePaths(String[] entries, String parentPath) { - - List aList = new ArrayList(entries.length); - for (int i = 0; i < entries.length; i++) { - String entry = entries[i]; - /* - * Added for loose module support - if the cananonicalized entry resolves to an archive - * in the containing ear, then add the absolute path of that archive - */ - Archive dependentJar = resolveClasspathEntryInEAR(entry); - if (dependentJar != null) { - try { - aList.add(dependentJar.getAbsolutePath()); - continue; - } catch (FileNotFoundException shouldntHappenInRuntime) { - //Ignore - } - } - //Otherwise, compute the absolute path of the entry relative to - // this jar - java.io.File aFile = new java.io.File(entry); - if (aFile.isAbsolute()) - aList.add(aFile.getAbsolutePath()); - else - aList.add(ArchiveUtil.getOSUri(parentPath, entry)); - } - - return aList; - } - - /** - * Insert the method's description here. Creation date: (11/29/00 6:35:08 PM) - * - * @return java.lang.String - */ - public String getExtraClasspath() { - return extraClasspath; - } - - /** - * Used internally by the framework, specifically as an optimization when saving/exploding - * archives with nested archives - */ - public org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.FileIterator getFilesForSave() throws IOException { - return getLoadStrategy().getFileIterator(); - } - - /** - * @see com.ibm.etools.commonarchive.File - */ - public java.io.InputStream getInputStream() throws java.io.FileNotFoundException, java.io.IOException { - if (getLoadingContainer() != null || getLoadStrategy() == null || getLoadStrategy().isDirectory()) - return super.getInputStream(); - - //This archive was copied in; this operation is not supported for - // module files - if (isModuleFile() || !getOptions().isSaveLibrariesAsFiles()) - throw new IOException("Undefined state of nested archive"); //$NON-NLS-1$ - - //We have to find the absolute path of the original archive from which - // this was copied, - //if it is known - - List list = getFiles(); - - String absolutePath = null; - for (int i = 0; i < list.size(); i++) { - File aFile = (File) list.get(i); - if (aFile.isArchive()) - continue; - absolutePath = aFile.getLoadingContainer().getAbsolutePath(); - } - - return new FileInputStream(absolutePath); - } - - /** - * @see LoadStrategy#getResourceInputStream(String) - */ - public InputStream getResourceInputStream(String aUri) throws IOException { - return getLoadStrategy().getResourceInputStream(aUri); - } - - protected JavaJDKAdapterFactory getJavaAdapterFactory() { - return (JavaJDKAdapterFactory) EcoreUtil.getAdapterFactory(getLoadStrategy().getResourceSet().getAdapterFactories(), ReadAdaptor.TYPE_KEY); - } - - /** - * @see com.ibm.etools.commonarchive.Archive returns an immutable collection of the loaded - * resources in the resource set - */ - public Collection getLoadedMofResources() { - return getLoadStrategy().getLoadedMofResources(); - } - - /** - * Insert the method's description here. Creation date: (11/29/00 6:35:08 PM) - */ - public ArchiveManifest getManifest() { - if (manifest == null) { - InputStream in = null; - try { - in = getInputStream(J2EEConstants.MANIFEST_URI); - makeManifest(in); - } catch (FileNotFoundException ex) { - makeManifest(); - } catch (Resource.IOWrappedException ex) { - WrappedException wrapEx = new WrappedException((ex).getWrappedException()); - if (ExtendedEcoreUtil.getFileNotFoundDetector().isFileNotFound(wrapEx)) - makeManifest(); - else - throw new ManifestException(CommonArchiveResourceHandler.getString("io_ex_manifest_EXC_", (new Object[]{getURI()})), ex); //$NON-NLS-1$ = "An IOException occurred reading the manifest: " - } catch (IOException ex) { - throw new ManifestException(CommonArchiveResourceHandler.getString("io_ex_manifest_EXC_", (new Object[]{getURI()})), ex); //$NON-NLS-1$ = "An IOException occurred reading the manifest: " - } finally { - if (in != null) - try { - in.close(); - } catch (IOException iox) { - //Ignore - } - } - } - //This is a hack because of the fact that the manifest does not - // serialize correctly if - //The version is not set. In addition to saves, the serialization is - // used for copy - if (manifest.getManifestVersion() == null || manifest.getManifestVersion().equals("")) //$NON-NLS-1$ - manifest.setManifestVersion("1.0");//$NON-NLS-1$ - return manifest; - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public org.eclipse.emf.ecore.resource.Resource getMofResource(java.lang.String aUri) throws FileNotFoundException, ResourceLoadException { - return getLoadStrategy().getMofResource(aUri); - } - - protected Resource getMofResourceMakeIfNecessary(String aUri) { - if (getLoadStrategy() == null) - return null; - Resource resource = null; - try { - resource = getMofResource(aUri); - } catch (java.io.FileNotFoundException ex) { - try { - resource = makeMofResource(aUri); - } catch (DuplicateObjectException dox) { - //We just checked for this; it won't happen - } - } - return resource; - } - - public org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions getOptions() { - if (options == null) { - options = new ArchiveOptions(); - } - return options; - } - - /** - * When looking at the class path of this jar (from the manifest), some of the elements may have - * a relative path, thus we need to determine the install location of this jar. If the absolute - * path from which the archive was loaded, return the parent directory of that path; otherwise, - * see if the containing archive has an absolute path; if neither work, default to the current - * working directory - */ - public String getRootForRelativeDependentJars() { - String path = null; - Container theContainer = this; - while (theContainer != null && path == null) { - try { - path = theContainer.getAbsolutePath(); - } catch (FileNotFoundException ex) { - //Ignore - } - theContainer = theContainer.getLoadingContainer(); - } - if (path == null) { - path = System.getProperty("user.dir");//$NON-NLS-1$ - if (path == null) - //At this point what else can we do? - return "";//$NON-NLS-1$ - return new java.io.File(path).getAbsolutePath(); - } - return new java.io.File(path).getParentFile().getAbsolutePath(); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public java.lang.String[] getRuntimeClassPath() { - - String absolutePath; - try { - absolutePath = getBinariesPath(); - } catch (IOException ex) { - return new String[0]; - } - - List entries = new ArrayList(); - entries.add(absolutePath); - - String parentPath = new java.io.File(absolutePath).getParentFile().getAbsolutePath(); - String[] mfEntries = getManifest().getClassPathTokenized(); - entries.addAll(getEntriesAsAbsolutePaths(mfEntries, parentPath)); - - return (String[]) entries.toArray(new String[entries.size()]); - } - - /** - * Optional filter for saving a subset of files; filter will be applied for all save and extract - * invokations - */ - public org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.SaveFilter getSaveFilter() { - return saveFilter; - } - - /** - * Insert the method's description here. Creation date: (12/04/00 3:31:32 PM) - * - * @return com.ibm.etools.archive.SaveStrategy - */ - public org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.SaveStrategy getSaveStrategy() { - return saveStrategy; - } - - /** - * Insert the method's description here. Creation date: (11/29/00 6:35:08 PM) - * - * @return java.lang.String - */ - public java.lang.String getXmlEncoding() { - return xmlEncoding; - } - - /** - * The default is to do nothing; subclasses may override as necessary - * - * @see com.ibm.etools.commonarchive.Archive - */ - public void initializeAfterOpen() { - //Default - } - - public void initializeClassLoader() { - //Some load strategies may provide a mof context for which - //an alternate class loader is not necessary - if (!shouldUseJavaReflection()) - return; - ClassLoader extraCl = null; - ClassLoader defaultCl = getDefaultClassLoader(); - if (getContainer() == null || !getContainer().isEARFile()) - extraCl = getClassPathClassLoader(defaultCl); - ClassLoader cl = createDynamicClassLoader(defaultCl, extraCl); - setArchiveClassLoader(cl); - JavaJDKAdapterFactory factory = getJavaAdapterFactory(); - factory.setContextClassLoader(cl); - factory.flushAll(); - } - - public ClassLoader createDynamicClassLoader(ClassLoader parentCl, ClassLoader extraCl) { - return new ArchiveFileDynamicClassLoader(this, parentCl, extraCl); - } - - /** - * @see com.ibm.etools.commonarchive.File - */ - public boolean isArchive() { - return true; - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public boolean isDuplicate(java.lang.String aUri) { - return containsFile(aUri) || isMofResourceLoaded(aUri) || J2EEConstants.MANIFEST_URI.equals(aUri); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public boolean isManifestSet() { - return manifest != null; - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public boolean isMofResourceLoaded(java.lang.String aUri) { - return getLoadStrategy().isMofResourceLoaded(aUri); - } - - /** - * By default just test the extension of the uri for one of the known archive types; subclasses - * may which to override. - * - * @see com.ibm.etools.commonarchive.Archive - */ - public boolean isNestedArchive(java.lang.String aUri) { - //110390.3 Error loading alt-bindings - /* - * Don't infer that a folder which ends with .jar is an exploded archive; EAR file will do - * that IF the folder is declared as a module in the EAR - */ - if (getLoadStrategy().isDirectory()) { - try { - String path = ArchiveUtil.getOSUri(getAbsolutePath(), aUri); - java.io.File ioFile = new java.io.File(path); - if (!ioFile.exists() || (ioFile.isDirectory() && aUri.startsWith(J2EEConstants.ALT_INF))) - return false; - } catch (IOException ex) { - return false; - } - } - return ArchiveTypeDiscriminatorRegistry.INSTANCE.isKnownArchiveType(aUri); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public boolean isOpen() { - return getLoadStrategy() != null && getLoadStrategy().isOpen(); - } - - public ArchiveManifest makeManifest() { - ArchiveManifest mf = new ArchiveManifestImpl(); - setManifest(mf); - return mf; - } - - public ArchiveManifest makeManifest(InputStream in) throws IOException { - ArchiveManifest mf = new ArchiveManifestImpl(in); - setManifest(mf); - return mf; - } - - public Resource makeMofResource(String aUri) throws DuplicateObjectException { - return makeMofResource(aUri, null); - } - - /** - * @see com.ibm.etools.commonarchive.Archive#makeMofResource(String, EList) - */ - public Resource makeMofResource(String aUri, EList extent) throws DuplicateObjectException { - if (isDuplicate(aUri)) - throw new DuplicateObjectException(CommonArchiveResourceHandler.getString("duplicate_entry_EXC_", (new Object[]{aUri, getURI()}))); //$NON-NLS-1$ = "A file or resource with uri {0} already exists in the archive named {1}" - return getLoadStrategy().makeMofResource(aUri, extent); - } - - /** - * @see Archive - */ - public Archive openNestedArchive(String aUri) throws OpenFailureException { - return getCommonArchiveFactory().openNestedArchive(aUri, this); - } - - /** - * @see Archive - */ - public Archive openNestedArchive(LooseArchive loose) throws OpenFailureException { - return getCommonArchiveFactory().openNestedArchive(loose, this); - } - - /** - * Set the value of the extra class path with no refresh of the class loader - */ - public void primSetExtraClasspath(java.lang.String newExtraClasspath) { - extraClasspath = newExtraClasspath; - } - - /** - * Remove references to the archive class loader to prevent gc problems or problems with temp - * files not getting deleted - */ - public void releaseClassLoader() { - if (archiveClassLoader != null) { - setArchiveClassLoader(null); - getJavaAdapterFactory().setContextClassLoader(null); - } - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void remove(File aFile) { - getFiles().remove(aFile); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void reopen() throws ReopenException { - reopen(null); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void reopen(Archive parent) throws ReopenException { - LoadStrategy aLoadStrategy = null; - try { - aLoadStrategy = createLoadStrategyForReopen(parent); - } catch (IOException ex) { - throw new ReopenException(CommonArchiveResourceHandler.getString("io_ex_reopen_EXC_", (new Object[]{getURI()})), ex); //$NON-NLS-1$ = "IOException occurred while reopening " - } - //PQ54572 - LoadStrategy current = getLoadStrategy(); - if (current != null) { - aLoadStrategy.setResourceSet(current.primGetResourceSet()); - /* - * fixing problem with orphaned load strategy listening to the resource set - */ - current.setResourceSet(null); - } - - setLoadStrategy(aLoadStrategy); - initializeClassLoader(); - if (!isIndexed()) - return; - List fileList = getFiles(); - for (int i = 0; i < fileList.size(); i++) { - File f = (File) fileList.get(i); - f.setOriginalURI(f.getURI()); - f.setLoadingContainer(this); - if (f.isArchive()) - ((Archive) f).reopen(this); - } - getCommonArchiveFactory().archiveOpened(this); - } - - protected void replaceRoot(Resource aResource, EObject root) { - if (aResource == null) - return; - EList extent = aResource.getContents(); - EObject existingRoot = null; - if (!extent.isEmpty()) { - existingRoot = (EObject) extent.get(0); - if (existingRoot == root) - return; - extent.remove(0); - } - if (root != null) - extent.add(0, root); - } - - protected Archive resolveClasspathEntryInEAR(String entry) { - /* - * Added to support runtime classpath for loose modules - */ - Container parent = getContainer(); - if (parent == null || !parent.isEARFile()) - return null; - - String aUri = ArchiveUtil.deriveEARRelativeURI(entry, this); - if (aUri == null) - return null; - - File aFile = null; - try { - aFile = parent.getFile(aUri); - } catch (FileNotFoundException ex) { - return null; - } - - return aFile.isArchive() ? (Archive) aFile : null; - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void save() throws SaveFailureException, ReopenException { - saveAs(getURI()); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void save(org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.SaveStrategy aStrategy) throws SaveFailureException { - setSaveStrategy(aStrategy); - SaveFilter existingFilter = aStrategy.getFilter(); - boolean oldDelivery = eDeliver(); - try { - if (getOptions().isReadOnly()) - eSetDeliver(false); - aStrategy.setFilter(getSaveFilter()); - aStrategy.save(); - try { - aStrategy.finish(); - } catch (java.io.IOException iox) { - throw new SaveFailureException(getURI(), iox); - } - } finally { - //We have to leave the file index if we are a directory because we - // might have - //open file handles to archives - if (getOptions().isReadOnly() && !getLoadStrategy().isDirectory()) { - files.clear(); - //((BasicEList)files).setListImplementation(new ArrayList(0)); - eSetDeliver(oldDelivery); - eAdapters().remove(getFileIndexAdapter()); - fileIndexAdapter = null; - fileIndex = null; - } - setSaveStrategy(null); - aStrategy.setFilter(existingFilter); - } - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void saveAs(String aUri) throws SaveFailureException, ReopenException { - saveAsNoReopen(aUri); - reopen(); - } - - /** - * If we can rename it then we can delete it - */ - protected boolean isRenameable(java.io.File orig) { - java.io.File origCopy1 = null; - java.io.File origCopy2 = null; - try { - origCopy1 = orig.getCanonicalFile(); - origCopy2 = orig.getCanonicalFile(); - } catch (java.io.IOException ex) { - return false; - } - String name = null; - String baseName = "save.tmp"; //$NON-NLS-1$ - try { - if (orig.getParent() != null) - baseName = new java.io.File(orig.getParent(), baseName).getCanonicalPath(); - } catch (java.io.IOException ex) { - return false; - } - - java.io.File temp = null; - int index = 0; - do { - name = baseName + index; - temp = new java.io.File(name); - index++; - } while (temp.exists()); - return origCopy1.renameTo(temp) && temp.renameTo(origCopy2); - } - - protected void checkWriteable(java.io.File dest) throws SaveFailureException { - List locked = ArchiveUtil.getWriteProtectedFiles(dest, null); - if (locked.isEmpty()) - return; - - StringBuffer msg = new StringBuffer(); - msg.append("Cannot write to file: "); //$NON-NLS-1$ - msg.append(dest.getAbsolutePath()); - msg.append('\n'); - msg.append("One or more files is write protected or locked:"); //$NON-NLS-1$ - msg.append('\n'); - for (int i = 0; i < locked.size(); i++) { - java.io.File aFile = (java.io.File) locked.get(i); - msg.append(aFile.getAbsolutePath()); - msg.append('\n'); - } - throw new SaveFailureException(msg.toString()); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void saveAsNoReopen(String aUri) throws SaveFailureException { - java.io.File aFile = new java.io.File(aUri); - checkWriteable(aFile); - boolean fileExisted = aFile.exists(); - //botp 142149 - //boolean inUse = getLoadStrategy().isUsing(aFile); - SaveStrategy aSaveStrategy = null; - try { - try { - java.io.File destinationFile = fileExisted ? ArchiveUtil.createTempFile(aUri, aFile.getCanonicalFile().getParentFile()) : aFile; - aSaveStrategy = createSaveStrategyForJar(destinationFile); - save(aSaveStrategy); - aSaveStrategy.close(); - this.close(); - if (fileExisted) { - cleanupAfterTempSave(aUri, aFile, destinationFile); - } - } catch (java.io.IOException ex) { - throw new SaveFailureException(CommonArchiveResourceHandler.getString("error_saving_EXC_", (new Object[]{aUri})), ex); //$NON-NLS-1$ = "Error saving " - } - } catch (SaveFailureException failure) { - try { - if (aSaveStrategy != null) - aSaveStrategy.close(); - } catch (IOException weTried) { - //Ignore - } - if (!fileExisted) - aFile.delete(); - throw failure; - } - - setURI(aUri); - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void saveNoReopen() throws SaveFailureException { - saveAsNoReopen(getURI()); - } - - /** - * Insert the method's description here. Creation date: (11/29/00 6:35:08 PM) - * - * @param newArchiveClassLoader - * java.lang.ClassLoader - */ - public void setArchiveClassLoader(java.lang.ClassLoader newArchiveClassLoader) { - archiveClassLoader = newArchiveClassLoader; - } - - /** - * Insert the method's description here. Creation date: (11/29/00 6:35:08 PM) - * - * @param newExtraClasspath - * java.lang.String - */ - public void setExtraClasspath(java.lang.String newExtraClasspath) { - primSetExtraClasspath(newExtraClasspath); - //Optimization - only re init if a cl exists; otherwise it will init on - // demand - if (archiveClassLoader != null) - initializeClassLoader(); - } - - /** - * Insert the method's description here. Creation date: (11/29/00 6:35:08 PM) - */ - public void setManifest(ArchiveManifest newManifest) { - manifest = newManifest; - } - - /** - * @see com.ibm.etools.commonarchive.Archive - */ - public void setManifest(java.util.jar.Manifest aManifest) { - setManifest((ArchiveManifest) new org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveManifestImpl(aManifest)); - } - - /** - * Sets the Class-path manifest entry, rebuilds the class loader, and refreshes any reflected - * java classes - */ - public void setManifestClassPathAndRefresh(String classpath) { - ArchiveManifest mf = getManifest(); - if (manifest == null) { - makeManifest(); - } - mf.setClassPath(classpath); - //Optimization - only re init if a cl exists; otherwise it will init on - // demand - if (archiveClassLoader != null) - initializeClassLoader(); - } - - public void setOptions(org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveOptions newOptions) { - options = newOptions; - } - - /** - * Optional filter for saving a subset of files; filter will be applied for all save and extract - * invokations - */ - public void setSaveFilter(org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.SaveFilter newSaveFilter) { - saveFilter = newSaveFilter; - } - - /** - * Insert the method's description here. Creation date: (12/04/00 3:31:32 PM) - * - * @param newSaveStrategy - * com.ibm.etools.archive.SaveStrategy - */ - public void setSaveStrategy(org.eclipse.jst.j2ee.commonarchivecore.internal.strategy.SaveStrategy newSaveStrategy) { - saveStrategy = newSaveStrategy; - if (newSaveStrategy != null) { - newSaveStrategy.setArchive(this); - } - } - - /** - * Insert the method's description here. Creation date: (11/29/00 6:35:08 PM) - * - * @param newXmlEncoding - * java.lang.String - */ - public void setXmlEncoding(java.lang.String newXmlEncoding) { - xmlEncoding = newXmlEncoding; - } - - /** - * Determine whether java reflection should be set up for this archive - */ - public boolean shouldUseJavaReflection() { - return getOptions().useJavaReflection() && getLoadStrategy().isClassLoaderNeeded(); - } - - protected void throwResourceLoadException(String resourceUri, Exception ex) throws ResourceLoadException { - throw new ResourceLoadException(CommonArchiveResourceHandler.getString("load_resource_EXC_", (new Object[]{resourceUri, getURI()})), ex); //$NON-NLS-1$ = "Could not load resource "{0}" in archive "{1}"" - } - - public String getResourcesPath() throws FileNotFoundException { - return getLoadStrategy().getResourcesPath(); - } - - public String getBinariesPath() throws FileNotFoundException { - return getLoadStrategy().getBinariesPath(); - } - - protected RuntimeClasspathEntry[] emptyClasspath() { - return new RuntimeClasspathEntry[0]; - } - - protected String internalGetBinariesPath() { - try { - return getBinariesPath(); - } catch (FileNotFoundException ex) { - return null; - } - } - - /** - * By default return just the contents of this archive - */ - public RuntimeClasspathEntry[] getLocalRuntimeClassPath() { - - String absolutePath = internalGetBinariesPath(); - if (absolutePath == null) - return emptyClasspath(); - return new RuntimeClasspathEntry[]{createRuntimeClasspathEntry(absolutePath)}; - } - - protected RuntimeClasspathEntry[] getDependencyClassPathAtThisLevel() { - String absolutePath = internalGetBinariesPath(); - if (absolutePath == null) - return emptyClasspath(); - String parentPath = new java.io.File(absolutePath).getParentFile().getAbsolutePath(); - String[] mfEntries = getManifest().getClassPathTokenized(); - if (mfEntries.length == 0) - return emptyClasspath(); - List entries = new ArrayList(); - entries.addAll(createRuntimeClasspathEntries(mfEntries, parentPath)); - - return (RuntimeClasspathEntry[]) entries.toArray(new RuntimeClasspathEntry[entries.size()]); - } - - public RuntimeClasspathEntry[] getFullRuntimeClassPath() { - return concat(getLocalRuntimeClassPath(), getDependencyClassPath()); - } - - protected RuntimeClasspathEntry[] concat(RuntimeClasspathEntry[] array1, RuntimeClasspathEntry[] array2) { - List temp = new ArrayList(); - temp.addAll(Arrays.asList(array1)); - temp.addAll(Arrays.asList(array2)); - return (RuntimeClasspathEntry[]) temp.toArray(new RuntimeClasspathEntry[temp.size()]); - } - - public RuntimeClasspathEntry[] getDependencyClassPath() { - List entries = new ArrayList(); - Set visited = new HashSet(); - Set processedEntries = new HashSet(); - visited.add(this); - getDependencyClassPath(visited, entries, processedEntries, this); - return (RuntimeClasspathEntry[]) entries.toArray(new RuntimeClasspathEntry[entries.size()]); - } - - protected void getDependencyClassPath(Set visitedArchives, List entries, Set processedEntries, Archive current) { - - RuntimeClasspathEntry[] local = ((ArchiveImpl) current).getDependencyClassPathAtThisLevel(); - for (int i = 0; i < local.length; i++) { - RuntimeClasspathEntry entry = local[i]; - if (!processedEntries.contains(entry)) { - entries.add(entry); - processedEntries.add(entry); - } - Archive resolved = entry.getReferencedArchive(); - if (resolved == null) - ClasspathUtil.processManifest(entry.getAbsolutePath(), entries, processedEntries); - else if (!visitedArchives.contains(resolved)) { - visitedArchives.add(resolved); - getDependencyClassPath(visitedArchives, entries, processedEntries, resolved); - } - - } - } - - protected EARFile getEARFile() { - Container parent = getContainer(); - if (parent == null || !(parent instanceof EARFile)) - return null; - return (EARFile) parent; - } - - protected Archive getResolvedArchive(String mfValue, EARFile ear) { - String aUri = ArchiveUtil.deriveEARRelativeURI(mfValue, this); - if (aUri == null) - return null; - try { - return (Archive) ear.getFile(aUri); - } catch (FileNotFoundException ex) { - return null; - } catch (ClassCastException ex2) { - return null; - } - } - - /** - * @see com.ibm.etools.commonarchive.Archive#hasClasspathVisibilityTo(Archive) - */ - public boolean hasClasspathVisibilityTo(Archive other) { - if (other == null) - return false; - EARFile ear = getEARFile(); - if (ear == null) - return false; - Set visited = new HashSet(); - return hasClasspathVisibilityTo(other, visited, ear); - } - - public boolean hasClasspathVisibilityTo(Archive other, Set visited, EARFile ear) { - if (this == other) - return true; - if (visited.contains(this)) - return false; - visited.add(this); - String[] mfEntries = getManifest().getClassPathTokenized(); - for (int i = 0; i < mfEntries.length; i++) { - Archive anArchive = getResolvedArchive(mfEntries[i], ear); - if (anArchive != null && anArchive.hasClasspathVisibilityTo(other, visited, ear)) - return true; - } - return false; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jst.j2ee.internal.commonarchivecore.Archive#isType(java.lang.String) - */ - public boolean isType(String type) { - - return (types != null && getTypes().contains(type)); - } - -} |