diff options
Diffstat (limited to 'plugins/org.eclipse.jst.j2ee/classpathdep/org/eclipse/jst/j2ee/classpathdep/ClasspathDependencyUtil.java')
-rw-r--r-- | plugins/org.eclipse.jst.j2ee/classpathdep/org/eclipse/jst/j2ee/classpathdep/ClasspathDependencyUtil.java | 529 |
1 files changed, 0 insertions, 529 deletions
diff --git a/plugins/org.eclipse.jst.j2ee/classpathdep/org/eclipse/jst/j2ee/classpathdep/ClasspathDependencyUtil.java b/plugins/org.eclipse.jst.j2ee/classpathdep/org/eclipse/jst/j2ee/classpathdep/ClasspathDependencyUtil.java deleted file mode 100644 index 581db2212..000000000 --- a/plugins/org.eclipse.jst.j2ee/classpathdep/org/eclipse/jst/j2ee/classpathdep/ClasspathDependencyUtil.java +++ /dev/null @@ -1,529 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 BEA Systems, Inc. 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: - * BEA Systems, Inc. - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.j2ee.classpathdep; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -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.Path; -import org.eclipse.emf.common.util.URI; -import org.eclipse.jdt.core.IClasspathAttribute; -import org.eclipse.jdt.core.IClasspathEntry; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator; -import org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyVirtualComponent; -import org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator.ClasspathDependencyValidatorData; -import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil; -import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent; -import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; -import org.eclipse.wst.common.componentcore.resources.IVirtualReference; -import org.eclipse.wst.validation.internal.provisional.core.IMessage; - -/** - * Contains utility code for working manipulating the WTP classpath component - * dependency attribute. - */ -public class ClasspathDependencyUtil implements IClasspathDependencyConstants { - - /** - * This is equivalent to calling getRawComponentClasspathDependencies(javaProject, DependencyAttributeType.CLASSPATH_COMPONENT_DEPENDENCY); - * - * @deprecated use {@link #getRawComponentClasspathDependencies(IJavaProject, org.eclipse.jst.j2ee.classpathdep.IClasspathDependencyConstants.DependencyAttributeType)} - * - * @param javaProject - * @return - * @throws CoreException - */ - public static Map getRawComponentClasspathDependencies(final IJavaProject javaProject) throws CoreException { - return getRawComponentClasspathDependencies(javaProject, DependencyAttributeType.CLASSPATH_COMPONENT_DEPENDENCY); - } - - /** - * Returns all unresolved classpath entries for the specified Java project that - * have the special WTP classpath component dependency attribute. - * - * @param javaProject Java project whose component classpath dependencies are being retrieved. - * @parem attributeType the attribute to search for - * @return Map from IClasspathEntry to IClasspathAttribute for classpath component dependency. - * @return IClasspathEntries with the special component dependency attribute. - * @throws CoreException Thrown if an error is encountered accessing the unresolved classpath. - */ - public static Map getRawComponentClasspathDependencies(final IJavaProject javaProject, DependencyAttributeType attributeType) throws CoreException { - if (javaProject == null) { - return Collections.EMPTY_MAP; - } - final Map referencedRawEntries = new HashMap(); - final IClasspathEntry[] entries = javaProject.getRawClasspath(); - for (int i = 0; i < entries.length; i++) { - final IClasspathEntry entry = entries[i]; - final IClasspathAttribute attrib = checkForComponentDependencyAttribute(entry, attributeType); - if (attrib != null) { - referencedRawEntries.put(entry, attrib); - } - } - return referencedRawEntries; - } - - /** - * Retrieves the unresolved classpath entries for the specified Java project that - * could potentially be mapped into the virtual component tree for the project via - * the special WTP classpath component dependence attribute. Classpath entries that - * currently have the attribute are not returned by this method (@see {@link #getRawComponentClasspathDependencies(IJavaProject, boolean)}) - * - * @param javaProject Java project whose potential component classpath dependencies will be retrieved. - * @return List of raw IClasspathEntries for potential classpath component dependencies. - * @throws CoreException Thrown if an error is encountered. - */ - public static List getPotentialComponentClasspathDependencies(final IJavaProject javaProject) throws CoreException { - final List potentialRawEntries = new ArrayList(); - - if (javaProject == null || !javaProject.getProject().isAccessible()) { - return Collections.EMPTY_LIST; - } - final IProject project = javaProject.getProject(); - final ClasspathDependencyValidatorData data = new ClasspathDependencyValidatorData(project); - final IClasspathEntry[] entries = javaProject.getRawClasspath(); - for (int i = 0; i < entries.length; i++) { - final IClasspathEntry entry = entries[i]; - final IClasspathAttribute attrib = checkForComponentDependencyAttribute(entry); - if (attrib != null) { - continue; // already has the attribute - } else { - // check validation logic for entry - // always mark the "isWebApp" param as true so that we get both exported and non-exported entries; for non-web projects, - // want to let a user have the option to see and select the non-exported entries and then just generate a validation - // error if they happen to select one. - final IMessage[] msgs = ClasspathDependencyValidator.validateVirtualComponentEntry(entry, null, true, project, data); - boolean error = false; - for (int j = 0; j < msgs.length; j++) { - if (msgs[j].getSeverity() == IMessage.HIGH_SEVERITY) { - error = true; - break; - } - } - if (error) { - continue; - } - - // entry can potentially be tagged as a component dependency - potentialRawEntries.add(entry); - } - } - return potentialRawEntries; - } - - private static boolean isValid(final IClasspathEntry entry, final IClasspathAttribute attrib, final boolean isWebApp, final IProject project, final ClasspathDependencyValidatorData data) { - final IMessage[] msgs = ClasspathDependencyValidator.validateVirtualComponentEntry(entry, attrib, isWebApp, project, data); - boolean valid = true; - for (int j = 0; j < msgs.length; j++) { - if (msgs[j].getSeverity() == IMessage.HIGH_SEVERITY) { - valid = false; - break; - } - } - return valid; - } - - /** - * Returns all resolved classpath entries for the specified Java project that - * have one of the special WTP classpath component dependency attributes and pass the set of rules - * that govern valid classpath dependencies. - * - * @param javaProject Java project whose component classpath dependencies are being retrieved. - * @param isWebApp True if the target project is associated with a web project. - * @return Map from IClasspathEntry to IClasspathAttribute for classpath component dependencies. - * @throws CoreException Thrown if an error is encountered accessing the unresolved classpath. - */ - public static Map getComponentClasspathDependencies(final IJavaProject javaProject, final boolean isWebApp) throws CoreException { - return getComponentClasspathDependencies(javaProject, isWebApp, true); - } - - /** - * Returns all resolved classpath entries for the specified Java project that - * have one of the special WTP classpath component dependency attributes. - * - * @param javaProject Java project whose component classpath dependencies are being retrieved. - * @param isWebApp True if the target project is associated with a web project. - * @param onlyValid If true, only valid dependencies will be returned. If false, the raw entry must be valid but the - * resolved can be invalid. - * @return Map from IClasspathEntry to IClasspathAttribute for classpath component dependencies. - * @throws CoreException Thrown if an error is encountered accessing the unresolved classpath. - */ - public static Map getComponentClasspathDependencies(final IJavaProject javaProject, final boolean isWebApp, final boolean onlyValid) throws CoreException { - - final ClasspathDependencyValidatorData data = new ClasspathDependencyValidatorData(javaProject.getProject()); - - // get the raw entries - final Map referencedRawEntries = getRawComponentClasspathDependencies(javaProject); - final Map validRawEntries = new HashMap(); - - // filter out non-valid referenced raw entries - final Iterator i = referencedRawEntries.keySet().iterator(); - while (i.hasNext()) { - final IClasspathEntry entry = (IClasspathEntry) i.next(); - final IClasspathAttribute attrib = (IClasspathAttribute) referencedRawEntries.get(entry); - if (isValid(entry, attrib, isWebApp, javaProject.getProject(), data)) { - validRawEntries.put(entry, attrib); - } - } - - // if we have no valid raw entries, return empty map - if (validRawEntries.isEmpty()) { - return Collections.EMPTY_MAP; - } - - // XXX Would like to replace the code below with use of a public JDT API that returns - // the raw IClasspathEntry for a given resolved IClasspathEntry (see see https://bugs.eclipse.org/bugs/show_bug.cgi?id=183995) - // The code must currently leverage IPackageFragmentRoot to determine this - // mapping and, because IPackageFragmentRoots do not maintain IClasspathEntry data, a prior - // call is needed to getResolvedClasspath() and the resolved IClasspathEntries have to be stored in a Map from IPath-to-IClasspathEntry to - // support retrieval using the resolved IPackageFragmentRoot - - // retrieve the resolved classpath - final IClasspathEntry[] entries = javaProject.getResolvedClasspath(true); - final Map pathToResolvedEntry = new HashMap(); - - // store in a map from path to entry - for (int j = 0; j < entries.length; j++) { - pathToResolvedEntry.put(entries[j].getPath(), entries[j]); - } - - final Map referencedEntries = new LinkedHashMap(); - - // grab all IPackageFragmentRoots - - // TODO this ignores project cp entries; can easily add in the raw project cp entries, however, do not have a good way to - // map project cp entries resolved from cp containers back to the corresponding raw entry (and thereby determine if the - // entry has the publish/export attribute) - - final IPackageFragmentRoot[] roots = javaProject.getPackageFragmentRoots(); - for (int j = 0; j < roots.length; j++) { - final IPackageFragmentRoot root = roots[j]; - final IClasspathEntry rawEntry = root.getRawClasspathEntry(); - - // is the raw entry valid? - IClasspathAttribute attrib = (IClasspathAttribute) validRawEntries.get(rawEntry); - if (attrib == null) { - continue; - } - - final IPath pkgFragPath = root.getPath(); - final IClasspathEntry resolvedEntry = (IClasspathEntry) pathToResolvedEntry.get(pkgFragPath); - final IClasspathAttribute resolvedAttrib = checkForComponentDependencyAttribute(resolvedEntry); - // attribute for the resolved entry must either be unspecified or it must be the - // dependency attribute for it to be included - if (resolvedAttrib == null || resolvedAttrib.getName().equals(CLASSPATH_COMPONENT_DEPENDENCY)) { - // filter out resolved entry if it doesn't pass the validation rules - if (!onlyValid || isValid(resolvedEntry, resolvedAttrib != null?resolvedAttrib:attrib,isWebApp, javaProject.getProject(), data)) { - if (resolvedAttrib != null) { - // if there is an attribute on the sub-entry, use that - attrib = resolvedAttrib; - } - referencedEntries.put(resolvedEntry, attrib); - } - } - } - - return referencedEntries; - } - - /** - * Retrieves the location (as a absolute file system path) for the specified classpath entry. - * @param entry Classpath entry. If null, returns null. - * @return Absolute file system path. - */ - public static IPath getEntryLocation(final IClasspathEntry entry) { - - if (entry == null) { - return null; - } - final IPath entryPath = entry.getPath(); - IPath entryLocation = entryPath; - final IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(entryPath); - if (resource != null) { - entryLocation = resource.getLocation(); - } - return entryLocation; - } - - /** - * Retrieves the IResource corresponding to the specified classpath entry or null if it does not represent a Workspace resource. - * @param entry Classpath entry. If null, returns null. - * @return IResource or null. - */ - public static IResource getEntryResource(final IClasspathEntry entry) { - if (entry == null) { - return null; - } - final IPath entryPath = entry.getPath(); - return ResourcesPlugin.getWorkspace().getRoot().findMember(entryPath); - } - - /** - * Checks if the specified IVirtualReference represents an project cp entry. If so, returns the underlying IProject, otherwise, - * returns null. - * @param ref The IVirtualReference - * @return IProject referenced by the project cp entry or null if the specified reference is null or does not refer to - * a VirtualArchiveComponent with type VirtualArchiveComponent.CLASSPATHARCHIVETYPE that represents a project cp entry. - */ - public static IProject isClasspathProjectReference(final IVirtualReference ref) { - if (ref == null) { - return null; - } - if (ref.getReferencedComponent() instanceof VirtualArchiveComponent) { - final VirtualArchiveComponent comp = (VirtualArchiveComponent) ref.getReferencedComponent(); - if (comp.getArchiveType().equals(VirtualArchiveComponent.CLASSPATHARCHIVETYPE) && - comp.getUnderlyingDiskFile() == null) { - return comp.getProject(); - } - } - return null; - } - - /** - * Checks if the specified classpath entry represents a class folder. - * @param entry The entry to check. - * @return True if it is a library entry that points to a class folder. False otherwise. - */ - public static boolean isClassFolderEntry(final IClasspathEntry entry) { - if (entry == null || entry.getEntryKind() != IClasspathEntry.CPE_LIBRARY) { - return false; - } - // does the path refer to a file or a folder? - final IPath entryPath = entry.getPath(); - IPath entryLocation = entryPath; - final IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(entryPath); - if (resource != null) { - entryLocation = resource.getLocation(); - } - boolean isFile = true; // by default, assume a jar file - if (entryLocation.toFile().isDirectory()) { - isFile = false; - } - return !isFile; - } - - /** - * Retrieves the location (as an absolute local file system path) for the classpath dependency represented - * by the specified IVirtualReference. Will return null for a project cp entry. - * @param ref The IVirtualReference - * @return Absolute path in the local file system or null if the specified reference is null or does not refer to - * a VirtualArchiveComponent with type VirtualArchiveComponent.CLASSPATHARCHIVETYPE. - */ - public static IPath getClasspathVirtualReferenceLocation(final IVirtualReference ref) { - if (ref == null) { - return null; - } - if (ref.getReferencedComponent() instanceof VirtualArchiveComponent) { - final VirtualArchiveComponent comp = (VirtualArchiveComponent) ref.getReferencedComponent(); - if (comp.getArchiveType().equals(VirtualArchiveComponent.CLASSPATHARCHIVETYPE)) { - java.io.File cpEntryFile = comp.getUnderlyingDiskFile(); - IPath cpEntryPath = null; - if (cpEntryFile != null && cpEntryFile.exists()) { - cpEntryPath = new Path(cpEntryFile.getAbsolutePath()); - } else { - final IFile iFile = comp.getUnderlyingWorkbenchFile(); - if (iFile != null) { - cpEntryPath = iFile.getLocation(); - } else { - IContainer container = getClassFolder(comp); - if (container != null) { - return container.getLocation(); - } - } - } - return cpEntryPath; - } - } - return null; - } - - /** - * Retrieves the runtime path to which the resolved classpath entry components will be - * added within the deployed application. - * @param attrib The IClasspathAttribute with the WTP classpath component dependency value. If null, - * will return the default path. - * @param isWebApp True for web projects, false otherwise. - * @param isClassFolder True if the default value should be computed for a class folder. Ignored if calculating for - * a valid IClasspathAttribute. - * @return Runtime path. Will be null if the attribute is not a WTP classpath component dependency - * attribute. - */ - public static IPath getRuntimePath(final IClasspathAttribute attrib, final boolean isWebApp, final boolean isClassFolder) { - if (attrib != null && !attrib.getName().equals(CLASSPATH_COMPONENT_DEPENDENCY)) { - return null; - } - if (attrib == null || attrib.getValue()== null || attrib.getValue().length() == 0) { - return getDefaultRuntimePath(isWebApp, isClassFolder); - } - return new Path(attrib.getValue()); - } - - /** - * Checks if the specified IVirtualReference represents a class folder that has been marked for publish/export. - * @param ref IVirtualReference to test. - * @return True if this is a publish/export class folder. - */ - public static boolean isClassFolderReference(final IVirtualReference ref) { - final IPath runtimePath = ref.getRuntimePath(); - final IVirtualComponent comp = ref.getReferencedComponent(); - // must refer to a ClasspathDependencyVirtualComponent - if (comp instanceof ClasspathDependencyVirtualComponent) { - final ClasspathDependencyVirtualComponent cpComp= (ClasspathDependencyVirtualComponent) comp; - return cpComp.isClassFolder(); - } - return false; - } - - /** - * Returns the container for the specified VirtualArchiveComponent or null if this reference does not match to a container. - * @param comp IVirtualComponent. - * @return IContainer for the class folder or null if this reference does not match a container. - */ - public static IContainer getClassFolder(final IVirtualComponent comp) { - if (comp instanceof ClasspathDependencyVirtualComponent) { - final ClasspathDependencyVirtualComponent cpComp= (ClasspathDependencyVirtualComponent) comp; - return cpComp.getClassFolder(); - } - return null; - } - - /** - * Retrieves the default runtime path to which the resolved classpath entry components will be - * added within the deployed application. This method is only valid for non-class folder entries. - * @param isWebApp True if the default runtime path for web apps should be returned, false otherwise. - * @return The default runtime path. - */ - public static IPath getDefaultRuntimePath(final boolean isWebApp) { - return getDefaultRuntimePath(isWebApp, false); - } - - /** - * Retrieves the default runtime path to which the resolved classpath entry components will be - * added within the deployed application. - * @param isWebApp True if the default runtime path for web apps should be returned, false otherwise. - * @param isClassFolder True if the path is a class folder. - * @return The default runtime path. - */ - public static IPath getDefaultRuntimePath(final boolean isWebApp, final boolean isClassFolder) { - if (isWebApp) { - return isClassFolder ? WEB_INF_CLASSES_PATH : WEB_INF_LIB_PATH; - } else { - return isClassFolder ? RUNTIME_MAPPING_INTO_COMPONENT_PATH : RUNTIME_MAPPING_INTO_CONTAINER_PATH; - } - } - - /** - * Retrieves the archive name for the specified classpath entry - * @param entry The entry. - * @return The archive name. - */ - public static String getArchiveName(final IClasspathEntry entry) { - if (entry == null) { - return null; - } - final boolean isClassFolder = isClassFolderEntry(entry); - if (isClassFolder) { - IResource resource = getEntryResource(entry); - if (resource == null) { - return getEntryLocation(entry).lastSegment(); - } else { - return resource.getFullPath().toString(); - } - } - final IPath entryLocation = getEntryLocation(entry); - return entryLocation.lastSegment(); - } - - - - /** - * Checks if the specified IClasspathEntry has either of the special WTP component dependency - * attributes that indicate it should be mapped into the virtual component for the associated project. - * - * @param entry The IClasspathEntry. - * @return The IClasspathAttribute that holds the special WTP attribute or null if one was not found. - */ - public static IClasspathAttribute checkForComponentDependencyAttribute(final IClasspathEntry entry) { - return checkForComponentDependencyAttribute(entry, DependencyAttributeType.DEPENDENCY_OR_NONDEPENDENCY); - } - - /** - * Checks if the specified IClasspathEntry has one of the special WTP component dependency - * attributes that indicate it should be mapped into the virtual component for the associated project. - * - * @param entry The IClasspathEntry. - * @param componentDependency Controls which type of dependency attribute should be checked for (or whether both should be checked). - * @return The IClasspathAttribute that holds the special WTP attribute or null if one was not found. - */ - public static IClasspathAttribute checkForComponentDependencyAttribute(final IClasspathEntry entry, final DependencyAttributeType attributeType) { - if (entry == null) { - return null; - } - final IClasspathAttribute[] attributes = entry.getExtraAttributes(); - for (int i = 0; i < attributes.length; i++) { - final IClasspathAttribute attribute = attributes[i]; - final String name = attribute.getName(); - if (name.equals(CLASSPATH_COMPONENT_DEPENDENCY)) { - if (attributeType == DependencyAttributeType.DEPENDENCY_OR_NONDEPENDENCY - || attributeType == DependencyAttributeType.CLASSPATH_COMPONENT_DEPENDENCY) { - return attribute; - } - } else if (name.equals(CLASSPATH_COMPONENT_NON_DEPENDENCY)) { - if (attributeType == DependencyAttributeType.DEPENDENCY_OR_NONDEPENDENCY - || attributeType == DependencyAttributeType.CLASSPATH_COMPONENT_NONDEPENDENCY) { - return attribute; - } - } - } - return null; - } - - /** - * Determines if the specified virtual component represents a classpath component dependency. - * @param component Virtual component to test - * @return True if a classpath component dependency, false otherwise. - */ - public static boolean isClasspathComponentDependency(final IVirtualComponent component) { - if (component == null) { - return false; - } - if (component instanceof VirtualArchiveComponent) { - final VirtualArchiveComponent archiveComp = (VirtualArchiveComponent) component; - return archiveComp.getArchiveType().equals(VirtualArchiveComponent.CLASSPATHARCHIVETYPE); - } - return false; - } - - /** - * Retrieves the classpath component display string for the specified component. - * @param component Component that represents a classpath component. - * @return Display string. - */ - public static String getClasspathComponentDependencyDisplayString(final IVirtualComponent component) { - final URI archiveURI = URI.createURI(ModuleURIUtil.getHandleString(component)); - return archiveURI.lastSegment(); - } - -} |