<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.
      IServerConfigurationDelegate and IServerConfigurationWorkingCopyDelegate merged into a
      single ServerConfigurationDelegate.</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></td>
  <td></td>
  <td></td>
  <td></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></td>
  <td></td>
  <td></td>
  <td></td>
</tr>
</table>

</body>
</html>
