<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<link rel="stylesheet" href="http://www.eclipse.org/default_style.css" type="text/css">
<title>Server Tools API Branch</title>
</head>

<body>

<body alink="#ff0000" bgcolor="#ffffff" link="#0000ee" text="#000000" vlink="#551a8b">

<table border="0" cellpadding="2" cellspacing="5" width="100%">
  <tbody><tr>
 		<TD WIDTH=60%>
			<P ALIGN=LEFT><B><FONT SIZE=6><FONT FACE="Verdana, Arial, Helvetica, sans-serif">Server Tools API Branch</FONT></FONT></B><BR>
			<FONT SIZE=1><FONT FACE="Arial, Helvetica, sans-serif"><FONT COLOR="#8080ff">Information on the Server Tools API Branch</FONT></FONT></FONT>
			</P>
		</TD>
    <td rowspan="2" width="19%"><img src="http://www.eclipse.org/images/Idea.jpg" border="0" height="86" width="120"></td>
  </tr>
</tbody></table>

<table border="0" cellpadding="2" cellspacing="5" width="100%">
  <tbody><tr> 
    <td colspan="2" align="left" bgcolor="#0080c0" valign="top"><b><font color="#ffffff" face="Arial,Helvetica">Changes</font></b></td>
  </tr></tbody>
</table>

This document contains information on the Server Tools API changes that have gone
into the Server Tools API Branch for M2.

<p/>

<table border=1>
<tr>
  <th>Change</th>
  <th>Reason</th>
  <th>Old Code</th>
  <th>New Code</th>
</tr>
<tr>
  <td>All java.util.Lists returned from methods have been changed to arrays of the corresponding
      content type.</td>
  <td>Stronger typed return values are safer, and returning a copy of the list (instead of the list
      itself) blocks against clients modifying internal data structures.</td>
  <td>List list = ServerCore.getRuntimeTypes();</td>
  <td>IRuntimeType[] rt = ServerCore.getRuntimeTypes();</td>
</tr>
<tr>
  <td>IResourceManager has been removed. Most of it's methods have been moved to the ServerCore
      class, with the remaining ones in ServerUtil.</td>
  <td>There was no client benefit of the resource manager, and it was misnamed.</td>
  <td>ServerCore.getResourceManager().getServers();</td>
  <td>ServerCore.getServers();</td>
</tr>
<tr>
  <td>All extension point interfaces have been changed to abstract classes, and the "I" removed
    from the name.</td>
  <td>Allows for future support and maintenance without breaking existing interfaces.</td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td>Several interfaces were moved from the .core.model package to .core.</td>
  <td>The .core.model package was meant for SPIs, not API. All API classes & interfaces will
      be moved or remain in .core so that API users do not need to use the .core.model package.</td>
  <td>import org.eclipse.wst.server.code.model.IModule;</td>
  <td>import org.eclipse.wst.server.code.IModule;</td>
</tr>
<tr>
  <td>IServerResourceListener renamed to IServerLifecycleListener. Several methods moved out to
      new IRuntimeListener and IServerConfigurationListener interfaces.</td>
  <td>"Resource" had to be removed from the name, and the interface contained methods for
      runtimes and server configurations as well. They are split up so that API users do not
      need to listen for all types of changes from a single interface.</td>
  <td>ServerCore.getResourceManager().addServerResourceListener(myListener);</td>
  <td>ServerCore.addRuntimeLifecycleListener(myListener);</td>
</tr>
<tr>
  <td>Publishing interfaces completely rewritten & .core.resources package removed.</td>
  <td>The publishing interface was outdated and written before the Eclipse team support,
      ANT, or other recent publishing methods had been developed. The new API allows for
      better support and for each server type to use it's own publishing mechanism.</td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td>IRuntimeDelegate and IRuntimeWorkingCopyDelegate merged into a single RuntimeDelegate.
      IServerDelegate and IServerWorkingCopyDelegate reworked into 
      ServerDelegate and ServerBehaviourDelegate.</td>
  <td>Making clients provide two separate classes for the delegates was excessive,
      unnecessary, and ended up with too many SPI classes. Only a single delegate class is
      now required for these extension points.</td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td>IRuntime.getDelegate(), IRuntime.getWorkingCopyDelegate() changed into IRuntime extending
      IAdaptable.</td>
  <td>**. Clients should still remember that calling this method may involve plugin loading, so
      it should not be used in popup menus, etc.</td>
  <td>ITomcatRuntime tr = (ITomcatRuntime) runtime.getDelegate();</td>
  <td>ITomcatRuntime tr = (ITomcatRuntime) runtime.getAdapter(ITomcatRuntime.class);</td>
</tr>
<tr>
  <td>IModuleType and IModuleKind interfaces merged.</td>
  <td>IModuleKind was created late in the previous release cycle and couldn't be merged at the
      time it was created.</td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td>IServerTask changed and IModuleTask removed.</td>
  <td>The existing interfaces had an ITask directly returned as a delegate, and only allowed a
      single task per extension point. The new IServerTask allows the delegate to return multiple
      tasks from a single extension point, and it is not itself a task.</td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td>IServerConfiguration, IServerConfiguration, etc. removed</td>
  <td>The server config was a relic and did not need to be a first class resource. ServerDelegates
      are now directly responsible for maintaining the configuration.</td>
  <td></td>
  <td>see Tomcat implementation</td>
</tr>
<tr>
  <td>Various minor cleanup - methods renamed, parameters changed, etc.</td>
  <td>Cleanup and future maintenance.</td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td>IModuleObjectAdapter -> IModuleArtifactAdapter, IModuleObject -> IModuleArtifact</td>
  <td>Object was too generic and didn't have any real meaning. Artifact represents what the
      IModuleObject really represents - resources within a module</td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td>getServerType(String id) -> findServerType(String id)</td>
  <td>Lookup methods on ServerCore and ServerUtil renamed to be more accurate.</td>
  <td>IServerType st = getServerType("com.x")</td>
  <td>IServerType st = findServerType("com.x")</td>
</tr>
<tr>
  <td>Lots of methods & interfaces moved to internal packages</td>
  <td>Need to trim down the exposed API to only what is required for ongoing maintenance. If
      there is anything in an internal package that you were previously using, or plan to use
      in the future, please contact me and we'll work out an API solution</td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td></td>
  <td></td>
  <td></td>
  <td></td>
</tr>
</table>

</body>
</html>