API change documentation
diff --git a/development/miscdocuments/Server Tools API Branch.html b/development/miscdocuments/Server Tools API Branch.html
new file mode 100644
index 0000000..0058c33
--- /dev/null
+++ b/development/miscdocuments/Server Tools API Branch.html
@@ -0,0 +1,143 @@
+<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>