[357016] ModuleCoreNature projects should respect defaultRootSource
diff --git a/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/internal/jca/project/facet/ConnectorFacetInstallDataModelProvider.java b/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/internal/jca/project/facet/ConnectorFacetInstallDataModelProvider.java
index f883537..c87701d 100644
--- a/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/internal/jca/project/facet/ConnectorFacetInstallDataModelProvider.java
+++ b/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/internal/jca/project/facet/ConnectorFacetInstallDataModelProvider.java
@@ -10,8 +10,11 @@
  *******************************************************************************/
 package org.eclipse.jst.j2ee.internal.jca.project.facet;
 
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent;
 import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
 import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
 import org.eclipse.jst.j2ee.internal.plugin.IJ2EEModuleConstants;
@@ -19,6 +22,11 @@
 import org.eclipse.jst.j2ee.internal.plugin.J2EEPreferences;
 import org.eclipse.jst.j2ee.jca.project.facet.IConnectorFacetInstallDataModelProperties;
 import org.eclipse.jst.j2ee.project.facet.J2EEModuleFacetInstallDataModelProvider;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.ModuleCoreNature;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 
 public class ConnectorFacetInstallDataModelProvider extends J2EEModuleFacetInstallDataModelProvider implements IConnectorFacetInstallDataModelProperties {
@@ -28,6 +36,23 @@
 		if (propertyName.equals(FACET_ID)) {
 			return JCA;
 		} else if (propertyName.equals(CONFIG_FOLDER)) {
+			if (model.isPropertySet(FACET_PROJECT_NAME))
+			{
+				String projectName = model.getStringProperty(FACET_PROJECT_NAME);
+				IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+				if (project.exists()) {
+					if (ModuleCoreNature.isFlexibleProject(project))
+					{
+						IVirtualComponent c = ComponentCore.createComponent(project, true);
+						IVirtualFolder ejbroot = c.getRootFolder();
+						IPath configFolderPath = J2EEModuleVirtualComponent.getDefaultDeploymentDescriptorFolder(ejbroot);
+						if (configFolderPath != null && project.getFolder(configFolderPath).exists())
+						{
+							return configFolderPath.toString();
+						}
+					}
+				}
+			}
 			return J2EEPlugin.getDefault().getJ2EEPreferences().getString(J2EEPreferences.Keys.JCA_CONTENT_FOLDER);
 		} else if (propertyName.equals(MODULE_URI)) {
 			String projectName = model.getStringProperty(FACET_PROJECT_NAME).replace(' ','_');
@@ -59,7 +84,13 @@
                 this.javaFacetInstallConfig.setSourceFolder( sourceFolder );
             }
         }
-        
+        else if (FACET_PROJECT_NAME.equals(propertyName))
+        {
+			if (!model.isPropertySet(CONFIG_FOLDER)) {
+				model.notifyPropertyChange(CONFIG_FOLDER, IDataModel.DEFAULT_CHG);
+			}
+        }
+
         return super.propertySet(propertyName, propertyValue);
     }
     
diff --git a/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/jca/project/facet/ConnectorFacetInstallDelegate.java b/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/jca/project/facet/ConnectorFacetInstallDelegate.java
index db8d5d6..2b400f7 100644
--- a/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/jca/project/facet/ConnectorFacetInstallDelegate.java
+++ b/plugins/org.eclipse.jst.j2ee.jca/jca/org/eclipse/jst/j2ee/jca/project/facet/ConnectorFacetInstallDelegate.java
@@ -98,7 +98,7 @@
 			IFolder sourceFolder = null;
 			String configFolder = null;
 			configFolder = model.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER);
-			Path configFolderPath = new Path("/" + configFolder); //$NON-NLS-1$
+			Path configFolderPath = new Path(configFolder);
 			root.createLink(configFolderPath, 0, null);
 			J2EEModuleVirtualComponent.setDefaultDeploymentDescriptorFolder(root, configFolderPath, null);
 			String configFolderName = model.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER);
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDataModelProvider.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDataModelProvider.java
index 2b32330..3d7bf70 100644
--- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDataModelProvider.java
+++ b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDataModelProvider.java
@@ -13,10 +13,13 @@
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jst.common.project.facet.core.JavaFacetInstallConfig.ChangeEvent;
+import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent;
 import org.eclipse.jst.j2ee.internal.J2EEConstants;
 import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
 import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
@@ -26,6 +29,10 @@
 import org.eclipse.jst.j2ee.internal.plugin.J2EEPreferences;
 import org.eclipse.jst.j2ee.internal.project.ProjectSupportResourceHandler;
 import org.eclipse.jst.j2ee.project.facet.J2EEModuleFacetInstallDataModelProvider;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.ModuleCoreNature;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
 import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
@@ -56,6 +63,23 @@
 	@Override
 	public Object getDefaultProperty(String propertyName) {
 		if (propertyName.equals(CONFIG_FOLDER)) {
+			if (model.isPropertySet(FACET_PROJECT_NAME))
+			{
+				String projectName = model.getStringProperty(FACET_PROJECT_NAME);
+				IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+				if (project.exists()) {
+					if (ModuleCoreNature.isFlexibleProject(project))
+					{
+						IVirtualComponent c = ComponentCore.createComponent(project, true);
+						IVirtualFolder ejbroot = c.getRootFolder();
+						IPath configFolderPath = J2EEModuleVirtualComponent.getDefaultDeploymentDescriptorFolder(ejbroot);
+						if (configFolderPath != null && project.getFolder(configFolderPath).exists())
+						{
+							return configFolderPath.toString();
+						}
+					}
+				}
+			}
 			return J2EEPlugin.getDefault().getJ2EEPreferences().getString(J2EEPreferences.Keys.WEB_CONTENT_FOLDER);
 		} else if (propertyName.equals(SOURCE_FOLDER)) {
 			return J2EEPlugin.getDefault().getJ2EEPreferences().getString(J2EEPreferences.Keys.DYN_WEB_SRC_FOLDER);
@@ -88,6 +112,9 @@
 			model.notifyPropertyChange(CONTEXT_ROOT, IDataModel.ENABLE_CHG);
 		} else if (FACET_PROJECT_NAME.equals(propertyName)) {
 			model.notifyPropertyChange(CONTEXT_ROOT, IDataModel.VALID_VALUES_CHG);
+			if (!model.isPropertySet(CONFIG_FOLDER)) {
+				model.notifyPropertyChange(CONFIG_FOLDER, IDataModel.DEFAULT_CHG);
+			}
 		} else if (propertyName.equals(CONFIG_FOLDER)) {
 			return true;
 		} else if (propertyName.equals(SOURCE_FOLDER)) 
diff --git a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDelegate.java b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDelegate.java
index 24099e9..0a57b65 100644
--- a/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDelegate.java
+++ b/plugins/org.eclipse.jst.j2ee.web/webproject/org/eclipse/jst/j2ee/web/project/facet/WebFacetInstallDelegate.java
@@ -105,7 +105,7 @@
 
 			final IVirtualFolder webroot = c.getRootFolder();
 			if (webroot.getProjectRelativePath().equals(new Path("/"))){ //$NON-NLS-1$
-				Path configFolderPath = new Path("/" + model.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER));  //$NON-NLS-1$
+				Path configFolderPath = new Path(model.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER));
 				webroot.createLink(configFolderPath, 0, null); 
 				J2EEModuleVirtualComponent.setDefaultDeploymentDescriptorFolder(webroot, configFolderPath, null); 
 			}
diff --git a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDataModelProvider.java b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDataModelProvider.java
index 6193a4a..02d822b 100644
--- a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDataModelProvider.java
+++ b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDataModelProvider.java
@@ -12,13 +12,21 @@
 
 import java.util.Set;
 
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent;
 import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
 import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
 import org.eclipse.jst.j2ee.internal.plugin.IJ2EEModuleConstants;
 import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
 import org.eclipse.jst.j2ee.internal.plugin.J2EEPreferences;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.ModuleCoreNature;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 
 public class AppClientFacetInstallDataModelProvider extends J2EEModuleFacetInstallDataModelProvider implements IAppClientFacetInstallDataModelProperties {
@@ -41,7 +49,26 @@
 		else if (propertyName.equals(CREATE_DEFAULT_MAIN_CLASS))
 			return Boolean.TRUE;
 		else if (propertyName.equals(CONFIG_FOLDER))
+		{
+			if (model.isPropertySet(FACET_PROJECT_NAME))
+			{
+				String projectName = model.getStringProperty(FACET_PROJECT_NAME);
+				IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+				if (project.exists()) {
+					if (ModuleCoreNature.isFlexibleProject(project))
+					{
+						IVirtualComponent c = ComponentCore.createComponent(project, true);
+						IVirtualFolder ejbroot = c.getRootFolder();
+						IPath configFolderPath = J2EEModuleVirtualComponent.getDefaultDeploymentDescriptorFolder(ejbroot);
+						if (configFolderPath != null && project.getFolder(configFolderPath).exists())
+						{
+							return configFolderPath.toString();
+						}
+					}
+				}
+			}
 			return J2EEPlugin.getDefault().getJ2EEPreferences().getString(J2EEPreferences.Keys.APP_CLIENT_CONTENT_FOLDER);
+		}
 		else if (propertyName.equals(MODULE_URI)) {
 			String projectName = model.getStringProperty(FACET_PROJECT_NAME).replace(' ','_');
 			return projectName + IJ2EEModuleConstants.JAR_EXT; 
@@ -72,7 +99,13 @@
                 this.javaFacetInstallConfig.setSourceFolder( sourceFolder );
             }
         }
-        
+        else if (FACET_PROJECT_NAME.equals(propertyName))
+        {
+			if (!model.isPropertySet(CONFIG_FOLDER)) {
+				model.notifyPropertyChange(CONFIG_FOLDER, IDataModel.DEFAULT_CHG);
+			}
+        }
+
         return super.propertySet(propertyName, propertyValue);
     }
 
diff --git a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDelegate.java b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDelegate.java
index 15f68e0..46ab1bf 100644
--- a/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDelegate.java
+++ b/plugins/org.eclipse.jst.j2ee/appclientcreation/org/eclipse/jst/j2ee/project/facet/AppClientFacetInstallDelegate.java
@@ -107,7 +107,7 @@
 		IFolder sourceFolder = null;
 		String configFolder = null;
 		configFolder = model.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER);
-		Path configFolderPath = new Path("/" + configFolder); //$NON-NLS-1$
+		Path configFolderPath = new Path(configFolder);
 		root.createLink(configFolderPath, 0, null); 
 		J2EEModuleVirtualComponent.setDefaultDeploymentDescriptorFolder(root, configFolderPath, null);
 		String configFolderName = model.getStringProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER);
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/internal/earcreation/EarFacetInstallDataModelProvider.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/internal/earcreation/EarFacetInstallDataModelProvider.java
index eb82f03..b1aa698 100644
--- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/internal/earcreation/EarFacetInstallDataModelProvider.java
+++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/internal/earcreation/EarFacetInstallDataModelProvider.java
@@ -16,14 +16,20 @@
 import java.util.Set;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent;
 import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
 import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
 import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
 import org.eclipse.jst.j2ee.internal.plugin.J2EEPreferences;
 import org.eclipse.jst.j2ee.project.facet.J2EEFacetInstallDataModelProvider;
 import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.ModuleCoreNature;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.eclipse.jst.j2ee.internal.project.ProjectSupportResourceHandler;
 import org.eclipse.osgi.util.NLS;
@@ -44,6 +50,23 @@
 		if (propertyName.equals(FACET_ID)) {
 			return ENTERPRISE_APPLICATION;
 		} else if (propertyName.equals(CONTENT_DIR)) {
+			if (model.isPropertySet(FACET_PROJECT_NAME))
+			{
+				String projectName = model.getStringProperty(FACET_PROJECT_NAME);
+				IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+				if (project.exists()) {
+					if (ModuleCoreNature.isFlexibleProject(project))
+					{
+						IVirtualComponent c = ComponentCore.createComponent(project, true);
+						IVirtualFolder ejbroot = c.getRootFolder();
+						IPath configFolderPath = J2EEModuleVirtualComponent.getDefaultDeploymentDescriptorFolder(ejbroot);
+						if (configFolderPath != null && project.getFolder(configFolderPath).exists())
+						{
+							return configFolderPath.toString();
+						}
+					}
+				}
+			}
 			return J2EEPlugin.getDefault().getJ2EEPreferences().getString(J2EEPreferences.Keys.APPLICATION_CONTENT_FOLDER);
 		} else if (propertyName.equals(J2EE_PROJECTS_LIST) || propertyName.equals(JAVA_PROJECT_LIST)) {
 			return Collections.EMPTY_LIST;
@@ -86,4 +109,16 @@
 	protected int convertFacetVersionToJ2EEVersion(IProjectFacetVersion version) {
 		return J2EEVersionUtil.convertVersionStringToInt(version.getVersionString());
 	}
+
+    @Override
+	public boolean propertySet(String propertyName, Object propertyValue) {
+        if (FACET_PROJECT_NAME.equals(propertyName))
+        {
+			if (!model.isPropertySet(CONTENT_DIR)) {
+				model.notifyPropertyChange(CONTENT_DIR, IDataModel.DEFAULT_CHG);
+			}
+        }
+
+        return super.propertySet(propertyName, propertyValue);
+    }
 }
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/project/facet/EarFacetInstallDelegate.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/project/facet/EarFacetInstallDelegate.java
index ea51eaf..04fd949 100644
--- a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/project/facet/EarFacetInstallDelegate.java
+++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/project/facet/EarFacetInstallDelegate.java
@@ -62,7 +62,7 @@
 			c.create(0, null);
 
 			final IVirtualFolder earroot = c.getRootFolder();
-			Path contentDirPath = new Path("/" + model.getStringProperty(IEarFacetInstallDataModelProperties.CONTENT_DIR)); //$NON-NLS-1$
+			Path contentDirPath = new Path(model.getStringProperty(IEarFacetInstallDataModelProperties.CONTENT_DIR));
 			earroot.createLink(contentDirPath, 0, null); 
 			J2EEModuleVirtualComponent.setDefaultDeploymentDescriptorFolder(earroot, contentDirPath, null);