Initial Checkin
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/CaseInsensitive.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/CaseInsensitive.xml
new file mode 100644
index 0000000..31a1a01
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/CaseInsensitive.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotations
+	xmlns="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema" 	
+	caseSensitive="false">
+	<cm-element name="Foo">
+		<cm-attribute name="Value">
+			<property name="Type">
+				<value>String1</value>
+			</property>
+		</cm-attribute>
+		<property name="Type">
+			<value>String1</value>
+		</property>
+	</cm-element>
+</grammar-annotations>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileA.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileA.xml
new file mode 100644
index 0000000..c8b9e11
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileA.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotation xmlns:p="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema ../../../org.eclipse.wtp.jsf.core/schema/grammar-annotations.xsd ">
+  <cm-element name="Foo">
+  	<cm-attribute name="Value">
+  		<property name="Type">
+  			<value>String1</value>
+  		</property>
+  	</cm-attribute>
+	<property name="Type">
+		<value>String1</value>
+	</property>
+  </cm-element>
+</grammar-annotation>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileB.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileB.xml
new file mode 100644
index 0000000..a77c641
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileB.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotation 
+	xmlns="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema" 
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+	>
+  <cm-element name="Foo">
+  	<cm-attribute name="Value">
+  		<property name="Type">
+  			<value>String2</value>
+  		</property>
+  	</cm-attribute>
+	<property name="Type">
+		<value>String2</value>
+	</property>
+  </cm-element>
+</grammar-annotation>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/TestJSP.jsp b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/TestJSP.jsp
new file mode 100644
index 0000000..edd40b1
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/TestJSP.jsp
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Insert title here</title>
+</head>
+<body>
+	<f:view>
+		
+	</f:view>
+</body>
+</html>
\ No newline at end of file
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_metadataprocessing.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_metadataprocessing.xml
new file mode 100644
index 0000000..cc14b6b
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_metadataprocessing.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotation 
+	xmlns="http://org.eclipse.jsf.core/grammarAnnotationSchema"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+>
+
+  <cm-element name="MyTag">
+  	<cm-attribute name="MyBooleanAttr">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.MyBooleanType</value>
+  		</property>
+  	</cm-attribute>
+  	  	<cm-attribute name="BooleanAttr">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.BooleanType</value>
+  		</property>
+  		<property name="barks">
+  			<value>woof</value>
+  			<value>ruff</value>
+  			<value>howllllllll</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="NutherBooleanAttr">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.BooleanType</value>
+  		</property>
+  		<property name="barks">
+  			<value>WOOF</value>
+  			<value>RUFF</value>
+  			<value>HOWLLL</value>
+  		</property>
+  	</cm-attribute>  	
+  	<cm-attribute name="MyValidValsAttr">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.MyStringArrayType</value>
+  		</property>
+  		<property name="valid-values">
+  			<value>FirstVal</value>
+  			<value>SecondVal</value>
+  			<value>ThirdVal</value>
+  			<value>FourthVal</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="MyNonMetaDataEnabledAttr">
+  		<property name="valid-values">
+  			<value>FirstVal</value>
+  			<value>SecondVal</value>
+  			<value>ThirdVal</value>
+  			<value>FourthVal</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="MyNoImplMetaDataEnabledAttr">
+  	  	<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.NoImplType</value>
+  		</property>
+  		<property name="valid-values">
+  			<value>FirstVal</value>
+  			<value>SecondVal</value>
+  			<value>ThirdVal</value>
+  			<value>FourthVal</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="MyDualTypeAttr">
+  	  	<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.MyStringArrayType</value>
+  		</property>
+  		<property name="valid-values">
+  			<value>AFirstVal</value>
+  			<value>ASecondVal</value>
+  			<value>AThirdVal</value>
+  			<value>AFourthVal</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="MyLongAttr">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.MyLongType</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="MyMissingType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.WhereIsIt</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="ValidatorID">
+	  	<property name="attribute-value-runtime-type">
+			<value>org.eclipse.jst.jsf.metadataprocessors.IdentifierType</value>
+		</property>
+	  	<property name="identifier-type">
+	  		<value>javax.faces.validator</value>
+	  	</property>
+  	</cm-attribute>
+  </cm-element>
+</grammar-annotation>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_tagprocessing.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_tagprocessing.xml
new file mode 100644
index 0000000..2270a6a
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_tagprocessing.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotation 
+	xmlns="http://org.eclipse.jsf.core/grammarAnnotationSchema"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+>
+
+  <cm-element name="MyTag">
+  	<cm-attribute name="BooleanType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.BooleanType</value>
+  		</property>
+  		<property name="default-value">
+  			<value>true</value>
+  		</property>
+  	</cm-attribute>  	
+  	<cm-attribute name="StringType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.StringType</value>
+  		</property>
+  		<property name="valid-values">
+  			<value>A</value>
+  			<value>B</value>
+  			<value>C</value>
+  			<value>D</value>
+  		</property>
+  		<property name="displayed-values">
+  			<value>A FirstVal</value>
+  			<value>B SecondVal</value>
+  			<value>C ThirdVal</value>
+  			<value>D FourthVal</value>
+  		</property>  		
+  		<property name = "small-icon">
+  			<value>/icons/foo.gif</value>
+  		</property>
+  		<property name = "default-value">
+  			<value>A</value>
+  		</property>
+  	</cm-attribute> 
+  	<cm-attribute name="IntegerType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.IntegerType</value>
+  		</property>
+  		<property name="valid-minimum"><value>0</value></property>
+  		<property name="default-value"><value>10</value></property>
+  	</cm-attribute> 
+  	<cm-attribute name="LongType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.LongType</value>
+  		</property>
+	  	<property name="valid-minimum"><value>-1000</value></property>
+  		<property name="valid-maximum"><value>1000</value></property>
+  	</cm-attribute>    	
+  	<cm-attribute name="DoubleType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.DoubleType</value>
+  		</property>
+  		<property name="valid-values">
+  			<value>188.23</value>
+  			<value>245.32</value>
+  			<value>1</value>
+  		</property>
+  	</cm-attribute>    	
+  	<cm-attribute name="JavaClassType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.JavaClassType</value>
+  		</property>
+  	</cm-attribute>   
+  	<cm-attribute name="MethodBindingType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.MethodBindingType</value>
+  		</property>
+  	</cm-attribute>   
+  </cm-element>
+</grammar-annotation>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.properties b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.properties
new file mode 100644
index 0000000..7b2299c
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.properties
@@ -0,0 +1,5 @@
+NLS1=a day in the life
+NLS2=another string
+
+
+
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.xml
new file mode 100644
index 0000000..ba19d27
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotations
+	xmlns="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema" >
+	<cm-element name="validator">
+		<cm-attribute name="validatorId">
+			<property name="attr-val-content-assistant">
+				<value>com.eclipse.wtp.jsf.ui.internal.ValidatorAttrValueContentAssistant</value>
+			</property>
+			<property name="attr-val-runtime-type">
+				<value>com.eclipse.wtp.jsf.core.internal.model.datatype.Validator</value>
+			</property>
+		</cm-attribute>
+	</cm-element>
+	<cm-element name="nopropsOrAttrs">
+	</cm-element>
+	<cm-element name="noAttrs">
+		<property name="A">
+			<value>a</value>
+		</property>
+		<property name="B"> 
+			<value>b</value>
+		</property>
+	</cm-element>
+	<cm-element name="loaded">
+		<cm-attribute name="att1">
+			<property name="A1">
+				<value>a1</value>
+			</property>
+			<property name="B1">
+				<value>b1</value>
+			</property>
+		</cm-attribute>
+		<cm-attribute name="att2">
+			<property name="A2">
+				<value>a2</value>
+			</property>
+			<property name="B2">
+				<value>b2</value>
+			</property>
+		</cm-attribute>
+		<cm-attribute name="att3">
+			<property name="A3">
+				<value>a3</value>
+			</property>
+			<property name="B3">
+				<value>b3</value>
+			</property>
+			<property name="multival"> 
+				<value>1</value>
+				<value>2</value>
+				<value>3</value>
+			</property>
+		</cm-attribute>	
+		<property name="A">
+			<value>a</value>
+		</property>
+		<property name="B"> 
+			<value>b</value>
+		</property>
+		<property name="multival"> 
+			<value>1</value>
+			<value>2</value>
+			<value>3</value>
+		</property>
+	</cm-element>
+	<cm-element name="NLS">	
+		<cm-attribute name="NLS">	
+			<property name="NLS1">
+				<value>%NLS1</value>
+			</property>
+			<property name="NLS2">
+				<value>%NLS2</value>
+			</property>  
+			<property name="NLS3">
+				<value>%NLS3</value>
+			</property>  			
+			<property name="multival"> 
+				<value>%NLS1</value>
+				<value>%NLS2</value>
+			</property>		
+		</cm-attribute>	
+		<property name="NLS1">
+			<value>%NLS1</value>
+		</property>
+		<property name="NLS2">
+			<value>%NLS2</value>
+		</property>  
+		<property name="NLS3">
+			<value>%NLS3</value>
+		</property>  			
+		<property name="multival"> 
+			<value>%NLS1</value>
+			<value>%NLS2</value>
+		</property>
+		<property name="NullVal">
+			<value></value>
+		</property>					
+	</cm-element>
+</grammar-annotations>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test_en_US.properties b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test_en_US.properties
new file mode 100644
index 0000000..94c8b66
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test_en_US.properties
@@ -0,0 +1,5 @@
+NLS1=a day in the life(en_US)
+NLS2=another string(en_US)
+
+
+