[366065] Add a new filter rule to include/exclude based on a target runtime
diff --git a/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html b/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html
index 2947d2b..096d144 100644
--- a/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html
+++ b/features/org.eclipse.wst.common_core.feature.patch/buildnotes_org.eclipse.wst.common_core.feature.patch.html
@@ -12,6 +12,8 @@
 	<h1>WTP 3.2.4 Patches</h1>
 
 	<h2>org.eclipse.wst.common_core.feature</h2>
+	
+	<p>Bug <a href='https://bugs.eclipse.org/366065'>366065</a>. Add a new filter rule to include/exclude based on a target runtime</p>
 
 	<p>Test only run</p>
 
diff --git a/features/org.eclipse.wst.common_core.feature.patch/feature.properties b/features/org.eclipse.wst.common_core.feature.patch/feature.properties
index f7a24e1..3d2d286 100644
--- a/features/org.eclipse.wst.common_core.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.common_core.feature.patch/feature.properties
@@ -29,6 +29,7 @@
 \n\
 test only\n\
 test only Bug https://bugs.eclipse.org/325991 Regression: child projects not targeted to parent project's runtime\n\
+Bug https://bugs.eclipse.org/366065 Add a new filter rule to include/exclude based on a target runtime\n\
 \n\
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
diff --git a/features/org.eclipse.wst.common_core.feature.patch/feature.xml b/features/org.eclipse.wst.common_core.feature.patch/feature.xml
index df06ba5..9d7bcc6 100644
--- a/features/org.eclipse.wst.common_core.feature.patch/feature.xml
+++ b/features/org.eclipse.wst.common_core.feature.patch/feature.xml
@@ -29,4 +29,11 @@
          version="0.0.0"
          unpack="false"/>
 
+   <plugin
+         id="org.eclipse.wst.validation"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
 </feature>
diff --git a/features/org.eclipse.wst.common_ui.feature.patch/buildnotes_org.eclipse.wst.common_ui.feature.patch.html b/features/org.eclipse.wst.common_ui.feature.patch/buildnotes_org.eclipse.wst.common_ui.feature.patch.html
index 9e96f3c..6b80642 100644
--- a/features/org.eclipse.wst.common_ui.feature.patch/buildnotes_org.eclipse.wst.common_ui.feature.patch.html
+++ b/features/org.eclipse.wst.common_ui.feature.patch/buildnotes_org.eclipse.wst.common_ui.feature.patch.html
@@ -15,5 +15,6 @@
 
 <p>Bug <a href='https://bugs.eclipse.org/326417'>326417</a>. Deployment Assembly Verifier for classpath entries</p>
 <p>Bug <a href='https://bugs.eclipse.org/326585'>326585</a>. Deployment assembly table is not keyboard accessible</p>
+<p>Bug <a href='https://bugs.eclipse.org/366065'>366065</a>. Add a new filter rule to include/exclude based on a target runtime</p>
 </body>
 </html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.common_ui.feature.patch/feature.properties b/features/org.eclipse.wst.common_ui.feature.patch/feature.properties
index d83ba67..3a3b23b 100644
--- a/features/org.eclipse.wst.common_ui.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.common_ui.feature.patch/feature.properties
@@ -29,6 +29,7 @@
 \n\
 Bug https://bugs.eclipse.org/326417 Deployment Assembly Verifier for classpath entries\n\
 Bug https://bugs.eclipse.org/326585 Deployment assembly table is not keyboard accessible\n\
+Bug https://bugs.eclipse.org/366065 Add a new filter rule to include/exclude based on a target runtime\n\
 \n\
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
diff --git a/features/org.eclipse.wst.common_ui.feature.patch/feature.xml b/features/org.eclipse.wst.common_ui.feature.patch/feature.xml
index 5cd83d7..85d609b 100644
--- a/features/org.eclipse.wst.common_ui.feature.patch/feature.xml
+++ b/features/org.eclipse.wst.common_ui.feature.patch/feature.xml
@@ -27,5 +27,12 @@
          install-size="0"
          version="0.0.0"
          unpack="false"/>
+         
+   <plugin
+         id="org.eclipse.wst.validation.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
 
 </feature>
diff --git a/plugins/org.eclipse.wst.validation.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.validation.ui/META-INF/MANIFEST.MF
index cef8ed2..1da5ca7 100644
--- a/plugins/org.eclipse.wst.validation.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.validation.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name.0
 Bundle-SymbolicName: org.eclipse.wst.validation.ui; singleton:=true
-Bundle-Version: 1.2.205.qualifier
+Bundle-Version: 1.2.206.qualifier
 Bundle-Activator: org.eclipse.wst.validation.internal.ui.plugin.ValidationUIPlugin
 Bundle-Vendor: %Bundle-Vendor.0
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.validation.ui/property_files/org/eclipse/wst/validation/ui/internal/messages.properties b/plugins/org.eclipse.wst.validation.ui/property_files/org/eclipse/wst/validation/ui/internal/messages.properties
index 5e847ec..364d308 100644
--- a/plugins/org.eclipse.wst.validation.ui/property_files/org/eclipse/wst/validation/ui/internal/messages.properties
+++ b/plugins/org.eclipse.wst.validation.ui/property_files/org/eclipse/wst/validation/ui/internal/messages.properties
@@ -110,6 +110,7 @@
 LabelProjects=Project &nature
 LabelFacets=&Facet
 LabelContentType=&Content Type
+LabelTargetRuntime=&Target Runtime
 
 # Note to translators, keep the <A> and </A> tags exactly as they are
 DoNotShowResults=Do not show this dialog in the future.
@@ -119,6 +120,7 @@
 DescProjects=A project nature.
 DescFacets=A facet.
 DescContentType=A content type, for example the XML content type.
+DescTargetRuntime=A target runtime, for example "JBoss v5.0".
 
 ErrorsWarnings=Errors/Warnings
 
@@ -149,6 +151,7 @@
 FrContentType=Content Type
 FrContentTypeLabel=&Content Type:
 FrMsgSev=Select the severity level for the following problems
+FrTargetRuntimeLabel=Target Runtime
 
 RebuildTitle=Validation Settings Changed
 RebuildMsg=The validation settings have changed. A full rebuild is required for the changes to take effect. Do the full build now?
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ValUIMessages.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ValUIMessages.java
index 8040b8d..5001d84 100644
--- a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ValUIMessages.java
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/ValUIMessages.java
@@ -73,12 +73,14 @@
 	public static String LabelFacets;
 	public static String LabelContentType;
 	public static String LabelEnableProjectSpecific;
+	public static String LabelTargetRuntime;
 	
 	public static String DescExtension;
 	public static String DescFile;
 	public static String DescProjects;
 	public static String DescFacets;
 	public static String DescContentType;
+	public static String DescTargetRuntime;
 	
 	public static String Validation;
 	public static String ValidationStatus;
@@ -107,6 +109,7 @@
 	public static String FrNewFacitLabel;
 	public static String FrContentTypeLabel;
 	public static String FrMsgSev;
+	public static String FrTargetRuntimeLabel;
 	
 	public static String RebuildTitle;
 	public static String RebuildMsg;
diff --git a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/NewFilterRule.java b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/NewFilterRule.java
index 709621e..e0e6797 100644
--- a/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/NewFilterRule.java
+++ b/plugins/org.eclipse.wst.validation.ui/vf2/org/eclipse/wst/validation/ui/internal/dialog/NewFilterRule.java
@@ -43,6 +43,7 @@
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 import org.eclipse.wst.common.project.facet.core.internal.ProjectFacet;
 import org.eclipse.wst.validation.internal.model.FilterRule;
+import org.eclipse.wst.validation.internal.model.ValidatorHelper;
 import org.eclipse.wst.validation.ui.internal.HelpContextIds;
 import org.eclipse.wst.validation.ui.internal.ValUIMessages;
 
@@ -95,7 +96,11 @@
 	
 	private IWizardPage returnOrBuildPage(int selectedFilter) {
 			IWizardPage page =  null;
-			if (_project != null && selectedFilter == 2)selectedFilter = 4;
+			if (_project != null){
+				if(selectedFilter == 2) selectedFilter = 4;
+				else if(selectedFilter == 3) selectedFilter = 5;
+			}
+			
 			switch (selectedFilter){
 			case 0:
 				page = new FileExtPage();
@@ -112,6 +117,9 @@
 			case 4:
 				page = new ContentTypePage();
 				break;
+			case 5:
+				page = new TargetRuntimePage();
+				break;
 			}
 		addPage(page);
 		return page;
@@ -136,19 +144,19 @@
 			String[] desc = null;
 			if (_project != null){
 				labels = new String[]{ValUIMessages.LabelExtension, ValUIMessages.LabelFile,
-						ValUIMessages.LabelContentType};
+						ValUIMessages.LabelContentType, ValUIMessages.LabelTargetRuntime};
 				
 				desc = new String[]{ValUIMessages.DescExtension, ValUIMessages.DescFile,
-						ValUIMessages.DescContentType};
+						ValUIMessages.DescContentType, ValUIMessages.DescTargetRuntime};
 			}
 			else {
 				labels = new String[]{ValUIMessages.LabelExtension, ValUIMessages.LabelFile,
 						ValUIMessages.LabelProjects, ValUIMessages.LabelFacets,
-						ValUIMessages.LabelContentType};
+						ValUIMessages.LabelContentType, ValUIMessages.LabelTargetRuntime};
 				
 				desc = new String[]{ValUIMessages.DescExtension, ValUIMessages.DescFile,
 						ValUIMessages.DescProjects, ValUIMessages.DescFacets, 
-						ValUIMessages.DescContentType};
+						ValUIMessages.DescContentType, ValUIMessages.DescTargetRuntime};
 			}
 			
 			Composite control = new Composite(parent, SWT.NONE);
@@ -581,6 +589,66 @@
 		
 	}
 	
+	public static class TargetRuntimePage extends WizardPage implements FilterWizardPage {
+		
+		private Combo	_pattern;
+		private String [] ids;
+		
+		public TargetRuntimePage(){
+			super("targetRuntime", ValUIMessages.FrTargetRuntimeLabel, null); //$NON-NLS-1$
+		}
+
+		public void createControl(Composite parent) {
+			PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HelpContextIds.FRContentType);
+			Composite control = new Composite(parent, SWT.NONE);
+			setControl(control);
+			control.setLayout(new GridLayout(2, false));
+			(new Label(control, SWT.NONE)).setText("Target Runtime"); //$NON-NLS-1$
+
+			Object[] targetRuntimes = ValidatorHelper.getRuntimes();
+			
+			String items[] = new String[targetRuntimes.length];
+			ids = new String[targetRuntimes.length];
+			
+			for(int i = 0; i < targetRuntimes.length; i++)
+			{
+				ids[i] = ValidatorHelper.getRuntimeID(targetRuntimes[i]);
+				items[i] = ValidatorHelper.getRuntimeName(targetRuntimes[i]);
+			}
+			
+			_pattern = new Combo(control, SWT.DROP_DOWN | SWT.READ_ONLY);
+			_pattern.setFocus();
+			_pattern.setLayoutData(new GridData(300, SWT.DEFAULT));
+			_pattern.setVisibleItemCount(20);
+			_pattern.setItems(items);
+			_pattern.addModifyListener(new ModifyListener(){
+
+				public void modifyText(ModifyEvent e) {
+					getContainer().updateButtons();
+				}
+				
+			});
+		}
+		
+		public FilterRule getFilterRule() {
+			if (!isPageComplete())return null;
+			
+			int i = _pattern.getSelectionIndex();
+			if (i == -1) return null;
+			
+			FilterRule rule = FilterRule.createTargetRuntime(ids[i]);
+			return rule;
+		}
+		
+		
+		public boolean isPageComplete() {
+			if (_pattern == null)return false;
+			if (_pattern.getText() == null)return false;
+			return _pattern.getText().trim().length() > 0;
+		}
+		
+	}
+	
 	interface FilterWizardPage {
 		/**
 		 * Answer the rule that was created.
diff --git a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
index d88ffe3..d97d553 100644
--- a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name.0
 Bundle-SymbolicName: org.eclipse.wst.validation; singleton:=true
-Bundle-Version: 1.2.204.qualifier
+Bundle-Version: 1.2.205.qualifier
 Bundle-Activator: org.eclipse.wst.validation.internal.plugin.ValidationPlugin
 Bundle-Vendor: %Bundle-Vendor.0
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.validation/property_files/org/eclipse/wst/validation/internal/messages.properties b/plugins/org.eclipse.wst.validation/property_files/org/eclipse/wst/validation/internal/messages.properties
index c57608c..db8a008 100644
--- a/plugins/org.eclipse.wst.validation/property_files/org/eclipse/wst/validation/internal/messages.properties
+++ b/plugins/org.eclipse.wst.validation/property_files/org/eclipse/wst/validation/internal/messages.properties
@@ -50,6 +50,7 @@
 RuleFolder=Folder
 RuleFull=Qualified File
 RulePattern=Pattern
+RuleTargetRuntime=Target Runtime
 
 FileExtWithCase={0}: {1} (case sensitive)
 FileExtWithoutCase={0}: {1}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionConstants.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionConstants.java
index 6649d59..c0b4bda 100644
--- a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionConstants.java
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ExtensionConstants.java
@@ -103,6 +103,9 @@
 		/** contentType - filter by content type. */
 		String contentType = "contentType"; //$NON-NLS-1$
 		
+		/** targetRuntime - filter by targetRuntime. */
+		String targetRuntime = "targetRuntime"; //$NON-NLS-1$
+		
 		/** pattern - filter paths by regular expression. */
 		String pattern = "pattern"; //$NON-NLS-1$
 	}
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValMessages.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValMessages.java
index d2383c1..2835105 100644
--- a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValMessages.java
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/ValMessages.java
@@ -67,6 +67,7 @@
 	public static String RuleContentType;
 	public static String RuleFacet;
 	public static String RulePattern;
+	public static String RuleTargetRuntime;
 	
 	public static String ContentTypeExact;
 	public static String ContentTypeNotExact;
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterRule.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterRule.java
index f4fa8de..edcf8da 100644
--- a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterRule.java
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/FilterRule.java
@@ -95,6 +95,11 @@
 			return new Facet(pattern, null);
 		}
 		
+		if (ExtensionConstants.Rule.targetRuntime.equals(type)){
+			String pattern = des.getString();
+			return new TargetRuntime(pattern);
+		}
+		
 		if (ExtensionConstants.Rule.pattern.equals(type)){
 			String pattern = des.getString();
 			boolean caseSensitive = des.getBoolean();
@@ -124,6 +129,10 @@
 	public static FilterRule createContentType(String contentType, boolean exactMatch){
 		return new ContentType(contentType, exactMatch);
 	}
+	
+	public static FilterRule createTargetRuntime(String targetRuntime){
+		return new TargetRuntime(targetRuntime);
+	}
 		
 	protected FilterRule(String pattern){
 		_pattern = pattern;
@@ -383,7 +392,7 @@
 	public static final class Facet extends FilterRule {
 		
 		private final String _versionExpression;
-		private String _facetLabel;
+		private String _facetLabel = null;
 		
 		private Facet(IConfigurationElement rule){
 			super(rule.getAttribute(ExtensionConstants.RuleAttrib.id));
@@ -395,10 +404,14 @@
 			super(facetId);
 			_versionExpression = versionExpression;
 			
-			IProjectFacet facet = ProjectFacetsManager.getProjectFacet(facetId);
-			
-			if(facet != null){
-				_facetLabel = facet.getLabel();
+			try
+			{
+				IProjectFacet facet = ProjectFacetsManager.getProjectFacet(facetId);
+				if(facet != null){
+					_facetLabel = facet.getLabel();
+				}
+			} catch(IllegalArgumentException ex) {
+				//do nothing
 			}
 		}
 
@@ -522,6 +535,42 @@
 		}
 	}
 	
+	public static final class TargetRuntime extends FilterRule {
+		
+		private String patternLabel = null;
+		
+		private TargetRuntime(IConfigurationElement rule) {
+			super(rule.getAttribute(ExtensionConstants.RuleAttrib.id));
+		}
+	
+		public TargetRuntime(String targetRuntime) {
+			super(targetRuntime);
+			
+			String runtime = ValidatorHelper.getRuntimeName(targetRuntime);
+			
+			if(runtime != null){
+				patternLabel = runtime;
+			}
+		}
+		
+		public String getType() {
+			return ExtensionConstants.Rule.targetRuntime;
+		}
+		
+		public String getDisplayableType() {
+			return ValMessages.RuleTargetRuntime;
+		}
+		
+		@Override
+		public String toString() {
+			if(patternLabel != null && patternLabel.length() > 0){
+				return getDisplayableType() + ": " + patternLabel.concat(" - ").concat(_pattern); //$NON-NLS-1$ //$NON-NLS-2$
+			}
+
+			return getDisplayableType() + ": " + _pattern; //$NON-NLS-1$
+		}
+	}
+	
 	public static final class FilePattern extends FilterRuleCaseSensitive {
 		
 		private final Pattern _compiledPattern;
@@ -556,7 +605,7 @@
 			return _compiledPattern.matcher(name).matches();
 		}		
 	}
-	
+
 	/**
 	 * Save your settings into the serializer.
 	 * @param ser
@@ -571,5 +620,4 @@
 		if (_pattern != null)h += _pattern.hashCode();
 		return h;
 	}
-	
 }
diff --git a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ValidatorHelper.java b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ValidatorHelper.java
index 288f226..4ecb4ca 100644
--- a/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ValidatorHelper.java
+++ b/plugins/org.eclipse.wst.validation/vf2/org/eclipse/wst/validation/internal/model/ValidatorHelper.java
@@ -10,6 +10,12 @@
  *******************************************************************************/
 package org.eclipse.wst.validation.internal.model;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
+import org.eclipse.wst.common.project.facet.core.runtime.RuntimeManager;
 import org.eclipse.wst.validation.internal.ValidatorMutable;
 
 /**
@@ -27,4 +33,62 @@
 		for (FilterGroup group : v.getGroups())if (group.isExclude())return true;
 		return false;		
 	}
+	
+	/**
+	 * Return all the Runtimes defined in the workspace.
+	 */
+	public static Object[] getRuntimes()
+	{
+		Iterator<IRuntime> runtimes = RuntimeManager.getRuntimes().iterator();
+		List <IRuntime> list = new ArrayList<IRuntime>();
+		
+		while (runtimes.hasNext()) {
+			IRuntime runtime1 = (IRuntime) runtimes.next();
+			String id = runtime1.getProperty("id"); //$NON-NLS-1$
+			
+			if(id != null){
+				list.add(runtime1);
+			}
+		}
+		
+		return list.toArray();
+	}
+	
+	
+	/**
+	 * Return the ID of the given target Runtime.
+	 * @param targetRuntime
+	 * @return
+	 */
+	public static String getRuntimeID(Object targetRuntime)
+	{
+		IRuntime runtime = (IRuntime) targetRuntime;
+		return runtime.getProperty("id"); //$NON-NLS-1$
+	}
+	
+	/**
+	 * Return the target runtime name of the given the ID
+	 * @param id
+	 * @return
+	 */
+	public static String getRuntimeName(String id)
+	{
+		IRuntime runtime = RuntimeManager.getRuntime(id);
+		if(runtime != null)
+			return runtime.getLocalizedName();
+		
+		return null;
+	}
+	
+	/**
+	 * Return the Name of the given target runtime.
+	 * @param targetRuntime
+	 * @return
+	 */
+	public static String getRuntimeName(Object targetRuntime)
+	{
+		IRuntime runtime = (IRuntime) targetRuntime;
+		
+		return runtime.getLocalizedName();
+	}
 }
diff --git a/plugins/org.eclipse.wst.validation/xsds/exclude.exsd b/plugins/org.eclipse.wst.validation/xsds/exclude.exsd
index 92d7647..87f6325 100644
--- a/plugins/org.eclipse.wst.validation/xsds/exclude.exsd
+++ b/plugins/org.eclipse.wst.validation/xsds/exclude.exsd
@@ -2,15 +2,20 @@
 <!-- Schema file written by PDE -->
 <schema targetNamespace="org.eclipse.wst.validation" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
-      <appinfo>
+      <appInfo>
          <meta.schema plugin="org.eclipse.wst.validation" id="exclude" name="Validator Exclusion"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          A way to add additional exclusion filters to a V2 validator.
       </documentation>
    </annotation>
 
    <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="validator" minOccurs="1" maxOccurs="unbounded"/>
@@ -34,9 +39,9 @@
                <documentation>
                   The short user friendly name for the exclusion.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute translatable="true"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
@@ -57,9 +62,9 @@
                <documentation>
                   The fully qualifed validator id that is being extended.
                </documentation>
-               <appinfo>
+               <appInfo>
                   <meta.attribute kind="identifier"/>
-               </appinfo>
+               </appInfo>
             </annotation>
          </attribute>
       </complexType>
@@ -119,6 +124,23 @@
       </complexType>
    </element>
 
+   <element name="targetRuntime">
+      <annotation>
+         <documentation>
+            Used to filter on project natures.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The target runtime id, for example &quot;org.eclipse.jst.server.generic.runtime.jboss5&quot;.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
    <element name="file">
       <complexType>
          <attribute name="name" type="string" use="required">
@@ -168,6 +190,7 @@
             <element ref="projectNature" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="facet" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="contentType" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="targetRuntime" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="pattern" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
       </complexType>
@@ -208,6 +231,7 @@
          </attribute>
       </complexType>
    </element>
+
    <element name="pattern">
       <annotation>
          <documentation>
@@ -234,18 +258,18 @@
    </element>
 
    <annotation>
-      <appinfo>
+      <appInfo>
          <meta.section type="since"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          WebTools 3.0
       </documentation>
    </annotation>
 
    <annotation>
-      <appinfo>
+      <appInfo>
          <meta.section type="examples"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          &lt;!-- A plug-in is turning off the T1A validator for projects that have the ModuleCoreNature --&gt;
  &lt;extension
@@ -262,14 +286,13 @@
        &lt;/exclude&gt;
     &lt;/validator&gt;
  &lt;/extension&gt;
-
       </documentation>
    </annotation>
 
    <annotation>
-      <appinfo>
+      <appInfo>
          <meta.section type="apiInfo"/>
-      </appinfo>
+      </appInfo>
       <documentation>
          Provisional API.
       </documentation>
@@ -277,5 +300,4 @@
 
 
 
-
 </schema>
diff --git a/plugins/org.eclipse.wst.validation/xsds/validator.exsd b/plugins/org.eclipse.wst.validation/xsds/validator.exsd
index 737f8cb..b03167d 100644
--- a/plugins/org.eclipse.wst.validation/xsds/validator.exsd
+++ b/plugins/org.eclipse.wst.validation/xsds/validator.exsd
@@ -225,6 +225,7 @@
             <element ref="projectNature" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="facet" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="contentType" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="targetRuntime" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="pattern" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
       </complexType>
@@ -249,6 +250,23 @@
       </complexType>
    </element>
 
+   <element name="targetRuntime">
+      <annotation>
+         <documentation>
+            Used to filter on target runtimes.
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The target runtime id.
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
    <element name="group">
       <annotation>
          <documentation>