blob: dcbfbdc042b2e4b17a046b86f434f1e984c27286 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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.project;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jem.util.logger.proxy.Logger;
import org.eclipse.jst.j2ee.internal.J2EEConstants;
import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
import org.eclipse.jst.j2ee.internal.componentcore.AppClientBinaryComponentHelper;
import org.eclipse.jst.j2ee.internal.componentcore.EJBBinaryComponentHelper;
import org.eclipse.jst.j2ee.internal.componentcore.JCABinaryComponentHelper;
import org.eclipse.jst.j2ee.internal.componentcore.WebBinaryComponentHelper;
import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants;
import org.eclipse.jst.jee.util.internal.JavaEEQuickPeek;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
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;
public class JavaEEProjectUtilities extends ProjectUtilities implements IJ2EEFacetConstants {
protected static final IVirtualReference[] NO_REFERENCES = new IVirtualReference[0];
public JavaEEProjectUtilities() {
// TODO Auto-generated constructor stub
}
public static boolean isProjectOfType(IProject project, String typeID) {
IFacetedProject facetedProject = null;
try {
facetedProject = ProjectFacetsManager.create(project);
} catch (CoreException e) {
return false;
}
if (facetedProject != null && ProjectFacetsManager.isProjectFacetDefined(typeID)) {
IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet(typeID);
return projectFacet != null && facetedProject.hasProjectFacet(projectFacet);
}
return false;
}
private static boolean isProjectOfType(IFacetedProject facetedProject, String typeID) {
if (facetedProject != null && ProjectFacetsManager.isProjectFacetDefined(typeID)) {
IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet(typeID);
return projectFacet != null && facetedProject.hasProjectFacet(projectFacet);
}
return false;
}
private static boolean isEARProject(IFacetedProject project) {
return isProjectOfType(project, ENTERPRISE_APPLICATION);
}
private static boolean isDynamicWebProject(IFacetedProject project) {
return isProjectOfType(project, DYNAMIC_WEB);
}
private static boolean isStaticWebProject(IFacetedProject project) {
return isProjectOfType(project, STATIC_WEB);
}
private static boolean isEJBProject(IFacetedProject project) {
return isProjectOfType(project, EJB);
}
private static boolean isJCAProject(IFacetedProject project) {
return isProjectOfType(project, JCA);
}
private static boolean isApplicationClientProject(IFacetedProject project) {
return isProjectOfType(project, APPLICATION_CLIENT);
}
private static boolean isUtilityProject(IFacetedProject project) {
return isProjectOfType(project, UTILITY);
}
public static boolean isEARProject(IProject project) {
return isProjectOfType(project, ENTERPRISE_APPLICATION);
}
public static boolean isDynamicWebComponent(IVirtualComponent component) {
if (component.isBinary()) {
return WebBinaryComponentHelper.handlesComponent(component);
}
return isProjectOfType(component.getProject(), DYNAMIC_WEB);
}
public static boolean isDynamicWebProject(IProject project) {
return isProjectOfType(project, DYNAMIC_WEB);
}
public static boolean isStaticWebProject(IProject project) {
return isProjectOfType(project, STATIC_WEB);
}
public static boolean isEJBComponent(IVirtualComponent component) {
if (component.isBinary()) {
return EJBBinaryComponentHelper.handlesComponent(component);
}
return isProjectOfType(component.getProject(), EJB);
}
public static boolean isEJBProject(IProject project) {
return isProjectOfType(project, EJB);
}
public static boolean isJCAComponent(IVirtualComponent component) {
if (component.isBinary()) {
return JCABinaryComponentHelper.handlesComponent(component);
}
return isProjectOfType(component.getProject(), JCA);
}
public static boolean isJCAProject(IProject project) {
return isProjectOfType(project, JCA);
}
public static boolean isApplicationClientComponent(IVirtualComponent component) {
if (component.isBinary()) {
return AppClientBinaryComponentHelper.handlesComponent(component);
}
return isProjectOfType(component.getProject(), APPLICATION_CLIENT);
}
public static boolean isApplicationClientProject(IProject project) {
return isProjectOfType(project, APPLICATION_CLIENT);
}
public static boolean isUtilityProject(IProject project) {
return isProjectOfType(project, UTILITY);
}
/**
* 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[]
*/
public static IProject[] getAllProjectsInWorkspaceOfType(String type) {
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
List result = new ArrayList();
for (int i = 0; i < projects.length; i++) {
if (isProjectOfType(projects[i], type))
result.add(projects[i]);
}
return (IProject[]) result.toArray(new IProject[result.size()]);
}
public static String getJ2EEComponentType(IVirtualComponent component) {
if (null != component) {
if (component.isBinary()) {
if (isApplicationClientComponent(component))
return APPLICATION_CLIENT;
else if (isDynamicWebComponent(component))
return DYNAMIC_WEB;
else if (isEJBComponent(component))
return EJB;
else if (isJCAComponent(component))
return JCA;
else
return UTILITY;
}
return getJ2EEProjectType(component.getProject());
}
return ""; //$NON-NLS-1$
}
public static String getJ2EEProjectType(IProject project) {
if (null != project && project.isAccessible()) {
IFacetedProject facetedProject = null;
try {
facetedProject = ProjectFacetsManager.create(project);
} catch (CoreException e) {
return ""; //$NON-NLS-1$
}
if (isApplicationClientProject(facetedProject))
return APPLICATION_CLIENT;
else if (isDynamicWebProject(facetedProject))
return DYNAMIC_WEB;
else if (isEJBProject(facetedProject))
return EJB;
else if (isEARProject(facetedProject))
return ENTERPRISE_APPLICATION;
else if (isJCAProject(facetedProject))
return JCA;
else if (isStaticWebProject(facetedProject))
return STATIC_WEB;
else if (isUtilityProject(facetedProject))
return UTILITY;
}
return ""; //$NON-NLS-1$
}
/**
* Returns the J2EE Module version based on the DD XML file
* @param project
* @return version String
*/
public static String getJ2EEDDProjectVersion(IProject project) {
int type = J2EEVersionConstants.UNKNOWN;
String ddURI = null;
if (isEARProject(project)) {
type = J2EEVersionConstants.APPLICATION_TYPE;
ddURI = J2EEConstants.APPLICATION_DD_URI;
} else if (isEJBProject(project)) {
type = J2EEVersionConstants.EJB_TYPE;
ddURI = J2EEConstants.EJBJAR_DD_URI;
} else if (isApplicationClientProject(project)) {
type = J2EEVersionConstants.APPLICATION_CLIENT_TYPE;
ddURI = J2EEConstants.APP_CLIENT_DD_URI;
} else if (isJCAProject(project)) {
type = J2EEVersionConstants.CONNECTOR_TYPE;
ddURI = J2EEConstants.RAR_DD_URI;
} else if (isDynamicWebProject(project)) {
type = J2EEVersionConstants.WEB_TYPE;
ddURI = J2EEConstants.WEBAPP_DD_URI;
}
if(type != J2EEVersionConstants.UNKNOWN){
IVirtualComponent comp = ComponentCore.createComponent(project);
if (comp != null) {
IVirtualFile vFile = comp.getRootFolder().getFile(new Path(ddURI));
if(vFile.exists()){
InputStream in= null;
try{
in = vFile.getUnderlyingFile().getContents();
JavaEEQuickPeek quickPeek = new JavaEEQuickPeek(in);
int vers = (quickPeek.getVersion() == J2EEVersionConstants.UNKNOWN) ? getJEEVersion(project) : quickPeek.getVersion();
return J2EEVersionUtil.convertVersionIntToString(vers);
} catch (CoreException e) {
Logger.getLogger().logError(e);
} finally {
if(in != null){
try {
in.close();
} catch (IOException e) {
Logger.getLogger().logError(e);
}
}
}
}
else
return J2EEVersionUtil.convertVersionIntToString(getJEEVersion(project));
}
}
return null;
}
private static int getJEEVersion(IProject project) {
if (isEARProject(project) || isApplicationClientProject(project))
return J2EEVersionConstants.VERSION_5_0;
if (isEJBProject(project))
return J2EEVersionConstants.VERSION_3_0;
if (isDynamicWebProject(project))
return J2EEVersionConstants.VERSION_2_5;
return J2EEVersionConstants.UNKNOWN;
}
public static int getJ2EEVersion(IProject javaEEProject)
{
int retVal = 0;
return retVal;
}
}