[249322] Add facet version to the filter rules
diff --git a/tests/org.eclipse.wst.common.tests.validation/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.common.tests.validation/META-INF/MANIFEST.MF
index 76b8f76..06d117b 100644
--- a/tests/org.eclipse.wst.common.tests.validation/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.wst.common.tests.validation/META-INF/MANIFEST.MF
@@ -2,13 +2,14 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name.0
 Bundle-SymbolicName: org.eclipse.wst.common.tests.validation;singleton:=true
-Bundle-Version: 1.0.0
+Bundle-Version: 1.0.1
 Bundle-Activator: org.eclipse.wst.common.tests.validation.Activator
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.wst.validation,
  org.junit;bundle-version="[3.8.2,4.0.0)",
- org.eclipse.core.resources
+ org.eclipse.core.resources,
+ org.eclipse.wst.common.project.facet.core;bundle-version="[1.3.0,1.4.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %Bundle-Vendor.0
diff --git a/tests/org.eclipse.wst.common.tests.validation/plugin.xml b/tests/org.eclipse.wst.common.tests.validation/plugin.xml
index f83f087..6036ded 100644
--- a/tests/org.eclipse.wst.common.tests.validation/plugin.xml
+++ b/tests/org.eclipse.wst.common.tests.validation/plugin.xml
@@ -316,4 +316,27 @@
     </validator>
  </extension>
  
+     <extension point="org.eclipse.wst.validation.validatorV2" id="T4A" name="T4A">
+      	<validator build="false" class="org.eclipse.wst.validation.tests.T4A" manual="false">
+         <include>
+            <rules>
+               <fileext ext="test1"></fileext>
+               <facet id="jst.java" version="5.0"/>
+            </rules>
+         </include>
+      </validator>
+   </extension>
+ 
+     <extension point="org.eclipse.wst.validation.validatorV2" id="T4B" name="T4B">
+      	<validator build="false" class="org.eclipse.wst.validation.tests.T4B" manual="false">
+         <include>
+            <rules>
+               <fileext ext="test1"></fileext>
+               <facet id="jst.java" version="6.0"/>
+            </rules>
+         </include>
+      </validator>
+   </extension>
+ 
+ 
 </plugin>
diff --git a/tests/org.eclipse.wst.common.tests.validation/src/org/eclipse/wst/validation/tests/testcase/TestSuite4.java b/tests/org.eclipse.wst.common.tests.validation/src/org/eclipse/wst/validation/tests/testcase/TestSuite4.java
new file mode 100644
index 0000000..837cf64
--- /dev/null
+++ b/tests/org.eclipse.wst.common.tests.validation/src/org/eclipse/wst/validation/tests/testcase/TestSuite4.java
@@ -0,0 +1,106 @@
+package org.eclipse.wst.validation.tests.testcase;
+
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashSet;
+import java.util.Set;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.validation.ValidationFramework;
+import org.eclipse.wst.validation.ValidationResults;
+import org.eclipse.wst.validation.Validator;
+import org.eclipse.wst.validation.internal.Tracing;
+import org.eclipse.wst.validation.internal.ValManager;
+import org.eclipse.wst.validation.internal.ValPrefManagerGlobal;
+
+public class TestSuite4 extends TestCase {
+	
+	private TestEnvironment _env;
+	private IProject		_project;
+	
+	public static Test suite() {
+		return new TestSuite(TestSuite4.class);
+	} 
+	
+	public TestSuite4(String name){
+		super(name);
+	}
+	
+
+	protected void setUp() throws Exception {
+		super.setUp();
+		_env = new TestEnvironment();
+		IFacetedProjectWorkingCopy project = FacetedProjectFramework.createNewProject();
+		project.setProjectName("FacetProject");
+		IProjectFacet pf = ProjectFacetsManager.getProjectFacet("jst.java");
+		IProjectFacetVersion ipv = pf.getVersion("5.0");
+		Set<IProjectFacetVersion> set = new HashSet<IProjectFacetVersion>(1);
+		set.add(ipv);
+		project.setProjectFacets(set);
+		project.commitChanges(null);
+		_project = project.getProject();
+		
+		IPath folder = _env.addFolder(_project.getFullPath(), "source");
+		ResourcesPlugin.getWorkspace().getRoot().findMember(folder);
+		_env.addFile(folder, "first.test1", 
+			"info - information\n" +
+			"warning - warning\n" +
+			"error - error\n\n" +
+			"t1error - extra error\n" +
+			"t1warning - extra warning");
+		
+		enableOnlyT4Validators();
+	}
+	
+	/**
+	 * Since other plug-ins can add and remove validators, turn off all the ones that are not part of
+	 * these tests.
+	 */
+	private static void enableOnlyT4Validators() throws InvocationTargetException {
+		Validator[] vals = ValManager.getDefault().getValidatorsCopy();
+		for (Validator v : vals){
+			boolean enable = v.getValidatorClassname().startsWith("org.eclipse.wst.validation.tests.T4");
+			v.setBuildValidation(enable);
+			v.setManualValidation(enable);
+		}
+		ValPrefManagerGlobal gp = ValPrefManagerGlobal.getDefault();
+		gp.saveAsPrefs(vals);		
+		TestEnvironment.saveV1Preferences(vals);
+	}
+
+	protected void tearDown() throws Exception {
+		_project.delete(true, null);
+		_env.dispose();
+		super.tearDown();
+	}
+	
+	public void testTest1() throws CoreException, UnsupportedEncodingException, InterruptedException {
+		Tracing.log("TestSuite4-01: testTest1 starting");
+		IProgressMonitor monitor = new NullProgressMonitor();		
+		ValidationFramework vf = ValidationFramework.getDefault();
+		IProject[] projects = new IProject[1];
+		projects[0] = _project;
+		ValidationResults vr = vf.validate(projects, true, false, monitor);
+		int errors = vr.getSeverityError();
+		assertEquals("Number of errors", 1, errors);
+				
+		Tracing.log("TestSuite4-02:testTest1 finished");
+	}
+	
+
+
+}
diff --git a/tests/org.eclipse.wst.common.tests.validation/src/org/eclipse/wst/validation/tests/testcase/ValidationTestSuite.java b/tests/org.eclipse.wst.common.tests.validation/src/org/eclipse/wst/validation/tests/testcase/ValidationTestSuite.java
index 3f80e79..d0dc8ef 100644
--- a/tests/org.eclipse.wst.common.tests.validation/src/org/eclipse/wst/validation/tests/testcase/ValidationTestSuite.java
+++ b/tests/org.eclipse.wst.common.tests.validation/src/org/eclipse/wst/validation/tests/testcase/ValidationTestSuite.java
@@ -18,6 +18,7 @@
 		suite.addTest(TestSuite1.suite());
 		suite.addTest(TestSuite2.suite());
 		suite.addTest(TestSuite3.suite());
+		suite.addTest(TestSuite4.suite());
         return suite;
     }
 
diff --git a/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/T2A.java b/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/T2A.java
index b5d8e8c..9da9a43 100644
--- a/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/T2A.java
+++ b/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/T2A.java
@@ -16,8 +16,7 @@
 	public void cleanup(IReporter reporter) {
 	}
 
-	public void validate(IValidationContext helper, IReporter reporter)
-			throws ValidationException {
+	public void validate(IValidationContext helper, IReporter reporter) throws ValidationException {
 		String[] uris = helper.getURIs();
 		if (uris != null)Tracing.log("T2A-01: number of urs = " + uris.length);
 	}
diff --git a/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/T4A.java b/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/T4A.java
new file mode 100644
index 0000000..9d08d58
--- /dev/null
+++ b/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/T4A.java
@@ -0,0 +1,20 @@
+package org.eclipse.wst.validation.tests;
+
+import org.eclipse.wst.common.tests.validation.Activator;
+
+/**
+ * This validator is used to test facet versions. It should be called on projects that have a version 5 java facet.
+ * @author karasiuk
+ *
+ */
+public class T4A extends TestValidator {
+	
+	public String getName() {
+		return "T4A";
+	}
+	
+	public static String id(){
+		return Activator.PLUGIN_ID +".T4A";
+	}
+			
+}
diff --git a/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/T4B.java b/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/T4B.java
new file mode 100644
index 0000000..5cffd21
--- /dev/null
+++ b/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/T4B.java
@@ -0,0 +1,20 @@
+package org.eclipse.wst.validation.tests;
+
+import org.eclipse.wst.common.tests.validation.Activator;
+
+/**
+ * This validator is used to test facet versions. It should be called on projects that have a version 5 java facet.
+ * @author karasiuk
+ *
+ */
+public class T4B extends TestValidator {
+	
+	public String getName() {
+		return "T4B";
+	}
+	
+	public static String id(){
+		return Activator.PLUGIN_ID +".T4B";
+	}
+			
+}
diff --git a/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/TestValidator.java b/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/TestValidator.java
index d9a7967..ce9912c 100644
--- a/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/TestValidator.java
+++ b/tests/org.eclipse.wst.common.tests.validation/validators/org/eclipse/wst/validation/tests/TestValidator.java
@@ -87,7 +87,7 @@
 			}
 			
 			if (severity != -1){
-				ValidatorMessage message = ValidatorMessage.create(line + "(by " + SimpleName +")", resource);
+				ValidatorMessage message = ValidatorMessage.create(line + "(by " + getName() +")", resource);
 				message.setAttribute(IMarker.LINE_NUMBER, count);
 				message.setAttribute(IMarker.SEVERITY, severity);
 				vr.add(message);