Large set of changes mostly related to: [206100]  Enhancements to the WPE Property pages.   This is the first checkin.   Cleanup and other improvements to come.

   - tabbed property page changes
   - MDChanges
   - temporary translation of old sybase MD to current form
   - new AttrValueRuntimeTypes
diff --git a/jsf/tests/org.eclipse.jst.jsf.facesconfig.tests/plugin.xml b/jsf/tests/org.eclipse.jst.jsf.facesconfig.tests/plugin.xml
index 071b965..4d8a631 100644
--- a/jsf/tests/org.eclipse.jst.jsf.facesconfig.tests/plugin.xml
+++ b/jsf/tests/org.eclipse.jst.jsf.facesconfig.tests/plugin.xml
@@ -1,11 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
 <plugin>
-   <extension
-         point="org.eclipse.wst.common.tests.collector.suites">
-         <suite
-            class="org.eclipse.jst.jsf.facesconfig.tests.AllFacesConfigTests"
-            name="org.eclipse.jst.jsf.facesconfig.tests">
-         </suite>
-   </extension>
 </plugin>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/META-INF/MANIFEST.MF b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/META-INF/MANIFEST.MF
index 9ba3265..735fbae 100644
--- a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/META-INF/MANIFEST.MF
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/META-INF/MANIFEST.MF
@@ -20,12 +20,13 @@
  org.eclipse.wst.html.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.xml.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.jdt.core,
- org.eclipse.wst.common.project.facet.core,
- org.eclipse.jst.common.frameworks,
+ org.eclipse.jdt.core;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.wst.common.project.facet.core;bundle-version="[1.2.0,1.3.0)",
+ org.eclipse.jst.common.frameworks;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.jst.jsf.core.tests,
  org.eclipse.wst.validation,
- org.eclipse.jst.pagedesigner.jsf.ui
+ org.eclipse.jst.pagedesigner.jsf.ui,
+ org.eclipse.ui.views.properties.tabbed;bundle-version="[3.2.0,4.0.0)"
 Eclipse-LazyStart: true
 Export-Package: com.foobar;x-internal:=true,
  org.eclipse.jst.jsf.common.metadata.tests;x-internal:=true,
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/plugin.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/plugin.xml
index beb4a8c..49740c6 100644
--- a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/plugin.xml
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/plugin.xml
@@ -40,7 +40,18 @@
             location="/testfiles/metadata/traithelpertest.xml"
             locator="org.eclipse.jst.jsf.common.metadata.tests.MyMDLocator"
             uri="http://org.eclipse.jsf/traithelpertest"/>
+      <standardMetaDataFile
+            location="/testfiles/metadata/quickEditSectionTest.xml"
+            uri="http://org.eclipse.jsf/quickEditSectionTest"/>
+      <standardMetaDataFile
+            location="/testfiles/metadata/propertyDescriptorTest.xml"
+            uri="http://org.eclipse.jsf/propertyDescriptorTest"/>            
+            
    </extension>
+   	<extension point="org.eclipse.jst.pagedesigner.cmRegistry">
+		<registry configFile="/testfiles/metadata/sybasejsfhtml.xml"
+			uri="http://SybaseMD.test.jsfhtml" />
+	</extension>
    <extension
          point="org.eclipse.jst.jsf.core.AttributeValueRuntimeTypes">
       <attributeValueRuntimeType
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/AllTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/AllTests.java
index 9b5316b..63f6bb5 100644
--- a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/AllTests.java
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/AllTests.java
@@ -35,11 +35,19 @@
 import org.eclipse.jst.jsf.metadata.tests.metadataprocessing.AttributeValueRuntimeTypeFactoryTests;
 import org.eclipse.jst.jsf.metadata.tests.metadataprocessing.AttributeValueRuntimeTypesRegistryTests;
 import org.eclipse.jst.jsf.metadata.tests.metadataprocessing.MetaDataProcessorsFactoryTests;
+import org.eclipse.jst.jsf.metadata.tests.pagedesigner.PropertyDescriptorTests;
+import org.eclipse.jst.jsf.metadata.tests.pagedesigner.QuickEditSectionsTests;
+import org.eclipse.jst.jsf.metadata.tests.sybaseMDTranslations.SybaseCMTranslationTests;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.ActionTypeTests;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.BooleanTypeTest;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.CSSClassTypeTests;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.CSSStyleTypeTests;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.CharacterTypeTest;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.ColorTypeTest;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.ComponentBindingTypeTests;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.ComponentIDTypeTests;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.ContentTypeTest;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.CurrencyCodeTypeTest;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.DoubleTypeTest;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.EnumeratedDoubleTypeTest;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.EnumeratedIntegerTypeTest;
@@ -49,10 +57,15 @@
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.IntegerTypeTest;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.JSFHTMLTestCase;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.JavaClassTypeTest;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.LanguageCodeTypeTest;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.LengthTypeTest;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.LinkTypeTest;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.LocaleTypeTest;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.LongTypeTest;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.MethodBindingTypeTests;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.NumberPatternTypeTest;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.StringTypeTest;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.TimeZoneTypeTest;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.ValueBindingTypeTests;
 import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.ValueTypeTests;
 import org.eclipse.jst.jsf.metadata.tests.util.IJSFRuntimeRequiredV11;
@@ -96,7 +109,15 @@
 		addTestSuite(suite, AttributeValueRuntimeTypesRegistryTests.class);
 		addTestSuite(suite, AttributeValueRuntimeTypeFactoryTests.class);
 		
+		//Sybase config translation test
+		addTestSuite(suite, SybaseCMTranslationTests.class);
+		
+		//PageDesigner Metadata tests
+		addTestSuite(suite, PropertyDescriptorTests.class);
+		addTestSuite(suite, QuickEditSectionsTests.class);
+		
 //		//taglib processing
+		//Tests NOT requiring JSF Implementation
 		addTestSuite(suite, StringTypeTest.class);
 		addTestSuite(suite, BooleanTypeTest.class);
 		addTestSuite(suite, IntegerTypeTest.class);
@@ -105,6 +126,23 @@
 		addTestSuite(suite, EnumeratedLongTypeTest.class);
 		addTestSuite(suite, DoubleTypeTest.class);
 		addTestSuite(suite, EnumeratedDoubleTypeTest.class);
+		
+		addTestSuite(suite, ColorTypeTest.class);
+		addTestSuite(suite, LanguageCodeTypeTest.class);
+		addTestSuite(suite, LocaleTypeTest.class);
+		addTestSuite(suite, CurrencyCodeTypeTest.class);
+		addTestSuite(suite, TimeZoneTypeTest.class);
+		addTestSuite(suite, LengthTypeTest.class);
+		addTestSuite(suite, NumberPatternTypeTest.class);
+//		addTestSuite(suite, RelativePathTypeTest.class);
+//		addTestSuite(suite, WebPathTypeTest.class);
+		addTestSuite(suite, CharacterTypeTest.class);
+//		addTestSuite(suite, ScriptTypeTest.class);
+		addTestSuite(suite, LinkTypeTest.class);
+		addTestSuite(suite, ContentTypeTest.class);
+//		addTestSuite(suite, URITypeTest.class);
+		
+		//Tests requiring JSF Implementation
 		addTestSuite(suite, JavaClassTypeTest.class);
 		addTestSuite(suite, FacesConfigConverterIDTypeTests.class);
 		addTestSuite(suite, FacesConfigValidatorIDTypeTests.class);
@@ -114,11 +152,14 @@
 		addTestSuite(suite, ValueBindingTypeTests.class);
 		addTestSuite(suite, ValueTypeTests.class);
 		addTestSuite(suite, ActionTypeTests.class);
-		addTestSuite(suite, LengthTypeTest.class);
-		addTestSuite(suite, ColorTypeTest.class);
+		
+		addTestSuite(suite, CSSClassTypeTests.class);
+		addTestSuite(suite, CSSStyleTypeTests.class);			
 		
 		addTestSuite(suite, JSFHTMLTestCase.class);
 //		addTestSuite(suite, JSFCoreTestCase.class);
+		
+		
 		//$JUnit-END$
 		return suite;
 	}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/pagedesigner/PropertyDescriptorTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/pagedesigner/PropertyDescriptorTests.java
new file mode 100644
index 0000000..a5aae25
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/pagedesigner/PropertyDescriptorTests.java
@@ -0,0 +1,117 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle Corporation.
+ * 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:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.metadata.tests.pagedesigner;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.metadata.Model;
+import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
+import org.eclipse.jst.jsf.core.JSFVersion;
+import org.eclipse.jst.jsf.metadata.tests.util.SingleJSPTestCase;
+import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledProcessingFactory;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.properties.ITabbedPropertiesConstants;
+
+//TODO:   can use beefing up
+public class PropertyDescriptorTests extends SingleJSPTestCase {
+	
+	private static QualifiedName qn = new QualifiedName("test","model");
+	private String uri = "http://org.eclipse.jsf/propertyDescriptorTest";
+	private Model _model;
+	private int _offset = 423;
+	
+	
+	public PropertyDescriptorTests() {
+		super("/testfiles/jsps/propertyDescTests.jsp",
+			"/propertyDescTests.jsp",
+				JSFVersion.V1_1,
+			"/testfiles/web/faces-config_1_1.xml.data");
+	}
+	
+	public void setUp() throws Exception {
+		if (_model == null) {
+			super.setUp();
+			getModel();			
+		}
+	}
+	
+	private Model getModel() {
+		if (_model == null) {
+			ITaglibDomainMetaDataModelContext modelContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(null, uri);
+			_model = TaglibDomainMetaDataQueryHelper.getModel(modelContext);
+		}
+
+		return _model;
+	}
+	
+	public void testBasics(){
+		assertNotNull(getModel());
+		assertEquals(1, getModel().getChildEntities().size());
+		
+		Entity tag = TaglibDomainMetaDataQueryHelper.getEntity(getModel(), "Tag");
+		assertNotNull(tag);
+		assertTrue(tag.getChildEntities().size() == 3);
+
+		testAttr1(tag);
+		testDefaultAttr(tag);
+			
+	}
+
+
+	private void testAttr1(Entity tag){	
+		Entity attr1 = TaglibDomainMetaDataQueryHelper.getEntity(tag, "Attr1");
+		assertNotNull(attr1);
+		assertTrue(attr1.getTraits().size() > 2);
+		
+		List<IMetaDataEnabledFeature> pds = MetaDataEnabledProcessingFactory.getInstance().getAttributeValueRuntimeTypeFeatureProcessors(IPropertyPageDescriptor.class, getStructuredDocumentContext(_structuredDocument, _offset), attr1);
+		assertNotNull(pds);
+		IPropertyPageDescriptor pd = (IPropertyPageDescriptor)pds.get(0);
+		assertNotNull(pd);
+		assertEquals("CategoryName", pd.getCategory());
+		assertEquals("This is a description.", pd.getDescription());
+		assertTrue(pd.isRequired());
+		assertEquals("MyAttr1", pd.getLabel());
+		
+	}
+	
+	private void testDefaultAttr(Entity tag){	
+		Entity attr1 = TaglibDomainMetaDataQueryHelper.getEntity(tag, "DefaultAttr");
+		assertNotNull(attr1);
+		
+		List<IMetaDataEnabledFeature> pds = MetaDataEnabledProcessingFactory.getInstance().getAttributeValueRuntimeTypeFeatureProcessors(IPropertyPageDescriptor.class, getStructuredDocumentContext(_structuredDocument, _offset), attr1);
+		assertNotNull(pds);
+		IPropertyPageDescriptor pd = (IPropertyPageDescriptor)pds.get(0);
+		assertNotNull(pd);
+		assertEquals(ITabbedPropertiesConstants.OTHER_CATEGORY, pd.getCategory());
+		assertNull(pd.getDescription());
+		assertFalse(pd.isRequired());
+		assertEquals("DefaultAttr", pd.getLabel());
+		
+	}
+	
+	
+	public void testLocatePropertyPageDescForBooleanTagAttr() {
+		Entity boolAttr = TaglibDomainMetaDataQueryHelper.getEntity(getModel(), "Tag/boolAttr");
+		assertNotNull(boolAttr);
+		
+		List<IMetaDataEnabledFeature> pds = MetaDataEnabledProcessingFactory.getInstance().getAttributeValueRuntimeTypeFeatureProcessors(IPropertyPageDescriptor.class, getStructuredDocumentContext(_structuredDocument, _offset), boolAttr);
+		assertNotNull(pds);
+		IPropertyPageDescriptor pd = (IPropertyPageDescriptor)pds.get(0);
+		assertNotNull(pd);
+
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/pagedesigner/QuickEditSectionsTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/pagedesigner/QuickEditSectionsTests.java
new file mode 100644
index 0000000..83faab6
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/pagedesigner/QuickEditSectionsTests.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle Corporation.
+ * 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:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.metadata.tests.pagedesigner;
+
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.metadata.Model;
+import org.eclipse.jst.jsf.common.metadata.Trait;
+import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
+import org.eclipse.jst.jsf.core.JSFVersion;
+import org.eclipse.jst.jsf.metadata.tests.util.JSPTestCase;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo;
+
+//TODO:   can use beefing up
+public class QuickEditSectionsTests extends JSPTestCase {
+	private String _uri;
+	private ITaglibDomainMetaDataModelContext _context;
+	
+	public QuickEditSectionsTests () {
+		super(	JSFVersion.V1_1,
+				"/testfiles/web/faces-config_1_1.xml.data");
+
+	}
+	public void setUp() throws Exception{
+		super.setUp();
+	    
+		_uri = "http://org.eclipse.jsf/quickEditSectionTest";
+		_context = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(_testEnv.getTestProject(), _uri);
+	}
+	
+	public void testQuickEditTabSections(){
+		Model model = TaglibDomainMetaDataQueryHelper.getModel(_context);
+		assertNotNull(model);		
+		Entity entity = TaglibDomainMetaDataQueryHelper.getEntity(model, "A");
+		assertNotNull(entity);		
+		Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(entity , QuickEditTabSections.TRAIT_ID);
+		assertNotNull(trait);
+		assertNotNull(trait.getValue());
+		assertTrue(trait.getValue() instanceof QuickEditTabSections);
+		QuickEditTabSections sections = (QuickEditTabSections)trait.getValue();
+		assertEquals(3, sections.getSections().size());
+		
+		SectionInfo section = sections.getSections().get(0); 
+		assertEquals("attr1", section.getId());
+		assertEquals(SECTION_TYPE.ATTRIBUTE, section.getType());
+		
+		section = sections.getSections().get(1); 
+		assertEquals("attr2", section.getId());
+		assertEquals(SECTION_TYPE.ATTRIBUTE, section.getType());
+		
+		section = sections.getSections().get(2); 
+		assertEquals("section1", section.getId());
+		assertEquals(SECTION_TYPE.SECTION, section.getType());
+
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/sybaseMDTranslations/SybaseCMTranslationTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/sybaseMDTranslations/SybaseCMTranslationTests.java
new file mode 100644
index 0000000..11b152f
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/sybaseMDTranslations/SybaseCMTranslationTests.java
@@ -0,0 +1,295 @@
+package org.eclipse.jst.jsf.metadata.tests.sybaseMDTranslations;
+
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.metadata.Model;
+import org.eclipse.jst.jsf.common.metadata.Trait;
+import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper;
+import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
+import org.eclipse.jst.jsf.common.metadata.tests.AbstractBaseMetaDataTestCase;
+import org.eclipse.jst.jsf.common.metadata.traittypes.traittypes.ListOfValues;
+import org.eclipse.jst.jsf.metadata.tests.util.IJSFRuntimeRequiredV11;
+import org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledProcessingFactory;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.meta.IAttributeRuntimeValueType;
+
+
+public class SybaseCMTranslationTests extends AbstractBaseMetaDataTestCase implements IJSFRuntimeRequiredV11 {
+	private static QualifiedName qn = new QualifiedName("test","model");
+	private String uri = "http://SybaseMD.test.jsfhtml";
+	private Model _model;
+	
+	public void setUp() throws Exception {
+		if (_model == null) {
+			super.setUp();
+			getModel();			
+		}
+	}
+	
+	private Model getModel() {
+		try {
+			_model = (Model)project.getSessionProperty(qn);
+			if (_model == null) {
+				ITaglibDomainMetaDataModelContext modelContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(project, uri);
+				_model = TaglibDomainMetaDataQueryHelper.getModel(modelContext);
+				assertNotNull(_model);
+				try {
+					project.setSessionProperty(qn, _model);
+				} catch (CoreException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
+
+		} catch (CoreException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+		return _model;
+	}
+
+	public void testBasics(){
+		assertNotNull(getModel());
+		assertEquals(25, getModel().getChildEntities().size());
+		
+		testSanity(getModel());
+		testAttributeTraits(getModel());
+		testPossibleValues(getModel());
+		
+		
+	}
+
+	private void testSanity(Model model){
+		Entity form = TaglibDomainMetaDataQueryHelper.getEntity(model, "form");
+		assertNotNull(form);
+		assertTrue(form.getChildEntities().size() >= 10);
+		
+		Entity dir = TaglibDomainMetaDataQueryHelper.getEntity(form, "dir");
+		assertNotNull(dir);
+		assertTrue(dir.getTraits().size() > 2);
+		
+		Trait validValues = TaglibDomainMetaDataQueryHelper.getTrait(dir, "valid-values");
+		assertNotNull(validValues);
+		
+		Entity nullEntity = TaglibDomainMetaDataQueryHelper.getEntity(model, "commandButton/converter");//converter should be excluded
+		assertNull("commandButton/converter should not be present", nullEntity);
+	}
+	
+	private void testAttributeTraits(Model model) {		
+		if (Locale.getDefault().equals(Locale.US)) {
+			testProps(model, "message/for", "true", "For", null, null, "JSF", null);
+			testProps(model, "commandButton/action", "false", "Action", "action", null, "JSF", null);
+			testProps(model, "dataTable/frame", "false", "Frame", null, "No sides", "HTML", null);
+		}		
+	}
+	
+	public void testEnumeratedValueTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.STRING, getAttrValRuntimeType(getModel(), "selectManyCheckbox/layout"));
+		assertEquals(IAttributeRuntimeValueType.LANGUAGECODE, getAttrValRuntimeType(getModel(), "form/lang"));
+	}
+
+	public void testBooleanValueTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.BOOLEAN, getAttrValRuntimeType(getModel(), "inputText/immediate"));
+		Entity attr = TaglibDomainMetaDataQueryHelper.getEntity(getModel(), "commandButton/rendered");
+		List list = MetaDataEnabledProcessingFactory.getInstance().getAttributeValueRuntimeTypeFeatureProcessors(IPropertyPageDescriptor.class, null , attr);
+		assertNotNull(list);
+		assertTrue(list.size() > 0);
+	}
+	
+	public void testJavaClassTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.JAVACLASS, getAttrValRuntimeType(getModel(), "column/faketypeattr"));
+		Trait t = getTrait(getModel(), "column/faketypeattr", "valid-interfaces");
+		assertNotNull(t);
+		assertEquals("javax.faces.event.ActionListener", TraitValueHelper.getValueAsString(t));
+	}
+	
+	public void testClasspathResourceTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.RESOURCEBUNDLE, getAttrValRuntimeType(getModel(), "column/fakeBasename"));
+	}
+	
+	public void testColorTypeTranslation() {		
+		assertEquals(IAttributeRuntimeValueType.COLOR, getAttrValRuntimeType(getModel(), "column/fakeColor"));
+	}
+
+	public void testCSSClassTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.CSSCLASS, getAttrValRuntimeType(getModel(), "selectBooleanCheckbox/styleClass"));
+	}
+	public void testCSSIdTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.CSSID, getAttrValRuntimeType(getModel(), "column/fakecssid"));
+	}
+	public void testCSSStyleTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.CSSSTYLE, getAttrValRuntimeType(getModel(), "selectBooleanCheckbox/style"));
+	}
+	public void testCurrencyCodeTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.CURRENCYCODE, getAttrValRuntimeType(getModel(), "column/fakeCurrencyCode"));
+	}
+	public void testJavaScriptTypeTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.SCRIPT, getAttrValRuntimeType(getModel(), "commandButton/onfocus"));
+	}
+	public void testLinkTypeTranslation() {
+		// none known usages
+	}
+	public void testLocaleTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.LOCALE, getAttrValRuntimeType(getModel(), "column/fakeLocale"));
+	}
+	
+	public void testMethodBindingTypeTranslation() {
+		//validator
+		assertEquals(IAttributeRuntimeValueType.METHODBINDING, getAttrValRuntimeType(getModel(), "inputText/validator"));
+		Trait t = getTrait(getModel(), "inputText/validator", "runtime-param-types");
+		assertNotNull(t);
+		assertTrue(t.getValue() instanceof ListOfValues);
+		List vals = TraitValueHelper.getValueAsListOfStrings(t);
+		assertEquals(3, vals.size());
+		assertEquals("java.lang.Object", vals.get(2));
+		
+		t = getTrait(getModel(), "inputText/validator", "runtime-return-type");
+		assertNotNull(t);
+		assertEquals("void", TraitValueHelper.getValueAsString(t));
+		
+		//actionListener
+		assertEquals(IAttributeRuntimeValueType.METHODBINDING, getAttrValRuntimeType(getModel(), "commandButton/actionListener"));
+		t = getTrait(getModel(), "commandButton/actionListener", "runtime-param-types");
+		assertNotNull(t);
+		assertEquals("javax.faces.event.ActionEvent", TraitValueHelper.getValueAsString(t));
+		
+		assertEquals(IAttributeRuntimeValueType.METHODBINDING, getAttrValRuntimeType(getModel(), "inputText/valueChangeListener"));
+		t = getTrait(getModel(), "inputText/valueChangeListener", "runtime-param-types");
+		assertNotNull(t);
+		assertEquals("javax.faces.event.ValueChangeEvent", TraitValueHelper.getValueAsString(t));
+	}
+	
+	public void testMultiChoiceTypeTypeTranslation() {
+		//i believe that this is a comma-delim enumerated type... noop for now
+		assertEquals(IAttributeRuntimeValueType.STRING, getAttrValRuntimeType(getModel(), "column/fakeMultiChoice"));
+	}
+	public void testNamedBooleanTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.BOOLEAN, getAttrValRuntimeType(getModel(), "graphicImage/ismap"));
+	}
+	
+	public void testPropertyBindingTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.VALUEBINDING, getAttrValRuntimeType(getModel(), "message/binding"));
+	}
+	
+	public void testRelativePathValueTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.RELATIVEPATH, getAttrValRuntimeType(getModel(), "outputLink/value"));
+	}
+	
+	public void testTimeZoneTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.TIMEZONE, getAttrValRuntimeType(getModel(), "column/fakeTimeZone"));
+	}
+	
+	public void testJavaScriptTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.SCRIPT, getAttrValRuntimeType(getModel(), "commandButton/onclick"));
+	}
+	public void testWebPathTypeTranslation() {
+		assertEquals(IAttributeRuntimeValueType.WEBPATH, getAttrValRuntimeType(getModel(), "graphicImage/value"));
+		Trait trait = getTrait(getModel(), "graphicImage/value", "file-extensions");
+		assertNotNull(trait);
+		assertEquals(3, TraitValueHelper.getValueAsListOfStrings(trait).size());
+	}
+
+	private Trait getTrait(Model model, String entityKey, String traitKey) {
+		Entity attrEntity = TaglibDomainMetaDataQueryHelper.getEntity(model, entityKey);
+		assertNotNull(attrEntity);
+
+		return TaglibDomainMetaDataQueryHelper.getTrait(attrEntity, traitKey);
+	}
+	
+	private String getAttrValRuntimeType(Model model, String entityKey) {
+		Trait t = getTrait(model, entityKey, MetaDataEnabledProcessingFactory.ATTRIBUTE_VALUE_RUNTIME_TYPE_PROP_NAME);
+		assertNotNull(t);
+		return TraitValueHelper.getValueAsString(t);
+	}
+	
+	private void testProps(Model model, String entityKey, String requiredVal, String displayLabel, String description, String defaultValue, String cateagoryValue, String typeParam) {
+		Entity attrEntity = TaglibDomainMetaDataQueryHelper.getEntity(model, entityKey);
+		assertNotNull(attrEntity);
+		assertTrue(attrEntity.getChildEntities().size() == 0);
+		
+		//required
+		Trait t = TaglibDomainMetaDataQueryHelper.getTrait(attrEntity, "required");
+		if (requiredVal != null){
+			assertNotNull(t);
+			assertEquals(requiredVal, TraitValueHelper.getValueAsString(t));
+		}
+		else
+			assertNull(t);
+		
+		//display-label
+		t = TaglibDomainMetaDataQueryHelper.getTrait(attrEntity, "display-label");
+		if (displayLabel != null){
+			assertNotNull(t);
+			assertEquals(displayLabel, TraitValueHelper.getValueAsString(t));
+		}
+		else
+			assertNull(t);
+		
+		//description
+		t = TaglibDomainMetaDataQueryHelper.getTrait(attrEntity, "description");
+		if (description != null){
+			assertNotNull(t);
+			assertEquals(description, TraitValueHelper.getValueAsString(t));
+		}
+		else
+			assertNull(t);
+		
+		//description
+		t = TaglibDomainMetaDataQueryHelper.getTrait(attrEntity, "default-value");
+		if (defaultValue != null){
+			assertNotNull(t);
+			assertEquals(defaultValue, TraitValueHelper.getValueAsString(t));
+		}
+		else
+			assertNull(t);
+		
+		//category
+		t = TaglibDomainMetaDataQueryHelper.getTrait(attrEntity, IPropertyPageDescriptor.PROP_DESC_CATEGORY);
+		if (cateagoryValue != null){
+			assertNotNull(t);
+			assertEquals(cateagoryValue, TraitValueHelper.getValueAsString(t));
+		}
+		else
+			assertNull(t);
+		
+		//type-param
+		t = TaglibDomainMetaDataQueryHelper.getTrait(attrEntity, "type-param");
+		if (typeParam != null){
+			assertNotNull(t);
+			assertEquals(typeParam, TraitValueHelper.getValueAsString(t));
+		}
+		else
+			assertNull(t);
+		
+	}
+	
+	private void testPossibleValues(Model model){
+		//form/dir
+		List pvsList = MetaDataEnabledProcessingFactory.getInstance().getAttributeValueRuntimeTypeFeatureProcessors(IPossibleValues.class, null, uri, "form", "dir");
+		assertNotNull(pvsList);
+		assertEquals(1, pvsList.size());
+		assertTrue(pvsList.get(0) instanceof IPossibleValues);
+		IPossibleValues pvs = (IPossibleValues)pvsList.get(0);
+		assertEquals(2, pvs.getPossibleValues().size());
+		
+		//form/lang
+		pvsList = MetaDataEnabledProcessingFactory.getInstance().getAttributeValueRuntimeTypeFeatureProcessors(IPossibleValues.class, null, uri, "form", "lang");
+		assertNotNull(pvsList);
+		assertEquals(1, pvsList.size());
+		assertTrue(pvsList.get(0) instanceof IPossibleValues);
+		pvs = (IPossibleValues)pvsList.get(0);
+		assertEquals(58, pvs.getPossibleValues().size());
+	}
+	
+	private List getProcessorAdapters(Class featureClass, String tag, String attrName) {
+		return MetaDataEnabledProcessingFactory.getInstance().
+			getAttributeValueRuntimeTypeFeatureProcessors(featureClass, docContext, 
+					uri, tag , attrName);
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/AllTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/AllTests.java
index ad426c2..ff153f0 100644
--- a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/AllTests.java
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/AllTests.java
@@ -39,15 +39,22 @@
 		addTestSuite(suite, DoubleTypeTest.class);
 		addTestSuite(suite, EnumeratedDoubleTypeTest.class);
 		
+		addTestSuite(suite, ColorTypeTest.class);
+		addTestSuite(suite, LanguageCodeTypeTest.class);
+		addTestSuite(suite, LocaleTypeTest.class);
+		addTestSuite(suite, CurrencyCodeTypeTest.class);
+		addTestSuite(suite, TimeZoneTypeTest.class);
+		addTestSuite(suite, LengthTypeTest.class);
+		addTestSuite(suite, NumberPatternTypeTest.class);
+//		addTestSuite(suite, RelativePathTypeTest.class);
+//		addTestSuite(suite, WebPathTypeTest.class);
+		addTestSuite(suite, CharacterTypeTest.class);
+//		addTestSuite(suite, ScriptTypeTest.class);
+		addTestSuite(suite, LinkTypeTest.class);
+		addTestSuite(suite, ContentTypeTest.class);
+//		addTestSuite(suite, URITypeTest.class);
+		
 		//Tests requiring JSF Implementation
-		addTestSuite(suite, StringTypeTest.class);
-		addTestSuite(suite, BooleanTypeTest.class);
-		addTestSuite(suite, IntegerTypeTest.class);
-		addTestSuite(suite, EnumeratedIntegerTypeTest.class);
-		addTestSuite(suite, LongTypeTest.class);
-		addTestSuite(suite, EnumeratedLongTypeTest.class);
-		addTestSuite(suite, DoubleTypeTest.class);
-		addTestSuite(suite, EnumeratedDoubleTypeTest.class);
 		addTestSuite(suite, JavaClassTypeTest.class);
 		addTestSuite(suite, FacesConfigConverterIDTypeTests.class);
 		addTestSuite(suite, FacesConfigValidatorIDTypeTests.class);
@@ -58,6 +65,9 @@
 		addTestSuite(suite, ValueTypeTests.class);
 		addTestSuite(suite, ActionTypeTests.class);
 		
+		addTestSuite(suite, CSSClassTypeTests.class);
+		addTestSuite(suite, CSSStyleTypeTests.class);			
+		
 		addTestSuite(suite,JSFHTMLTestCase.class);
 		
 		//$JUnit-END$
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CSSClassTypeTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CSSClassTypeTests.java
new file mode 100644
index 0000000..48dba3e
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CSSClassTypeTests.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle 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:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import org.eclipse.jst.jsf.core.JSFVersion;
+import org.eclipse.jst.jsf.metadata.tests.util.SingleJSPTestCase;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+
+public class CSSClassTypeTests extends SingleJSPTestCase {
+	private final String tagName = "commandButton";
+	private final String attrName = "class";
+	
+	public CSSClassTypeTests(){
+		super(	"/testfiles/jsps/cssTypesTest.jsp.data/", 
+				"/cssTypesTest.jsp", 
+				JSFVersion.V1_1,
+				"/testfiles/web/faces-config_1_1.xml.data");
+	}
+
+	public void testGetPossibleValues() {
+		IPossibleValues pv = (IPossibleValues)getProcessor(IPossibleValues.class, JSF_HTML_URI, tagName, attrName);		
+		assertNotNull(pv);		
+			
+		//TODO: fill me in
+	}
+
+	public void testIsValidValue() {
+		IValidValues vv = (IValidValues)getProcessor(IValidValues.class, JSF_HTML_URI, tagName, attrName);		
+		assertNull(vv); 		
+
+	}
+	
+
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CSSStyleTypeTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CSSStyleTypeTests.java
new file mode 100644
index 0000000..3458269
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CSSStyleTypeTests.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle 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:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import org.eclipse.jst.jsf.core.JSFVersion;
+import org.eclipse.jst.jsf.metadata.tests.util.SingleJSPTestCase;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+
+public class CSSStyleTypeTests extends SingleJSPTestCase {
+	private final String tagName = "commandButton";
+	private final String attrName = "class";
+	
+	public CSSStyleTypeTests(){
+		super(	"/testfiles/jsps/cssTypesTest.jsp.data/", 
+				"/cssTypesTest.jsp", 
+				JSFVersion.V1_1,
+				"/testfiles/web/faces-config_1_1.xml.data");
+	}
+
+	public void testGetPossibleValues() {
+		IPossibleValues pv = (IPossibleValues)getProcessor(IPossibleValues.class, JSF_HTML_URI, tagName, attrName);		
+		assertNotNull(pv);		
+			
+//		TODO: fill me in
+	}
+
+	public void testIsValidValue() {
+		IValidValues vv = (IValidValues)getProcessor(IValidValues.class, JSF_HTML_URI, tagName, attrName);		
+		assertNull(vv); 		
+
+		
+	}
+	
+
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CharacterTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CharacterTypeTest.java
new file mode 100644
index 0000000..d67c58e
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CharacterTypeTest.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle Corporation.
+ * 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:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+
+public class CharacterTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues() {
+		Assert.assertNotNull(possibleValueAdapters);
+		Assert.assertTrue(possibleValueAdapters.isEmpty());
+
+	}
+
+	public void testValidValuesValues() {
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+
+		IValidValues pvs = (IValidValues) validValuesAdapters.get(0);
+		Assert.assertTrue(pvs.isValidValue("a"));
+		
+		
+		//negative 
+		Assert.assertFalse(pvs.isValidValue("ab"));
+		pvs.getValidationMessages().clear();
+		Assert.assertFalse(pvs.isValidValue("_a"));
+		pvs.getValidationMessages().clear();
+		Assert.assertFalse(pvs.isValidValue(""));
+		pvs.getValidationMessages().clear();
+		Assert.assertFalse(pvs.isValidValue(" a "));
+		pvs.getValidationMessages().clear();
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/ComponentIDTypeTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/ComponentIDTypeTests.java
index d49a87f..845e827 100644
--- a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/ComponentIDTypeTests.java
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/ComponentIDTypeTests.java
@@ -11,6 +11,8 @@
  
 package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
 
+import junit.framework.Assert;
+
 import org.eclipse.jst.jsf.core.JSFVersion;
 import org.eclipse.jst.jsf.metadata.tests.util.SingleJSPTestCase;
 import org.eclipse.jst.jsf.metadataprocessors.features.ELIsNotValidException;
@@ -19,7 +21,8 @@
 import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
 
 public class ComponentIDTypeTests extends SingleJSPTestCase {
-	private final String tagName = "inputText";
+	
+	private final String tagName = "commandButton";
 	private final String attrName = "id";
 	
 	public ComponentIDTypeTests() {
@@ -55,12 +58,46 @@
 	public void testIsValidValue() {
 		IValidValues vv = (IValidValues)getProcessor(IValidValues.class, JSF_HTML_URI, tagName, attrName);		
 		assertNotNull(vv);
-		
-		assertTrue(vv.isValidValue("every non zero length string is valid!"));
-		assertNotNull(vv.getValidationMessages());
-		assertEquals(0, vv.getValidationMessages().size());
-		assertFalse(vv.isValidValue(""));
+//		
+//		assertTrue(vv.isValidValue("every non zero length string is valid!"));
+//		assertNotNull(vv.getValidationMessages());
+//		assertEquals(0, vv.getValidationMessages().size());
+//		assertFalse(vv.isValidValue(""));
 
+		//positive tests
+		Assert.assertTrue(vv.isValidValue("A"));
+		Assert.assertTrue(vv.isValidValue("Aa"));
+		Assert.assertTrue(vv.isValidValue("z.abc"));
+		Assert.assertTrue(vv.isValidValue("A1"));
+		Assert.assertTrue(vv.isValidValue("A-1"));
+		Assert.assertTrue(vv.isValidValue("A_a"));
+		Assert.assertTrue(vv.isValidValue("A:a"));
+		Assert.assertTrue(vv.isValidValue("A_"));
+		Assert.assertTrue(vv.isValidValue("a."));
+		Assert.assertTrue(vv.isValidValue("Aa."));		
+		Assert.assertTrue(vv.isValidValue("_Aa"));	
+		
+		//negative tests
+		Assert.assertFalse(vv.isValidValue("  "));	
+		vv.getValidationMessages().clear();
+		
+		//will fail when we have proper regex validation
+//		Assert.assertFalse(vv.isValidValue("1Aa"));	
+//		vv.getValidationMessages().clear();
+//		Assert.assertFalse(vv.isValidValue(":Aa"));	
+//		vv.getValidationMessages().clear();
+//		Assert.assertFalse(vv.isValidValue("-Aa"));	
+//		vv.getValidationMessages().clear();
+//		Assert.assertFalse(vv.isValidValue(".Aa"));	
+//		vv.getValidationMessages().clear();	
+		
+		// FIXME the below is currently failing and is commented out.   
+//		Assert.assertFalse(vv.isValidValue("A$!a"));
+//		vv.getValidationMessages().clear();
+//		Assert.assertFalse(vv.isValidValue("A:!a"));					
+//		vv.getValidationMessages().clear();
+//		Assert.assertFalse(vv.isValidValue("A(a"));	
+//		vv.getValidationMessages().clear();
 	}
 
 }
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/ContentTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/ContentTypeTest.java
new file mode 100644
index 0000000..0ff164b
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/ContentTypeTest.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle Corporation.
+ * 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:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+
+public class ContentTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues() {
+		Assert.assertNotNull(possibleValueAdapters);
+		Assert.assertFalse(possibleValueAdapters.isEmpty());
+
+		IPossibleValues pvs = (IPossibleValues) possibleValueAdapters.get(0);
+		Assert.assertTrue(pvs.getPossibleValues().size() >= 8);
+	}
+
+	public void testValidValuesValues() {
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+		
+		IValidValues pvs = (IValidValues) validValuesAdapters.get(0);
+		Assert.assertTrue(pvs.isValidValue("a"));
+		Assert.assertTrue(pvs.isValidValue("foo_bar"));
+		
+		//negative
+		Assert.assertFalse(pvs.isValidValue(""));
+		pvs.getValidationMessages().clear();
+		Assert.assertFalse(pvs.isValidValue("          "));
+		pvs.getValidationMessages().clear();
+		Assert.assertFalse(pvs.isValidValue(null));
+		pvs.getValidationMessages().clear();
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CurrencyCodeTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CurrencyCodeTypeTest.java
new file mode 100644
index 0000000..26baad8
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/CurrencyCodeTypeTest.java
@@ -0,0 +1,41 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+
+/**
+ * 
+ *
+ */
+public class CurrencyCodeTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues(){		
+		Assert.assertNotNull(possibleValueAdapters);
+		IPossibleValues pvs = (IPossibleValues)possibleValueAdapters.get(0);
+		Assert.assertEquals(173, pvs.getPossibleValues().size());
+	}
+	
+	public void testValidValues(){		
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+		
+		IValidValues vv =(IValidValues)validValuesAdapters.get(0);
+		//positive tests
+		assertTrue(vv.isValidValue("USD"));
+		assertTrue(vv.isValidValue("AOA"));
+		//negative tests
+		vv.getValidationMessages().clear();
+		assertFalse(vv.isValidValue("XXX"));	
+	}
+	
+	public void testPropertyPageDescriptor(){		
+		Assert.assertNotNull(propertyPageDescriptorAdapters);
+		Assert.assertFalse(propertyPageDescriptorAdapters.isEmpty());
+		
+		IPropertyPageDescriptor ppd =(IPropertyPageDescriptor)propertyPageDescriptorAdapters.get(0);
+		assertEquals(false, ppd.isRequired());
+
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LanguageCodeTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LanguageCodeTypeTest.java
new file mode 100644
index 0000000..727f4f3
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LanguageCodeTypeTest.java
@@ -0,0 +1,38 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+
+public class LanguageCodeTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues(){		
+		Assert.assertNotNull(possibleValueAdapters);
+		IPossibleValues pvs = (IPossibleValues)possibleValueAdapters.get(0);
+		Assert.assertEquals(58, pvs.getPossibleValues().size());
+	}
+	
+	public void testValidValues(){		
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+		
+		IValidValues vv =(IValidValues)validValuesAdapters.get(0);
+		//positive tests
+		assertTrue(vv.isValidValue("en"));
+		//negative tests
+		vv.getValidationMessages().clear();
+		assertFalse(vv.isValidValue("xxx"));	
+	}
+	
+	public void testPropertyPageDescriptor(){		
+		Assert.assertNotNull(propertyPageDescriptorAdapters);
+		Assert.assertFalse(propertyPageDescriptorAdapters.isEmpty());
+		
+		IPropertyPageDescriptor ppd =(IPropertyPageDescriptor)propertyPageDescriptorAdapters.get(0);
+		//positive tests
+		assertEquals("ACategory", ppd.getCategory());
+		assertEquals(false, ppd.isRequired());
+
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LinkTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LinkTypeTest.java
new file mode 100644
index 0000000..e17a3bb
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LinkTypeTest.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle Corporation.
+ * 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:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+
+public class LinkTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues() {
+		Assert.assertNotNull(possibleValueAdapters);
+		Assert.assertFalse(possibleValueAdapters.isEmpty());
+
+		IPossibleValues pvs = (IPossibleValues) possibleValueAdapters.get(0);
+		Assert.assertTrue(pvs.getPossibleValues().size() >= 8);
+	}
+
+	public void testValidValuesValues() {
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+		
+		IValidValues pvs = (IValidValues) validValuesAdapters.get(0);
+		Assert.assertTrue(pvs.isValidValue("a"));
+		Assert.assertTrue(pvs.isValidValue("Chapter"));
+		
+		//negative
+		Assert.assertFalse(pvs.isValidValue(""));
+		pvs.getValidationMessages().clear();
+		Assert.assertFalse(pvs.isValidValue("          "));
+		pvs.getValidationMessages().clear();
+		Assert.assertFalse(pvs.isValidValue(null));
+		pvs.getValidationMessages().clear();
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LocaleTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LocaleTypeTest.java
new file mode 100644
index 0000000..c01711f
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LocaleTypeTest.java
@@ -0,0 +1,38 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+
+public class LocaleTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues(){		
+		Assert.assertNotNull(possibleValueAdapters);
+		IPossibleValues pvs = (IPossibleValues)possibleValueAdapters.get(0);
+		Assert.assertEquals(135, pvs.getPossibleValues().size());
+	}
+	
+	public void testValidValues(){		
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+		
+		IValidValues vv =(IValidValues)validValuesAdapters.get(0);
+		//positive tests
+		assertTrue(vv.isValidValue("en"));
+		//negative tests
+		vv.getValidationMessages().clear();
+		assertFalse(vv.isValidValue("xxx"));	
+	}
+	
+	public void testPropertyPageDescriptor(){		
+		Assert.assertNotNull(propertyPageDescriptorAdapters);
+		Assert.assertFalse(propertyPageDescriptorAdapters.isEmpty());
+		
+		IPropertyPageDescriptor ppd =(IPropertyPageDescriptor)propertyPageDescriptorAdapters.get(0);
+		//positive tests
+		assertEquals("ACategory", ppd.getCategory());
+		assertEquals(false, ppd.isRequired());
+
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/NumberPatternTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/NumberPatternTypeTest.java
new file mode 100644
index 0000000..5e852a9
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/NumberPatternTypeTest.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle Corporation.
+ * 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:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+
+public class NumberPatternTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues() {
+		Assert.assertNotNull(possibleValueAdapters);
+		Assert.assertFalse(possibleValueAdapters.isEmpty());
+
+		IPossibleValues pvs = (IPossibleValues) possibleValueAdapters.get(0);
+		Assert.assertTrue(pvs.getPossibleValues().size() >= 8);
+	}
+
+	public void testValidValuesValues() {
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertTrue(validValuesAdapters.isEmpty());
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/TaglibProcessingTestCase.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/TaglibProcessingTestCase.java
index c64d60a..7bde25d 100644
--- a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/TaglibProcessingTestCase.java
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/TaglibProcessingTestCase.java
@@ -15,12 +15,14 @@
 
 import org.eclipse.jst.jsf.common.metadata.tests.AbstractBaseMetaDataTestCase;
 import org.eclipse.jst.jsf.metadata.tests.MetadataTestsPlugin;
+import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
 import org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledProcessingFactory;
 import org.eclipse.jst.jsf.metadataprocessors.features.ICreateValues;
 import org.eclipse.jst.jsf.metadataprocessors.features.IDefaultValue;
 import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
 import org.eclipse.jst.jsf.metadataprocessors.features.IValidELValues;
 import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
 
 public abstract class TaglibProcessingTestCase extends AbstractBaseMetaDataTestCase {
 //	protected IStructuredDocumentContext docContext;
@@ -35,6 +37,7 @@
 	protected List<?> defaultValueAdapters;
 	protected List<?> createValuesAdapters;
 	protected List<?> validELValuesAdapters;
+	protected List<?> propertyPageDescriptorAdapters;
 	
 	public void setUp() throws Exception{
 		super.setUp();
@@ -44,6 +47,7 @@
 		defaultValueAdapters = getProcessorAdapters(IDefaultValue.class);
 		createValuesAdapters = getProcessorAdapters(ICreateValues.class);
 		validELValuesAdapters = getProcessorAdapters(IValidELValues.class);
+		propertyPageDescriptorAdapters = getProcessorAdapters(IPropertyPageDescriptor.class);
 	}
 
 	private String getAttributeNameFromTest(){
@@ -55,7 +59,7 @@
         return attributeName;
 	}
 	
-	protected List<?> getProcessorAdapters(Class<?> featureClass) {
+	protected List<? extends IMetaDataEnabledFeature> getProcessorAdapters(Class<?> featureClass) {
 		return MetaDataEnabledProcessingFactory.getInstance().
 			getAttributeValueRuntimeTypeFeatureProcessors(featureClass, docContext, 
 					uri, tag , getAttributeNameFromTest());
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/TimeZoneTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/TimeZoneTypeTest.java
new file mode 100644
index 0000000..18afcb1
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/TimeZoneTypeTest.java
@@ -0,0 +1,27 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+
+public class TimeZoneTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues(){		
+		Assert.assertNotNull(possibleValueAdapters);
+		IPossibleValues pvs = (IPossibleValues)possibleValueAdapters.get(0);
+		Assert.assertEquals(585, pvs.getPossibleValues().size());
+	}
+	
+	public void testValidValues(){		
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+		
+		IValidValues vv =(IValidValues)validValuesAdapters.get(0);
+		//positive tests
+		assertTrue(vv.isValidValue("America/Edmonton"));
+		//negative tests
+		vv.getValidationMessages().clear();
+		assertFalse(vv.isValidValue("xxx"));	
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/cssTypesTest.html b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/cssTypesTest.html
new file mode 100644
index 0000000..76e48b9
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/cssTypesTest.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel="stylesheet" href="mystyle.css">
+<link rel="stylesheet" href="foo.css">
+<style type="text/css">
+  body {
+    color: purple;
+    background-color: red; }
+ </style>
+<title>Insert title here</title>
+</head>
+<body class="" style="">
+	<b style="color: green;">Hello</b>
+	<a id="a" class="" style="color: HoneyDew " href="Foo" /></output>
+</body>
+</html>
\ No newline at end of file
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/cssTypesTest.jsp.data b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/cssTypesTest.jsp.data
new file mode 100644
index 0000000..f2daed8
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/cssTypesTest.jsp.data
@@ -0,0 +1,14 @@
+<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%><%@taglib

+	uri="http://java.sun.com/jsf/html" prefix="h"%><%@ page language="java" contentType="text/html; charset=ISO-8859-1"

+    pageEncoding="ISO-8859-1"%>

+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

+<html>

+<head>

+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

+<link rel="stylesheet" href="mystyle.css">

+<title>Insert title here</title>

+</head>

+<body>

+	<input id="a" class=""/>

+</body>

+</html>
\ No newline at end of file
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/foo.css b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/foo.css
new file mode 100644
index 0000000..890fcd0
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/foo.css
@@ -0,0 +1,157 @@
+BODY, P, LI, UL, OL {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 97%;
+	color:#000000;
+	list-style-position: outside;
+}
+
+A:link {
+	font-family: Arial, Helvetica, sans-serif;
+	color:#663300;
+	
+}
+
+A:active {
+	font-family: Arial, Helvetica, sans-serif;
+	color:#ff6600;
+	
+}
+
+A:visited {
+	font-family: Arial, Helvetica, sans-serif;
+	color:#996633;
+	
+}
+
+A.navigation:link
+{
+	font-family: Arial, Helvetica, sans-serif;
+	font-size:65%; 
+	color:#996633;
+}
+
+A.navigation:active
+{
+	font-family: Arial, Helvetica, sans-serif;
+	font-size:65%; 
+	color:#996633;
+}
+
+A.navigation:visited
+{
+	font-family: Arial, Helvetica, sans-serif;
+	font-size:65%; 
+	color:#996633;
+}
+
+p.listpara
+{text-indent: 15%}
+
+H1 {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size:170%;
+	color:#336699;
+	border : solid #CCCC99;
+	width : 100%;
+	border-width : 0px 0px 2px 0px; 
+}
+
+H2 {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size:130%;
+	color:#336699;
+	border : solid #cccc99;
+	border-width : 0px 0px 2px 0px;
+	width : 100%;
+}
+
+H3 {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size:110%;
+	color:#336699;
+	width : 100%; 
+}
+
+H4 {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size:92%;
+	color:#000000;
+      font-weight: bold;
+	width : 100%;
+}
+
+.code_no_color {
+        color : #000000;
+	font-family : "Courier New", "Courier", "monospace";
+}
+
+code {  
+	color : #336699;
+	font-family : "Courier New", "Courier", "monospace";
+}
+
+P.indent {
+	text-indent: 9%;
+}
+
+table.borders {
+	border : 1% solid #BDB76B;
+}
+
+TR {
+	text-align : left;
+	vertical-align : top;
+}
+
+TH {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 11pt;
+	color:#000000;
+	font-weight: bold;
+}
+
+TD {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 11pt%;
+	color:#000000;
+}
+
+.smalltext {
+	font-size:80%;
+}
+
+p.note { 
+    display: block; 
+    font-family: Arial, Helvetica, Geneva, sans-serif; 
+    font-size: 95%;
+}
+
+p.warning { 
+    display: block;
+    font-family: Arial, Helvetica, Geneva, sans-serif; 
+    font-size: 95%;
+}
+
+pre { 
+    font-family: "Courier New", Courier, mono; 
+    font-size: 92%;
+    text-indent : 15%;
+}
+
+.GUITag {
+    font-family: Arial, Helvetica, Geneva, sans-serif; 
+    font-size: 95%; 
+    font-weight: bold; 
+    font-style: normal;
+}
+
+.PropertyName {
+    font-family: "Courier New", Courier, mono; 
+    font-style: normal;
+}
+
+.GlossaryItem { 
+    color : #008080; 
+    font-family: Arial, Helvetica, sans-serif;
+    font-size : 95%;
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/mystyle.css b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/mystyle.css
new file mode 100644
index 0000000..97b7c22
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/mystyle.css
@@ -0,0 +1,31 @@
+body {
+  padding-left: 11em;
+  font-family: Georgia, "Times New Roman",
+        Times, serif;
+}
+ul.navbar {
+  list-style-type: none;
+  padding: 0;
+  margin: 0;
+  position: absolute;
+  top: 2em;
+  left: 1em;
+  width: 9em }
+h1 {
+  font-family: Helvetica, Geneva, Arial,
+        SunSans-Regular, sans-serif }
+ul.navbar li {
+  background: white;
+  margin: 0.5em 0;
+  padding: 0.3em;
+  border-right: 1em solid black }
+ul.navbar a {
+  text-decoration: none }
+a:link {
+  color: blue }
+a:visited {
+  color: purple }
+address {
+  margin-top: 1em;
+  padding-top: 1em;
+  border-top: thin dotted }
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/propertyDescTests.jsp b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/propertyDescTests.jsp
new file mode 100644
index 0000000..2da57b6
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/jsps/propertyDescTests.jsp
@@ -0,0 +1,13 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+ <%@ taglib prefix="x" uri="http://org.eclipse.jsf/propertyDescriptorTest" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Insert title here</title>
+</head>
+<body>
+	<x:Tag Attr1="y" boolAttr="true" DeafultAttr="x"/>
+</body>
+</html>
\ No newline at end of file
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
index 0d0088f..390c16e 100644
--- 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
@@ -166,5 +166,86 @@
   		</trait>
   		<trait id="default-value"><value>Black</value></trait>
   	</entity>    
+  	<entity id="LanguageCodeType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.LanguageCodeType</value>
+  		</trait>
+  		<trait id="category">
+  			<value>ACategory</value>
+  		</trait>
+  	</entity>   
+  	<entity id="LocaleType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.LocaleType</value>
+  		</trait>
+  		<trait id="category">
+  			<value>ACategory</value>
+  		</trait>
+  	</entity> 
+  	<entity id="CurrencyCodeType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.CurrencyCodeType</value>
+  		</trait>
+  	</entity>
+  	<entity id="TimeZoneType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.TimeZoneType</value>
+  		</trait>
+  	</entity>   
+  	<entity id="RelativePathType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.RelativePathType</value>
+  		</trait>
+  	</entity>
+  	<entity id="WebPathType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.WebPathType</value>
+  		</trait>
+  	</entity>     	   		
+  	<entity id="JavaScriptType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.JavaScriptType</value>
+  		</trait>
+  	</entity> 
+  	<entity id="CSSClassType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.pagedesigner.attributevalues.CSSClassType</value>
+  		</trait>
+  	</entity> 
+  	<entity id="CSSStyleType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.pagedesigner.attributevalues.CSSStyleType</value>
+  		</trait>
+  	</entity> 
+  	<entity id="ComponentIDType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.ComponentIDType</value>
+  		</trait>
+  	</entity>
+  	<entity id="CharacterType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.CharacterType</value>
+  		</trait>
+  	</entity> 
+  	<entity id="ScriptType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+  		</trait>
+  	</entity>    	 
+  	<entity id="LinkType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.LinkType</value>
+  		</trait>
+  	</entity>     
+  	<entity id="ContentType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.ContentType</value>
+  		</trait>
+  	</entity>     	
+  	<entity id="NumberPatternType">
+  		<trait id="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.core.attributevalues.NumberPatternType</value>
+  		</trait>
+  	</entity>    
   </entity>
  </md:metadatamodel>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/propertyDescriptorTest.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/propertyDescriptorTest.xml
new file mode 100644
index 0000000..cb87f4a
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/propertyDescriptorTest.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadatamodel 
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" 
+	xmlns:mdt="http://org.eclipse.jst.jsf.common.metadata/metadataTraitTypes.ecore"  
+	xmlns:qe="http://org.eclipse.jsf.pagedesigner/QuickEditTabSections.ecore"
+	id="http://org.eclipse.jsf/propertyDescriptorTest"
+	type="tagFile">
+	
+	<entity id="Tag">
+		<entity id="Attr1">
+	 		<trait id="attribute-value-runtime-type">
+	  			<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+	  		</trait>
+	  		<trait id="valid-values">
+	  			<value xsi:type="mdt:ListOfValues">
+		  			<item>A</item>
+		  			<item>B</item>
+		  			<item>C</item>
+	  				<item>D</item>
+	  			</value>
+	  		</trait>
+	  		<trait id="displayed-values">
+	  			<value xsi:type="mdt:ListOfValues">
+		  			<item>A FirstVal</item>
+		  			<item>B SecondVal</item>
+		  			<item>C ThirdVal</item>
+		  			<item>D FourthVal</item>
+	  			</value>
+	  		</trait>  	
+	  		<trait id="display-label">
+	  			<value>MyAttr1</value>
+	  		</trait>	
+	  		<trait id="description">
+	  			<value>This is a description.</value>
+	  		</trait>
+	  		<trait id="category">
+	  			<value>CategoryName</value>
+	  		</trait>
+	  		<trait id="small-icon">
+	  			<value>/testfiles/icons/attr_val.gif</value>
+	  		</trait>
+	  		<trait id="default-value">
+	  			<value>A</value>
+	  		</trait>
+	  		<trait id="required">
+	  			<value>true</value>
+	  		</trait>
+		</entity>
+		<entity id="DefaultAttr">
+			<trait id="attribute-value-runtime-type">
+	  			<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+	  		</trait>
+	  		<trait id="cell-editor">
+	  			<value>org.eclipse.jface.viewers.TextCellEditor</value>
+	  		</trait>
+		</entity>
+		<entity id="boolAttr">
+			<trait id="attribute-value-runtime-type">
+	  			<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+	  		</trait>
+		</entity>
+	</entity>
+</metadatamodel>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/quickEditSectionTest.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/quickEditSectionTest.xml
new file mode 100644
index 0000000..9567ffd
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/quickEditSectionTest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadatamodel 
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" 
+	xmlns:mdt="http://org.eclipse.jst.jsf.common.metadata/metadataTraitTypes.ecore"  
+	xmlns:qe="http://org.eclipse.jsf.pagedesigner/QuickEditTabSections.ecore"
+	id="http://org.eclipse.jsf/quickEditSectionTest"
+	type="tagFile">
+	
+	<entity id="A">
+		<entity id="attr1"/>
+		<entity id="attr2"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections"> 
+				<section id="attr1" type="ATTRIBUTE" />
+				<section id="attr2"/> <!-- ATTRIBUTE type is default -->
+				<section id="section1" type="SECTION"/>
+			</value>
+		</trait>
+	</entity>
+</metadatamodel>
\ No newline at end of file
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/sybasejsfhtml.properties b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/sybasejsfhtml.properties
new file mode 100644
index 0000000..9b68fcd
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/sybasejsfhtml.properties
@@ -0,0 +1,112 @@
+###############################################################################
+# Copyright (c) 2001, 2006 Oracle 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:
+#     Oracle Corporation - initial API and implementation
+###############################################################################
+Attribute.Label.accept=Accept
+Attribute.Label.acceptcharset=Accept Charset
+Attribute.Label.accesskey=Access Key
+Attribute.Label.action=Action
+Attribute.Label.actionListener=ActionListener
+Attribute.Label.alt=Alt
+Attribute.Label.bgcolor=BG Color
+Attribute.Label.binding=Binding
+Attribute.Label.border=Border
+Attribute.Label.cellpadding=Cell Padding
+Attribute.Label.cellspacing=Cell Spacing
+Attribute.Label.charset=Charset
+Attribute.Label.cols=Cols
+Attribute.Label.columnClasses=Column Classes
+Attribute.Label.columns=Columns
+Attribute.Label.converter=Converter
+Attribute.Label.coords=Coords
+Attribute.Label.dir=Dir
+Attribute.Label.disabled=Disabled
+Attribute.Label.disabledClass=Disabled Class
+Attribute.Label.enabledClass=Enabled Class
+Attribute.Label.enctype=Enctype
+Attribute.Label.errorClass=Error Class
+Attribute.Label.errorStyle=Error Style
+Attribute.Label.escape=Escape
+Attribute.Label.fatalClass=Fatal Class
+Attribute.Label.fatalStyle=Fatal Style
+Attribute.Label.first=First
+Attribute.Label.footerClass=Footer Class
+Attribute.Label.for=For
+Attribute.Label.frame=Frame
+Attribute.Label.globalOnly=Global Only
+Attribute.Label.headerClass=Header Class
+Attribute.Label.height=Height
+Attribute.Label.hreflang=Hreflang
+Attribute.Label.id=ID
+Attribute.Label.image=Image
+Attribute.Label.immediate=Immediate
+Attribute.Label.infoClass=Info Class
+Attribute.Label.infoStyle=Info Style
+Attribute.Label.ismap=Ismap
+Attribute.Label.lang=Lang
+Attribute.Label.layout=Layout
+Attribute.Label.link=Link
+Attribute.Label.longdesc=Longdesc
+Attribute.Label.maxlength=Max Length
+Attribute.Label.onblur=Onblur
+Attribute.Label.onchange=Onchange
+Attribute.Label.onclick=Onclick
+Attribute.Label.ondblclick=Ondblclick
+Attribute.Label.onfocus=Onfocus
+Attribute.Label.onkeydown=Onkeydown
+Attribute.Label.onkeypress=Onkeypress
+Attribute.Label.onkeyup=Onkeyup
+Attribute.Label.onmousedown=Onmousedown
+Attribute.Label.onmousemove=Onmousemove
+Attribute.Label.onmouseout=Onmouseout
+Attribute.Label.onmouseover=Onmouseover
+Attribute.Label.onmouseup=Onmouseup
+Attribute.Label.onreset=Onreset
+Attribute.Label.onselect=Onselect
+Attribute.Label.onsubmit=Onsubmit
+Attribute.Label.readonly=Read Only
+Attribute.Label.redisplay=Redisplay
+Attribute.Label.rel=Rel
+Attribute.Label.rendered=Rendered
+Attribute.Label.required=Required
+Attribute.Label.rev=Rev
+Attribute.Label.rowClasses=Row Classes
+Attribute.Label.rows=Rows
+Attribute.Label.rules=Rules
+Attribute.Label.shape=Shape
+Attribute.Label.showDetail=Show Detail
+Attribute.Label.showSummary=Show Summary
+Attribute.Label.size=Size
+Attribute.Label.style=Style
+Attribute.Label.styleClass=Style Class
+Attribute.Label.summary=Summary
+Attribute.Label.tabindex=Tab Index
+Attribute.Label.target=Target
+Attribute.Label.title=Title
+Attribute.Label.tooltip=Tooltip
+Attribute.Label.type=Type
+Attribute.Label.url=URL
+Attribute.Label.usemap=Usemap
+Attribute.Label.validator=Validator
+Attribute.Label.value=Value
+Attribute.Label.valueChangeListener=ValueChangeListener
+Attribute.Label.var=Var
+Attribute.Label.warnClass=Warn Class
+Attribute.Label.warnStyle=Warn Style
+Attribute.Label.width=Width
+Category.Label.CSS=CSS
+Category.Label.CSS2=CSS2
+Category.Label.CSS3=CSS3
+Category.Label.CSS4=CSS4
+Category.Label.Event=Event
+Category.Label.HTML=HTML
+Category.Label.JSF=JSF
+Category.Label.Language=Language
+Category.Label.Link=Link
+Category.Label.Table=Table
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/sybasejsfhtml.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/sybasejsfhtml.xml
new file mode 100644
index 0000000..936a5b2
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/sybasejsfhtml.xml
@@ -0,0 +1,730 @@
+<?xml version="1.0" ?>
+<taglib uri="http://SybaseMD.test.jsfhtml">
+	<tag name="column">
+		<category name="JSF" displaylabel="%Category.Label.JSF">
+			<attribute name="id" displaylabel="%Attribute.Label.id" />
+			<attribute name="binding" type="PROPERTYBINDING"
+				displaylabel="%Attribute.Label.binding" />
+			<attribute name="rendered" type="BOOLEAN"
+				displaylabel="%Attribute.Label.rendered" />
+			<attribute name="faketypeattr" type="CLASSNAME" required="required"
+				typeparam="superType=I:javax.faces.event.ActionListener" 
+				displaylabel="faketypeattr" />				
+			<attribute name="fakeBasename" type="CLASSPATH_RESOURCE" required="required"
+				displaylabel="fakeBasename" />		
+			<attribute name="fakeColor" type="COLOR"
+				displaylabel="fakeColor" />	
+			<attribute name="fakecssid" type="CSSID"
+					displaylabel="fakecssid" />
+			<attribute name="fakeCurrencyCode"
+				displaylabel="fakeCurrencyCode" type="CURRENCYCODE" />				
+			<attribute name="fakeLocale"
+				displaylabel="fakeLocale" type="LOCALE" />
+			<attribute name="fakeTimeZone"
+				displaylabel="fakeTimeZone" type="TIMEZONE" />	
+			<attribute name="fakeMultiChoice"
+				displaylabel="fakeMultiChoice" type="MULTICHOICE" />									
+		</category>
+	</tag>
+	<tag name="commandButton">
+		<referedcategory ref="JSF">
+			<includeattrs>
+				<attribute name="action"
+					displaylabel="%Attribute.Label.action" description="action"/>
+				<attribute name="actionListener" type="METHODBINDING"
+					displaylabel="%Attribute.Label.actionListener" />
+			</includeattrs>
+			<excludeattrs
+				refs="converter,validator,valueChangeListener,required" />
+		</referedcategory>
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS" />
+		<referedcategory ref="Event" />
+		<referedcategory ref="HTML">
+			<includeattrs>
+				<attribute name="type" type="ENUMERATED"
+					displaylabel="%Attribute.Label.type">
+					<option key="submit" value="submit" default="default"/>
+					<option key="reset" value="reset" />
+				</attribute>
+				<attribute name="image" type="RELATIVEPATH"
+					typeparam="suffix=jpg;gif;png"
+					displaylabel="%Attribute.Label.image" />
+				<attribute name="alt"
+					displaylabel="%Attribute.Label.alt" />
+			</includeattrs>
+		</referedcategory>
+	</tag>
+	<tag name="commandLink">
+		<referedcategory ref="JSF">
+			<includeattrs>
+				<attribute name="action"
+					displaylabel="%Attribute.Label.action" />
+				<attribute name="actionListener" type="METHODBINDING"
+					displaylabel="%Attribute.Label.actionListener" />
+			</includeattrs>
+			<excludeattrs
+				refs="converter,validator,valueChangeListener,required" />
+		</referedcategory>
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS" />
+		<referedcategory ref="Event">
+			<excludeattrs refs="onchange,onclick,onselect" />
+		</referedcategory>
+		<referedcategory ref="Link" displaylabel="%Category.Label.HTML" />
+	</tag>
+	<tag name="dataTable">
+		<category name="JSF" displaylabel="%Category.Label.JSF">
+			<attribute name="id" displaylabel="%Attribute.Label.id" />
+			<attribute name="value"
+				displaylabel="%Attribute.Label.value" />
+			<attribute name="binding" type="PROPERTYBINDING"
+				displaylabel="%Attribute.Label.binding" />
+			<attribute name="var" displaylabel="%Attribute.Label.var" />
+			<attribute name="rendered" type="BOOLEAN"
+				displaylabel="%Attribute.Label.rendered" />
+			<attribute name="rows" displaylabel="%Attribute.Label.rows" />
+			<attribute name="first"
+				displaylabel="%Attribute.Label.first" />
+		</category>
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS3" displaylabel="%Category.Label.CSS" />
+		<referedcategory ref="Event">
+			<excludeattrs refs="onblur,onchange,onfocus,onselect" />
+		</referedcategory>
+		<referedcategory ref="Table"
+			displaylabel="%Category.Label.HTML" />
+	</tag>
+	<tag name="form">
+		<category name="JSF" displaylabel="%Category.Label.JSF">
+			<attribute name="id" displaylabel="%Attribute.Label.id" />
+			<attribute name="binding" type="PROPERTYBINDING"
+				displaylabel="%Attribute.Label.binding" />
+			<attribute name="rendered" type="BOOLEAN"
+				displaylabel="%Attribute.Label.rendered" />
+		</category>
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS" />
+		<referedcategory ref="Event">
+			<includeattrs>
+				<attribute name="onreset"
+					displaylabel="%Attribute.Label.onreset" />
+				<attribute name="onsubmit"
+					displaylabel="%Attribute.Label.onsubmit" />
+			</includeattrs>
+			<excludeattrs refs="onblur,onchange,onfocus,onselect" />
+		</referedcategory>
+		<category name="HTML" displaylabel="%Category.Label.HTML">
+			<attribute name="target" type="ENUMERATED"
+				displaylabel="%Attribute.Label.target">
+				<option key="_self" value="_self" />
+				<option key="_blank" value="_blank" />
+				<option key="_parent" value="_parent" />
+				<option key="_top" value="_top" />
+			</attribute>
+			<attribute name="accept"
+				displaylabel="%Attribute.Label.accept" />
+			<attribute name="acceptcharset"
+				displaylabel="%Attribute.Label.acceptcharset" />
+			<attribute name="enctype"
+				displaylabel="%Attribute.Label.enctype" type="ENUMERATED">
+				<option key="application/x-www-form-urlencoded"
+					value="application/x-www-form-urlencoded" default="default"/>
+			</attribute>
+			<attribute name="title"
+				displaylabel="%Attribute.Label.title" />
+		</category>
+	</tag>
+	<tag name="graphicImage">
+		<category name="JSF" displaylabel="%Category.Label.JSF">
+			<attribute name="value" type="WEBPATH"
+				typeparam="suffix=jpg;gif;png"
+				displaylabel="%Attribute.Label.value" />
+			<attribute name="url" type="WEBPATH"
+				typeparam="suffix=jpg;gif;png" displaylabel="%Attribute.Label.url" />
+			<attribute name="binding" type="PROPERTYBINDING"
+				displaylabel="%Attribute.Label.binding" />
+			<attribute name="id" displaylabel="%Attribute.Label.id" />
+			<attribute name="rendered" type="BOOLEAN"
+				displaylabel="%Attribute.Label.rendered" />
+		</category>
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS" />
+		<referedcategory ref="Event">
+			<excludeattrs refs="onblur,onchange,onfocus,onselect" />
+		</referedcategory>
+		<category name="HTML" displaylabel="%Category.Label.HTML">
+			<attribute name="ismap" type="NAMED-BOOLEAN"
+				displaylabel="%Attribute.Label.ismap" />
+			<attribute name="longdesc" type="RELATIVEPATH"
+				displaylabel="%Attribute.Label.longdesc" />
+			<attribute name="alt" displaylabel="%Attribute.Label.alt" />
+			<attribute name="height"
+				displaylabel="%Attribute.Label.height" />
+			<attribute name="title"
+				displaylabel="%Attribute.Label.title" />
+			<attribute name="usemap"
+				displaylabel="%Attribute.Label.usemap" />
+			<attribute name="width"
+				displaylabel="%Attribute.Label.width" />
+		</category>
+	</tag>
+	<tag name="inputHidden">
+		<referedcategory ref="JSF" />
+	</tag>
+	<tag name="inputSecret">
+		<referedcategory ref="JSF" />
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS" />
+		<referedcategory ref="Event" />
+		<referedcategory ref="HTML">
+			<includeattrs>
+				<attribute name="maxlength"
+					displaylabel="%Attribute.Label.maxlength" />
+				<attribute name="redisplay" type="BOOLEAN"
+					displaylabel="%Attribute.Label.redisplay" />
+				<attribute name="alt"
+					displaylabel="%Attribute.Label.alt" />
+				<attribute name="size"
+					displaylabel="%Attribute.Label.size" />
+			</includeattrs>
+		</referedcategory>
+	</tag>
+	<tag name="inputText">
+		<referedcategory ref="JSF" />
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS" />
+		<referedcategory ref="Event" />
+		<referedcategory ref="HTML">
+			<includeattrs>
+				<attribute name="maxlength"
+					displaylabel="%Attribute.Label.maxlength" />
+				<attribute name="alt"
+					displaylabel="%Attribute.Label.alt" />
+				<attribute name="size"
+					displaylabel="%Attribute.Label.size" />
+			</includeattrs>
+		</referedcategory>
+	</tag>
+	<tag name="inputTextarea">
+		<referedcategory ref="JSF" />
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS" />
+		<referedcategory ref="Event" />
+		<referedcategory ref="HTML">
+			<includeattrs>
+				<attribute name="cols"
+					displaylabel="%Attribute.Label.cols" />
+				<attribute name="rows"
+					displaylabel="%Attribute.Label.rows" />
+			</includeattrs>
+		</referedcategory>
+	</tag>
+	<tag name="message">
+		<category name="JSF" displaylabel="%Category.Label.JSF">
+			<attribute name="id" displaylabel="%Attribute.Label.id" />
+			<attribute name="binding" type="PROPERTYBINDING"
+				displaylabel="%Attribute.Label.binding" />
+			<attribute name="for" displaylabel="%Attribute.Label.for" required="required"/>
+			<attribute name="rendered" type="BOOLEAN"
+				displaylabel="%Attribute.Label.rendered" />
+			<attribute name="showDetail" type="BOOLEAN"
+				typeparam="default=true" displaylabel="%Attribute.Label.showDetail" />
+			<attribute name="showSummary" type="BOOLEAN"
+				typeparam="default=false"
+				displaylabel="%Attribute.Label.showSummary" />
+		</category>
+		<referedcategory ref="CSS2" displaylabel="%Category.Label.CSS" />
+		<category name="HTML" displaylabel="%Category.Label.HTML">
+			<attribute name="tooltip" type="BOOLEAN"
+				displaylabel="%Attribute.Label.tooltip" />
+			<attribute name="title"
+				displaylabel="%Attribute.Label.title" />
+		</category>
+	</tag>
+	<tag name="messages">
+		<category name="JSF" displaylabel="%Category.Label.JSF">
+			<attribute name="id" displaylabel="%Attribute.Label.id" />
+			<attribute name="binding" type="PROPERTYBINDING"
+				displaylabel="%Attribute.Label.binding" />
+			<attribute name="globalOnly" type="BOOLEAN"
+				typeparam="default=false"
+				displaylabel="%Attribute.Label.globalOnly" />
+			<attribute name="rendered" type="BOOLEAN"
+				displaylabel="%Attribute.Label.rendered" />
+			<attribute name="showDetail" type="BOOLEAN"
+				typeparam="default=false"
+				displaylabel="%Attribute.Label.showDetail" />
+			<attribute name="showSummary" type="BOOLEAN"
+				typeparam="default=true"
+				displaylabel="%Attribute.Label.showSummary" />
+		</category>
+		<referedcategory ref="CSS2" displaylabel="%Category.Label.CSS" />
+		<category name="HTML" displaylabel="%Category.Label.HTML">
+			<attribute name="layout" type="ENUMERATED"
+				displaylabel="%Attribute.Label.layout">
+				<option key="list" value="list" default="default"/>
+				<option key="table" value="table" />
+			</attribute>
+			<attribute name="tooltip" type="BOOLEAN"
+				displaylabel="%Attribute.Label.tooltip" />
+			<attribute name="title"
+				displaylabel="%Attribute.Label.title" />
+		</category>
+	</tag>
+	<tag name="outputFormat">
+		<referedcategory ref="JSF">
+			<excludeattrs
+				refs="validator,valueChangeListener,immediate,required" />
+		</referedcategory>
+		<referedcategory ref="CSS" />
+		<category name="HTML" displaylabel="%Category.Label.HTML">
+			<attribute name="escape" type="BOOLEAN"
+				typeparam="default=true" displaylabel="%Attribute.Label.escape" />
+			<attribute name="title"
+				displaylabel="%Attribute.Label.title" />
+		</category>
+	</tag>
+	<tag name="outputLabel">
+		<referedcategory ref="JSF">
+			<excludeattrs
+				refs="validator,valueChangeListener,immediate,required" />
+		</referedcategory>
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS" />
+		<referedcategory ref="Event">
+			<excludeattrs refs="onchange,onselect" />
+		</referedcategory>
+		<referedcategory ref="HTML">
+			<includeattrs>
+				<attribute name="for"
+					displaylabel="%Attribute.Label.for" />
+			</includeattrs>
+			<excludeattrs refs="disabled,readonly" />
+		</referedcategory>
+	</tag>
+	<tag name="outputLink">
+		<referedcategory ref="JSF">
+			<includeattrs>
+				<attribute name="value" type="RELATIVEPATH"
+					displaylabel="%Attribute.Label.value" />
+			</includeattrs>
+			<excludeattrs
+				refs="validator,valueChangeListener,immediate,required" />
+		</referedcategory>
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS" />
+		<referedcategory ref="Event">
+			<excludeattrs refs="onchange,onselect" />
+		</referedcategory>
+		<referedcategory ref="Link" displaylabel="%Category.Label.HTML" />
+	</tag>
+	<tag name="outputText">
+		<referedcategory ref="JSF">
+			<excludeattrs
+				refs="validator,valueChangeListener,immediate,required" />
+		</referedcategory>
+		<referedcategory ref="CSS" />
+		<category name="HTML" displaylabel="%Category.Label.HTML">
+			<attribute name="escape" type="BOOLEAN"
+				typeparam="default=true" displaylabel="%Attribute.Label.escape" />
+			<attribute name="title"
+				displaylabel="%Attribute.Label.title" />
+		</category>
+	</tag>
+	<tag name="panelGrid">
+		<category name="JSF" displaylabel="%Category.Label.JSF">
+			<attribute name="id" displaylabel="%Attribute.Label.id" />
+			<attribute name="binding" type="PROPERTYBINDING"
+				displaylabel="%Attribute.Label.binding" />
+			<attribute name="rendered" type="BOOLEAN"
+				displaylabel="%Attribute.Label.rendered" />
+		</category>
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS3" displaylabel="%Category.Label.CSS" />
+		<referedcategory ref="Event">
+			<excludeattrs refs="onblur,onchange,onfocus,onselect" />
+		</referedcategory>
+		<referedcategory ref="Table"
+			displaylabel="%Category.Label.HTML">
+			<includeattrs>
+				<attribute name="columns"
+					displaylabel="%Attribute.Label.columns" />
+			</includeattrs>
+		</referedcategory>
+	</tag>
+	<tag name="panelGroup">
+		<category name="JSF" displaylabel="%Category.Label.JSF">
+			<attribute name="id" displaylabel="%Attribute.Label.id" />
+			<attribute name="binding" type="PROPERTYBINDING"
+				displaylabel="%Attribute.Label.binding" />
+			<attribute name="rendered" type="BOOLEAN"
+				displaylabel="%Attribute.Label.rendered" />
+		</category>
+		<referedcategory ref="CSS" />
+	</tag>
+	<tag name="selectBooleanCheckbox">
+		<referedcategory ref="JSF" />
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS" />
+		<referedcategory ref="Event" />
+		<referedcategory ref="HTML" />
+	</tag>
+	<tag name="selectManyCheckbox">
+		<referedcategory ref="JSF" />
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS4" displaylabel="%Category.Label.CSS" />
+		<referedcategory ref="Event" />
+		<referedcategory ref="HTML">
+			<includeattrs>
+				<attribute name="layout" type="ENUMERATED"
+					displaylabel="%Attribute.Label.layout">
+					<option key="lineDirection" value="lineDirection" default="default" />
+					<option key="pageDirection" value="pageDirection" />
+				</attribute>
+				<attribute name="border"
+					displaylabel="%Attribute.Label.border" />
+			</includeattrs>
+		</referedcategory>
+	</tag>
+	<tag name="selectManyListbox">
+		<referedcategory ref="JSF" />
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS4" displaylabel="%Category.Label.CSS" />
+		<referedcategory ref="Event" />
+		<referedcategory ref="HTML">
+			<includeattrs>
+				<attribute name="size"
+					displaylabel="%Attribute.Label.size" />
+			</includeattrs>
+		</referedcategory>
+	</tag>
+	<tag name="selectManyMenu">
+		<referedcategory ref="JSF" />
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS4" displaylabel="%Category.Label.CSS" />
+		<referedcategory ref="Event" />
+		<referedcategory ref="HTML" />
+	</tag>
+	<tag name="selectOneListbox">
+		<referedcategory ref="JSF" />
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS4" displaylabel="%Category.Label.CSS" />
+		<referedcategory ref="Event" />
+		<referedcategory ref="HTML">
+			<includeattrs>
+				<attribute name="size"
+					displaylabel="%Attribute.Label.size" />
+			</includeattrs>
+		</referedcategory>
+	</tag>
+	<tag name="selectOneMenu">
+		<referedcategory ref="JSF" />
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS4" displaylabel="%Category.Label.CSS" />
+		<referedcategory ref="Event" />
+		<referedcategory ref="HTML" />
+	</tag>
+	<tag name="selectOneRadio">
+		<referedcategory ref="JSF" />
+		<referedcategory ref="Language" />
+		<referedcategory ref="CSS4" displaylabel="%Category.Label.CSS" />
+		<referedcategory ref="Event" />
+		<referedcategory ref="HTML">
+			<includeattrs>
+				<attribute name="layout" type="ENUMERATED"
+					displaylabel="%Attribute.Label.layout">
+					<option key="lineDirection" value="lineDirection" default="default" />
+					<option key="pageDirection" value="pageDirection" />
+				</attribute>
+				<attribute name="border"
+					displaylabel="%Attribute.Label.border" />
+			</includeattrs>
+		</referedcategory>
+	</tag>
+	<definition>
+		<categories>
+			<category name="JSF" displaylabel="%Category.Label.JSF">
+				<attribute name="id" displaylabel="%Attribute.Label.id" />
+				<attribute name="value"
+					displaylabel="%Attribute.Label.value" />
+				<attribute name="binding" type="PROPERTYBINDING"
+					displaylabel="%Attribute.Label.binding" />
+				<attribute name="converter"
+					displaylabel="%Attribute.Label.converter" />
+				<attribute name="validator" type="METHODBINDING"
+					displaylabel="%Attribute.Label.validator" />
+				<attribute name="valueChangeListener"
+					type="METHODBINDING"
+					displaylabel="%Attribute.Label.valueChangeListener" />
+				<attribute name="immediate" type="BOOLEAN"
+					displaylabel="%Attribute.Label.immediate" />
+				<attribute name="rendered" type="BOOLEAN"
+					displaylabel="%Attribute.Label.rendered" />
+				<attribute name="required" type="BOOLEAN"
+					displaylabel="%Attribute.Label.required" />
+			</category>
+			<category name="Language"
+				displaylabel="%Category.Label.Language">
+				<referedattribute ref="lang" />
+				<attribute name="dir" type="ENUMERATED"
+					displaylabel="%Attribute.Label.dir">
+					<option key="RTL" value="RTL" />
+					<option key="LTR" value="LTR" />
+				</attribute>
+			</category>
+			<category name="CSS" displaylabel="%Category.Label.CSS">
+				<attribute name="style" type="CSSSTYLE"
+					typeparam="style=STYLE" displaylabel="%Attribute.Label.style" />
+				<attribute name="styleClass" type="CSSCLASS"
+					typeparam=" " displaylabel="%Attribute.Label.styleClass" />
+			</category>
+			<category name="Event"
+				displaylabel="%Category.Label.Event">
+				<attribute name="onblur" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onblur" />
+				<attribute name="onchange" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onchange" />
+				<attribute name="onclick" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onclick" />
+				<attribute name="ondblclick" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.ondblclick" />
+				<attribute name="onfocus" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onfocus" />
+				<attribute name="onkeydown" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onkeydown" />
+				<attribute name="onkeypress" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onkeypress" />
+				<attribute name="onkeyup" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onkeyup" />
+				<attribute name="onmousedown" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onmousedown" />
+				<attribute name="onmousemove" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onmousemove" />
+				<attribute name="onmouseout" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onmouseout" />
+				<attribute name="onmouseover" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onmouseover" />
+				<attribute name="onmouseup" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onmouseup" />
+				<attribute name="onselect" type="JAVASCRIPT"
+					displaylabel="%Attribute.Label.onselect" />
+			</category>
+			<category name="HTML" displaylabel="%Category.Label.HTML">
+				<attribute name="accesskey"
+					displaylabel="%Attribute.Label.accesskey" />
+				<attribute name="disabled" type="BOOLEAN"
+					displaylabel="%Attribute.Label.disabled" />
+				<attribute name="readonly" type="BOOLEAN"
+					displaylabel="%Attribute.Label.readonly" />
+				<attribute name="title"
+					displaylabel="%Attribute.Label.title" />
+				<attribute name="tabindex"
+					displaylabel="%Attribute.Label.tabindex" />
+			</category>
+			<category name="Link" displaylabel="%Category.Label.Link">
+				<attribute name="accesskey"
+					displaylabel="%Attribute.Label.accesskey" />
+				<attribute name="title"
+					displaylabel="%Attribute.Label.title" />
+				<attribute name="tabindex"
+					displaylabel="%Attribute.Label.tabindex" />
+				<attribute name="charset"
+					displaylabel="%Attribute.Label.charset" />
+				<referedattribute ref="lang" overridename="hreflang"
+					displaylabel="%Attribute.Label.hreflang" />
+				<referedattribute ref="link" overridename="rel"
+					displaylabel="%Attribute.Label.rel" />
+				<attribute name="shape" type="ENUMERATED"
+					displaylabel="%Attribute.Label.shape">
+					<option key="default"
+						value="Entire region" default="default"/>
+					<option key="circle" value="Circular region" />
+					<option key="rect" value="Rectangular region" />
+					<option key="poly" value="Polygonal region" />
+				</attribute>
+				<attribute name="target" type="ENUMERATED"
+					displaylabel="%Attribute.Label.target">
+					<option key="_self" value="_self" />
+					<option key="_blank" value="_blank" />
+					<option key="_parent" value="_parent" />
+					<option key="_top" value="_top" />
+				</attribute>
+				<attribute name="coords"
+					displaylabel="%Attribute.Label.coords" />
+				<referedattribute ref="link" overridename="rev"
+					displaylabel="%Attribute.Label.rev" />
+				<attribute name="type"
+					displaylabel="%Attribute.Label.type" />
+			</category>
+			<category name="CSS2" displaylabel="%Category.Label.CSS2">
+				<attribute name="style" type="CSSSTYLE"
+					typeparam="style=STYLE" displaylabel="%Attribute.Label.style" />
+				<attribute name="styleClass" type="CSSCLASS"
+					typeparam=" " displaylabel="%Attribute.Label.styleClass" />
+				<attribute name="infoStyle" type="CSSSTYLE"
+					displaylabel="%Attribute.Label.infoStyle" />
+				<attribute name="infoClass" type="CSSCLASS"
+					typeparam=" " displaylabel="%Attribute.Label.infoClass" />
+				<attribute name="warnStyle" type="CSSSTYLE"
+					displaylabel="%Attribute.Label.warnStyle" />
+				<attribute name="warnClass" type="CSSCLASS"
+					typeparam=" " displaylabel="%Attribute.Label.warnClass" />
+				<attribute name="errorStyle" type="CSSSTYLE"
+					displaylabel="%Attribute.Label.errorStyle" />
+				<attribute name="errorClass" type="CSSCLASS"
+					typeparam=" " displaylabel="%Attribute.Label.errorClass" />
+				<attribute name="fatalStyle" type="CSSSTYLE"
+					displaylabel="%Attribute.Label.fatalStyle" />
+				<attribute name="fatalClass" type="CSSCLASS"
+					typeparam=" " displaylabel="%Attribute.Label.fatalClass" />
+			</category>
+			<category name="CSS3" displaylabel="%Category.Label.CSS3">
+				<attribute name="style" type="CSSSTYLE"
+					typeparam="style=STYLE" displaylabel="%Attribute.Label.style" />
+				<attribute name="styleClass" type="CSSCLASS"
+					typeparam=" " displaylabel="%Attribute.Label.styleClass" />
+				<attribute name="columnClasses" type="CSSCLASS"
+					typeparam="," displaylabel="%Attribute.Label.columnClasses" />
+				<attribute name="footerClass" type="CSSCLASS"
+					typeparam=" " displaylabel="%Attribute.Label.footerClass" />
+				<attribute name="headerClass" type="CSSCLASS"
+					typeparam=" " displaylabel="%Attribute.Label.headerClass" />
+				<attribute name="rowClasses" type="CSSCLASS"
+					typeparam="separator=," displaylabel="%Attribute.Label.rowClasses" />
+			</category>
+			<category name="CSS4" displaylabel="%Category.Label.CSS4">
+				<attribute name="style" type="CSSSTYLE"
+					typeparam="style=STYLE" displaylabel="%Attribute.Label.style" />
+				<attribute name="styleClass" type="CSSCLASS"
+					typeparam=" " displaylabel="%Attribute.Label.styleClass" />
+				<attribute name="disabledClass" type="CSSCLASS"
+					typeparam="" displaylabel="%Attribute.Label.disabledClass" />
+				<attribute name="enabledClass" type="CSSCLASS"
+					typeparam="" displaylabel="%Attribute.Label.enabledClass" />
+			</category>
+			<category name="Table"
+				displaylabel="%Category.Label.Table">
+				<attribute name="bgcolor" type="COLOR"
+					displaylabel="%Attribute.Label.bgcolor" />
+				<attribute name="border"
+					displaylabel="%Attribute.Label.border" />
+				<attribute name="cellpadding"
+					displaylabel="%Attribute.Label.cellpadding" />
+				<attribute name="cellspacing"
+					displaylabel="%Attribute.Label.cellspacing" />
+				<attribute name="width"
+					displaylabel="%Attribute.Label.width" />
+				<attribute name="frame" type="ENUMERATED"
+					displaylabel="%Attribute.Label.frame">
+					<option key="lhs" value="Left hand side only" />
+					<option key="above" value="Top side only" />
+					<option key="none" value="No sides" default="default"/>
+					<option key="box" value="All four sides" />
+					<option key="vsides"
+						value="Right and left sides only" />
+					<option key="below" value="Bottom side only" />
+					<option key="border" value="All four sides" />
+					<option key="rhs" value="Right hand side only" />
+					<option key="hsides"
+						value="Top and bottom sides only" />
+				</attribute>
+				<attribute name="rules" type="ENUMERATED"
+					displaylabel="%Attribute.Label.rules">
+					<option key="cols" value="Between columns only" />
+					<option key="groups" value="Between row groups" />
+					<option key="rows" value="Between rows only" />
+					<option key="none" value="No rules" default="default"/>
+					<option key="all"
+						value="Between all rows and columns" />
+				</attribute>
+				<attribute name="summary"
+					displaylabel="%Attribute.Label.summary" />
+				<attribute name="title"
+					displaylabel="%Attribute.Label.title" />
+			</category>
+		</categories>
+		<attributes>
+			<attribute name="lang" type="ENUMERATED"
+				displaylabel="%Attribute.Label.lang">
+				<option key="af" value="af Afrikaans" />
+				<option key="ar" value="ar Arabic (needs subtype)" />
+				<option key="be" value="be Belarusian" />
+				<option key="bg" value="bg Bulgarian" />
+				<option key="br" value="br Breton" />
+				<option key="ca" value="ca Catalan" />
+				<option key="cs" value="cs Czech" />
+				<option key="da" value="da Danish" />
+				<option key="de" value="de German (Standard)" />
+				<option key="el" value="el Greek" />
+				<option key="en" value="en English" />
+				<option key="es" value="es Spanish (Spain)" />
+				<option key="et" value="et Estonian" />
+				<option key="eu" value="eu Basque" />
+				<option key="fa" value="fa Farsi" />
+				<option key="fi" value="fi Finnish" />
+				<option key="fo" value="fo Faeroese" />
+				<option key="fr" value="fr French (Standard)" />
+				<option key="gd" value="gd Gaelic (Scotland)" />
+				<option key="he" value="he Hebrew" />
+				<option key="hi" value="hi Hindi" />
+				<option key="hr" value="hr Croatian" />
+				<option key="hu" value="hu Hungarian" />
+				<option key="id" value="id Indonesian" />
+				<option key="is" value="is Icelandic" />
+				<option key="it" value="it Italian (Standard)" />
+				<option key="ja" value="ja Japanese" />
+				<option key="ko" value="ko Korean" />
+				<option key="lt" value="lt Lithuanian" />
+				<option key="lv" value="lv Latvian" />
+				<option key="mk" value="mk Macedonian" />
+				<option key="ms" value="ms Malaysian" />
+				<option key="mt" value="mt Maltese" />
+				<option key="nl" value="nl Dutch (Standard)" />
+				<option key="no" value="no Norwegian (Bokmal/Nynorsk)" />
+				<option key="pl" value="pl Polish" />
+				<option key="pt" value="pt Portuguese (Standard)" />
+				<option key="rm" value="rm Rhaeto-Romanic" />
+				<option key="ro" value="ro Romanian" />
+				<option key="ru" value="ru Russian" />
+				<option key="sk" value="sk Slovak" />
+				<option key="sl" value="sl Slovenian" />
+				<option key="sq" value="sq Albanian" />
+				<option key="sr" value="sr Serbian (Cyrillic/Latin)" />
+				<option key="sv" value="sv Swedish" />
+				<option key="sx" value="sx Sutu" />
+				<option key="sz" value="sz Sami (Lappish)" />
+				<option key="th" value="th Thai" />
+				<option key="tn" value="tn Setswana" />
+				<option key="tr" value="tr Turkish" />
+				<option key="ts" value="ts Tsonga" />
+				<option key="uk" value="uk Ukrainian" />
+				<option key="ur" value="ur Urdu" />
+				<option key="vi" value="vi Vietnamese" />
+				<option key="xh" value="xh Xhosa" />
+				<option key="yi" value="yi Yiddish" />
+				<option key="zh" value="zh Chinese (needs subtype)" />
+				<option key="zu" value="zu Zulu" />
+			</attribute>
+			<attribute name="link" type="MULTICHOICE" typeparam=" "
+				displaylabel="%Attribute.Label.link">
+				<option key="index" value="index" />
+				<option key="subsection" value="subsection" />
+				<option key="bookmark" value="bookmark" />
+				<option key="start" value="start" />
+				<option key="next" value="next" />
+				<option key="stylesheet" value="stylesheet" />
+				<option key="chapter" value="chapter" />
+				<option key="help" value="help" />
+				<option key="alternate" value="alternate" />
+				<option key="appendix" value="appendix" />
+				<option key="contents" value="contents" />
+				<option key="section" value="section" />
+				<option key="prev" value="prev" />
+				<option key="glossary" value="glossary" />
+				<option key="copyright" value="copyright" />
+			</attribute>
+		</attributes>
+	</definition>
+
+</taglib>
diff --git a/jsf/tests/org.eclipse.jst.pagedesigner.tests/META-INF/MANIFEST.MF b/jsf/tests/org.eclipse.jst.pagedesigner.tests/META-INF/MANIFEST.MF
index ccb0f59..eab3da4 100644
--- a/jsf/tests/org.eclipse.jst.pagedesigner.tests/META-INF/MANIFEST.MF
+++ b/jsf/tests/org.eclipse.jst.pagedesigner.tests/META-INF/MANIFEST.MF
@@ -21,7 +21,10 @@
  org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jst.pagedesigner;bundle-version="[1.0.0,1.1.0)",
  org.eclipse.emf.common;bundle-version="[2.2.0,3.0.0)",
- org.eclipse.gef;bundle-version="[3.2.0,4.0.0)"
+ org.eclipse.gef;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.views.properties.tabbed;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jst.jsf.common.ui,
+ org.eclipse.jst.pagedesigner.jsf.ui
 Export-Package: org.eclipse.jst.pagedesigner.tests;x-internal:=true
 Bundle-ClassPath: pagedesignertests.jar
 Bundle-Activator: org.eclipse.jst.pagedesigner.tests.PageDesignerTestsPlugin
diff --git a/jsf/tests/org.eclipse.jst.pagedesigner.tests/plugin.xml b/jsf/tests/org.eclipse.jst.pagedesigner.tests/plugin.xml
index ce4218e..c06337c 100644
--- a/jsf/tests/org.eclipse.jst.pagedesigner.tests/plugin.xml
+++ b/jsf/tests/org.eclipse.jst.pagedesigner.tests/plugin.xml
@@ -13,5 +13,21 @@
       <elementEditFactory
             class="org.eclipse.jst.pagedesigner.tests.tagcreatorPlugin.TestCreationFactory"></elementEditFactory>
    </extension>
+   <extension
+         point="org.eclipse.ui.views.properties.tabbed.propertySections">
+      <propertySections
+            contributorId="org.eclipse.jst.pagedesigner.tabPropertyContributor">
+		   <propertySection
+		         class="org.eclipse.jst.pagedesigner.tests.tabbed.properties.sections.FakePropertySection"
+		         id="section.fake"
+		         tab="sss">
+		   </propertySection>
+		   <propertySection
+		         class="org.eclipse.jst.pagedesigner.tests.tabbed.properties.sections.FakePropertySectionUsingDialogField"
+		         id="section.fake.dialogfield"
+		         tab="sss">
+		   </propertySection>  
+      </propertySections>
+   </extension>
 
 </plugin>
diff --git a/jsf/tests/org.eclipse.jst.pagedesigner.tests/src/org/eclipse/jst/pagedesigner/tests/tabbed/properties/sections/FakePropertySection.java b/jsf/tests/org.eclipse.jst.pagedesigner.tests/src/org/eclipse/jst/pagedesigner/tests/tabbed/properties/sections/FakePropertySection.java
new file mode 100644
index 0000000..ece587e
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.pagedesigner.tests/src/org/eclipse/jst/pagedesigner/tests/tabbed/properties/sections/FakePropertySection.java
@@ -0,0 +1,84 @@
+package org.eclipse.jst.pagedesigner.tests.tabbed.properties.sections;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jst.pagedesigner.properties.DesignerPropertyTool;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+
+/**
+ * Fake section for testing.... remove
+ * Binds to "type" attribute if present on an element
+ *
+ */
+public class FakePropertySection extends AbstractPropertySection {
+
+	private Text txt;
+	private Attr typeAttr;
+	/**
+	 * Constructor
+	 */
+	public FakePropertySection() {
+		// TODO Auto-generated constructor stub
+	}
+
+	@Override
+	public void createControls(final Composite parent,
+			TabbedPropertySheetPage tabbedPropertySheetPage) {
+	
+		super.createControls(parent, tabbedPropertySheetPage);
+		TabbedPropertySheetWidgetFactory factory = tabbedPropertySheetPage.getWidgetFactory();
+		
+		Composite outer = factory.createComposite(parent);
+		GridLayout gl = new GridLayout();
+		gl.numColumns = 2;
+		gl.marginTop = 0;
+		gl.marginBottom = 0;
+		outer.setLayout(gl);
+		//
+		CLabel lbl = factory.createCLabel(outer, "TYPE:", SWT.NONE);
+		lbl.setLayoutData(new GridData());
+		
+		txt = factory.createText(outer, "");
+		GridData gd = new GridData();
+		gd.verticalAlignment = SWT.TOP;
+		gd.grabExcessHorizontalSpace = true;
+		txt.setLayoutData(gd);
+		
+	}
+
+	@Override
+	public void setInput(IWorkbenchPart part, ISelection selection) {
+		super.setInput(part, selection);
+		Element node = DesignerPropertyTool.getElement(part, selection);
+		if (node != null){
+			typeAttr = node.getAttributeNode("type");
+			if (typeAttr != null){
+				txt.setText(typeAttr.getValue());
+				txt.addKeyListener(new KeyListener(){
+
+					public void keyPressed(KeyEvent e) {
+						//
+					}
+
+					public void keyReleased(KeyEvent e) {
+							typeAttr.setValue(typeAttr.getValue()+ new String(new char[]{e.character}));						
+					}
+					
+				});
+			}
+		}
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.pagedesigner.tests/src/org/eclipse/jst/pagedesigner/tests/tabbed/properties/sections/FakePropertySectionUsingDialogField.java b/jsf/tests/org.eclipse.jst.pagedesigner.tests/src/org/eclipse/jst/pagedesigner/tests/tabbed/properties/sections/FakePropertySectionUsingDialogField.java
new file mode 100644
index 0000000..aa6cc94
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.pagedesigner.tests/src/org/eclipse/jst/pagedesigner/tests/tabbed/properties/sections/FakePropertySectionUsingDialogField.java
@@ -0,0 +1,100 @@
+package org.eclipse.jst.pagedesigner.tests.tabbed.properties.sections;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldApplyListener;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldChangeListener;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StringDialogField;
+import org.eclipse.jst.pagedesigner.jsf.ui.attributegroup.DialogFieldFactory;
+import org.eclipse.jst.pagedesigner.properties.BaseCustomSection;
+import org.eclipse.jst.pagedesigner.properties.DesignerPropertyTool;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
+import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+
+/**
+ * Fake section for testing.... remove
+ * Binds to "type" attribute if present on element
+ *
+ */
+public class FakePropertySectionUsingDialogField extends BaseCustomSection {
+//
+//	private Text txt;
+	private Attr typeAttr;
+	private DialogField field;
+	private TabbedPropertySheetWidgetFactory factory;
+	private Composite outer;
+	/**
+	 * Constructor
+	 */
+	public FakePropertySectionUsingDialogField() {
+		// TODO Auto-generated constructor stub
+	}
+
+	@Override
+	public void createControls(final Composite parent,
+			TabbedPropertySheetPage tabbedPropertySheetPage) {
+	
+		super.createControls(parent, tabbedPropertySheetPage);
+		factory = tabbedPropertySheetPage.getWidgetFactory();
+
+		outer = factory.createComposite(parent, SWT.NONE);
+		GridLayout gl = new GridLayout();
+		gl.numColumns = 3;
+		gl.marginTop = 0;
+		gl.marginBottom = 0;
+		outer.setLayout(gl);
+
+		field = new StringDialogField();
+		GridData gd = new GridData();
+		gd.grabExcessHorizontalSpace = true;
+		gd.horizontalSpan = 2;
+		field.doFillIntoGrid(factory, outer, 3);
+		((StringDialogField)field).getTextControl(factory, outer).setLayoutData(gd);
+		field.setLabelText("TYPETESTDIALOGFIELD:");
+		 
+	}
+
+	@Override
+	public void setInput(IWorkbenchPart part, ISelection selection) {
+		super.setInput(part, selection);
+		Element node = DesignerPropertyTool.getElement(part, selection);
+		if (node != null){
+			typeAttr = node.getAttributeNode("type");
+			if (typeAttr != null){
+				DialogFieldFactory.setDialogFieldValue(field, typeAttr.getValue());
+				field.setDialogFieldApplyListener(new IDialogFieldApplyListener(){
+
+					public void dialogFieldApplied(DialogField field) {
+						typeAttr.setValue(((ISupportTextValue)field).getText());
+					}
+				});
+				field.setDialogFieldChangeListener(new IDialogFieldChangeListener(){
+
+					public void dialogFieldChanged(DialogField field) {
+							//
+					}
+				});				
+
+			};
+		}
+	}
+
+	@Override
+	protected void notifyChanged(INodeNotifier notifier, int eventType,
+			Object changedFeature, Object oldValue, Object newValue, int pos) {
+		if (field != null && changedFeature.toString().equalsIgnoreCase("type") ){
+			((ISupportTextValue)field).setTextWithoutUpdate((String)newValue);
+		}
+		
+	}
+
+}