blob: 56473f397fdc020584c7216983c2fac1e56385c6 [file] [log] [blame]
/**
*
*/
package org.eclipse.wst.jsdt.web.core.internal.project;
import java.net.URI;
import java.net.URISyntaxException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.wst.jsdt.core.IClasspathContainer;
import org.eclipse.wst.jsdt.core.IJavaProject;
import org.eclipse.wst.jsdt.core.compiler.libraries.BasicBrowserLibraryClassPathContainerInitializer;
import org.eclipse.wst.jsdt.core.compiler.libraries.SystemLibraryLocation;
import org.eclipse.wst.jsdt.web.core.internal.JsCorePlugin;
import org.eclipse.wst.jsdt.web.core.internal.java.JsNameManglerUtil;
/**
* @author childsb
*
*/
public class WebProjectClassPathContainerInitializer extends BasicBrowserLibraryClassPathContainerInitializer {
private static final String CONTAINER_DESCRIPTION = "Web Project support for JSDT";
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";
private static final String MANGLED_BUTT2 = ".js";
public static final String VIRTUAL_CONTAINER = "org.eclipse.wst.jsdt.launching.WebProject";
private static String getUnmangedHtmlPath(String containerPathString) {
if (containerPathString == null) {
return null;
}
if (containerPathString.toLowerCase().indexOf(WebProjectClassPathContainerInitializer.MANGLED_BUTT1) != -1 && containerPathString.toLowerCase().indexOf(WebProjectClassPathContainerInitializer.MANGLED_BUTT2) != -1) {
return JsNameManglerUtil.unmangle(containerPathString);
}
return null;
}
public SystemLibraryLocation getLibraryLocation() {
return new WebBrowserLibLocation();
}
class WebBrowserLibLocation extends SystemLibraryLocation {
WebBrowserLibLocation() {
super();
}
public char[][] getLibraryFileNames() {
return new char[][] { WebProjectClassPathContainerInitializer.LIB_NAME };
}
protected String getPluginId() {
return JsCorePlugin.PLUGIN_ID;
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.jsdt.core.ClasspathContainerInitializer#canUpdateClasspathContainer(org.eclipse.core.runtime.IPath,
* org.eclipse.wst.jsdt.core.IJavaProject)
*/
public boolean canUpdateClasspathContainer(IPath containerPath, IJavaProject project) {
/* dont remove from this project */
return false;
}
protected IClasspathContainer getContainer(IPath containerPath, IJavaProject project) {
return this;
}
public String getDescription() {
return WebProjectClassPathContainerInitializer.CONTAINER_DESCRIPTION;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.jsdt.core.ClasspathContainerInitializer#getDescription(org.eclipse.core.runtime.IPath,
* org.eclipse.wst.jsdt.core.IJavaProject)
*/
public String getDescription(IPath containerPath, IJavaProject project) {
if (containerPath.equals(new Path(WebProjectClassPathContainerInitializer.VIRTUAL_CONTAINER))) {
return WebProjectClassPathContainerInitializer.CONTAINER_DESCRIPTION;
}
String containerPathString = containerPath.toString();
String unmangled = WebProjectClassPathContainerInitializer.getUnmangedHtmlPath(containerPathString);
if (unmangled != null) {
IPath projectPath = project.getPath();
/* Replace the project path with the project name */
if (unmangled.indexOf(projectPath.toString()) >= 0) {
unmangled = project.getDisplayName() + ":" + unmangled.substring(projectPath.toString().length());
}
return unmangled;
}
return containerPathString;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.jsdt.core.ClasspathContainerInitializer#getHostPath(org.eclipse.core.runtime.IPath)
*/
public URI getHostPath(IPath path, IJavaProject project) {
// TODO Auto-generated method stub
String htmlPath = WebProjectClassPathContainerInitializer.getUnmangedHtmlPath(path.toString());
if (htmlPath != null) {
try {
return new URI(htmlPath);
} catch (URISyntaxException ex) {
ex.printStackTrace();
}
}
return null;
}
public int getKind() {
return IClasspathContainer.K_APPLICATION;
}
public IPath getPath() {
return new Path(WebProjectClassPathContainerInitializer.VIRTUAL_CONTAINER);
}
}