| /******************************************************************************* |
| * Copyright (c) 2007, 2008 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.jsdt.web.core.internal.project; |
| |
| import java.net.URI; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.wst.jsdt.core.IIncludePathEntry; |
| import org.eclipse.wst.jsdt.core.IJavaScriptProject; |
| import org.eclipse.wst.jsdt.core.IJsGlobalScopeContainer; |
| import org.eclipse.wst.jsdt.core.JsGlobalScopeContainerInitializer; |
| import org.eclipse.wst.jsdt.core.compiler.libraries.LibraryLocation; |
| import org.eclipse.wst.jsdt.web.core.javascript.JsNameManglerUtil; |
| import org.eclipse.wst.jsdt.web.core.javascript.WebRootFinder; |
| |
| /** |
| * |
| * Provisional API: This class/interface is part of an interim API that is still under development and expected to |
| * change significantly before reaching stability. It is being made available at this early stage to solicit feedback |
| * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken |
| * (repeatedly) as the API evolves. |
| */ |
| public class WebProjectJsGlobalScopeContainerInitializer extends JsGlobalScopeContainerInitializer { |
| private static final String CONTAINER_DESCRIPTION = Messages.getString("WebProjectJsGlobalScopeContainerInitializer.0"); //$NON-NLS-1$ |
| |
| public static final char[] LIB_NAME = {'b','r','o','w','s','e','r','W','i','n','d','o','w','.','j','s'}; |
| /* Some tokens for us to identify mangled paths */ |
| private static final String MANGLED_BUTT1 = "htm"; //$NON-NLS-1$ |
| private static final String MANGLED_BUTT2 = ".js"; //$NON-NLS-1$ |
| |
| //private IJavaScriptProject javaProject; |
| |
| |
| private static String getUnmangedHtmlPath(String containerPathString) { |
| if (containerPathString == null) { |
| return null; |
| } |
| if (containerPathString.toLowerCase().indexOf(WebProjectJsGlobalScopeContainerInitializer.MANGLED_BUTT1) != -1 && containerPathString.toLowerCase().indexOf(WebProjectJsGlobalScopeContainerInitializer.MANGLED_BUTT2) != -1) { |
| return JsNameManglerUtil.unmangle(containerPathString); |
| } |
| return null; |
| } |
| public LibraryLocation getLibraryLocation() { |
| return null; |
| } |
| |
| |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.wst.jsdt.core.JsGlobalScopeContainerInitializer#canUpdateJsGlobalScopeContainer(org.eclipse.core.runtime.IPath, |
| * org.eclipse.wst.jsdt.core.IJavaScriptProject) |
| */ |
| |
| public boolean canUpdateJsGlobalScopeContainer(IPath containerPath, IJavaScriptProject project) { |
| /* dont remove from this project */ |
| return false; |
| } |
| |
| |
| protected IJsGlobalScopeContainer getContainer(IPath containerPath, IJavaScriptProject project) { |
| return this; |
| } |
| |
| |
| public String getDescription() { |
| return WebProjectJsGlobalScopeContainerInitializer.CONTAINER_DESCRIPTION; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.wst.jsdt.core.JsGlobalScopeContainerInitializer#getDescription(org.eclipse.core.runtime.IPath, |
| * org.eclipse.wst.jsdt.core.IJavaScriptProject) |
| */ |
| |
| public String getDescription(IPath containerPath, IJavaScriptProject javaProject) { |
| if (containerPath.equals(new Path(JsWebNature.VIRTUAL_CONTAINER))) { |
| return WebProjectJsGlobalScopeContainerInitializer.CONTAINER_DESCRIPTION; |
| } |
| |
| String containerPathString = containerPath.toString(); |
| IPath webContext = getWebContextRoot(javaProject); |
| String fileExtension = containerPath.getFileExtension(); |
| if(containerPath.equals(getWebContextRoot(javaProject)) || (fileExtension!=null && fileExtension.equals("js"))) { //$NON-NLS-1$ |
| return webContext.toString(); |
| } |
| String unmangled = WebProjectJsGlobalScopeContainerInitializer.getUnmangedHtmlPath(containerPathString); |
| if (unmangled != null) { |
| IPath projectPath = javaProject.getPath(); |
| /* Replace the project path with the project name */ |
| if (unmangled.indexOf(projectPath.toString()) >= 0) { |
| unmangled = javaProject.getDisplayName() + ":" + unmangled.substring(projectPath.toString().length()); //$NON-NLS-1$ |
| } |
| return unmangled; |
| } |
| return containerPathString; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.wst.jsdt.core.JsGlobalScopeContainerInitializer#getHostPath(org.eclipse.core.runtime.IPath) |
| */ |
| |
| public URI getHostPath(IPath path, IJavaScriptProject project) { |
| // TODO Auto-generated method stub |
| String htmlPath = WebProjectJsGlobalScopeContainerInitializer.getUnmangedHtmlPath(path.toString()); |
| if (htmlPath != null) { |
| URI fileUri = new Path(htmlPath).toFile().toURI(); |
| return fileUri; |
| // try { |
| // return new URI(htmlPath); |
| // } catch (URISyntaxException ex) { |
| // ex.printStackTrace(); |
| // } |
| } |
| // else { |
| // try { |
| // return new URI(path.toString()); |
| // } catch (URISyntaxException ex) { |
| // // TODO Auto-generated catch block |
| // ex.printStackTrace(); |
| // } |
| // } |
| return null; |
| } |
| |
| |
| public int getKind() { |
| return IJsGlobalScopeContainer.K_SYSTEM; |
| } |
| |
| |
| public IPath getPath() { |
| return new Path(JsWebNature.VIRTUAL_CONTAINER); |
| } |
| |
| /** |
| * @deprecated Use {@link #getIncludepathEntries()} instead |
| */ |
| public IIncludePathEntry[] getClasspathEntries() { |
| return getIncludepathEntries(); |
| } |
| public IIncludePathEntry[] getIncludepathEntries() { |
| |
| //IIncludePathEntry entry=null; |
| |
| return new IIncludePathEntry[0]; |
| // try { |
| // |
| // |
| // |
| // IPath contextPath = getWebContextRoot(javaProject); |
| // //entry =JavaScriptCore.newLibraryEntry(contextPath.makeAbsolute(), null,null, new IAccessRule[0], new IIncludePathAttribute[0], true); |
| // //entry =JavaScriptCore.newLibraryEntry(contextPath.makeAbsolute(), null, null, new IAccessRule[0], new IIncludePathAttribute[0], true); |
| // //entry =JavaScriptCore.newSourceEntry(contextPath.makeAbsolute()); |
| // entry = new ClasspathEntry( |
| // IPackageFragmentRoot.K_SOURCE, |
| // IIncludePathEntry.CPE_SOURCE, |
| // contextPath.makeAbsolute(), |
| // ClasspathEntry.INCLUDE_ALL, ClasspathEntry.EXCLUDE_NONE, |
| // null, // source attachment |
| // null, // source attachment root |
| // null, // custom output location |
| // false, |
| // null, |
| // false, // no access rules to combine |
| // new IIncludePathAttribute[] {ClasspathEntry.EXCLUDE_VALIDATE}); |
| // |
| // } catch (RuntimeException ex) { |
| // // TODO Auto-generated catch block |
| // ex.printStackTrace(); |
| // } |
| // |
| // if(entry!=null) return new IIncludePathEntry[] {entry}; |
| // return new IIncludePathEntry[0]; |
| } |
| public void initialize(IPath containerPath, IJavaScriptProject project) throws CoreException { |
| //this.javaProject = project; |
| super.initialize(containerPath, project); |
| |
| } |
| |
| public static IPath getWebContextRoot(IJavaScriptProject javaProject) { |
| String webRoot = WebRootFinder.getWebContentFolder(javaProject.getProject()).toString(); |
| IPath webRootPath = javaProject.getPath().append(webRoot); |
| return webRootPath; |
| } |
| |
| // public IPath[] getAllHtmlInProject() { |
| // final ArrayList found = new ArrayList(); |
| // String webRoot = getWebContextRoot(javaProject).toString(); |
| // IResourceProxyVisitor visitor = new IResourceProxyVisitor() |
| // { |
| // public boolean visit( IResourceProxy proxy ) throws CoreException |
| // { |
| // if ( proxy.getName().endsWith( ".htm" ) ) |
| // { |
| // IPath path = proxy.requestResource().getLocation(); |
| // found.add(path); |
| // //IIncludePathEntry newLibraryEntry = JavaScriptCore.newLibraryEntry( path,null, null, new IAccessRule[ 0 ], new IIncludePathAttribute[ 0 ], true ); |
| // //entries.add( newLibraryEntry ); |
| // return false; |
| // } |
| // |
| // return true; |
| // } |
| // }; |
| // try |
| // { |
| // javaProject.getProject().findMember( new Path(webRoot) ).accept( visitor, 0 ); |
| // } |
| // catch ( CoreException e ) |
| // { |
| // } |
| // |
| // |
| // return (IPath[])found.toArray(new IPath[found.size()]); |
| // |
| // } |
| |
| } |