blob: a5169ce03945b3b39b0f1d955226348cb960fa08 [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.jst.server.preview.adapter.internal.core;
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.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.jst.server.core.IWebModule;
import org.eclipse.jst.server.preview.adapter.internal.Messages;
import org.eclipse.jst.server.preview.adapter.internal.PreviewPlugin;
import org.eclipse.jst.server.preview.adapter.internal.Trace;
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;
/**
* J2EE preview server.
*/
public class PreviewServer extends ServerDelegate implements IURLProvider {
public static final String ID = "org.eclipse.jst.server.preview.server";
public static final String PROPERTY_PORT = "port";
/**
* PreviewServer.
*/
public PreviewServer() {
super();
}
protected void initialize() {
// do nothing
}
public PreviewRuntime getPreviewRuntime() {
if (getServer().getRuntime() == null)
return null;
return (PreviewRuntime) getServer().getRuntime().loadAdapter(PreviewRuntime.class, null);
}
/**
* Return the root URL of this module.
*
* @param module a module
* @return java.net.URL
*/
public URL getModuleRootURL(IModule module) {
try {
String base = "http://localhost";
int port = getPort();
URL url = null;
if (port == 80)
url = new URL(base + "/");
else
url = new URL(base + ":" + port + "/");
String type = module.getModuleType().getId();
if ("wst.web".equals(type)) {
IStaticWeb staticWeb = (IStaticWeb) module.loadAdapter(IStaticWeb.class, null);
return new URL(url, staticWeb.getContextRoot());
} else if ("jst.web".equals(type)) {
IWebModule webModule = (IWebModule) module.loadAdapter(IWebModule.class, null);
return new URL(url, webModule.getContextRoot());
}
return url;
} 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, PreviewPlugin.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(PreviewServer.PROPERTY_PORT, 8080);
}
public void setPort(int port) {
setAttribute(PreviewServer.PROPERTY_PORT, port);
}
public static IServer createPreviewServer(String serverName) {
try {
NullProgressMonitor monitor = new NullProgressMonitor();
IRuntimeType runtimeType = ServerCore.findRuntimeType(PreviewRuntime.ID);
IRuntimeWorkingCopy runtimeCopy = runtimeType.createRuntime(PreviewRuntime.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("localhost");
return workingCopy.save(true, monitor);
} catch (Exception e) {
Trace.trace(Trace.SEVERE, "Error creating server", e);
}
return null;
}
public static IServer findPreviewServer(String id) {
IServer[] servers = ServerCore.getServers();
for (IServer server : servers) {
if (server.getId().equals(id)) {
return server;
}
}
return null;
}
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 "PreviewServer";
}
}