blob: a12bdc9ea3a1c025c4b463585f78285cbf95a34a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2010 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
* -------- -------- -----------------------------------------------------------
* 20091021 291954 ericdp@ca.ibm.com - Eric D. Peters, JAX-RS: Implement JAX-RS Facet
*******************************************************************************/
package org.eclipse.jst.ws.jaxrs.core.jaxrsappconfig.internal;
import java.util.Iterator;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jst.ws.jaxrs.core.internal.IJAXRSCoreConstants;
import org.eclipse.jst.ws.jaxrs.core.internal.JAXRSCorePlugin;
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.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
/**
* JAXRSAppConfigUtils provides utility methods useful in processing of a JAXRS
* application configuration.
*
* @deprecated
*
* <p>
* <b>Provisional API - subject to change - do not use</b>
* </p>
*
*/
public class JAXRSAppConfigUtils {
/**
* Tests if the passed IProject instance is a valid JAXRS project in the
* following ways:
* <ul>
* <li>project is not null and is accessible,</li>
* <li>project has the JAXRS facet set on it.</li>
* </ul>
*
* @param project
* IProject instance to be tested.
* @return true if the IProject instance is a valid JAXRS project, else
* false.
*/
public static boolean isValidJAXRSProject(IProject project) {
boolean isValid = false;
IProjectFacetVersion projectFacet = getProjectFacet(project);
if (projectFacet != null) {
isValid = true;
}
return isValid;
}
/**
* Get the facet version for the project
*
* @param project
* @return the project facet version or null if could not be found or if
* project is not accessible
*/
@SuppressWarnings("unchecked")
public static IProjectFacetVersion getProjectFacet(IProject project) {
// check for null or inaccessible project
if (project != null && project.isAccessible()) {
// check for JAXRS facet on project
try {
IFacetedProject facetedProject = ProjectFacetsManager
.create(project);
if (facetedProject != null) {
Set projectFacets = facetedProject.getProjectFacets();
Iterator itProjectFacets = projectFacets.iterator();
while (itProjectFacets.hasNext()) {
IProjectFacetVersion projectFacetVersion = (IProjectFacetVersion) itProjectFacets
.next();
if (IJAXRSCoreConstants.JAXRS_FACET_ID
.equals(projectFacetVersion.getProjectFacet()
.getId())) {
return projectFacetVersion;
}
}
}
} catch (CoreException ce) {
// log error
JAXRSCorePlugin
.log(IStatus.ERROR, ce.getLocalizedMessage(), ce);
}
}
return null;
}
/**
* Gets an IVirtualFolder instance which represents the root context's web
* content folder.
*
* @param project
* IProject instance for which to get the folder.
* @return IVirtualFolder instance which represents the root context's web
* content folder.
*/
public static IVirtualFolder getWebContentFolder(IProject project) {
IVirtualFolder folder = null;
IVirtualComponent component = ComponentCore.createComponent(project);
if (component != null) {
folder = component.getRootFolder();
}
return folder;
}
/**
* Gets an IPath instance representing the path of the passed IFile instance
* relative to the web content folder.
*
* @param file
* IFile instance for which a path is required.
* @return IPath instance representing the path relative to the web content
* folder.
*/
public static IPath getWebContentFolderRelativePath(IFile file) {
IPath path = null;
if (file != null) {
IVirtualFolder webContentFolder = getWebContentFolder(file
.getProject());
if (webContentFolder != null) {
IPath webContentPath = webContentFolder
.getProjectRelativePath();
IPath filePath = file.getProjectRelativePath();
int matchingFirstSegments = webContentPath
.matchingFirstSegments(filePath);
path = filePath.removeFirstSegments(matchingFirstSegments);
}
}
return path;
}
}