Java tutorial
/******************************************************************************* * Copyright (c) 2003, 2006 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 * yyyymmdd bug Email and other contact information * -------- -------- ----------------------------------------------------------- * 20060203 126418 kathy@ca.ibm.com - Kathy Chan *******************************************************************************/ package org.eclipse.jst.ws.internal.axis.consumption.ui.util; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.Vector; import org.eclipse.core.resources.IContainer; 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.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities; import org.eclipse.jst.ws.internal.common.J2EEUtils; import org.eclipse.jst.ws.internal.common.ResourceUtils; import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; import org.eclipse.wst.common.componentcore.resources.IVirtualFolder; import org.eclipse.wst.common.componentcore.resources.IVirtualResource; public class ClasspathUtils { // Copyright public static final String copyright = "(c) Copyright IBM Corporation 2003."; //$NON-NLS-1$ private static ClasspathUtils instance_; //$NON-NLS-1$ private static String DOT_JAR = ".jar"; //$NON-NLS-1$ private static String JAR = "jar"; //$NON-NLS-1$ private static String WEBINF_LIB = "/WEB-INF/lib"; //$NON-NLS-1$ private ClasspathUtils() { } public static ClasspathUtils getInstance() { if (instance_ == null) instance_ = new ClasspathUtils(); return instance_; } public String getClasspathString(IProject project) { StringBuffer classpath = new StringBuffer(); String[] classpathEntries = getClasspath(project, false); Vector classpathVector = new Vector(); for (int i = 0; i < classpathEntries.length; i++) { if (!classpathVector.contains(classpathEntries[i])) { classpathVector.add(classpathEntries[i]); classpath.append(classpathEntries[i]); classpath.append(";"); //$NON-NLS-1$ } } return classpath.toString(); } private String[] getClasspath(IProject project, boolean isDependent) { String[] moduleClasspath = new String[0]; ArrayList projectClasspath = new ArrayList(); boolean needJavaClasspath = false; IVirtualComponent comp = ComponentCore.createComponent(project); if (comp != null) { // get the module's classpath if (J2EEUtils.isEARComponent(comp)) { moduleClasspath = getClasspathForEARProject(project, comp.getName()); // add module classpath to project classpath for (int j = 0; j < moduleClasspath.length; j++) { projectClasspath.add(moduleClasspath[j]); } } else if (J2EEUtils.isWebComponent(comp) || J2EEUtils.isJavaComponent(comp)) { needJavaClasspath = true; IContainer outputContainer = null; IResource fragmentRoot = null; IPackageFragmentRoot[] pkgFragmentRoot = ResourceUtils.getJavaPackageFragmentRoots(project); ArrayList webModuleClasspath = new ArrayList(); try { for (int i = 0; i < pkgFragmentRoot.length; i++) { fragmentRoot = pkgFragmentRoot[i].getCorrespondingResource(); if (fragmentRoot != null && (fragmentRoot.getProject().equals(project)) && (fragmentRoot.getType() != IResource.FILE)) { outputContainer = J2EEProjectUtilities.getOutputContainer(project, pkgFragmentRoot[i]); if (outputContainer != null) { webModuleClasspath.add(outputContainer.getLocation().toOSString()); } } } } catch (JavaModelException e) { } // add Web module classpath to project classpath Iterator iter = webModuleClasspath.iterator(); while (iter.hasNext()) { projectClasspath.add((String) iter.next()); } } if (!isDependent) { if (J2EEUtils.isWebComponent(comp)) { needJavaClasspath = true; moduleClasspath = getWEBINFLib(project); for (int j = 0; j < moduleClasspath.length; j++) { projectClasspath.add(moduleClasspath[j]); } } } } else { needJavaClasspath = true; } // If there are Web or Java module in the project, get the project's Java classpath if (needJavaClasspath) { String[] javaClasspath; try { IJavaProject javaProj = (IJavaProject) project.getNature(JavaCore.NATURE_ID); if (javaProj != null) { javaClasspath = getClasspathForJavaProject(javaProj); for (int j = 0; j < javaClasspath.length; j++) { projectClasspath.add(javaClasspath[j]); } } } catch (CoreException e) { // not able to get Java classpath, just ignore } } return (String[]) projectClasspath.toArray(new String[projectClasspath.size()]); } // Need to get all modules in the project. If there's a EAR module, get the utility JARs private String[] getUtilityJarClasspath(IProject project) { String[] utilityJarString = new String[0]; String[] moduleClasspath = new String[0]; ArrayList utilityJarsClasspath = new ArrayList(); String module; IVirtualComponent comp = ComponentCore.createComponent(project); if (comp != null) { module = comp.getName(); if (J2EEUtils.isEARComponent(comp)) { moduleClasspath = getClasspathForEARProject(project, module); for (int j = 0; j < moduleClasspath.length; j++) { utilityJarsClasspath.add(moduleClasspath[j]); } utilityJarString = (String[]) utilityJarsClasspath.toArray(new String[utilityJarsClasspath.size()]); } } return utilityJarString; } private String[] getClasspathForEARProject(IProject project, String module) { IPath projectPath = project.getProject().getLocation().addTrailingSeparator().append(module) .addTrailingSeparator(); return getDirectoryJarFiles(projectPath); } private String[] getDirectoryJarFiles(IPath iPath) { File dir = iPath.toFile(); Vector jarsVector = new Vector(); if (dir.exists() && dir.isDirectory()) { String[] filenames = dir.list(); for (int i = 0; i < filenames.length; i++) { if (filenames[i].endsWith(DOT_JAR)) jarsVector.add(path2String(iPath) + filenames[i]); } } String[] jars = new String[jarsVector.size()]; jarsVector.copyInto(jars); return jars; } private String[] getWEBINFLib(IProject project) { String[] webinfLibJars = new String[0]; ArrayList anArrayList = new ArrayList(); try { IVirtualComponent component = ComponentCore.createComponent(project); if (component != null) { IVirtualFolder webInfLib = component.getRootFolder().getFolder(new Path(WEBINF_LIB)); if (webInfLib != null) { IVirtualResource[] resources = webInfLib.members(); IResource aResource = null; for (int i = 0; i < resources.length; i++) { aResource = resources[i].getUnderlyingResource(); if (JAR.equalsIgnoreCase(aResource.getFileExtension())) anArrayList.add(aResource.getLocation().toOSString()); } if (anArrayList.size() != 0) webinfLibJars = (String[]) anArrayList.toArray(new String[anArrayList.size()]); } } } catch (CoreException e) { } return webinfLibJars; } private String[] getClasspathForJavaProject(IJavaProject javaProject) { ArrayList projectClasspath = new ArrayList(); try { IClasspathEntry[] buildPath = javaProject.getResolvedClasspath(true); for (int i = 0; i < buildPath.length; i++) { String[] buildPathString = classpathEntry2String(buildPath[i], javaProject.getProject()); for (int j = 0; j < buildPathString.length; j++) { projectClasspath.add(buildPathString[j]); } } } catch (JavaModelException jme) { } String[] utilityJarsClasspath; IProject project = javaProject.getProject(); IProject[] referencingProjects = project.getReferencingProjects(); for (int i = 0; i < referencingProjects.length; i++) { utilityJarsClasspath = getUtilityJarClasspath(referencingProjects[i]); for (int j = 0; j < utilityJarsClasspath.length; j++) { projectClasspath.add(utilityJarsClasspath[j]); } } return (String[]) projectClasspath.toArray(new String[projectClasspath.size()]); } private String[] classpathEntry2String(IClasspathEntry entry, IProject project) { switch (entry.getEntryKind()) { case IClasspathEntry.CPE_LIBRARY: { return new String[] { path2String(entry.getPath()) }; } case IClasspathEntry.CPE_PROJECT: { return getClasspath(ResourcesPlugin.getWorkspace().getRoot().getProject(entry.getPath().lastSegment()), true); } case IClasspathEntry.CPE_SOURCE: { IPath path = entry.getPath(); if (path.segment(0).equals(project.getName())) path = path.removeFirstSegments(1); return new String[] { path2String(project.getLocation().addTrailingSeparator().append(path)) }; } case IClasspathEntry.CPE_VARIABLE: { return classpathEntry2String(JavaCore.getResolvedClasspathEntry(entry), project); } default: { return new String[] { path2String(entry.getPath()) }; } } } private String path2String(IPath path) { return path.toOSString(); } }