blob: f179163d09e6e757125e38e34788b7b0bb4f4df5 [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.wst.web.internal.deployables;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
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.IModule;
import org.eclipse.wst.server.core.IModuleArtifact;
import org.eclipse.wst.server.core.ServerUtil;
import org.eclipse.wst.server.core.util.WebResource;
public class StaticWebDeployableObjectAdapterUtil {
private final static String[] extensionsToExclude = new String[]{"sql", "xmi"}; //$NON-NLS-1$ //$NON-NLS-2$
static String INFO_DIRECTORY = "WEB-INF"; //$NON-NLS-1$
public static IModuleArtifact getModuleObject(Object obj) {
IResource resource = null;
if (obj instanceof IResource)
resource = (IResource) obj;
else if (obj instanceof IAdaptable)
resource = (IResource) ((IAdaptable) obj).getAdapter(IResource.class);
if (resource == null)
return null;
if (resource instanceof IProject) {
IProject project = (IProject) resource;
if (hasInterestedComponents(project))
return new WebResource(getModule(project), new Path("")); //$NON-NLS-1$
return null;
}
IProject project = ProjectUtilities.getProject(resource);
if (project != null && !hasInterestedComponents(project))
return null;
IVirtualComponent comp = ComponentCore.createComponent(project);
// determine path
IPath rootPath = comp.getRootFolder().getProjectRelativePath();
IPath resourcePath = resource.getProjectRelativePath();
// Check to make sure the resource is under the webApplication directory
if (resourcePath.matchingFirstSegments(rootPath) != rootPath.segmentCount())
return null;
// Do not allow resource under the web-inf directory
resourcePath = resourcePath.removeFirstSegments(rootPath.segmentCount());
if (resourcePath.segmentCount() > 1 && resourcePath.segment(0).equals(INFO_DIRECTORY))
return null;
if (shouldExclude(resource))
return null;
// return Web resource type
return new WebResource(getModule(project), resourcePath);
}
/**
* Method shouldExclude.
*
* @param resource
* @return boolean
*/
private static boolean shouldExclude(IResource resource) {
String fileExt = resource.getFileExtension();
// Exclude files of certain extensions
for (int i = 0; i < extensionsToExclude.length; i++) {
String extension = extensionsToExclude[i];
if (extension.equalsIgnoreCase(fileExt))
return true;
}
return false;
}
protected static IModule getModule(IProject project) {
if (hasInterestedComponents(project))
return ServerUtil.getModule(project);
return null;
}
protected static boolean hasInterestedComponents(IProject project) {
return isProjectOfType(project, IModuleConstants.WST_WEB_MODULE);
}
protected 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;
}
}