blob: 0336ebb5071f4deb8604ea3551d68d0e4a391baf [file] [log] [blame]
/*******************************************************************************
* 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.project;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
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.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.ICompilationUnit;
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.jem.java.JavaClass;
import org.eclipse.jem.java.JavaRefFactory;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jem.workbench.utility.JemProjectUtilities;
import org.eclipse.jst.common.internal.modulecore.util.ManifestUtilities;
import org.eclipse.jst.common.jdt.internal.javalite.IJavaProjectLite;
import org.eclipse.jst.common.jdt.internal.javalite.JavaCoreLite;
import org.eclipse.jst.common.jdt.internal.javalite.JavaLiteUtilities;
import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive;
import org.eclipse.jst.j2ee.commonarchivecore.internal.CommonarchiveFactory;
import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
import org.eclipse.jst.j2ee.commonarchivecore.internal.File;
import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.DeploymentDescriptorLoadException;
import org.eclipse.jst.j2ee.commonarchivecore.internal.exception.OpenFailureException;
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.util.ArchiveUtil;
import org.eclipse.jst.j2ee.ejb.EJBJar;
import org.eclipse.jst.j2ee.ejb.EnterpriseBean;
import org.eclipse.jst.j2ee.internal.J2EEConstants;
import org.eclipse.jst.j2ee.internal.archive.operations.JavaComponentLoadStrategyImpl;
import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathUpdater;
import org.eclipse.jst.j2ee.internal.componentcore.JavaEEBinaryComponentHelper;
import org.eclipse.jst.j2ee.internal.moduleextension.EarModuleManager;
import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
import org.eclipse.jst.j2ee.project.EarUtilities;
import org.eclipse.jst.j2ee.project.JavaEEProjectUtilities;
import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants;
import org.eclipse.jst.j2ee.project.facet.IJavaProjectMigrationDataModelProperties;
import org.eclipse.jst.j2ee.project.facet.JavaProjectMigrationDataModelProvider;
import org.eclipse.jst.j2ee.project.facet.JavaProjectMigrationOperation;
import org.eclipse.jst.jee.archive.IArchive;
import org.eclipse.jst.jee.archive.IArchiveResource;
import org.eclipse.jst.server.core.FacetUtil;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
import org.eclipse.wst.common.componentcore.internal.util.ComponentUtilities;
import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
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;
import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.internal.SimpleValidateEdit;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.IProjectFacet;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
import org.eclipse.wst.server.core.IRuntime;
public class J2EEProjectUtilities extends ProjectUtilities implements IJ2EEFacetConstants {
/**
* Return the absolute path of a loose archive in a J2EE application or WAR file
*/
public static IPath getRuntimeLocation(IProject aProject) {
if (JemProjectUtilities.isBinaryProject(aProject))
return getBinaryProjectJARLocation(aProject);
return JemProjectUtilities.getJavaProjectOutputAbsoluteLocation(aProject);
}
public static IPath getBinaryProjectJARLocation(IProject aProject) {
List sources = JemProjectUtilities.getLocalJARPathsFromClasspath(aProject);
if (!sources.isEmpty()) {
IPath path = (IPath) sources.get(0);
return aProject.getFile(path).getLocation();
}
return null;
}
public static Archive getClientJAR(EJBJarFile file, EARFile earFile) {
EJBJar jar = null;
try {
jar = file.getDeploymentDescriptor();
} catch (DeploymentDescriptorLoadException exc) {
return null;
}
if (jar == null)
return null;
String clientJAR = jar.getEjbClientJar();
if (clientJAR == null || clientJAR.length() == 0)
return null;
String normalized = ArchiveUtil.deriveEARRelativeURI(clientJAR, file.getURI());
if (normalized != null) {
try {
File aFile = earFile.getFile(normalized);
if (aFile.isArchive() && !aFile.isModuleFile())
return (Archive) aFile;
} catch (FileNotFoundException nothingThere) {
}
}
return null;
// TODO - release the DD here to free up space
}
/**
* Append one IClasspathEntry to the build path of the passed project. If a classpath entry
* having the same path as the parameter already exists, then does nothing.
*/
public static void appendJavaClassPath(IProject p, IClasspathEntry newEntry) throws JavaModelException {
IJavaProject javaProject = JemProjectUtilities.getJavaProject(p);
if (javaProject == null)
return;
IClasspathEntry[] classpath = javaProject.getRawClasspath();
List newPathList = new ArrayList(classpath.length);
for (int i = 0; i < classpath.length; i++) {
IClasspathEntry entry = classpath[i];
// fix dup class path entry for .JETEmitter project
// Skip the entry to be added if it already exists
if (Platform.getOS().equals(Platform.OS_WIN32)) {
if (!entry.getPath().toString().equalsIgnoreCase(newEntry.getPath().toString()))
newPathList.add(entry);
else
return;
} else {
if (!entry.getPath().equals(newEntry.getPath()))
newPathList.add(entry);
else
return;
}
}
newPathList.add(newEntry);
IClasspathEntry[] newClasspath = (IClasspathEntry[]) newPathList.toArray(new IClasspathEntry[newPathList.size()]);
javaProject.setRawClasspath(newClasspath, new NullProgressMonitor());
}
public static Archive asArchiveFromBinary(String jarUri, IProject aProject) throws OpenFailureException {
IPath path = getBinaryProjectJARLocation(aProject);
if (path != null) {
String location = path.toOSString();
Archive anArchive = CommonarchiveFactory.eINSTANCE.primOpenArchive(location);
anArchive.setURI(jarUri);
return anArchive;
}
return null;
}
/**
* @deprecated Use org.eclipse.jst.common.internal.modulecore.util.ManifestUtilities instead
* @param aFile
* @return
*/
public static ArchiveManifest readManifest(IFile aFile) {
InputStream in = null;
try {
if (aFile == null || !aFile.exists())
return null;
in = aFile.getContents();
return new ArchiveManifestImpl(in);
} catch (Exception ex) {
J2EEPlugin.logError(ex);
return null;
} finally {
if (in != null) {
try {
in.close();
} catch (IOException weTried) {
}
}
}
}
public static ArchiveManifest readManifest(IProject p) {
InputStream in = null;
try {
IFile aFile = getManifestFile(p);
if (aFile == null || !aFile.exists())
return null;
in = aFile.getContents();
return new ArchiveManifestImpl(in);
} catch (Exception ex) {
J2EEPlugin.logError(ex);
return null;
} finally {
if (in != null) {
try {
in.close();
} catch (IOException weTried) {
}
}
}
}
/**
* Equavalent to calling getManifestFile(project, true)
*
* @param p
* @return
*/
public static IFile getManifestFile(IProject project) {
return getManifestFile(project, true);
}
/**
* Returns the IFile handle to the J2EE manifest file for the specified
* project. If createIfNecessary is true, the MANIFEST.MF file will be
* created if it does not already exist.
*
* @param p
* @param createIfNecessary
* @return
*/
public static IFile getManifestFile(IProject p, boolean createIfNecessary) {
IVirtualComponent component = ComponentCore.createComponent(p);
try {
IFile file = ComponentUtilities.findFile(component, new Path(J2EEConstants.MANIFEST_URI));
if (createIfNecessary && file == null) {
IVirtualFolder virtualFolder = component.getRootFolder();
file = virtualFolder.getUnderlyingFolder().getFile(new Path(J2EEConstants.MANIFEST_URI));
try {
ManifestFileCreationAction.createManifestFile(file, p);
} catch (CoreException e) {
J2EEPlugin.logError(e);
} catch (IOException e) {
J2EEPlugin.logError(e);
}
}
return file;
} catch (CoreException ce) {
J2EEPlugin.logError(ce);
}
return null;
}
public static void writeManifest(IProject aProject, ArchiveManifest manifest) throws java.io.IOException {
writeManifest(aProject, getManifestFile(aProject), manifest);
}
public static void writeManifest(IFile aFile, ArchiveManifest manifest) throws java.io.IOException {
writeManifest(aFile.getProject(), aFile, manifest);
}
private static void writeManifest(IProject aProject, IFile aFile, ArchiveManifest manifest) throws java.io.IOException {
if (aFile != null) {
if(SimpleValidateEdit.validateEdit(new IFile[] { aFile })){
ManifestUtilities.writeManifest(aFile, manifest);
J2EEComponentClasspathUpdater.getInstance().queueUpdateModule(aProject);
}
}
}
public static ArchiveManifest readManifest(IVirtualComponent component) {
if (!component.isBinary()) {
IVirtualFile vManifest = component.getRootFolder().getFile(J2EEConstants.MANIFEST_URI);
if (vManifest.exists()) {
IFile manifestFile = vManifest.getUnderlyingFile();
InputStream in = null;
try {
in = manifestFile.getContents();
return new ArchiveManifestImpl(in);
} catch (IOException e) {
J2EEPlugin.logError(e);
} catch (CoreException e) {
J2EEPlugin.logError(e);
} finally {
if (in != null) {
try {
in.close();
in = null;
} catch (IOException e) {
J2EEPlugin.logError(e);
}
}
}
}
} else {
JavaEEBinaryComponentHelper helper = null;
try{
helper = new JavaEEBinaryComponentHelper(component);
IArchive archive = null;
InputStream in = null;
try{
archive = helper.accessArchive();
if(null != archive){
IPath manifestPath = new Path(J2EEConstants.MANIFEST_URI);
if(archive.containsArchiveResource(manifestPath)){
IArchiveResource manifestResource = archive.getArchiveResource(manifestPath);
if(manifestResource != null){
in = manifestResource.getInputStream();
ArchiveManifest manifest = new ArchiveManifestImpl(in);
return manifest;
}
}
}
} catch (FileNotFoundException e) {
J2EEPlugin.logError(e);
} catch (IOException e) {
J2EEPlugin.logError(e);
} finally{
if (in != null) {
try {
in.close();
in = null;
} catch (IOException e) {
J2EEPlugin.logError(e);
}
}
if(archive != null){
helper.releaseArchive(archive);
}
}
} finally{
if(helper != null){
helper.dispose();
}
}
}
return null;
}
/**
* Keys are the EJB JAR files and the values are the respective client JARs; includes only key
* value pairs for which EJB Client JARs are defined and exist.
*
* @author schacher
*/
public static Map collectEJBClientJARs(EARFile earFile) {
if (earFile == null)
return Collections.EMPTY_MAP;
Map ejbClientJARs = null;
List ejbJARFiles = earFile.getEJBJarFiles();
Archive clientJAR = null;
for (int i = 0; i < ejbJARFiles.size(); i++) {
EJBJarFile ejbJarFile = (EJBJarFile) ejbJARFiles.get(i);
clientJAR = getClientJAR(ejbJarFile, earFile);
if (clientJAR != null) {
if (ejbClientJARs == null)
ejbClientJARs = new HashMap();
ejbClientJARs.put(ejbJarFile, clientJAR);
}
}
return ejbClientJARs == null ? Collections.EMPTY_MAP : ejbClientJARs;
}
public static String computeRelativeText(String referencingURI, String referencedURI, EnterpriseBean bean) {
if (bean == null)
return null;
String beanName = bean.getName();
if (beanName == null)
return null;
String relativeUri = computeRelativeText(referencingURI, referencedURI);
if (relativeUri == null)
return beanName;
return relativeUri + "#" + beanName; //$NON-NLS-1$
}
public static String computeRelativeText(String referencingURI, String referencedURI) {
if (referencingURI == null || referencedURI == null)
return null;
IPath pPre = new Path(referencingURI);
IPath pDep = new Path(referencedURI);
if (pPre.getDevice() != null || pDep.getDevice() != null)
return null;
pPre = pPre.makeRelative();
pDep = pDep.makeRelative(); // referenced Archive path URI
while (pPre.segmentCount() > 1 && pDep.segmentCount() > 1 && pPre.segment(0).equals(pDep.segment(0))) {
pPre = pPre.removeFirstSegments(1);
pDep = pDep.removeFirstSegments(1);
}
IPath result = null;
StringBuffer buf = new StringBuffer();
String segment = null;
do {
segment = pDep.lastSegment();
pPre = pPre.removeLastSegments(1);
pDep = pDep.removeLastSegments(1);
if (segment != null) {
if (result == null)
result = new Path(segment);
else
result = new Path(segment).append(result);
}
if (!pPre.equals(pDep) && !pPre.isEmpty())
buf.append("../"); //$NON-NLS-1$
} while (!pPre.equals(pDep));
if (result != null)
buf.append(result.makeRelative().toString());
return buf.toString();
}
public static IProject getEJBProjectFromEJBClientProject(IProject ejbClientProject) {
try {
if (null != ejbClientProject && ejbClientProject.hasNature(JavaCore.NATURE_ID)) {
IProject[] allProjects = getAllProjects();
for (int i = 0; i < allProjects.length; i++) {
if (null != EarModuleManager.getEJBModuleExtension().getEJBJar(allProjects[i])) {
if (ejbClientProject == EarModuleManager.getEJBModuleExtension().getDefinedEJBClientJARProject(allProjects[i])) {
return allProjects[i];
}
}
}
}
} catch (CoreException e) {
}
return null;
}
public static EnterpriseBean getEnterpriseBean(ICompilationUnit cu) {
IProject proj = cu.getJavaProject().getProject();
EJBJar jar = EarModuleManager.getEJBModuleExtension().getEJBJar(proj);
if (null == jar) {
jar = EarModuleManager.getEJBModuleExtension().getEJBJar(getEJBProjectFromEJBClientProject(proj));
}
if (jar != null) {
int index = cu.getElementName().indexOf('.');
String className = cu.getElementName();
if (index > 0)
className = className.substring(0, index);
JavaClass javaClass = (JavaClass) JavaRefFactory.eINSTANCE.reflectType(cu.getParent().getElementName(), className, jar.eResource().getResourceSet());
return jar.getEnterpriseBeanWithReference(javaClass);
}
return null;
}
public static IContainer getSourceFolderOrFirst(IProject p, String defaultSourceName) {
try {
IPath sourcePath = getSourcePathOrFirst(p, defaultSourceName);
if (sourcePath == null)
return null;
else if (sourcePath.isEmpty())
return p;
else
return p.getFolder(sourcePath);
} catch (IllegalArgumentException ex) {
return null;
}
}
public static void removeBuilders(IProject project, List builderids) throws CoreException {
IProjectDescription desc = project.getDescription();
ICommand[] oldSpec = desc.getBuildSpec();
int oldLength = oldSpec.length;
if (oldLength == 0)
return;
int remaining = 0;
// null out all commands that match the builder to remove
for (int i = 0; i < oldSpec.length; i++) {
if (builderids.contains(oldSpec[i].getBuilderName()))
oldSpec[i] = null;
else
remaining++;
}
// check if any were actually removed
if (remaining == oldSpec.length)
return;
ICommand[] newSpec = new ICommand[remaining];
for (int i = 0, newIndex = 0; i < oldLength; i++) {
if (oldSpec[i] != null)
newSpec[newIndex++] = oldSpec[i];
}
desc.setBuildSpec(newSpec);
project.setDescription(desc, IResource.NONE, null);
}
public static IPath getSourcePathOrFirst(IProject p, String defaultSourceName) {
IJavaProject javaProj = JemProjectUtilities.getJavaProject(p);
if (javaProj == null)
return null;
IClasspathEntry[] cp = null;
try {
cp = javaProj.getRawClasspath();
} catch (JavaModelException ex) {
J2EEPlugin.logError(ex);
return null;
}
IClasspathEntry firstSource = null;
IPath defaultSourcePath = null;
if (defaultSourceName != null)
defaultSourcePath = createPath(p, defaultSourceName);
boolean found = false;
for (int i = 0; i < cp.length; i++) {
if (cp[i].getEntryKind() == IClasspathEntry.CPE_SOURCE) {
// check if it contains /META-INF/MANIFEST.MF
IPath sourceFolderPath = cp[i].getPath().removeFirstSegments(1);
IFolder sourceFolder = p.getFolder(sourceFolderPath);
if (isSourceFolderAnInputContainer(sourceFolder)) {
found = true;
if (firstSource == null) {
firstSource = cp[i];
if (defaultSourcePath == null)
break;
}
if (cp[i].getPath().equals(defaultSourcePath) && defaultSourcePath != null)
return defaultSourcePath.removeFirstSegments(1);
}
}
}
if (!found) {
for (int i = 0; i < cp.length; i++) {
if (cp[i].getEntryKind() == IClasspathEntry.CPE_SOURCE) {
if (firstSource == null) {
firstSource = cp[i];
if (defaultSourcePath == null)
break;
}
if (cp[i].getPath().equals(defaultSourcePath) && defaultSourcePath != null)
return defaultSourcePath.removeFirstSegments(1);
}
}
}
if (firstSource == null)
return null;
if (firstSource.getPath().segment(0).equals(p.getName()))
return firstSource.getPath().removeFirstSegments(1);
return null;
}
public static boolean isSourceFolderAnInputContainer(IFolder sourceFolder) {
IContainer parent = sourceFolder;
while (true) {
parent = parent.getParent();
if (parent == null)
return false;
if (parent instanceof IProject)
break;
}
IProject project = (IProject) parent;
try {
if (!project.isAccessible())
return false;
if (JavaEEProjectUtilities.isEJBProject(project)) {
return sourceFolder.findMember(J2EEConstants.EJBJAR_DD_URI) != null;
} else if (JavaEEProjectUtilities.isApplicationClientProject(project)) {
return sourceFolder.findMember(J2EEConstants.APP_CLIENT_DD_URI) != null;
} else if (JavaEEProjectUtilities.isDynamicWebProject(project)) {
return sourceFolder.findMember(J2EEConstants.WEBAPP_DD_URI) != null;
} else if (JavaEEProjectUtilities.isJCAProject(project)) {
return sourceFolder.findMember(J2EEConstants.RAR_DD_URI) != null;
}
} catch (Exception e) {
J2EEPlugin.logError(e);
}
return false;
}
public static Archive asArchive(String jarUri, IProject project, boolean exportSource) throws OpenFailureException {
return asArchive(jarUri, project, exportSource, true);
}
public static Archive asArchive(String jarUri, IProject project, boolean exportSource, boolean includeClasspathComponents) throws OpenFailureException {
JavaComponentLoadStrategyImpl strat = new JavaComponentLoadStrategyImpl(ComponentCore.createComponent(project), includeClasspathComponents);
strat.setExportSource(exportSource);
return CommonarchiveFactory.eINSTANCE.primOpenArchive(strat, jarUri);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isProjectOfType(IProject project, String typeID)}
*/
public static boolean isProjectOfType(IProject project, String typeID) {
return JavaEEProjectUtilities.isProjectOfType(project,typeID);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isEARProject(IProject project)}
*/
public static boolean isEARProject(IProject project) {
return JavaEEProjectUtilities.isEARProject(project);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isDynamicWebComponent(IVirtualComponent component)}
*/
public static boolean isDynamicWebComponent(IVirtualComponent component) {
return JavaEEProjectUtilities.isDynamicWebComponent(component);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isDynamicWebProject(IProject project)}
*/
public static boolean isDynamicWebProject(IProject project) {
return JavaEEProjectUtilities.isDynamicWebProject(project);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isStaticWebProject(IProject project)}
*/
public static boolean isStaticWebProject(IProject project) {
return JavaEEProjectUtilities.isStaticWebProject(project);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isEJBComponent(IVirtualComponent component)}
*/
public static boolean isEJBComponent(IVirtualComponent component) {
return JavaEEProjectUtilities.isEJBComponent(component);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isEJBProject(IProject project)}
*/
public static boolean isEJBProject(IProject project) {
return JavaEEProjectUtilities.isEJBProject(project);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isJCAComponent(IVirtualComponent component)}
*/
public static boolean isJCAComponent(IVirtualComponent component) {
return JavaEEProjectUtilities.isJCAComponent(component);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isJCAProject(IProject project)}
*/
public static boolean isJCAProject(IProject project) {
return JavaEEProjectUtilities.isJCAProject(project);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isApplicationClientComponent(IVirtualComponent component)}
*/
public static boolean isApplicationClientComponent(IVirtualComponent component) {
return JavaEEProjectUtilities.isApplicationClientComponent(component);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isApplicationClientProject(IProject project)}
*/
public static boolean isApplicationClientProject(IProject project) {
return JavaEEProjectUtilities.isApplicationClientProject(project);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.isUtilityProject(IProject project)}
*/
public static boolean isUtilityProject(IProject project) {
return JavaEEProjectUtilities.isUtilityProject(project);
}
/**
* @deprecated - see {@link EarUtilities.isStandaloneProject(IProject project)}
*/
public static boolean isStandaloneProject(IProject project) {
return EarUtilities.isStandaloneProject(project);
}
/**
* @deprecated use {@link EarUtilities#getReferencingEARProjects(IProject)}
*
*/
public static IProject[] getReferencingEARProjects(final IProject project) {
return EarUtilities.getReferencingEARProjects(project);
}
/**
* Returns all referencing dynamic web projects.
* @param project Project to check. If null or a dynamic web project, returns a zero length array.
* @return Array of referencing dynamic web projects.
*/
public static IProject[] getReferencingWebProjects(final IProject project) {
if(project != null && JavaEEProjectUtilities.isDynamicWebProject(project)){
return new IProject[] {project};
}
List result = new ArrayList();
IVirtualComponent component = ComponentCore.createComponent(project);
if (component != null) {
IVirtualComponent[] refComponents = component.getReferencingComponents();
for (int i = 0; i < refComponents.length; i++) {
if (JavaEEProjectUtilities.isDynamicWebProject(refComponents[i].getProject()))
result.add(refComponents[i].getProject());
}
}
return (IProject[]) result.toArray(new IProject[result.size()]);
}
/**
* Return all projects in workspace of the specified type
*
* @param type -
* use one of the static strings on this class as a type
* @return IProject[]
* @deprecated - see {@link JavaEEProjectUtilities.getAllProjectsInWorkspaceOfType(String type)}
*/
public static IProject[] getAllProjectsInWorkspaceOfType(String type) {
return JavaEEProjectUtilities.getAllProjectsInWorkspaceOfType(type);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.getJ2EEComponentType(IVirtualComponent component)}
*/
public static String getJ2EEComponentType(IVirtualComponent component) {
return JavaEEProjectUtilities.getJ2EEComponentType(component);
}
/**
* @deprecated - see {@link JavaEEProjectUtilities.getJ2EEProjectType(IProject project)}
*/
public static String getJ2EEProjectType(IProject project) {
return JavaEEProjectUtilities.getJ2EEProjectType(project);
}
/**
* Returns the J2EE Module version based on the DD XML file
* @param project
* @return version String
* @deprecated - see {@link JavaEEProjectUtilities.getJ2EEDDProjectVersion(IProject project)}
*/
public static String getJ2EEDDProjectVersion(IProject project) {
return JavaEEProjectUtilities.getJ2EEDDProjectVersion(project);
}
public static IRuntime getServerRuntime(IProject project) throws CoreException {
if (project == null)
return null;
IFacetedProject facetedProject = ProjectFacetsManager.create(project);
if (facetedProject == null)
return null;
org.eclipse.wst.common.project.facet.core.runtime.IRuntime runtime = facetedProject.getRuntime();
if (runtime == null)
return null;
return FacetUtil.getRuntime(runtime);
}
/**
* Returns the J2EE Module version based on the project Facet installed
* @param project
* @return version String
*/
public static String getJ2EEProjectVersion(IProject project) {
String type = getJ2EEProjectType(project);
IFacetedProject facetedProject = null;
IProjectFacet facet = null;
try {
facetedProject = ProjectFacetsManager.create(project);
facet = ProjectFacetsManager.getProjectFacet(type);
} catch (Exception e) {
// Not Faceted project or not J2EE Project
}
if (facet != null && facetedProject != null && facetedProject.hasProjectFacet(facet))
return facetedProject.getInstalledVersion(facet).getVersionString();
return null;
}
public static JavaProjectMigrationOperation createFlexJavaProjectForProjectOperation(IProject project) {
IDataModel model = DataModelFactory.createDataModel(new JavaProjectMigrationDataModelProvider());
model.setProperty(IJavaProjectMigrationDataModelProperties.PROJECT_NAME, project.getName());
return new JavaProjectMigrationOperation(model);
}
public static JavaProjectMigrationOperation createFlexJavaProjectForProjectOperation(IProject project, boolean addToEAR) {
IDataModel model = DataModelFactory.createDataModel(new JavaProjectMigrationDataModelProvider());
model.setProperty(IJavaProjectMigrationDataModelProperties.PROJECT_NAME, project.getName());
model.setBooleanProperty(IJavaProjectMigrationDataModelProperties.ADD_TO_EAR, addToEAR);
return new JavaProjectMigrationOperation(model);
}
/**
* @deprecated use {@link JavaLiteUtilities#getJavaSourceContainers(IVirtualComponent)}
* @param project
* @return
*/
public static IPackageFragmentRoot[] getSourceContainers(IProject project) {
IJavaProject jProject = JemProjectUtilities.getJavaProject(project);
if (jProject == null)
return new IPackageFragmentRoot[0];
List list = new ArrayList();
IVirtualComponent vc = ComponentCore.createComponent(project);
IPackageFragmentRoot[] roots;
try {
roots = jProject.getPackageFragmentRoots();
for (int i = 0; i < roots.length; i++) {
if (roots[i].getKind() != IPackageFragmentRoot.K_SOURCE)
continue;
IResource resource = roots[i].getResource();
if (null != resource) {
IVirtualResource[] vResources = ComponentCore.createResources(resource);
boolean found = false;
for (int j = 0; !found && j < vResources.length; j++) {
if (vResources[j].getComponent().equals(vc)) {
if (!list.contains(roots[i]))
list.add(roots[i]);
found = true;
}
}
}
}
} catch (JavaModelException e) {
J2EEPlugin.logError(e);
}
return (IPackageFragmentRoot[]) list.toArray(new IPackageFragmentRoot[list.size()]);
}
/**
* @deprecated use {@link JavaLiteUtilities#getJavaOutputContainers(IVirtualComponent)}
* @param project
* @return
*/
public static IContainer[] getOutputContainers(IProject project) {
IVirtualComponent virtualComponent = ComponentCore.createComponent(project);
List <IContainer> containers = JavaLiteUtilities.getJavaOutputContainers(virtualComponent);
return containers.toArray(new IContainer[containers.size()]);
}
/**
* @deprecated use {@link JavaLiteUtilities#getJavaOutputContainer(IJavaProjectLite, IClasspathEntry)}
*
* {@link #getJavaOutputContainer(IJavaProjectLite, IClasspathEntry)}
* @param project
* @param sourceContainer
* @return
*/
public static IContainer getOutputContainer(IProject project, IPackageFragmentRoot sourceContainer) {
try {
return JavaLiteUtilities.getJavaOutputContainer(JavaCoreLite.create(project), sourceContainer.getRawClasspathEntry());
} catch (JavaModelException e) {
org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin.logError(e);
}
return null;
}
/**
* @deprecated use {@link JavaLiteUtilities#getJavaOutputContainers(IVirtualComponent)}
* @param project
* @return
*/
public static IContainer[] getAllOutputContainers(IProject project) {
return getOutputContainers(project);
}
/**
*
* @param name
* @return
* @description the passed name should have either lib or var as its first segment e.g.
* lib/D:/foo/foo.jar or var/<CLASSPATHVAR>/foo.jar
*/
public static IPath getResolvedPathForArchiveComponent(String name) {
URI uri = URI.createURI(name);
String resourceType = uri.segment(0);
URI contenturi = ModuleURIUtil.trimToRelativePath(uri, 1);
String contentName = contenturi.toString();
if (resourceType.equals("lib")) { //$NON-NLS-1$
// module:/classpath/lib/D:/foo/foo.jar
return Path.fromOSString(contentName);
} else if (resourceType.equals("var")) { //$NON-NLS-1$
// module:/classpath/var/<CLASSPATHVAR>/foo.jar
String classpathVar = contenturi.segment(0);
URI remainingPathuri = ModuleURIUtil.trimToRelativePath(contenturi, 1);
String remainingPath = remainingPathuri.toString();
String[] classpathvars = JavaCore.getClasspathVariableNames();
boolean found = false;
for (int i = 0; i < classpathvars.length; i++) {
if (classpathVar.equals(classpathvars[i])) {
found = true;
break;
}
}
if (found) {
IPath path = JavaCore.getClasspathVariable(classpathVar);
if (path != null ){
URI finaluri = URI.createURI(path.toOSString() + IPath.SEPARATOR + remainingPath);
return Path.fromOSString(finaluri.toString());
}
}
}
return null;
}
public static List getAllJavaNonFlexProjects() throws CoreException {
List nonFlexJavaProjects = new ArrayList();
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
for (int i = 0; i < projects.length; i++) {
if (projects[i].isAccessible() && projects[i].hasNature(JavaCore.NATURE_ID) && !projects[i].hasNature(IModuleConstants.MODULE_NATURE_ID)) {
nonFlexJavaProjects.add(projects[i]);
}
}
return nonFlexJavaProjects;
}
/**
* This method will retrieve the context root for the associated workbench module which is used
* by the server at runtime. This method is not yet completed as the context root has to be
* abstracted and added to the workbenchModule model. This API will not change though. Returns
* null for now.
*
* @return String value of the context root for runtime of the associated module
*/
public static String getServerContextRoot(IProject project) {
return ComponentUtilities.getServerContextRoot(project);
}
/**
* This method will set the context root on the associated workbench module with the given
* string value passed in. This context root is used by the server at runtime. This method is
* not yet completed as the context root still needs to be abstracted and added to the workbench
* module model. This API will not change though. Does nothing as of now.
*
* @param contextRoot
* string
*/
public static void setServerContextRoot(IProject project, String contextRoot) {
ComponentUtilities.setServerContextRoot(project, contextRoot);
}
/**
* @param project
* @return true, if jee version 5.0 or later (or their respective ejb, web, app versions)
* , it must be noted that this method only looks at the facet & their versions to determine
* the jee level. It does not read deployment descriptors for performance reasons.
*/
public static boolean isJEEProject(IProject project){
IVirtualComponent component = ComponentCore.createComponent(project);
if(component != null)
return JavaEEProjectUtilities.isJEEComponent(component);
return false;
}
/**
* @param project
* @return true, if j2ee version 1.2, 1.3, 1.4 (or their respective ejb, web, app versions)
* , it must be noted that this method only looks at the facet & their versions to determine
* the j2ee level. It does not read deployment descriptors for performance reasons.
* @deprecated use JavaEEProjectUtilities.isLegacyJ2EEComponent(etc)
*/
public static boolean isLegacyJ2EEProject(IProject project){
IVirtualComponent component = ComponentCore.createComponent(project);
if(component != null)
return JavaEEProjectUtilities.isLegacyJ2EEComponent(component);
return false;
}
/**
* This method will return the an IVirtualComponent for the given module name. The method take
* either moduleName or moduleName + ".module_extension" (module_extension = ".jar" || ".war" ||
* ".rar") which allows users to get a IVirtualComponent for a given entry in an application.xml
*
* @return - a IVirtualComponent for module name
* @deprecated - see {@link EarUtilities.getModule(IVirtualComponent earComponent, String moduleName)}
*/
public static IVirtualComponent getModule(IVirtualComponent earComponent, String moduleName) {
return EarUtilities.getModule(earComponent, moduleName);
}
/**
* This method will return the list of IVirtualReferences for the J2EE module components
* contained in this EAR application.
*
* @return - an array of IVirtualReferences for J2EE modules in the EAR
* @deprecated - see {@link EarUtilities.getJ2EEModuleReferences(IVirtualComponent earComponent)}
*/
public static IVirtualReference[] getJ2EEModuleReferences(IVirtualComponent earComponent) {
return EarUtilities.getJ2EEModuleReferences(earComponent);
}
/**
* This method will return the list of IVirtualReferences for all of the components contained in
* an EAR application.
*
* @return - an array of IVirtualReferences for components in the EAR
* @deprecated - see {@link EarUtilities.getComponentReferences(IVirtualComponent earComponent)}
*/
public static IVirtualReference[] getComponentReferences(IVirtualComponent earComponent) {
return EarUtilities.getComponentReferences(earComponent);
}
/**
* This method will return the IVirtualReference to the component of the given name
*
* @return - IVirtualReference or null if not found
* @deprecated - see {@link EarUtilities.getComponentReference(IVirtualComponent earComponent, String componentName)}
*/
public static IVirtualReference getComponentReference(IVirtualComponent earComponent, String componentName) {
return EarUtilities.getComponentReference(earComponent, componentName);
}
}