/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.project; import java.io.File; import java.util.Properties; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; 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.jboss.tools.common.model.XModelConstants; import org.jboss.tools.common.model.XModelObjectConstants; import org.jboss.tools.common.model.plugin.ModelPlugin; import org.jboss.tools.common.model.util.*; import org.jboss.tools.common.web.WebUtils; import org.w3c.dom.Element; public class ProjectHome { public String getLocation(IProject project) { try { String location = ((project.getDescription().getLocation() == null) ? project.getLocation().toString() : project.getDescription().getLocation().toString()); return getLocation(location); } catch (CoreException e) { ModelPlugin.getPluginLog().logError(e); return ""; //$NON-NLS-1$ } } public String getLocation(String projectLocation) { String location = projectLocation; File f = new File(location + XModelObjectConstants.SEPARATOR + IModelNature.PROJECT_TEMP); File ep = new File(location + XModelObjectConstants.SEPARATOR + IModelNature.PROJECT_FILE); if(ep.isFile()) { // to remove temp file if(f.isFile()) f.delete(); return getLocationFrom_project_File(location, ep); } if(f.isFile()) return getLocationFrom_temp_File(location, f); return ""; //$NON-NLS-1$ } private String getLocationFrom_project_File(String location, File ss) { Element element = XMLUtil.getElement(ss); String path = ""; //$NON-NLS-1$ if(element.hasAttribute("workspace-home")) { //$NON-NLS-1$ path = element.getAttribute("workspace-home"); //$NON-NLS-1$ } else if(element.hasAttribute("WORKSPACE_HOME")) { //$NON-NLS-1$ path = element.getAttribute("WORKSPACE_HOME"); //$NON-NLS-1$ } String q = (path.equals(".")) ? location : (path.startsWith("./")) ? location + path.substring(1) : path; //$NON-NLS-1$ //$NON-NLS-2$ return q; } private String getLocationFrom_temp_File(String location, File s) { String path = XModelObjectLoaderUtil.getCDATA(XMLUtil.getElement(s)); String q = (path.equals(".")) ? location : (path.startsWith("./")) ? location + path.substring(1) : path; //$NON-NLS-1$ //$NON-NLS-2$ s.delete(); return q; } //// public static boolean getLocation(IProject project, Properties p) { IPath webInfPath = null; if(ComponentCore.createComponent(project)!=null) { webInfPath = getWebInfPath(project); if(webInfPath == null) { //Advanced servers do not require WEB-INF folder. //Let us keep model nature even when WEB-INF folder is missing. IPath webRootPath = getFirstWebContentPath(project); if(webRootPath != null) { webInfPath = webRootPath.append("WEB-INF"); } } } if(webInfPath == null) return false; IFolder webInfFolder = ResourcesPlugin.getWorkspace().getRoot().getFolder(webInfPath); p.setProperty(XModelConstants.WORKSPACE, webInfFolder.getLocation().toString()); p.setProperty(XModelConstants.WORKSPACE_OLD, webInfFolder.getLocation().toString()); return true; } //Taken from J2EEUtils and modified public static IPath getWebInfPath(IProject project) { IPath[] ps = WebUtils.getWebInfPaths(project); if(ps.length > 0) { return ps[0]; } IVirtualComponent component = ComponentCore.createComponent(project); if(component == null || component.getRootFolder() == null) return null; IVirtualFolder webInfDir = component.getRootFolder().getFolder(new Path("/WEB-INF")); //$NON-NLS-1$ IPath modulePath = webInfDir.getWorkspaceRelativePath(); return (!webInfDir.exists()) ? null : modulePath; } public static IPath getFirstWebContentPath(IProject project) { return WebUtils.getFirstWebContentPath(project); } }