[272014] Define facet and facet version for web fragments
diff --git a/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java b/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java
index d0e8219..c60a8bf 100644
--- a/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java
+++ b/tests/org.eclipse.jst.j2ee.tests/defect-tests/org/eclipse/jst/j2ee/defect/tests/DefectVerificationTests.java
@@ -332,7 +332,7 @@
 
 		Thread.sleep(5000);
 
-		String earOutputName = "d:\\temp\\Output" + System.currentTimeMillis() + ".ear";
+		String earOutputName = "c:\\temp\\Output" + System.currentTimeMillis() + ".ear";
 		IDataModel export = DataModelFactory.createDataModel(new EARComponentExportDataModelProvider());
 		export.setProperty(IEARComponentExportDataModelProperties.PROJECT_NAME, comp.getProject().getName());
 		export.setProperty(IEARComponentExportDataModelProperties.ARCHIVE_DESTINATION, earOutputName);
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/JEE6ModelTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/JEE6ModelTest.java
index f4a6bc1..38f9e69 100644
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/JEE6ModelTest.java
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/jst/jee/model/tests/JEE6ModelTest.java
@@ -45,8 +45,10 @@
 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.internal.plugin.J2EEPreferences.Keys;
 import org.eclipse.jst.j2ee.jca.project.facet.IConnectorFacetInstallDataModelProperties;
 import org.eclipse.jst.j2ee.project.facet.IAppClientFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants;
 import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetInstallDataModelProperties;
 import org.eclipse.jst.j2ee.web.project.facet.IWebFacetInstallDataModelProperties;
 import org.eclipse.jst.javaee.application.Application;
@@ -58,7 +60,9 @@
 import org.eclipse.jst.javaee.jca.Connector;
 import org.eclipse.jst.javaee.jca.internal.util.JcaResourceImpl;
 import org.eclipse.jst.javaee.web.WebApp;
+import org.eclipse.jst.javaee.web.WebFragment;
 import org.eclipse.jst.javaee.web.internal.util.WebResourceImpl;
+import org.eclipse.jst.javaee.webfragment.internal.util.WebfragmentResourceImpl;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetInstallDataModelProperties;
 import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties;
@@ -72,7 +76,9 @@
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 import org.eclipse.wst.common.tests.SimpleTestSuite;
+import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.JavaEEFacetConstants;
 import org.eclipse.wtp.j2ee.headless.tests.web.operations.WebProjectCreationOperationTest;
+import org.eclipse.wtp.j2ee.headless.tests.webfragment.operations.WebFragmentProjectCreationOperationTest;
 
 public class JEE6ModelTest extends GeneralEMFPopulationTest {
 	
@@ -307,6 +313,27 @@
 
 }
 
+public void testWebFragmentModel() throws Exception {
+	
+	String projName = "TestEE6WebFragmentProject";//$NON-NLS-1$
+	createWebfragmentProject(projName);
+	
+	EMFAttributeFeatureGenerator.reset();
+	String modelPathURI = J2EEConstants.WEBFRAGMENT_DD_URI;
+	URI uri = URI.createURI( "src/" + modelPathURI);
+	ProjectResourceSet resSet = getResourceSet(projName);
+	
+	WebfragmentResourceImpl webRes = (WebfragmentResourceImpl) resSet.getResource(uri,true);
+	Assert.assertTrue(webRes.getContents().size() > 0);
+	
+	if (webRes.getContents().size() > 0) {
+		WebFragment fragment = webRes.getWebFragment();
+		populateRoot((EObjectImpl)fragment);
+		webRes.save(null);
+	}
+
+}
+
 	private ProjectResourceSet getResourceSet(String projName) {
 		IProject proj = getProject(projName);
 		return (ProjectResourceSet)WorkbenchResourceHelperBase.getResourceSet(proj);
@@ -325,6 +352,23 @@
 			return webProj;
 		
 	}
+	private IProject createWebfragmentProject(String projName) throws ExecutionException {
+		
+		String webFragmentVersionString = J2EEVersionUtil.convertVersionIntToString(J2EEVersionConstants.WEBFRAGMENT_3_0_ID);
+		IProjectFacet javaFacet = ProjectFacetsManager.getProjectFacet(IJ2EEFacetConstants.JAVA);
+		IDataModel javaFacetModel = DataModelFactory.createDataModel(new JavaFacetInstallDataModelProvider());
+		javaFacetModel.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, projName);
+    	javaFacetModel.setProperty(IFacetDataModelProperties.FACET_VERSION, JavaEEFacetConstants.JAVA_6);
+		javaFacetModel.setProperty(IJavaFacetInstallDataModelProperties.DEFAULT_OUTPUT_FOLDER_NAME,
+				J2EEPlugin.getDefault().getJ2EEPreferences().getString(Keys.DYN_WEB_OUTPUT_FOLDER) );
+		javaFacetModel.getDefaultOperation().execute(new NullProgressMonitor(), null);
+		IProjectFacet webFragmentFacet = ProjectFacetsManager.getProjectFacet(IJ2EEFacetConstants.WEBFRAGMENT);
+		IProjectFacetVersion webFragmentFacetVersion = webFragmentFacet.getVersion(webFragmentVersionString);
+		IDataModel dataModel = WebFragmentProjectCreationOperationTest.getWebFragmentDataModel(projName, null, null, webFragmentFacetVersion, true);
+		dataModel.getDefaultOperation().execute(new NullProgressMonitor(), null);
+		IProject webFragmentProj = ResourcesPlugin.getWorkspace().getRoot().getProject(projName);
+		return webFragmentProj;	
+	}
 	private IProject createEjbProject(String projName) throws ExecutionException {
 		IDataModel dataModel = DataModelFactory.createDataModel(IEjbFacetInstallDataModelProperties.class);
 		String versionString = J2EEVersionUtil.convertVersionIntToString(J2EEVersionConstants.EJB_3_1_ID);
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/JavaEEFacetConstants.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/JavaEEFacetConstants.java
index 3af1726..287f332 100644
--- a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/JavaEEFacetConstants.java
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/j2ee/operations/JavaEEFacetConstants.java
@@ -45,4 +45,7 @@
 	public static final IProjectFacetVersion JAVA_14 = JAVA_FACET.getVersion("1.4"); //$NON-NLS-1$
 	public static final IProjectFacetVersion JAVA_5 = JAVA_FACET.getVersion("5.0"); //$NON-NLS-1$
 	public static final IProjectFacetVersion JAVA_6 = JAVA_FACET.getVersion("6.0"); //$NON-NLS-1$
+
+	public static final IProjectFacet WEBFRAGMENT_FACET = ProjectFacetsManager.getProjectFacet(IModuleConstants.JST_WEBFRAGMENT_MODULE);
+	public static final IProjectFacetVersion WEBFRAGMENT_30 = WEBFRAGMENT_FACET.getVersion("3.0"); //$NON-NLS-1$
 }
diff --git a/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/webfragment/operations/WebFragmentProjectCreationOperationTest.java b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/webfragment/operations/WebFragmentProjectCreationOperationTest.java
new file mode 100644
index 0000000..44a0950
--- /dev/null
+++ b/tests/org.eclipse.jst.j2ee.tests/j2ee-tests/org/eclipse/wtp/j2ee/headless/tests/webfragment/operations/WebFragmentProjectCreationOperationTest.java
@@ -0,0 +1,219 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wtp.j2ee.headless.tests.webfragment.operations;
+
+import junit.framework.Test;
+
+import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.web.project.facet.IWebFacetInstallDataModelProperties;
+import org.eclipse.jst.j2ee.web.project.facet.WebFragmentFacetInstallDataModelProvider;
+import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetDataModelProperties;
+import org.eclipse.wst.common.componentcore.datamodel.properties.IFacetProjectCreationDataModelProperties;
+import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.tests.OperationTestCase;
+import org.eclipse.wst.common.tests.SimpleTestSuite;
+import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.JavaEEFacetConstants;
+import org.eclipse.wtp.j2ee.headless.tests.j2ee.operations.ModuleProjectCreationOperationTest;
+
+
+public class WebFragmentProjectCreationOperationTest extends ModuleProjectCreationOperationTest {
+    
+	public WebFragmentProjectCreationOperationTest() {
+		super("WebProjectCreationOperationTests");
+	}
+	
+	public WebFragmentProjectCreationOperationTest(String name) {
+		super(name);
+	}
+
+	public static Test suite() {
+		return new SimpleTestSuite(WebFragmentProjectCreationOperationTest.class);
+    }
+	
+	public void testWeb30_Defaults() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("badWeb", null, null, JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+
+	public void testWeb30_ChangedContentDir() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("madWeb", "madContent", null, JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+
+	public void testWeb30_ChangedJavaSrcDir() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("booWeb", null, "booSrc", JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+
+	public void testWeb30_ChangedContentDir_ChangedJavaSrcDir() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("eeWeb", "contentEE", "srcTry", JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+
+	public void testWeb30_Defaults_WithEAR() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("badWeb", null, null, JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContextRoot_WithEAR() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("herWeb", null, null, JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContentDir_WithEAR() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("madWeb", "madContent", null, JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+
+	public void testWeb30_ChangedJavaSrcDir_WithEAR() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("booWeb", null, "booSrc", JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContextRoot_ChangedContentDir_WithEAR() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("pinkWeb", "pinkContent", null, JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+
+	public void testWeb30_ChangedContextRoot_ChangedJavaSrcDir_WithEAR() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("veryfarWeb", null, "verybadSrc", JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+
+	public void testWeb30_ChangedContentDir_ChangedJavaSrcDir_WithEAR() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("eeWeb", "contentEE", "srcTry", JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+
+	public void testWeb30_ChangedContextRoot_ChangedContentDir_ChangedJavaSrcDir_WithEAR() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("iiWeb", "iiContDir", "srgII", JavaEEFacetConstants.WEBFRAGMENT_30, false);
+		OperationTestCase.runAndVerify(dm);
+	}
+
+	public void testWeb30_Defaults_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("badWeb", null, null, JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContextRoot_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("herWeb", null, null, JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContentDir_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("madWeb", "madContent", null, JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContextRoot_ChangedContentDir_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("pinkWeb", "tryContent", null, JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContextRoot_ChangedJavaSrcDir_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("farawayWeb", null, "farSrc", JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContentDir_ChangedJavaSrcDir_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("eeWeb", "contentE", "srcTry", JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_Defaults_WithEAR_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("badWeb", null, null, JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContextRoot_WithEAR_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("herWeb", null, null, JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContentDir_WithEAR_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("madWeb", "madContent", null, JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedJavaSrcDir_WithEAR_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("booWeb", null, "booSrc", JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContextRoot_ChangedContentDir_WithEAR_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("pinkWeb", "pinkContent", null, JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContextRoot_ChangedJavaSrcDir_WithEAR_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("veryfarWeb", null, "verybadSrc", JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContentDir_ChangedJavaSrcDir_WithEAR_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("eeWeb", "contentEE", "srcTry", JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	public void testWeb30_ChangedContextRoot_ChangedContentDir_ChangedJavaSrcDir_WithEAR_WithDD() throws Exception {
+		IDataModel dm = getWebFragmentDataModel("iiWeb", "iiContDir", "srgII", JavaEEFacetConstants.WEBFRAGMENT_30, true);
+		OperationTestCase.runAndVerify(dm);
+	}
+	
+	
+    /**
+     * Creates and returns a Web Fragment Data Model with the given name and of the given version.
+     * Can also be used to specify none default context root, content directory, and/or
+     * the java source directory.
+     * If earName is not null then Web will be added to the EAR with earName, and if appropriate
+     * with or without a deployment descriptor.
+     * 
+     * @param projName name of the project to create
+     * @param contentDir the content directory to use for this project, use default if NULL
+     * @param javaSrcDir the java source directory to use for this project, use default if NULL
+     * @param version version of Web to use
+     * @param createDD - if true then create DD else don't
+     * @return a Web Fragment Data Model with the appropriate properties set
+     */
+    public static IDataModel getWebFragmentDataModel(String projName, String contentDir, String javaSrcDir, IProjectFacetVersion version, boolean createDD){
+    	IDataModel dm = DataModelFactory.createDataModel(new WebFragmentFacetInstallDataModelProvider());
+    	dm.setProperty(IFacetProjectCreationDataModelProperties.FACET_PROJECT_NAME, projName);
+    	dm.setProperty(IFacetDataModelProperties.FACET_VERSION, version);
+
+    	//if no contentDir provided use default
+    	if(contentDir != null) {
+    		dm.setStringProperty(IJ2EEModuleFacetInstallDataModelProperties.CONFIG_FOLDER, contentDir);
+    	}
+    	
+    	//if no javaSrcDir provided use default
+    	if(javaSrcDir != null) {
+    		dm.setStringProperty(IWebFacetInstallDataModelProperties.SOURCE_FOLDER, javaSrcDir);
+    	}
+    	
+    	dm.setBooleanProperty(IJ2EEFacetInstallDataModelProperties.GENERATE_DD, createDD);
+    	
+/* does the Java version get set correctly?
+    	if(version.equals(JavaEEFacetConstants.WEBFRAGMENT_30))    	{
+    		IDataModel javaFacetModel = facetMap.getFacetDataModel(IJ2EEFacetConstants.JAVA);
+	    	javaFacetModel.setProperty(IFacetDataModelProperties.FACET_VERSION, JavaEEFacetConstants.JAVA_6);
+    	}
+    	else{    		
+            IDataModel javaFacetModel = facetMap.getFacetDataModel(IJ2EEFacetConstants.JAVA);
+            javaFacetModel.setProperty(IFacetDataModelProperties.FACET_VERSION, JavaEEFacetConstants.JAVA_5);
+    	}
+*/
+    	
+    	return dm;
+    }
+}