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