[107021] Server assembly during publish
diff --git a/plugins/org.eclipse.jst.server.core/plugin.xml b/plugins/org.eclipse.jst.server.core/plugin.xml
index fa12f2d..823af6e 100644
--- a/plugins/org.eclipse.jst.server.core/plugin.xml
+++ b/plugins/org.eclipse.jst.server.core/plugin.xml
@@ -95,11 +95,24 @@
     </runtime-component-type>
 
     <runtime-component-version
-       type="org.eclipse.jst.server.tomcat" version="5.5"/>
+       type="org.eclipse.jst.server.tomcat"
+       version="3.2"/>
 
     <runtime-component-version
-        type="org.eclipse.jst.server.tomcat"
-        version="4.1"/>
+       type="org.eclipse.jst.server.tomcat"
+       version="4.0"/>
+
+    <runtime-component-version
+       type="org.eclipse.jst.server.tomcat"
+       version="4.1"/>
+
+    <runtime-component-version
+       type="org.eclipse.jst.server.tomcat"
+       version="5.0"/>
+
+    <runtime-component-version
+       type="org.eclipse.jst.server.tomcat"
+       version="5.5"/>
 
     <adapter>
       <runtime-component
@@ -113,11 +126,21 @@
     <supported>
       <runtime-component
          id="org.eclipse.jst.server.tomcat"
-         version="5.5"
+         version="3.2"
          allow-newer="true"/>
       <facet
          id="web"
-         version="2.4"/>
+         version="2.2"/>
+    </supported>
+
+    <supported>
+      <runtime-component
+         id="org.eclipse.jst.server.tomcat"
+         version="4.0"
+         allow-newer="true"/>
+      <facet
+         id="web"
+         version="2.3"/>
     </supported>
 
     <supported>
@@ -127,20 +150,37 @@
          allow-newer="true"/>
       <facet
          id="web"
-         version="2.3"/>
+         version="2.4"/>
     </supported>
-    
+
+    <supported>
+      <runtime-component
+         id="org.eclipse.jst.server.tomcat"
+         version="5.5"
+         allow-newer="true"/>
+      <facet
+         id="web"
+         version="2.4"/>
+    </supported>
+
     <runtime-component-type id="standard.jre">
       <!-- <icon>images/jre.gif</icon> -->
     </runtime-component-type>
-    
-    <runtime-component-version type="standard.jre" version="1.4"/>
-    <runtime-component-version type="standard.jre" version="5.0"/>
+
+    <runtime-component-version
+       type="standard.jre"
+       version="1.4"/>
+    <runtime-component-version
+       type="standard.jre"
+       version="5.0"/>
 
     <adapter>
-      <runtime-component id="standard.jre"/>
-      <factory class="org.eclipse.jst.server.core.internal.StandardJreClasspathProvider$Factory"/>
-      <type class="org.eclipse.wst.common.project.facet.core.runtime.classpath.IClasspathProvider"/>
+      <runtime-component
+         id="standard.jre"/>
+      <factory
+         class="org.eclipse.jst.server.core.internal.StandardJreClasspathProvider$Factory"/>
+      <type
+         class="org.eclipse.wst.common.project.facet.core.runtime.classpath.IClasspathProvider"/>
     </adapter>
 
     <supported>
@@ -152,7 +192,5 @@
       <runtime-component id="standard.jre" version="5.0"/>
       <facet id="java" version="5.0"/>
     </supported>
-    
   </extension>
-
 </plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJavaRuntime.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJavaRuntime.java
index 270312c..b2b4b5f 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJavaRuntime.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJavaRuntime.java
@@ -13,6 +13,13 @@
 import org.eclipse.jdt.launching.IVMInstall;
 /**
  * 
+ * <p>
+ * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @since 1.0
  */
 public interface IJavaRuntime {
 	/**
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java
index d359285..fd2cc45 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java
@@ -25,6 +25,14 @@
 import org.eclipse.wst.server.core.model.IModuleResourceDelta;
 /**
  * Utility class with an assortment of useful file methods.
+ * 
+ * <p>
+ * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @since 1.0
  */
 public class PublishUtil {
 	// size of the buffer
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeBridge.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeBridge.java
index 137e072..f0cc4e3 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeBridge.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeBridge.java
@@ -30,11 +30,20 @@
 	private static Map mappings = new HashMap();
 
 	static {
-		mappings.put("org.eclipse.jst.server.tomcat.runtime.55", RuntimeManager.get()
-				.getRuntimeComponentType("org.eclipse.jst.server.tomcat").getVersion("5.5"));
-
+		mappings.put("org.eclipse.jst.server.tomcat.runtime.32", RuntimeManager.get()
+				.getRuntimeComponentType("org.eclipse.jst.server.tomcat").getVersion("3.2"));
+		
+		mappings.put("org.eclipse.jst.server.tomcat.runtime.40", RuntimeManager.get()
+				.getRuntimeComponentType("org.eclipse.jst.server.tomcat").getVersion("4.0"));
+		
 		mappings.put("org.eclipse.jst.server.tomcat.runtime.41", RuntimeManager.get()
 				.getRuntimeComponentType("org.eclipse.jst.server.tomcat").getVersion("4.1"));
+		
+		mappings.put("org.eclipse.jst.server.tomcat.runtime.50", RuntimeManager.get()
+				.getRuntimeComponentType("org.eclipse.jst.server.tomcat").getVersion("5.0"));
+		
+		mappings.put("org.eclipse.jst.server.tomcat.runtime.55", RuntimeManager.get()
+				.getRuntimeComponentType("org.eclipse.jst.server.tomcat").getVersion("5.5"));
 	}
 
 	public void port() {
@@ -64,17 +73,6 @@
 					IVMInstall vmInstall = gr.getVMInstall();
 					IVMInstall2 vmInstall2 = (IVMInstall2) vmInstall;
 					
-					/*final ClasspathRuntimeTargetHandler cphandler = getClasspathHandler(runtime);
-					
-					final IPath jrecontainer = findJreContainer(cphandler
-							.getDelegateClasspathEntries(runtime, null));
-					
-					final IVMInstallType vminstalltype = JavaRuntime
-							.getVMInstallType(jrecontainer.segment(1));
-					
-					final IVMInstall2 vminstall = (IVMInstall2) vminstalltype
-							.findVMInstallByName(jrecontainer.segment(2));*/
-					
 					final String jvmver = vmInstall2.getJavaVersion();
 					final IRuntimeComponentVersion rcv;
 					
@@ -97,30 +95,4 @@
 			}
 		}
 	}
-
-	/*private static ClasspathRuntimeTargetHandler getClasspathHandler(final IRuntime r) {
-		final IRuntimeTargetHandler[] handlers = ServerCore.getRuntimeTargetHandlers();
-
-		for (int j = 0; j < handlers.length; j++) {
-			final IRuntimeTargetHandler handler = handlers[j];
-
-			if (handler.supportsRuntimeType(r.getRuntimeType())) {
-				return (ClasspathRuntimeTargetHandler) handler
-						.getAdapter(ClasspathRuntimeTargetHandler.class);
-			}
-		}
-
-		throw new IllegalStateException();
-	}
-
-	private static IPath findJreContainer(final IClasspathEntry[] cpentries) {
-		for (int i = 0; i < cpentries.length; i++) {
-			final IPath path = cpentries[i].getPath();
-
-			if (path.segment(0).equals(JavaRuntime.JRE_CONTAINER))
-				return path;
-		}
-
-		throw new IllegalStateException();
-	}*/
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatSourcePathComputerDelegate.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatSourcePathComputerDelegate.java
index 90f36c0..ca9b207 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatSourcePathComputerDelegate.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatSourcePathComputerDelegate.java
@@ -42,38 +42,31 @@
 
 		IServer server = ServerUtil.getServer(configuration);
 		if (server != null) {
-			IPath basePath = ((TomcatServerBehaviour)server.getAdapter(TomcatServerBehaviour.class)).getRuntimeBaseDirectory();
+			//IPath basePath = ((TomcatServerBehaviour)server.getAdapter(TomcatServerBehaviour.class)).getRuntimeBaseDirectory();
 			List list = new ArrayList();
-			List pathList = new ArrayList();
+			//List pathList = new ArrayList();
 			IModule[] modules = server.getModules();
 			for (int i = 0; i < modules.length; i++) {
 				IProject project = modules[i].getProject();
 				if (project != null) {
-					/**
-					 * WORKAROUND for bug 93174,
-					 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=93174
-					 * 
-					 * Assume that a folder with the same name as the IModule
-					 * name located directly under the module's project is a
-					 * "flexible" module. Alter the behavior so that a folder
-					 * container is added instead.
-					 */
+					
 					IFolder moduleFolder = project.getFolder(modules[i].getName());
 					if (moduleFolder.exists()) {
 						sourcefolderList.add(new FolderSourceContainer(moduleFolder, true));
-					} else {
-						try {
-							if (project.hasNature(JavaCore.NATURE_ID)) {
-								IJavaProject javaProject = (IJavaProject) project.getNature(JavaCore.NATURE_ID);
-								list.add(javaProject);
-							}
-						} catch (Exception e) {
-							// ignore
-						}
 					}
 					
-					IPath path = basePath.append("work").append("Catalina").append("localhost").append(modules[i].getName());
-					pathList.add(path);
+					try {
+						if (project.hasNature(JavaCore.NATURE_ID)) {
+							IJavaProject javaProject = (IJavaProject) project.getNature(JavaCore.NATURE_ID);
+							if (!list.contains(javaProject))
+								list.add(javaProject);
+						}
+					} catch (Exception e) {
+						// ignore
+					}
+					
+					//IPath path = basePath.append("work").append("Catalina").append("localhost").append(modules[i].getName());
+					//pathList.add(path);
 				}
 			}
 			int size = list.size();
@@ -81,32 +74,22 @@
 			list.toArray(projects);
 			
 			int size2 = entries.length;
-			int size3 = pathList.size();
-			IRuntimeClasspathEntry[] entries2 = new IRuntimeClasspathEntry[size + size2 + size3];
+			//int size3 = pathList.size();
+			IRuntimeClasspathEntry[] entries2 = new IRuntimeClasspathEntry[size + size2];
 			System.arraycopy(entries, 0, entries2, 0, size2);
 			
-			for (int i = 0; i < size; i++) {
-				entries2[size2 + i] = JavaRuntime.newProjectRuntimeClasspathEntry(projects[i]); 
-			}
+			for (int i = 0; i < size; i++)
+				entries2[size2 + i] = JavaRuntime.newProjectRuntimeClasspathEntry(projects[i]);
 			
-			for (int i = 0; i < size3; i++) {
-				entries2[size + size2 + i] = JavaRuntime.newArchiveRuntimeClasspathEntry((IPath) pathList.get(i)); 
-			}
+			//for (int i = 0; i < size3; i++)
+			//	entries2[size + size2 + i] = JavaRuntime.newArchiveRuntimeClasspathEntry((IPath) pathList.get(i));
 			
 			entries = entries2;
 		}
 		
 		IRuntimeClasspathEntry[] resolved = JavaRuntime.resolveSourceLookupPath(entries, configuration);
 		ISourceContainer[] sourceContainers = JavaRuntime.getSourceContainers(resolved);
-
-		/**
-		 * WORKAROUND for bug 93174,
-		 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=93174
-		 * 
-		 * FolderSourceContainers have a source container of null, so the
-		 * mapping of the regular classpath to source containers is done
-		 * before adding the known FolderSourceContainers.
-		 */
+		
 		if (!sourcefolderList.isEmpty()) {
 			ISourceContainer[] combinedSourceContainers = new ISourceContainer[sourceContainers.length + sourcefolderList.size()];
 			sourcefolderList.toArray(combinedSourceContainers);
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IProjectProperties.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IProjectProperties.java
index 295fa67..a62e995 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IProjectProperties.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IProjectProperties.java
@@ -23,6 +23,9 @@
  * (repeatedly) as the API evolves.
  * </p>
  * 
+ * @deprecated Project facet support should now be used instead of this API. @see
+ *    org.eclipse.wst.common.project.facet.core.IFacetedProject#getRuntime()
+ * 
  * @plannedfor 1.0
  */
 public interface IProjectProperties {
@@ -30,7 +33,9 @@
 	 * Returns the current runtime target for this project.
 	 * 
 	 * @return the current runtime target, or <code>null</code> if the project has
-	 *    no runtime target 
+	 *    no runtime target
+	 * @deprecated Project facet support should now be used instead of this API. @see
+	 *    org.eclipse.wst.common.project.facet.core.IFacetedProject#getRuntime()
 	 */
 	public IRuntime getRuntimeTarget();
 
@@ -42,6 +47,8 @@
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
 	 * @throws CoreException if there is a problem setting the runtime target
+	 * @deprecated Project facet support should now be used instead of this API. @see
+	 *    org.eclipse.wst.common.project.facet.core.IFacetedProject#setRuntime()
 	 */
 	public void setRuntimeTarget(IRuntime runtime, IProgressMonitor monitor) throws CoreException;
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
index 839fc54..c03faeb 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
@@ -88,6 +88,8 @@
 	 *
 	 * @param project a project
 	 * @return the properties of the project
+	 * @deprecated Project facet support should now be used instead of this API. @see
+	 *    org.eclipse.wst.common.project.facet.core.IFacetedProject#getRuntime()
 	 */
 	public static IProjectProperties getProjectProperties(IProject project) {
 		if (project == null)