blob: 3a51982ebf2fbdb379da3d38b2c65bdc9553cb1b [file] [log] [blame]
/*******************************************************************************
* 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.server.http.core.internal;
import java.net.URL;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IRuntime;
import org.eclipse.wst.server.core.IRuntimeType;
import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.core.IServerType;
import org.eclipse.wst.server.core.IServerWorkingCopy;
import org.eclipse.wst.server.core.ServerCore;
import org.eclipse.wst.server.core.ServerPort;
import org.eclipse.wst.server.core.model.IURLProvider;
import org.eclipse.wst.server.core.model.ServerDelegate;
import org.eclipse.wst.server.core.util.IStaticWeb;
/**
* Generic HTTP server.
*/
public class HttpServer extends ServerDelegate implements IURLProvider {
public static final String PROPERTY_URL_PREFIX = "urlPrefix";
public static final String PROPERTY_PORT = "port";
public static final String PROPERTY_IS_PUBLISHING = "isPublishing";
public static final String ID = "org.eclipse.wst.server.http.server";
/**
* HttpServer.
*/
public HttpServer() {
super();
}
protected void initialize() {
// do nothing
}
/*
* @see RuntimeDelegate#setDefaults(IProgressMonitor)
*/
public void setDefaults(IProgressMonitor monitor) {
setPort(80);
setURLPrefix("");
setPublishing(true);
}
public HttpRuntime getHttpRuntime() {
if (getServer().getRuntime() == null)
return null;
return (HttpRuntime) getServer().getRuntime().loadAdapter(HttpRuntime.class, null);
}
/*public void importRuntimeConfiguration(IRuntime arg0, IProgressMonitor arg1) throws CoreException {
if (getHttpRuntime() != null) {
if (!getHttpRuntime().publishToDirectory()) {
setAttribute("auto-publish-setting", 1);
} else {
setAttribute("auto-publish-setting", 2);
setAttribute("auto-publish-time", 1);
}
//setPublishDirectory(getHttpRuntime().getPublishLocation());
}
}*/
public boolean dontPublish() {
return getAttribute("auto-publish-setting", "2").equals("1");
}
// public void setDocumentRoot(String docRoot) {
// setAttribute(HttpServer.DOCUMENT_ROOT, docRoot);
// }
// public String getDocumentRoot() {
// return getAttribute(HttpServer.DOCUMENT_ROOT, "");
// }
// public boolean canPublish() {
// return getAttribute(HttpServer.PUBLISH, true);
// }
// public void setPublish(boolean publish) {
// setAttribute(HttpServer.PUBLISH, publish);
// }
/**
* Processes the host to return IPv6 addresses in square brackets, e.g.
* "[4ffe:ff2f:101:21:230:6eff:fe04:d9fe]". If the host is just a host name
* or IPv4 address, then it is returned as is.
*
* @param host the host, an IP address or host name
*/
protected static String getURLHost(String host) {
// use ":" to determine if this is an IPv6 address
return (host != null && host.indexOf(":") >= 0) ? "[" + host + "]" : host;
}
/**
* Return the root URL of this module.
*
* @param module a module
* @return the root URL
*/
public URL getModuleRootURL(IModule module) {
try {
String base = "http://" + getURLHost(getServer().getHost());
if (base.equals(""))
base = "http://" + getURLHost(getServer().getHost());
int port = getPort();
URL url = null;
if (port == 80)
url = new URL(base + "/");
else
url = new URL(base + ":" + port + "/");
String prefix = getURLPrefix();
if (prefix != null && prefix.length() > 0)
url = new URL(url, prefix + "/");
IStaticWeb staticWeb = (IStaticWeb) module.loadAdapter(IStaticWeb.class, null);
return new URL(url, staticWeb.getContextRoot());
} catch (Exception e) {
Trace.trace(Trace.SEVERE, "Could not get root URL", e);
return null;
}
}
/*
* Returns the child module(s) of this module.
*/
public IModule[] getChildModules(IModule[] module) {
return new IModule[0];
}
/*
* Returns the root module(s) of this module.
*/
public IModule[] getRootModules(IModule module) throws CoreException {
return new IModule[] { module };
}
/**
* Returns true if the given project is supported by this server, and false
* otherwise.
*
* @param add modules
* @param remove modules
* @return the status
*/
public IStatus canModifyModules(IModule[] add, IModule[] remove) {
return new Status(IStatus.OK, HttpCorePlugin.PLUGIN_ID, 0, Messages.canModifyModules, null);
}
public ServerPort[] getServerPorts() {
int port = getPort();
ServerPort[] ports = { new ServerPort("http", Messages.httpPort, port, "http") };
return ports;
}
public int getPort() {
return getAttribute(HttpServer.PROPERTY_PORT, 80);
}
public void setPort(int port) {
setAttribute(HttpServer.PROPERTY_PORT, port);
}
public void setURLPrefix(String prefix) {
setAttribute(HttpServer.PROPERTY_URL_PREFIX, prefix);
}
public String getURLPrefix() {
return getAttribute(HttpServer.PROPERTY_URL_PREFIX, "");
}
public boolean isPublishing() {
return getAttribute(PROPERTY_IS_PUBLISHING, false);
}
public void setPublishing(boolean shouldPublish) {
setAttribute(PROPERTY_IS_PUBLISHING, shouldPublish);
}
public static IServer createHttpServer(String host, String serverName, IProgressMonitor monitor) {
try {
IRuntimeType runtimeType = ServerCore.findRuntimeType(HttpRuntime.ID);
IRuntimeWorkingCopy runtimeCopy = runtimeType.createRuntime(HttpRuntime.ID, monitor);
IRuntime runtime = runtimeCopy.save(true, monitor);
IServerType serverType = ServerCore.findServerType(ID);
IServerWorkingCopy workingCopy = serverType.createServer(ID, null, runtime, monitor);
workingCopy.setName(serverName);
workingCopy.setHost(host);
return workingCopy.save(true, monitor);
} catch (Exception e) {
Trace.trace(Trace.SEVERE, "Error creating server", e);
}
return null;
}
public static IServer findHttpServer(String id) {
IServer[] servers = ServerCore.getServers();
for (IServer server : servers) {
if (server.getId().equals(id))
return server;
}
return null;
}
/*public void setPublishDirectory(String pubDir) {
setAttribute(PROPERTY_PUB_DIR, pubDir);
}
public String getPublishDirectory() {
if (getHttpRuntime() != null)
return getAttribute(PROPERTY_PUB_DIR, getHttpRuntime().getPublishLocation());
return getAttribute(PROPERTY_PUB_DIR, "");
}*/
/*
* public static void updateBaseURL(String id, String baseURL) {
* updateBaseURL(checkForHttpServer(id), baseURL); }
*/
/*
* public static void updateBaseURL(IServer server, String baseURL) { if
* (server == null) return;
*
* IServerWorkingCopy workingCopy = server.createWorkingCopy();
*
* HttpServer as = (HttpServer) workingCopy.getAdapter(HttpServer.class); if
* (as == null) as = (HttpServer) workingCopy.loadAdapter(HttpServer.class,
* null);
*
* String currentURL = as.getBaseURL();
*
* if (currentURL.equals(baseURL)) return; as.setBaseURL(baseURL); try {
* as.saveConfiguration(null); workingCopy.save(true, null); } catch
* (CoreException e) { e.printStackTrace(); } }
*/
public void modifyModules(IModule[] add, IModule[] remove, IProgressMonitor monitor) throws CoreException {
// do nothing
}
/**
* Return a string representation of this object.
*
* @return java.lang.String
*/
public String toString() {
return "HttpServer";
}
}