fixes for flexible project structure: committed for JL
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EEDeleteAction.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EEDeleteAction.java
index 8dff76e..a89dcd8 100644
--- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EEDeleteAction.java
+++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EEDeleteAction.java
@@ -52,8 +52,8 @@
 import org.eclipse.ui.actions.DeleteResourceAction;
 import org.eclipse.ui.actions.SelectionListenerAction;
 import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-import org.eclipse.wst.common.modulecore.ArtifactEdit;
-import org.eclipse.wst.common.modulecore.ModuleCore;
+import org.eclipse.wst.common.modulecore.WorkbenchModule;
+import org.eclipse.wst.common.modulecore.internal.util.IModuleConstants;
 
 import com.ibm.wtp.common.logger.proxy.Logger;
 import com.ibm.wtp.emf.workbench.ProjectUtilities;
@@ -157,7 +157,13 @@
 	}
 
 	protected boolean isJ2EEModule(Object o) {
-		return CommonUtil.isDeploymentDescriptorRoot(o, false) || isJ2EEProject(o);
+		if (o instanceof WorkbenchModule) {
+			WorkbenchModule module = (WorkbenchModule) o;
+			String moduleType = module.getModuleType().getModuleTypeId();
+			//TODO need to add connector, app client, ear, ejb client
+			return moduleType.equals(IModuleConstants.JST_WEB_MODULE) || moduleType.equals(IModuleConstants.JST_EJB_MODULE);
+		}
+		return CommonUtil.isDeploymentDescriptorRoot(o, false);
 	}
 
 	protected boolean isApplication(Object o) {
@@ -370,26 +376,6 @@
 		}
 	}
 
-	protected boolean isJ2EEProject(Object o) {
-		boolean retVal = false;
-		if (o instanceof JavaProject) {
-			o = ((JavaProject) o).getProject();
-		}
-		if (o instanceof IProject) {
-			IProject project = (IProject) o;
-			ArtifactEdit edit = null;
-			try {
-				edit = ModuleCore.getFirstArtifactEditForRead(project);
-				if (edit!= null)
-					retVal = true;
-			} finally {
-				if (edit!=null)
-					edit.dispose();
-			}
-		}
-		return retVal;
-	}
-
 	protected boolean isJ2EEApplicationProject(Object o) {
 		boolean retVal = false;
 		if (o instanceof IProject) {
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EEModuleRenameChange.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EEModuleRenameChange.java
index d659600..6c52083 100644
--- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EEModuleRenameChange.java
+++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EEModuleRenameChange.java
@@ -19,25 +19,19 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.Collections;
 
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jst.j2ee.internal.dialogs.J2EERenameUIConstants;
-import org.eclipse.jst.j2ee.internal.earcreation.EARNatureRuntime;
 import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin;
-import org.eclipse.jst.j2ee.internal.project.J2EENature;
 import org.eclipse.jst.j2ee.internal.rename.RenameModuleOperation;
 import org.eclipse.jst.j2ee.internal.rename.RenameOptions;
-import org.eclipse.jst.j2ee.internal.rename.RenameUtilityJarMetadataOperation;
-import org.eclipse.jst.j2ee.internal.rename.UpdateWebContextRootMetadataOperation;
 import org.eclipse.jst.j2ee.internal.web.util.WebArtifactEdit;
 import org.eclipse.ltk.core.refactoring.Change;
 import org.eclipse.ltk.core.refactoring.RefactoringStatus;
-import org.eclipse.wst.common.modulecore.ModuleCore;
+import org.eclipse.wst.common.modulecore.WorkbenchModule;
 
 
 /**
@@ -49,10 +43,10 @@
 public class J2EEModuleRenameChange extends Change {
 
 	private String newName;
-	private IProject target;
+	private WorkbenchModule target;
 	private boolean renameDependencies;
 
-	public J2EEModuleRenameChange(IProject target, String newName, boolean renameDependencies) {
+	public J2EEModuleRenameChange(WorkbenchModule target, String newName, boolean renameDependencies) {
 		this.target = target;
 		this.newName = newName;
 		this.renameDependencies = renameDependencies;
@@ -98,17 +92,14 @@
 			RenameModuleOperation renameOp = new RenameModuleOperation(getRenameOptions());
 			renameOp.run(pm);
 
-			IProject newTarget = ResourcesPlugin.getWorkspace().getRoot().getProject(this.newName);
-			if (newTarget.isAccessible()) {
-				String contextRoot = getServerContextRoot(newTarget);
-				//if (webNature != null) {
-					//new UpdateWebContextRootMetadataOperation(newTarget, webNature.getContextRoot()).run(pm);
-				if(contextRoot.equals("") == false){ //$NON-NLS-1$
-					new UpdateWebContextRootMetadataOperation(newTarget, contextRoot).run(pm);
-				} else if (J2EENature.getRegisteredRuntime(newTarget) == null)
-					new RenameUtilityJarMetadataOperation(this.target, newTarget).run(pm);
-			}
-
+			//String contextRoot = getServerContextRoot();
+			// TODO fix up rename and context root operations
+			//if (webNature != null) {
+				//new UpdateWebContextRootMetadataOperation(newTarget, webNature.getContextRoot()).run(pm);
+//			if(contextRoot.equals("") == false){ //$NON-NLS-1$
+//				new UpdateWebContextRootMetadataOperation(target, contextRoot).run(pm);
+//			} else if (J2EENature.getRegisteredRuntime(target) == null)
+//				new RenameUtilityJarMetadataOperation(target, newTarget).run(pm);
 		} catch (InvocationTargetException e) {
 			//Ignore
 		} catch (InterruptedException e) {
@@ -117,10 +108,10 @@
 		return null;
 	}
 	
-	protected String getServerContextRoot(IProject project) {
+	protected String getServerContextRoot() {
 		WebArtifactEdit webEdit = null;
 		try{
-			webEdit = (WebArtifactEdit) ModuleCore.getFirstArtifactEditForRead(project);
+			webEdit = WebArtifactEdit.getWebArtifactEditForRead(target);
        		if (webEdit != null)
        			return webEdit.getServerContextRoot();			
 		} finally {
@@ -137,7 +128,8 @@
 		RenameOptions options = new RenameOptions();
 		options.setNewName(this.newName);
 		options.setSelectedProjects(Collections.singletonList(this.target));
-		options.setIsEARRename(EARNatureRuntime.getRuntime(this.target) != null);
+		// TODO check module type for EAR type
+		//options.setIsEARRename(EARNatureRuntime.getRuntime(this.target) != null);
 		options.setRenameModuleDependencies(this.renameDependencies);
 		options.setRenameModules(true);
 		options.setRenameProjects(false);
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EERenameAction.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EERenameAction.java
index 30b3db2..989279d 100644
--- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EERenameAction.java
+++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/J2EERenameAction.java
@@ -18,8 +18,8 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jdt.internal.core.JavaProject;
 import org.eclipse.jdt.ui.actions.SelectionDispatchAction;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.ErrorDialog;
@@ -35,7 +35,6 @@
 import org.eclipse.jst.j2ee.internal.dialogs.J2EERenameDialog;
 import org.eclipse.jst.j2ee.internal.dialogs.J2EERenameUIConstants;
 import org.eclipse.jst.j2ee.internal.dialogs.RenameModuleDialog;
-import org.eclipse.jst.j2ee.internal.earcreation.EAREditModel;
 import org.eclipse.jst.j2ee.internal.earcreation.EARNatureRuntime;
 import org.eclipse.jst.j2ee.internal.listeners.IValidateEditListener;
 import org.eclipse.jst.j2ee.internal.listeners.ValidateEditListener;
@@ -44,15 +43,16 @@
 import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages;
 import org.eclipse.jst.j2ee.internal.rename.RenameModuleOperation;
 import org.eclipse.jst.j2ee.internal.rename.RenameOptions;
-import org.eclipse.jst.j2ee.internal.web.util.WebArtifactEdit;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbenchSite;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.RenameResourceAction;
 import org.eclipse.ui.actions.SelectionListenerAction;
 import org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin;
-import org.eclipse.wst.common.modulecore.ArtifactEdit;
 import org.eclipse.wst.common.modulecore.ModuleCore;
+import org.eclipse.wst.common.modulecore.UnresolveableURIException;
+import org.eclipse.wst.common.modulecore.WorkbenchModule;
+import org.eclipse.wst.common.modulecore.WorkbenchModuleResource;
 
 import com.ibm.wtp.common.logger.proxy.Logger;
 import com.ibm.wtp.emf.workbench.ProjectUtilities;
@@ -62,7 +62,7 @@
 	protected Shell shell;
 	//Used for EAR rename
 	protected Set referencedProjects;
-	protected List projects;
+	protected List modules;
 	protected RenameOptions options;
 	// added for IRefactoringAction behavior
 	protected ISelectionProvider provider = null;
@@ -92,7 +92,7 @@
 			renameModuleOperation = null;
 		}
 		referencedProjects = null;
-		projects = null;
+		modules = null;
 		options = null;
 	}
 
@@ -136,7 +136,8 @@
 		Iterator it = sel.iterator();
 		while (it.hasNext()) {
 			Object o = it.next();
-			if (!CommonUtil.isDeploymentDescriptorRoot(o, false) && !isJ2EEProject(o))
+			//TODO check for j2ee workbench module selection
+			if (!CommonUtil.isDeploymentDescriptorRoot(o, false) /*&& !isJ2EEProject(o)*/)
 				return false;
 		}
 		return true;
@@ -154,32 +155,45 @@
 	}
 
 
-	protected List getProjects() {
-		if (projects == null) {
-			projects = new ArrayList();
+	protected List getModules() {
+		if (modules == null) {
+			modules = new ArrayList();
 			IStructuredSelection sel = (StructuredSelection) getSelection();
 			Iterator iterator = sel.iterator();
-			IProject project = null;
+			WorkbenchModule module = null;
 			Object o = null;
 			while (iterator.hasNext()) {
 				o = iterator.next();
-				if (o instanceof JavaProject) {
-					o = ((JavaProject) o).getProject();
-				}
-				if (o instanceof IProject) {
-					projects.add(o);
+				if (o instanceof WorkbenchModule) {
+					modules.add(o);
 				} else if (o instanceof EObject) {
 					EObject obj = (EObject) o;
-					project = ProjectUtilities.getProject(obj);
-					if (project == null)
-						throw new RuntimeException(J2EEUIMessages.getResourceString("Project_should_not_be_null_1_ERROR_")); //$NON-NLS-1$
-					projects.add(project);
+					IProject project = ProjectUtilities.getProject(obj);
+					ModuleCore moduleCore = null;
+					try {
+						moduleCore = ModuleCore.getModuleCoreForRead(project);
+						URI uri = obj.eResource().getURI();
+						WorkbenchModuleResource[] resources = moduleCore.findWorkbenchModuleResourcesBySourcePath(uri);
+						for (int i=0; i<resources.length; i++) {
+							module = resources[i].getModule();
+							if (module !=null)
+								break;
+						}
+						if (module == null)
+							throw new RuntimeException(J2EEUIMessages.getResourceString("Project_should_not_be_null_1_ERROR_")); //$NON-NLS-1$
+						modules.add(module);
+					} catch (UnresolveableURIException e) {
+						//Ignore
+					} finally {
+						if (moduleCore !=null)
+							moduleCore.dispose();
+					}
 				} else {
 					throw new RuntimeException(J2EEUIMessages.getResourceString("Non-project_in_selection_2_ERROR_")); //$NON-NLS-1$
 				}
 			}
 		}
-		return projects;
+		return modules;
 	}
 
 	/**
@@ -187,27 +201,29 @@
 	 */
 	public void run() {
 		try {
-			List localProjects = getProjects();
-			if (localProjects.size() != 1)
+			List localModules = getModules();
+			if (localModules.size() != 1)
 				return;
-			IProject project = (IProject) localProjects.get(0);
+			WorkbenchModule module = (WorkbenchModule) localModules.get(0);
 			J2EERenameDialog dlg = null;
 
 			// if all we are doing is renaming an EAR, let the base platform do it
 			if (isSelectionAllApplications()) {
 				RenameResourceAction action = new RenameResourceAction(shell);
-				action.selectionChanged(new StructuredSelection(project));
+				action.selectionChanged(new StructuredSelection(module));
 				action.run();
 			} else {
-				String contextRoot = getServerContextRoot(project);
-				dlg = new RenameModuleDialog(shell, project.getName(), contextRoot);
+				String contextRoot = ""; //$NON-NLS-1$
+				//TODO add context root to the module model
+				//contextRoot = module.getServerContextRoot();
+				dlg = new RenameModuleDialog(shell, module.getDeployedName(), contextRoot);
 				dlg.open();
 				if (dlg.getReturnCode() == Window.CANCEL)
 					return;
 
 				options = dlg.getRenameOptions();
 				if (options != null)
-					options.setSelectedProjects(localProjects);
+					options.setSelectedProjects(localModules);
 
 				if (!(ensureEditorsSaved() && validateState()))
 					return;
@@ -232,19 +248,20 @@
 	}
 
 	protected void computeReferencedProjects() {
-		getProjects();
+		getModules();
 		referencedProjects = new HashSet();
-		for (int i = 0; i < projects.size(); i++) {
-			IProject project = (IProject) projects.get(i);
-			EARNatureRuntime runtime = EARNatureRuntime.getRuntime(project);
-			if (runtime == null)
-				continue;
-			EAREditModel editModel = runtime.getEarEditModelForRead(this);
-			try {
-				referencedProjects.addAll(editModel.getModuleMappedProjects());
-			} finally {
-				editModel.releaseAccess(this);
-			}
+		for (int i = 0; i < modules.size(); i++) {
+			//WorkbenchModule module = (WorkbenchModule) modules.get(i);
+			//TODO fix up code here for modules instead of projects
+//			EARNatureRuntime runtime = EARNatureRuntime.getRuntime(project);
+//			if (runtime == null)
+//				continue;
+//			EAREditModel editModel = runtime.getEarEditModelForRead(this);
+//			try {
+//				referencedProjects.addAll(editModel.getModuleMappedProjects());
+//			} finally {
+//				editModel.releaseAccess(this);
+//			}
 		}
 	}
 
@@ -299,10 +316,10 @@
 		// only web projects should have a context root
 		String newContextRoot = options.getNewContextRoot();
 		if (newContextRoot != null && options.shouldRenameProjects()) {
-			IProject project = (IProject) getProjects().get(0);
+			//WorkbenchModule module = (WorkbenchModule) getModules().get(0);
 			try {
-				IProject newProject = project.getWorkspace().getRoot().getProject(options.getNewName());
-		       	setServerContextRoot(newProject, newContextRoot);		               		
+				// TODO add server context root to the module model
+				//module.setServerContextRoot(newContextRoot);		               		
 			} catch (Throwable t) {
 				//Ignore
 			}
@@ -336,26 +353,6 @@
 		}
 	}
 
-	protected boolean isJ2EEProject(Object o) {
-		boolean retVal = false;
-		if (o instanceof JavaProject) {
-			o = ((JavaProject) o).getProject();
-		}
-		if (o instanceof IProject) {
-			IProject project = (IProject) o;
-			ArtifactEdit edit = null;
-			try {
-				edit = ModuleCore.getFirstArtifactEditForRead(project);
-				if (edit!= null)
-					retVal = true;
-			} finally {
-				if (edit!=null)
-					edit.dispose();
-			}
-		}
-		return retVal;
-	}
-
 	protected boolean isJ2EEApplicationProject(Object o) {
 		boolean retVal = false;
 		if (o instanceof IProject) {
@@ -403,30 +400,4 @@
 
 		ErrorDialog.openError(shell, null, null, status, IStatus.ERROR);
 	}
-	
-	protected String getServerContextRoot(IProject project) {
-		WebArtifactEdit webEdit = null;
-		try{
-			webEdit = (WebArtifactEdit) ModuleCore.getFirstArtifactEditForRead(project);
-       		if(webEdit != null) {
-       			return webEdit.getServerContextRoot();		               		
-       		}			
-		} finally {
-			if( webEdit != null )
-				webEdit.dispose();
-		}
-		return ""; //$NON-NLS-1$
-	}
-	
-	protected void setServerContextRoot(IProject project, String contextRoot) {
-		WebArtifactEdit webEdit = null;
-		try{
-			webEdit = (WebArtifactEdit) ModuleCore.getFirstArtifactEditForRead(project);
-       		if(webEdit != null)
-       			webEdit.setServerContextRoot(contextRoot);		               		
-		} finally{
-			if( webEdit != null )
-				webEdit.dispose();
-		}				
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/OpenJ2EEResourceAction.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/OpenJ2EEResourceAction.java
index 35dc20f..b612ded 100644
--- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/OpenJ2EEResourceAction.java
+++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/actions/OpenJ2EEResourceAction.java
@@ -16,6 +16,7 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.jem.java.JavaClass;
@@ -59,6 +60,9 @@
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
 import org.eclipse.wst.common.modulecore.ArtifactEdit;
 import org.eclipse.wst.common.modulecore.ModuleCore;
+import org.eclipse.wst.common.modulecore.UnresolveableURIException;
+import org.eclipse.wst.common.modulecore.WorkbenchModule;
+import org.eclipse.wst.common.modulecore.WorkbenchModuleResource;
 
 import sun.misc.Service;
 
@@ -284,10 +288,20 @@
 		// Handle Servlet Link case
 		else {
 			linkName = ((ServletLink) link).getServletLink();
+			URI uri = link.eResource().getURI();
+			ModuleCore moduleCore = null;
 			WebArtifactEdit webEdit = null;
 			WebApp webApp = null;
 			try{
-				webEdit = (WebArtifactEdit) ModuleCore.getFirstArtifactEditForRead(p);
+				moduleCore = ModuleCore.getModuleCoreForRead(p);
+				WorkbenchModuleResource[] resources = moduleCore.findWorkbenchModuleResourcesBySourcePath(uri);
+				WorkbenchModule module = null;
+				for (int i=0; i<resources.length; i++) {
+					module = resources[i].getModule();
+					if (module != null)
+						break;
+				}
+				webEdit = WebArtifactEdit.getWebArtifactEditForRead(module);
 	       		if(webEdit != null)
 					webApp = (WebApp) webEdit.getDeploymentDescriptorRoot();		               		
 				if (webApp == null)
@@ -296,7 +310,11 @@
 				if (servlet == null)
 					return;
 				javaClass = servlet.getServletClass();
+			} catch (UnresolveableURIException e) {
+				//Ignore
 			} finally{
+				if (moduleCore != null)
+					moduleCore.dispose();
 				if( webEdit != null )
 					webEdit.dispose();
 			}
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebModuleCreationOperation.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebModuleCreationOperation.java
index 8d0b28a..32104ae 100644
--- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebModuleCreationOperation.java
+++ b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/archive/operations/WebModuleCreationOperation.java
@@ -33,6 +33,7 @@
 import org.eclipse.jst.j2ee.internal.J2EEConstants;
 import org.eclipse.jst.j2ee.internal.web.operations.WebEditModel;
 import org.eclipse.jst.j2ee.internal.web.operations.WebPropertiesUtil;
+import org.eclipse.jst.j2ee.internal.web.util.WebArtifactEdit;
 import org.eclipse.wst.common.frameworks.internal.WTPProjectUtilities;
 import org.eclipse.wst.common.internal.emfworkbench.operation.EditModelOperation;
 import org.eclipse.wst.common.modulecore.ModuleCore;
@@ -54,15 +55,6 @@
 
 	protected void createProject(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
 		super.createProject(monitor);
-		//TODO add contextRoot and contentName to workbechModule
-		//J2EEWebNatureRuntime nature = J2EEWebNatureRuntime.getRuntime(((WebModuleCreationDataModel)operationDataModel).getTargetProject());
-		//WebArtifactEdit webArtifactEdit = (WebArtifactEdit)ModuleCore.getFirstArtifactEditForRead(((WebModuleCreationDataModel)operationDataModel).getTargetProject());
-		//nature.getWebSettings().setWebContentName(operationDataModel.getStringProperty(WebModuleCreationDataModel.WEB_CONTENT));
-		//nature.getWebSettings().setContextRoot(operationDataModel.getStringProperty(webArtifactEdit.getContextRoot()));
-		//URIConverter uriConverter = ((ProjectResourceSet) nature.getResourceSet()).getURIConverter();
-		//dont need this, keeps nature in synch with websetting file
-		//if (uriConverter instanceof J2EEModuleWorkbenchURIConverterImpl)
-		//	((J2EEModuleWorkbenchURIConverterImpl) uriConverter).recomputeContainersIfNecessary();
 	}
 
 	protected void createDeploymentDescriptor(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
@@ -96,6 +88,7 @@
 		super.execute(monitor);
 		J2EEModuleCreationDataModel dataModel = (J2EEModuleCreationDataModel) operationDataModel;
 		if (dataModel.getBooleanProperty(WebModuleCreationDataModel.MIGRATE_WEB_SETTINGS)) {
+			//TODO migrate websettings file?
 			//IProject project = dataModel.getProjectDataModel().getProject();	
 			//webNature.getWebSettings().write();
 			//project.getFile(webNature.getWebSettingsPath()).refreshLocal(0, monitor);
@@ -135,6 +128,23 @@
 	    WorkbenchModule webModule = addWorkbenchModule(projectModules, getModuleName()+".war", createModuleURI()); //$NON-NLS-1$
 		addResource(webModule, getModuleRelativeFile(getWebContentSourcePath(), getProject()), getWebContentDeployPath());
 		addResource(webModule, getModuleRelativeFile(getJavaSourceSourcePath(), getProject()), getJavaSourceDeployPath());
+		WebArtifactEdit webArtifactEdit = null;
+		try {
+			webArtifactEdit = WebArtifactEdit.getWebArtifactEditForWrite(webModule);
+			if (webArtifactEdit != null) {
+				webArtifactEdit.setServerContextRoot(operationDataModel.getStringProperty(WebModuleCreationDataModel.CONTEXT_ROOT));
+				// TODO add contentName setting
+				//nature.getWebSettings().setWebContentName(operationDataModel.getStringProperty(WebModuleCreationDataModel.WEB_CONTENT));
+			}
+		} finally {
+			if (webArtifactEdit!=null)
+				webArtifactEdit.dispose();
+		}
+		//TODO do we need to keep this web content stuff?
+		//URIConverter uriConverter = ((ProjectResourceSet) nature.getResourceSet()).getURIConverter();
+		//dont need this, keeps nature in synch with websetting file
+		//if (uriConverter instanceof J2EEModuleWorkbenchURIConverterImpl)
+		//	((J2EEModuleWorkbenchURIConverterImpl) uriConverter).recomputeContainersIfNecessary();
 	}
 	
 	/**
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/operations/WebPropertiesUtil.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/operations/WebPropertiesUtil.java
index 4b4e717..1d2510d 100644
--- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/operations/WebPropertiesUtil.java
+++ b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/internal/web/operations/WebPropertiesUtil.java
@@ -520,8 +520,8 @@
 	}
 	
 	public static IFolder getModuleServerRoot(IProject project) {
-		//TODO needs to be implemented
-		return null;
+		//TODO need to implement module server root properly
+		return project.getFolder("WebContent");
 	}
 	
 	public static IFolder getWebLibFolder(IProject project) {
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEModuleCreationDataModel.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEModuleCreationDataModel.java
index 6e4abf4..37f4a2f 100644
--- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEModuleCreationDataModel.java
+++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEModuleCreationDataModel.java
@@ -102,7 +102,7 @@
 
 	protected void init() {
 		super.init();
-		getJavaProjectCreationDataModel().setProperty(ProjectCreationDataModel.PROJECT_NATURES, new String[]{J2EENatureID});
+		//getJavaProjectCreationDataModel().setProperty(ProjectCreationDataModel.PROJECT_NATURES, new String[]{J2EENatureID});
 		//set it so it pushes it down to ServerTargeting
 		setProperty(J2EE_MODULE_VERSION, getDefaultProperty(J2EE_MODULE_VERSION));
 		applicationCreationDataModel.addListener(this);
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEModuleCreationOperation.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEModuleCreationOperation.java
index 5da3214..bce161c 100644
--- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEModuleCreationOperation.java
+++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/operations/J2EEModuleCreationOperation.java
@@ -41,6 +41,7 @@
 import org.eclipse.jst.j2ee.internal.J2EEConstants;
 import org.eclipse.jst.j2ee.internal.project.J2EENature;
 import org.eclipse.jst.j2ee.internal.project.ManifestFileCreationAction;
+import org.eclipse.wst.common.modulecore.WorkbenchModule;
 
 public abstract class J2EEModuleCreationOperation extends J2EEArtifactCreationOperation {
 	/**
@@ -92,8 +93,7 @@
 		javaProjectOperation.doRun(monitor);
 		updateClasspath(projectModel);
 		J2EEModuleCreationDataModel dataModel = (J2EEModuleCreationDataModel) operationDataModel;
-		J2EENature nature = (J2EENature) dataModel.getProjectDataModel().getProject().getNature(dataModel.getJ2EENatureID());
-		setVersion(nature, monitor);
+		//setVersion(nature, monitor);
 		addServerTarget(monitor);
 	}
 
@@ -139,9 +139,10 @@
 		}
 	}
 
-	protected void setVersion(J2EENature nature, IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
+	protected void setVersion(WorkbenchModule module, IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException {
 		J2EEModuleCreationDataModel dataModel = (J2EEModuleCreationDataModel) operationDataModel;
-		nature.setModuleVersion(dataModel.getIntProperty(J2EEModuleCreationDataModel.J2EE_MODULE_VERSION));
+		//TODO set module version?
+		//module.setModuleVersion(dataModel.getIntProperty(J2EEModuleCreationDataModel.J2EE_MODULE_VERSION));
 	}
 
 
diff --git a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/actions/ConvertToWebModuleTypeAction.java b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/actions/ConvertToWebModuleTypeAction.java
index 73e2817..067b08e 100644
--- a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/actions/ConvertToWebModuleTypeAction.java
+++ b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/actions/ConvertToWebModuleTypeAction.java
@@ -18,12 +18,13 @@
 import org.eclipse.jst.j2ee.internal.project.IWebNatureConstants;
 import org.eclipse.jst.j2ee.internal.web.archive.operations.WebModuleCreationDataModel;
 import org.eclipse.jst.j2ee.internal.web.operations.ConvertWebProjectDataModel;
-import org.eclipse.jst.j2ee.internal.web.util.WebArtifactEdit;
 import org.eclipse.jst.servlet.ui.internal.wizard.ConvertToWebModuleTypeWizard;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.wst.common.internal.emfworkbench.operation.EditModelOperationDataModel;
 import org.eclipse.wst.common.modulecore.ModuleCore;
+import org.eclipse.wst.common.modulecore.UnresolveableURIException;
+import org.eclipse.wst.common.modulecore.WorkbenchModule;
 import org.eclipse.wst.web.internal.operation.StaticWebNatureRuntime;
 
 import com.ibm.wtp.common.logger.proxy.Logger;
@@ -83,21 +84,6 @@
 	}
 
 	/**
-	 * make sure a web project is selected.
-	 */
-	public boolean isValidProject(IProject aProject)
-	{
-		WebArtifactEdit webEdit = null;
-		try {
-			webEdit = (WebArtifactEdit) ModuleCore.getFirstArtifactEditForRead(aProject);
-			return webEdit!=null;
-		} finally {
-			if (webEdit != null)
-				webEdit.dispose();
-		}
-	}
-
-	/**
 	 * selectionChanged method comment.
 	 */
 	public void selectionChanged(IAction action, ISelection selection)
@@ -120,10 +106,15 @@
 
 		fSelection = (IStructuredSelection) selection;
 
-		Object selectedProject = fSelection.getFirstElement();
-		if( !(selectedProject instanceof IProject) ) return false;
-
-		project = (IProject) selectedProject;
-		return isValidProject(project);
+		Object selectedObject = fSelection.getFirstElement();
+		if( !(selectedObject instanceof WorkbenchModule) ) 
+			return false;
+		//TODO need to make sure set input of module
+		try {
+			project = ModuleCore.getContainingProject(((WorkbenchModule)selectedObject).getHandle());
+		} catch (UnresolveableURIException e) {
+			return false;
+		}
+		return true;
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AddServletWizard.java b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AddServletWizard.java
index 977985c..a11778d 100644
--- a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AddServletWizard.java
+++ b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/AddServletWizard.java
@@ -19,6 +19,9 @@
 import org.eclipse.wst.common.frameworks.operations.WTPOperation;
 import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
 import org.eclipse.wst.common.internal.emfworkbench.operation.EditModelOperationDataModel;
+import org.eclipse.wst.common.modulecore.ModuleCore;
+import org.eclipse.wst.common.modulecore.UnresolveableURIException;
+import org.eclipse.wst.common.modulecore.WorkbenchModule;
 
 /**
  * New servlet wizard
@@ -50,7 +53,14 @@
 		model.setProperty(NewJavaClassDataModel.SUPERCLASS, NewServletClassDataModel.SERVLET_SUPERCLASS);
 		model.setProperty(NewJavaClassDataModel.INTERFACES, ((NewServletClassDataModel)model).getServletInterfaces());
 		
-		IProject project = getDefaultWebProject();
+		WorkbenchModule workbenchModule = getDefaultWebModule();
+		//TODO set the workbench module on the data model
+		IProject project = null;
+		try {
+			ModuleCore.getContainingProject(workbenchModule.getHandle());
+		} catch(UnresolveableURIException e) {
+			//Ignore
+		}
 		if (project != null)
 		    model.setProperty(EditModelOperationDataModel.PROJECT_NAME, project.getName());
 		return model;
diff --git a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebJavaClassDestinationWizardPage.java b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebJavaClassDestinationWizardPage.java
index 847bdfb..9d9fa0a 100644
--- a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebJavaClassDestinationWizardPage.java
+++ b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebJavaClassDestinationWizardPage.java
@@ -11,13 +11,12 @@
 package org.eclipse.jst.servlet.ui.internal.wizard;
 
 import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.jst.j2ee.internal.web.util.WebArtifactEdit;
 import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
-import org.eclipse.wst.common.modulecore.ModuleCore;
+import org.eclipse.wst.common.modulecore.WorkbenchModule;
+import org.eclipse.wst.common.modulecore.internal.util.IModuleConstants;
 
 import com.ibm.wtp.emf.workbench.ProjectUtilities;
 
@@ -34,16 +33,10 @@
 		return new ViewerFilter() {
 			public boolean select(Viewer viewer, Object parent, Object element) {
 				boolean ret = false;
-				if (element instanceof IProject) {
-					WebArtifactEdit webEdit = null;
-					try {
-						IProject project = (IProject) element;
-						webEdit = (WebArtifactEdit) ModuleCore.getFirstArtifactEditForRead(project);
-						ret = webEdit!=null;
-					} finally {
-						if (webEdit != null)
-							webEdit.dispose();
-					}
+				if (element instanceof WorkbenchModule) {
+					WorkbenchModule module = (WorkbenchModule) element;
+					String moduleType = module.getModuleType().getModuleTypeId();
+					return moduleType.equals(IModuleConstants.JST_WEB_MODULE);
 				} else if (element instanceof IFolder) {
 					IFolder folder = (IFolder) element;
 					// only show source folders
diff --git a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebWizard.java b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebWizard.java
index cf168f2..c3e0e9b 100644
--- a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebWizard.java
+++ b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/NewWebWizard.java
@@ -11,6 +11,9 @@
 package org.eclipse.jst.servlet.ui.internal.wizard;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin;
@@ -20,8 +23,11 @@
 import org.eclipse.wst.common.frameworks.operations.WTPOperation;
 import org.eclipse.wst.common.frameworks.operations.WTPOperationDataModel;
 import org.eclipse.wst.common.frameworks.ui.WTPWizard;
-import org.eclipse.wst.common.modulecore.ArtifactEdit;
 import org.eclipse.wst.common.modulecore.ModuleCore;
+import org.eclipse.wst.common.modulecore.UnresolveableURIException;
+import org.eclipse.wst.common.modulecore.WorkbenchModule;
+import org.eclipse.wst.common.modulecore.WorkbenchModuleResource;
+import org.eclipse.wst.common.modulecore.internal.util.IModuleConstants;
 
 import com.ibm.wtp.emf.workbench.ProjectUtilities;
 
@@ -68,30 +74,53 @@
 		createDefaultModel();
 	}
 
-	protected IProject getDefaultWebProject() {
+	protected WorkbenchModule getDefaultWebModule() {
 		IProject project = null;
 		IStructuredSelection selection = getCurrentSelection();
 		if (selection != null && selection.getFirstElement() != null) {
-			project = ProjectUtilities.getProject(selection.getFirstElement());
-		}
-		if (project == null) {
-			IProject[] projects = ProjectUtilities.getAllProjects();
-			ArtifactEdit edit = null;
-			for (int i = 0; i < projects.length; i++) {
-				//TODO this assumes only web projects and one module per project for now
-				try {
-					edit = ModuleCore.getFirstArtifactEditForRead(projects[i]);
-					if (edit != null) {
-						project = projects[i];
-						break;
-					}
-				} finally {
-					if (edit != null)
-						edit.dispose();
+			Object selectedObject = selection.getFirstElement();
+			if (selectedObject instanceof WorkbenchModule)
+				return (WorkbenchModule) selectedObject;
+			project = ProjectUtilities.getProject(selectedObject);
+			URI uri = null;
+			if (selectedObject instanceof Resource)
+				uri = ((Resource)selectedObject).getURI();
+			if (selectedObject instanceof EObject)
+				uri = ((EObject)selectedObject).eResource().getURI();
+			if (uri == null)
+				return null;
+			ModuleCore moduleCore = null;
+			WorkbenchModule module = null;
+			try {
+				moduleCore = ModuleCore.getModuleCoreForRead(project);
+				WorkbenchModuleResource[] resources = moduleCore.findWorkbenchModuleResourcesBySourcePath(uri);
+				for (int i=0; i<resources.length; i++) {
+					module = resources[i].getModule();
+					if (module != null)
+						return module;
 				}
+			} catch(UnresolveableURIException e) {
+				//Ignore
+			} finally {
+				if (moduleCore != null)
+					moduleCore.dispose();
 			}
 		}
-		return project;
+		
+		IProject[] projects = ProjectUtilities.getAllProjects();
+		ModuleCore moduleCore = null;
+		for (int i = 0; i < projects.length; i++) {
+			try {
+				moduleCore = ModuleCore.getModuleCoreForRead(projects[i]);
+				WorkbenchModule[] modules = moduleCore.findWorkbenchModuleByType(IModuleConstants.JST_WEB_MODULE);
+				if (modules.length>0)
+					return modules[0];
+			} finally {
+				if (moduleCore != null)
+					moduleCore.dispose();
+			}
+		}
+		return null;
 	}
 
 	protected IStructuredSelection getCurrentSelection() {
diff --git a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/WARExportPage.java b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/WARExportPage.java
index 246f0b6..63f3d1a 100644
--- a/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/WARExportPage.java
+++ b/plugins/org.eclipse.jst.servlet.ui/servlet_ui/org/eclipse/jst/servlet/ui/internal/wizard/WARExportPage.java
@@ -21,7 +21,6 @@
 import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages;
 import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPlugin;
 import org.eclipse.jst.j2ee.internal.plugin.J2EEUIPluginIcons;
-import org.eclipse.jst.j2ee.internal.project.IWebNatureConstants;
 import org.eclipse.jst.j2ee.internal.wizard.J2EEModuleExportPage;
 import org.eclipse.jst.servlet.ui.internal.plugin.WEBUIMessages;