| /******************************************************************************* |
| * 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; |
| } |
| } |