blob: 33c377fd9bb9a8049f49046fd79e11047460315e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 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.core;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
/**
* Represents a server type from which server instances can be created.
* <p>
* The server core framework supports
* an open-ended set of server types, which are contributed via
* the <code>serverTypes</code> extension point in the server core
* plug-in. Server type objects carry no state (all information is
* read-only and is supplied by the server type declaration).
* The global list of known server types is available via
* {@link ServerCore#getServerTypes()}.
* </p>
* <p>
* This interface is not intended to be implemented by clients.
* </p>
* <p>
* Two server types are identical if and only if they have the same id.
* </p>
*
* @since 1.0
*/
public interface IServerType {
/**
* Returns the id of this server type.
* Each known server type has a distinct id.
* Ids are intended to be used internally as keys; they are not
* intended to be shown to end users.
*
* @return the server type id
*/
public String getId();
/**
* Returns the displayable name for this server type.
* <p>
* Note that this name is appropriate for the current locale.
* </p>
*
* @return a displayable name for this server type
*/
public String getName();
/**
* Returns the displayable description for this server type.
* <p>
* Note that this description is appropriate for the current locale.
* </p>
*
* @return a displayable description for this server type
*/
public String getDescription();
/**
* Returns the type of server runtime that this type
* of server requires.
* <p>
* [issue: "runtimeTypeId" is mandatory according the
* serverTypes schema. This suggests that all types
* of servers have a server runtime. But there is also
* a boolean "runtime" attribute indicating whether the
* server requires a runtime. I supect that server type
* has an optional server runtime, in which case you
* can make "runtimeTypeId" optional and dispense with
* "runtime".]
* </p>
* <p>
* [issue: Does it really make sense for
* runtimeTypes and serverTypes be separate extension
* points? Would it not be sufficient to have the party declaring
* the server type also declare the server runtime type?
* Having runtimeType as a separate extension point
* only makes sense if it would be possible in principle to
* declare a server runtime type that could actually be
* used on serveral server types. If server runtimes
* always end up being server-type specific, it would be better
* to combine them.]
* </p>
* <p>
* [issue: What should happen when a server type mentions
* the id of a server runtime type that is not known
* to the system?]
* </p>
*
* @return a server runtime type
*/
public IRuntimeType getRuntimeType();
/**
* Returns whether this type of server requires a server
* runtime.
* <p>
* [issue: See issues on getRuntimeType(). I suspect this
* method is unnecessary, and that
* this.getRuntimeType() != null will do.]
* </p>
*
* @return <code>true</code> if this type of server requires
* a server runtime, and <code>false</code> if it does not
* @see #getRuntimeType()
*/
public boolean hasRuntime();
/**
* Returns whether this type of server supports the given launch mode.
* <p>
* [issue: It also seems odd that this is part of the server type
* declaration. This means that any server type has to commit
* so early on which modes it supports.]
* </p>
*
* @param launchMode a mode in which a server can be launched,
* one of the mode constants defined by
* {@link org.eclipse.debug.core.ILaunchManager}
* @return whether this type of server supports the given mode
*/
public boolean supportsLaunchMode(String launchMode);
/**
* Returns whether this type of server requires a server
* configuration.
* <p>
* [issue: It's not clear how this method differs from
* this.getServerConfigurationType() != null]
* </p>
*
* @return <code>true</code> if this type of server requires
* a server configuration, and <code>false</code> if it does not
*/
public boolean hasServerConfiguration();
/**
* Returns <code>true</code> if this type of server can run on a remote host.
* Returns <code>false</code> if the server type can only be run on "localhost"
* (the local machine).
*
* @return <code>true</code> if this type of server can run on
* a remote host, and <code>false</code> if it cannot
*/
public boolean supportsRemoteHosts();
/**
* Creates an working copy instance of this server type.
* After setting various properties of the working copy,
* the client should call {@link IServerWorkingCopy#save(boolean, IProgressMonitor)}
* to bring the server instance into existence.
* <p>
* [issue: Why is a runtime passed in?
* IServerWorkingCopy.setRuntime(runtime) could be called on
* the result to accomplish the same thing.]
* </p>
* <p>
* [issue: The implementation of this method never creates a server
* config working copy, whereas the other one does!?]
* Consider combining the method with the other.]
* </p>
* <p>
* The server returned from this method will have it's host set to
* "localhost". Other defaults will be set by calling the server
* delegate's setDefaults() method.
* </p>
*
* @param id the id to assign to the server instance; the default name is
* used if id is <code>null</code> or an empty string
* @param file the file in the workspace where the server instance
* is to be serialized, or <code>null</code> if the information is
* instead to be persisted with the workspace but not with any
* particular workspace resource
* @param runtime the runtime to associate with the server instance,
* or <code>null</code> if none
* @param monitor a progress monitor, or <code>null</code> if progress
* reporting and cancellation are not desired
* @return a new server working copy with the given id
* @throws CoreException if an exception occurs while creating this runtime
* or setting it's default values
*/
public IServerWorkingCopy createServer(String id, IFile file, IRuntime runtime, IProgressMonitor monitor) throws CoreException;
/**
* Creates a working copy instance of this server type.
* After setting various properties of the working copy,
* the client should call {@link IServerWorkingCopy#save(boolean, IProgressMonitor)}
* to bring the server instance into existence.
* <p>
* [issue: Since this method just creates a working copy,
* it's not clear the operation is long-running and in need
* of a progress monitor.]
* </p>
* <p>
* The server returned from this method will have it's host set to
* "localhost". Other defaults will be set by calling the server
* delegate's setDefaults() method.
* </p>
* <p>
* [issue: The implementation of this method creates a server
* config working copy, whereas the other one does not!?
* Consider combining the method with the other.]
* </p>
*
* @param id the id to assign to the server instance; the default name is
* used if id is <code>null</code> or an empty string
* @param file the file in the workspace where the server instance
* is to be serialized, or <code>null</code> if the information is
* instead to be persisted with the workspace but not with any
* particular workspace resource
* @param monitor a progress monitor, or <code>null</code> if progress
* reporting and cancellation are not desired
* @return a new server working copy with the given id
* @throws CoreException if an exception occurs while creating this runtime
* or setting it's default values
*/
public IServerWorkingCopy createServer(String id, IFile file, IProgressMonitor monitor) throws CoreException;
}