You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by de...@apache.org on 2017/09/17 12:29:36 UTC

[myfaces-trinidad] 02/04: Merging original exhibition onto new branch created from the recent trunk

This is an automated email from the ASF dual-hosted git repository.

deki pushed a commit to branch exhibition_branch
in repository https://gitbox.apache.org/repos/asf/myfaces-trinidad.git

commit 6323eb8bb52ecf327ec68778cd3773a8dc9a232c
Author: Andrew Robinson <ar...@apache.org>
AuthorDate: Tue Jul 29 03:23:48 2008 +0000

    Merging original exhibition onto new branch created from the recent trunk
---
 pom.xml                                            |   1 +
 trinidad-examples/pom.xml                          |   1 +
 trinidad-examples/trinidad-exhibition/api/pom.xml  |  71 +++++
 .../trinidadexhibition/util/UtilFunctions.java     |  44 +++
 .../trinidad-exhibition/build/pom.xml              |  61 ++++
 .../maven-faces-plugin/components/ViewSource.xml   |  46 +++
 .../maven-faces-plugin/renderers/ViewSource.xml    |  38 +++
 trinidad-examples/trinidad-exhibition/impl/pom.xml |  73 +++++
 trinidad-examples/trinidad-exhibition/pom.xml      | 241 ++++++++++++++++
 trinidad-examples/trinidad-exhibition/web/pom.xml  | 164 +++++++++++
 .../trinidadexhibition/metadata/MetaDataUtils.java | 159 +++++++++++
 .../metadata/facescontext/Component.java           | 176 ++++++++++++
 .../metadata/facescontext/FacesConfigData.java     |  49 ++++
 .../metadata/facescontext/Facet.java               |  77 +++++
 .../metadata/facescontext/Property.java            | 111 ++++++++
 .../trinidadexhibition/metadata/tld/Attribute.java | 108 +++++++
 .../trinidadexhibition/metadata/tld/Tag.java       |  91 ++++++
 .../metadata/tld/TagLibrary.java                   |  61 ++++
 .../myfaces/trinidadexhibition/util/Functions.java |  22 ++
 .../webapp/ComponentIndexBean.java                 |  42 +++
 .../trinidadexhibition/webapp/MenusBean.java       |  40 +++
 .../trinidadexhibition/webapp/MetaDataBean.java    | 153 ++++++++++
 .../trinidadexhibition/webapp/PreferencesBean.java |  63 +++++
 .../webapp/SourceCodeServlet.java                  |  74 +++++
 .../trinidadexhibition/BundleMessages.properties   |  35 +++
 .../WEB-INF/facelets/templates/component.xhtml     |  38 +++
 .../webapp/WEB-INF/facelets/templates/main.xhtml   | 161 +++++++++++
 .../web/src/main/webapp/WEB-INF/faces-config.xml   | 115 ++++++++
 .../web/src/main/webapp/WEB-INF/trfn.taglib.xml    |  11 +
 .../src/main/webapp/WEB-INF/trinidad-config.xml    |  30 ++
 .../web/src/main/webapp/WEB-INF/trinidad-skins.xml |  35 +++
 .../web/src/main/webapp/WEB-INF/web.xml            | 194 +++++++++++++
 .../web/src/main/webapp/components/index.xhtml     |  54 ++++
 .../web/src/main/webapp/index.xhtml                |  57 ++++
 .../src/main/webapp/skins/demo-skin/demo-skin.css  |   8 +
 .../web/src/main/webapp/skins/test-myfaces/README  |   9 +
 trinidad-skins/myfaces-skin/pom.xml                |  62 ++++
 .../resource/MyFacesSkinImageResourceLoader.java   |  48 ++++
 .../resource/MyFacesSkinResourceLoader.java        |  17 ++
 .../myfaces/trinidad/skins/MyFacesSkinLoader.java  |  63 +++++
 .../main/resources/META-INF/images/bg-fade-1.png   | Bin 0 -> 1270 bytes
 .../main/resources/META-INF/images/bg-fade-2.png   | Bin 0 -> 1355 bytes
 .../main/resources/META-INF/images/bg-fade-3.png   | Bin 0 -> 1289 bytes
 .../resources/META-INF/images/brown-bullet.gif     | Bin 0 -> 59 bytes
 .../resources/META-INF/images/dialog-close.png     | Bin 0 -> 1027 bytes
 .../resources/META-INF/images/external-link.png    | Bin 0 -> 230 bytes
 .../main/resources/META-INF/images/footer-bg.png   | Bin 0 -> 178 bytes
 .../main/resources/META-INF/images/menu-expand.gif | Bin 0 -> 101 bytes
 .../META-INF/images/myfaces-logo-small.png         | Bin 0 -> 3039 bytes
 .../images/myfaces-logo-with-text-small.png        | Bin 0 -> 4842 bytes
 .../images/myfaces-logo-with-text-watermark.png    | Bin 0 -> 12378 bytes
 .../META-INF/images/myfaces-logo-with-text.png     | Bin 0 -> 16195 bytes
 .../resources/META-INF/images/myfaces-logo.png     | Bin 0 -> 11878 bytes
 .../resources/META-INF/images/orange-bullet.gif    | Bin 0 -> 59 bytes
 .../META-INF/images/panel-box-dark-bottom-left.png | Bin 0 -> 444 bytes
 .../images/panel-box-dark-bottom-right.png         | Bin 0 -> 449 bytes
 .../META-INF/images/panel-box-dark-bottom.png      | Bin 0 -> 176 bytes
 .../META-INF/images/panel-box-dark-center.png      | Bin 0 -> 184 bytes
 .../META-INF/images/panel-box-dark-left.png        | Bin 0 -> 656 bytes
 .../META-INF/images/panel-box-dark-right.png       | Bin 0 -> 677 bytes
 .../META-INF/images/panel-box-dark-top-left.png    | Bin 0 -> 451 bytes
 .../META-INF/images/panel-box-dark-top-right.png   | Bin 0 -> 485 bytes
 .../META-INF/images/panel-box-dark-top.png         | Bin 0 -> 186 bytes
 .../images/panel-box-light-bottom-left.png         | Bin 0 -> 334 bytes
 .../images/panel-box-light-bottom-right.png        | Bin 0 -> 334 bytes
 .../META-INF/images/panel-box-light-bottom.png     | Bin 0 -> 171 bytes
 .../META-INF/images/panel-box-light-center.png     | Bin 0 -> 166 bytes
 .../META-INF/images/panel-box-light-left.png       | Bin 0 -> 381 bytes
 .../META-INF/images/panel-box-light-right.png      | Bin 0 -> 385 bytes
 .../META-INF/images/panel-box-light-top-left.png   | Bin 0 -> 332 bytes
 .../META-INF/images/panel-box-light-top-right.png  | Bin 0 -> 365 bytes
 .../META-INF/images/panel-box-light-top.png        | Bin 0 -> 173 bytes
 .../images/panel-box-medium-bottom-left.png        | Bin 0 -> 385 bytes
 .../images/panel-box-medium-bottom-right.png       | Bin 0 -> 386 bytes
 .../META-INF/images/panel-box-medium-bottom.png    | Bin 0 -> 176 bytes
 .../META-INF/images/panel-box-medium-center.png    | Bin 0 -> 185 bytes
 .../META-INF/images/panel-box-medium-left.png      | Bin 0 -> 495 bytes
 .../META-INF/images/panel-box-medium-right.png     | Bin 0 -> 501 bytes
 .../META-INF/images/panel-box-medium-top-left.png  | Bin 0 -> 397 bytes
 .../META-INF/images/panel-box-medium-top-right.png | Bin 0 -> 428 bytes
 .../META-INF/images/panel-box-medium-top.png       | Bin 0 -> 185 bytes
 .../resources/META-INF/images/title-bg-fade.png    | Bin 0 -> 11568 bytes
 .../main/resources/META-INF/images/title-bg.png    | Bin 0 -> 1310 bytes
 ...org.apache.myfaces.trinidad.config.Configurator |   1 +
 .../servlets/resources/myfaces_skin.resources      |   1 +
 .../resources/META-INF/style/myfaces-desktop.css   | 315 +++++++++++++++++++++
 .../main/resources/META-INF/style/myfaces-pda.css  |   1 +
 .../myfaces-skin/src/main/svg/dark-panel-box.svg   | 164 +++++++++++
 .../myfaces-skin/src/main/svg/light-panel-box.svg  | 158 +++++++++++
 .../myfaces-skin/src/main/svg/medium-panel-box.svg | 164 +++++++++++
 trinidad-skins/pom.xml                             |  48 ++++
 91 files changed, 3755 insertions(+)

diff --git a/pom.xml b/pom.xml
index e804630..1503019 100644
--- a/pom.xml
+++ b/pom.xml
@@ -321,6 +321,7 @@
     <module>trinidad-build</module>
     <module>trinidad-api</module>
     <module>trinidad-impl</module>
+    <module>trinidad-skins</module>
   </modules>
 
   <build>
diff --git a/trinidad-examples/pom.xml b/trinidad-examples/pom.xml
index d46cd88..533431e 100644
--- a/trinidad-examples/pom.xml
+++ b/trinidad-examples/pom.xml
@@ -83,6 +83,7 @@
   <modules>
     <module>trinidad-blank</module>
     <module>trinidad-demo</module>
+    <module>trinidad-exhibition</module>
   </modules>
 
   <profiles>
diff --git a/trinidad-examples/trinidad-exhibition/api/pom.xml b/trinidad-examples/trinidad-exhibition/api/pom.xml
new file mode 100644
index 0000000..6829698
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/api/pom.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+  xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+  
+  <modelVersion>4.0.0</modelVersion>
+  
+  <groupId>org.apache.myfaces.trinidad</groupId>
+  <artifactId>trinidad-exhibition-api</artifactId>
+
+  <name>Trinidad Exhibition API</name>
+  <description>
+    Trinidad exhibition API. This contains the "API" classes for the components,
+    utility and other artifacts that are used only for this demonstration project and
+    are not made for reuse in the Trinidad core project.
+  </description>
+  
+  <parent>
+    <groupId>org.apache.myfaces.trinidad</groupId>
+    <artifactId>trinidad-exhibition-parent</artifactId>
+    <!-- TODO: change version to match Trinidad after moving to the trunk -->
+    <version>1.2.8-SNAPSHOT</version>
+  </parent>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.myfaces.trinidadbuild</groupId>
+        <artifactId>maven-faces-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>generate-components</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  
+  <dependencies>
+
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>trinidad-exhibition-build</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+
+  </dependencies>
+</project>
diff --git a/trinidad-examples/trinidad-exhibition/api/src/main/java/org/apache/myfaces/trinidadexhibition/util/UtilFunctions.java b/trinidad-examples/trinidad-exhibition/api/src/main/java/org/apache/myfaces/trinidadexhibition/util/UtilFunctions.java
new file mode 100644
index 0000000..6efcb55
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/api/src/main/java/org/apache/myfaces/trinidadexhibition/util/UtilFunctions.java
@@ -0,0 +1,44 @@
+/**
+ * 
+ */
+package org.apache.myfaces.trinidadexhibition.util;
+
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public final class UtilFunctions
+{
+  private UtilFunctions() {}
+  
+  public static String getBundleString(String key, Object... parms)
+  {
+    FacesContext facesContext = FacesContext.getCurrentInstance();
+    ResourceBundle bundle = facesContext.getApplication().getResourceBundle(facesContext, "msgs");
+    
+    String str = bundle.getString(key);
+    if (parms != null && parms.length > 0)
+    {
+      str = MessageFormat.format(str, parms);
+    }
+    return str;
+  }
+  
+  public static Object evaluateEl(String el)
+  {
+    return evaluateEl(el, Object.class);
+  }
+  
+  @SuppressWarnings("unchecked")
+  public static <T> T evaluateEl(String el, Class<T> returnType)
+  {
+    FacesContext facesContext = FacesContext.getCurrentInstance();
+    return (T)facesContext.getApplication().getExpressionFactory().createValueExpression(el, returnType)
+      .getValue(facesContext.getELContext());
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/build/pom.xml b/trinidad-examples/trinidad-exhibition/build/pom.xml
new file mode 100644
index 0000000..156f48d
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/build/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+  xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.myfaces.trinidad</groupId>
+  <artifactId>trinidad-exhibition-build</artifactId>
+
+  <name>Trinidad Exhibition Build</name>
+  <description>
+    Trinidad exhibition build files for the maven-faces-plugin to generate the JSF artifacts for
+    the custom components that the exhibition uses that are specific to this demonstration that
+    are not made for reuse in the Trinidad core project.
+  </description>
+
+  <parent>
+    <groupId>org.apache.myfaces.trinidad</groupId>
+    <artifactId>trinidad-exhibition-parent</artifactId>
+    <!-- TODO: change version to match Trinidad after moving to the trunk -->
+    <version>1.2.8-SNAPSHOT</version>
+  </parent>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.myfaces.trinidadbuild</groupId>
+        <artifactId>maven-faces-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>generate-master-faces-config</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/trinidad-examples/trinidad-exhibition/build/src/main/resources/META-INF/maven-faces-plugin/components/ViewSource.xml b/trinidad-examples/trinidad-exhibition/build/src/main/resources/META-INF/maven-faces-plugin/components/ViewSource.xml
new file mode 100644
index 0000000..15be469
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/build/src/main/resources/META-INF/maven-faces-plugin/components/ViewSource.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<faces-config
+  version="1.2"
+  xmlns="http://java.sun.com/xml/ns/javaee"
+  xmlns:tre="http://myfaces.apache.org/trinidad/exhibition"
+  xmlns:xi="http://www.w3.org/2001/XInclude"
+  xmlns:mfp="http://myfaces.apache.org/maven-faces-plugin"
+  xmlns:mafp="http://myfaces.apache.org/maven-trinidad-plugin"
+  xmlns:xhtml="http://www.w3.org/1999/xhtml">
+  <component>
+    <description>
+      <![CDATA[Link to view the source of the current view in the demo.]]>
+    </description>
+    <component-type>org.apache.myfaces.trinidad.exhibition.ViewSource</component-type>
+    <component-class>org.apache.myfaces.trinidad.exhibition.component.ViewSource</component-class>
+    <component-extension>
+      <mfp:component-family>org.apache.myfaces.trinidad.exhibition.ViewSource</mfp:component-family>
+      <mfp:component-supertype>org.apache.myfaces.trinidad.component.core.nav.CoreGoLink</mfp:component-supertype>
+      <mfp:renderer-type>org.apache.myfaces.trinidad.exhibition.ViewSource</mfp:renderer-type>
+      <mfp:tag-class>org.apache.myfaces.trinidadinternal.exhibition.taglib.ViewSourceTag</mfp:tag-class>
+      <mfp:tag-name>tre:viewSource</mfp:tag-name>
+      <mfp:component-metadata>
+        <mfp:favorite-property>id</mfp:favorite-property>
+      </mfp:component-metadata>
+    </component-extension>
+  </component>
+</faces-config>
\ No newline at end of file
diff --git a/trinidad-examples/trinidad-exhibition/build/src/main/resources/META-INF/maven-faces-plugin/renderers/ViewSource.xml b/trinidad-examples/trinidad-exhibition/build/src/main/resources/META-INF/maven-faces-plugin/renderers/ViewSource.xml
new file mode 100644
index 0000000..3ff5e87
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/build/src/main/resources/META-INF/maven-faces-plugin/renderers/ViewSource.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+	   
+-->
+<faces-config
+  version="1.2"
+  xmlns="http://java.sun.com/xml/ns/javaee"
+  xmlns:mfp="http://myfaces.apache.org/maven-faces-plugin">
+  <render-kit>
+    <render-kit-id>org.apache.myfaces.trinidadinternal.core</render-kit-id>
+    <renderer>
+      <component-family>org.apache.myfaces.trinidad.exhibition.ViewSource</component-family>
+      <renderer-type>org.apache.myfaces.trinidad.exhibition.ViewSource</renderer-type>
+      <renderer-class>
+        org.apache.myfaces.trinidadinternal.exhibition.renderkit.xhtml.ViewSourceRenderer
+      </renderer-class>
+      <renderer-extension>
+        <mfp:component-type>org.apache.myfaces.trinidad.exhibition.ViewSource</mfp:component-type>
+      </renderer-extension>
+    </renderer>
+  </render-kit>
+</faces-config>
diff --git a/trinidad-examples/trinidad-exhibition/impl/pom.xml b/trinidad-examples/trinidad-exhibition/impl/pom.xml
new file mode 100644
index 0000000..33b1bd6
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/impl/pom.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+  xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+  
+  <modelVersion>4.0.0</modelVersion>
+  
+  <groupId>org.apache.myfaces.trinidad</groupId>
+  <artifactId>trinidad-exhibition-impl</artifactId>
+
+  <name>Trinidad Exhibition IMPL</name>
+  <description>
+    Trinidad exhibition implementation library. This contains the "private" classes 
+    for the components, utility and other artifacts that are used only for this 
+    demonstration project and are not made for reuse in the Trinidad core project.
+  </description>
+  
+  <parent>
+    <groupId>org.apache.myfaces.trinidad</groupId>
+    <artifactId>trinidad-exhibition-parent</artifactId>
+    <!-- TODO: change version to match Trinidad after moving to the trunk -->
+    <version>1.2.8-SNAPSHOT</version>
+  </parent>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.myfaces.trinidadbuild</groupId>
+        <artifactId>maven-faces-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>generate-faces-config</goal>
+              <goal>generate-facelets-taglibs</goal>
+              <goal>generate-renderer-map</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  
+  <dependencies>
+
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>trinidad-exhibition-api</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+
+  </dependencies>
+</project>
diff --git a/trinidad-examples/trinidad-exhibition/pom.xml b/trinidad-examples/trinidad-exhibition/pom.xml
new file mode 100644
index 0000000..c976390
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/pom.xml
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+  xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+  
+  <modelVersion>4.0.0</modelVersion>
+  
+  <groupId>org.apache.myfaces.trinidad</groupId>
+  <artifactId>trinidad-exhibition-parent</artifactId>
+  <version>1.2.8-SNAPSHOT</version>
+
+  <name>Trinidad Exhibition</name>
+  <description>
+    Trinidad exhibition parent and aggregator Maven POM file. This builds all the projects
+    necessary for the Trinidad exhibition war deployment.
+  </description>
+
+  <parent>
+    <groupId>org.apache.myfaces.trinidad</groupId>
+    <artifactId>trinidad-example</artifactId>
+    <!-- TODO: change version to match Trinidad after moving to the trunk -->
+    <version>1.2.8-SNAPSHOT</version>
+  </parent>
+
+  <packaging>pom</packaging>
+
+  <modules>
+    <module>build</module>
+    <module>api</module>
+    <module>impl</module>
+    <module>web</module>
+  </modules>
+
+  <build>
+    <plugins>
+      <plugin>
+        <inherited>true</inherited>
+        <groupId>org.apache.myfaces.trinidadbuild</groupId>
+        <artifactId>maven-faces-plugin</artifactId>
+        <configuration>
+          <taglibs>
+            <tre>http://myfaces.apache.org/trinidad/exhibition</tre>
+          </taglibs>
+          <faceletHandlerClass>
+            org.apache.myfaces.trinidadinternal.facelets.TrinidadComponentHandler
+          </faceletHandlerClass>
+          <typePrefix>org.apache</typePrefix>
+          <renderKitPrefix>org.apache</renderKitPrefix>
+          <packageContains>org.apache</packageContains>
+          <removeRenderers>true</removeRenderers>
+          <jsfVersion>1.2</jsfVersion>
+          <force>false</force>
+          <excludes>
+            <exclude>**/includes/**</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  
+  <pluginRepositories>
+    <pluginRepository>
+      <id>apache-snapshots</id>
+      <url>http://people.apache.org/repo/m2-snapshot-repository</url>
+      <snapshots>
+        <updatePolicy>${snapshotUpdatePolicy}</updatePolicy>
+      </snapshots>
+    </pluginRepository>
+  </pluginRepositories>
+  
+  <repositories>
+    <repository>
+      <id>apache-snapshots</id>
+      <url>http://people.apache.org/repo/m2-snapshot-repository</url>
+      <snapshots>
+        <updatePolicy>${snapshotUpdatePolicy}</updatePolicy>
+      </snapshots>
+    </repository>
+  </repositories>
+
+  <dependencyManagement>
+    <!--
+      Any dependencies that are not needed by all the trinidad-exhibition
+      sub projects:
+    -->
+    <dependencies>
+
+    </dependencies>
+  </dependencyManagement>
+
+  <!--
+    Any dependencies that are common to all the trinidad-exhibition sub projects:
+  -->
+  <dependencies>
+
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>trinidad-api</artifactId>
+      <version>${trinidad-version}</version>
+    </dependency>
+    
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>trinidad-impl</artifactId>
+      <version>${trinidad-version}</version>
+    </dependency>
+    
+    <dependency>
+      <groupId>com.sun.facelets</groupId>
+      <artifactId>jsf-facelets</artifactId>
+      <version>1.1.14</version>
+      <scope>compile</scope>
+    </dependency>
+    
+    <dependency>
+      <groupId>javax.el</groupId>
+      <artifactId>el-api</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+    
+    <!-- force removal of commons logging in favor of slf4j -->
+    <dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging</artifactId>
+      <version>1.1.1</version>
+      <scope>provided</scope>
+    </dependency>
+    
+    <dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging-api</artifactId>
+      <version>1.1</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <!-- the slf4j commons-logging replacement -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jcl104-over-slf4j</artifactId>
+      <version>${slf4j-version}</version>
+    </dependency>
+
+    <!-- the other slf4j jars -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>${slf4j-version}</version>
+    </dependency>
+    
+    <!-- using log4j as backend -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <version>${slf4j-version}</version>
+    </dependency>
+    
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.14</version>
+    </dependency>
+    
+    <!-- JSF Impl libraries -->
+    <dependency>
+      <groupId>org.apache.myfaces.core</groupId>
+      <artifactId>myfaces-api</artifactId>
+      <version>${myfaces-version}</version>
+      <scope>${myfaces-scope}</scope>
+    </dependency>
+    
+    <dependency>
+      <groupId>org.apache.myfaces.core</groupId>
+      <artifactId>myfaces-impl</artifactId>
+      <version>${myfaces-version}</version>
+      <scope>${myfaces-scope}</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.faces</groupId>
+      <artifactId>jsf-api</artifactId>
+      <version>${jsf-ri-version}</version>
+      <scope>${jsf-ri-scope}</scope>
+    </dependency>
+    
+    <dependency>
+      <groupId>javax.faces</groupId>
+      <artifactId>jsf-impl</artifactId>
+      <version>${jsf-ri-version}</version>
+      <scope>${jsf-ri-scope}</scope>
+    </dependency>
+
+    <!-- Test scope -->
+    <dependency>
+      <groupId>org.testng</groupId>
+      <artifactId>testng</artifactId>
+      <version>5.6</version>
+      <classifier>jdk15</classifier>
+      <scope>test</scope>
+    </dependency>
+
+  </dependencies>
+  
+  <properties>
+    <jsf-ri-scope>provided</jsf-ri-scope>
+    <jsf-ri-version>1.2_07</jsf-ri-version>
+    <myfaces-scope>compile</myfaces-scope>
+    <trinidad-version>1.2.8-SNAPSHOT</trinidad-version>
+    <myfaces-version>1.2.2</myfaces-version>
+    <slf4j-version>1.4.3</slf4j-version>
+    <snapshotUpdatePolicy>daily</snapshotUpdatePolicy>
+  </properties>
+
+</project>
diff --git a/trinidad-examples/trinidad-exhibition/web/pom.xml b/trinidad-examples/trinidad-exhibition/web/pom.xml
new file mode 100644
index 0000000..09b7cea
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/pom.xml
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+  xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+  
+  <modelVersion>4.0.0</modelVersion>
+  
+  <groupId>org.apache.myfaces.trinidad</groupId>
+  <artifactId>trinidad-exhibition</artifactId>
+  <packaging>war</packaging>
+  
+  <name>Trinidad Exhibition Web Project</name>
+  <description>
+    Apache MyFaces Trinidad exhibition web project. This is the actual web project
+    that can be run from within a servlet container to demonstrate aspects of the
+    Trinidad MyFaces Apache project.
+  </description>
+  
+  <parent>
+    <groupId>org.apache.myfaces.trinidad</groupId>
+    <artifactId>trinidad-exhibition-parent</artifactId>
+    <!-- TODO: change version to match Trinidad after moving to the trunk -->
+    <version>1.2.8-SNAPSHOT</version>
+  </parent>
+  
+  <dependencies>
+    
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>trinidad-exhibition-impl</artifactId>
+      <version>${pom.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>${pom.groupId}</groupId>
+          <artifactId>trinidad-exhibition-build</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    
+    <dependency>
+      <groupId>javax.servlet.jsp</groupId>
+      <artifactId>jsp-api</artifactId>
+      <version>2.1</version>
+      <scope>provided</scope>
+    </dependency>
+    
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>trinidad-myfaces-skin</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+    
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>sandbox-impl</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+    
+    <dependency>
+      <groupId>commons-digester</groupId>
+      <artifactId>commons-digester</artifactId>
+      <version>1.8</version>
+    </dependency>
+
+    <!-- For SourceCodeServlet -->
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.1</version>
+      <scope>compile</scope>
+    </dependency>
+  
+  </dependencies>
+
+  <profiles>
+     <profile>
+       <id>jettyConfig</id>
+       <build>
+         <plugins>
+           <plugin>
+             <groupId>org.mortbay.jetty</groupId>
+             <artifactId>maven-jetty-plugin</artifactId>
+             <version>6.1.9</version>
+             <configuration>
+               <scanIntervalSeconds>10</scanIntervalSeconds>
+             </configuration>
+           </plugin>
+        </plugins>
+      </build>
+    </profile>
+
+    <!-- By default the war examples use myfaces! :) -->
+    <profile>
+      <id>myfaces</id>
+      <activation>
+        <property>
+          <name>!jsf</name>
+        </property>
+      </activation>
+      <dependencies>
+        <dependency>
+          <groupId>org.apache.myfaces.core</groupId>
+          <artifactId>myfaces-api</artifactId>
+          <scope>compile</scope>
+        </dependency>
+        <dependency>
+          <groupId>org.apache.myfaces.core</groupId>
+          <artifactId>myfaces-impl</artifactId>
+          <scope>runtime</scope>
+        </dependency>
+      </dependencies>
+    </profile>
+
+    <!-- To use the examples using the Sun's JSF Reference Implementation: -Djsf=ri -->
+    <profile>
+      <id>jsfri</id>
+      <activation>
+        <property>
+          <name>jsf</name>
+          <value>ri</value>
+        </property>
+      </activation>
+      <dependencies>
+        <dependency>
+          <groupId>javax.faces</groupId>
+          <artifactId>jsf-api</artifactId>
+          <version>1.2_07</version>
+          <scope>compile</scope>
+        </dependency>
+        <dependency>
+          <groupId>javax.faces</groupId>
+          <artifactId>jsf-impl</artifactId>
+          <version>1.2_07</version>
+          <scope>runtime</scope>
+        </dependency>
+      </dependencies>
+
+      <properties>
+        <jsf_implementation>JSF-RI</jsf_implementation>
+      </properties>
+    </profile>
+  </profiles>
+</project>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/MetaDataUtils.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/MetaDataUtils.java
new file mode 100644
index 0000000..962f226
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/MetaDataUtils.java
@@ -0,0 +1,159 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidadexhibition.metadata;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Properties;
+
+import org.apache.commons.digester.Digester;
+import org.apache.myfaces.trinidad.component.UIXComponent;
+import org.apache.myfaces.trinidadexhibition.metadata.facescontext.Component;
+import org.apache.myfaces.trinidadexhibition.metadata.facescontext.FacesConfigData;
+import org.apache.myfaces.trinidadexhibition.metadata.facescontext.Facet;
+import org.apache.myfaces.trinidadexhibition.metadata.facescontext.Property;
+import org.apache.myfaces.trinidadexhibition.metadata.tld.Attribute;
+import org.apache.myfaces.trinidadexhibition.metadata.tld.Tag;
+import org.apache.myfaces.trinidadexhibition.metadata.tld.TagLibrary;
+import org.xml.sax.SAXException;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public final class MetaDataUtils
+{
+  private MetaDataUtils() {}
+  
+  public static String getVersion()
+    throws IOException
+  {
+    Properties pomProps = new Properties();
+    
+    InputStream stream = MetaDataUtils.class.getClassLoader().getResourceAsStream(
+      "/META-INF/maven/org.apache.myfaces.trinidad/trinidad-exhibition/pom.properties");
+    
+    // the file will not be found when using jetty in-place from maven, so attempt to get the value
+    // from the api library instead
+    stream = UIXComponent.class.getClassLoader().getResourceAsStream(
+      "/META-INF/maven/org.apache.myfaces.trinidad/trinidad-api/pom.properties");
+    
+    pomProps.load(stream);
+    return pomProps.getProperty("version");
+  }
+  
+  public static TagLibrary getTagLibrary(String name)
+    throws IOException, SAXException
+  {
+    String path = new StringBuilder("/META-INF/").append(name).append(".tld").toString();
+    // first look in the Trinidad-impl
+    InputStream stream = MetaDataUtils.class.getResourceAsStream(path);
+    if (stream == null)
+    {
+      return null;
+    }
+    
+    Digester digester = new Digester();
+    digester.setValidating(false);
+    
+    digester.addObjectCreate("taglib", TagLibrary.class);
+    digester.addBeanPropertySetter("taglib/short-name", "shortName");
+    
+    digester.addObjectCreate("taglib/tag", Tag.class);
+    digester.addBeanPropertySetter("taglib/tag/name");
+    digester.addBeanPropertySetter("taglib/tag/tag-class", "tagClass");
+    digester.addBeanPropertySetter("taglib/tag/description");
+    digester.addSetNext("taglib/tag", "addTag");
+    
+    digester.addObjectCreate("taglib/tag/attribute", Attribute.class);
+    digester.addBeanPropertySetter("taglib/tag/attribute/name");
+    digester.addBeanPropertySetter("taglib/tag/attribute/description");
+    digester.addBeanPropertySetter("taglib/tag/attribute/required");
+    digester.addBeanPropertySetter("taglib/tag/attribute/deferred-value/type", "deferredValueType");
+    digester.addBeanPropertySetter("taglib/tag/attribute/deferred-value/method-signature",
+      "deferredValueMethod");
+    
+    digester.addSetNext("taglib/tag/attribute", "addAttribute");
+    
+    return (TagLibrary)digester.parse(stream);
+  }
+  
+  public static FacesConfigData getFacesConfigData()
+    throws IOException, SAXException
+  {
+    FacesConfigData data = new FacesConfigData();
+    for (Enumeration<URL> e = Thread.currentThread().getContextClassLoader().getResources(
+      "META-INF/faces-config.xml"); e.hasMoreElements(); )
+    {
+      FacesConfigData d = getFacesConfigData(e.nextElement().openStream());
+      if (d != null)
+      {
+        data.addData(d);
+      }
+    }
+    
+    return data;
+  }
+  
+  private static FacesConfigData getFacesConfigData(InputStream stream)
+    throws IOException, SAXException
+  {
+    Digester digester = new Digester();
+    digester.setValidating(false);
+    
+    digester.addObjectCreate("faces-config", FacesConfigData.class);
+    
+    digester.addObjectCreate("faces-config/component", Component.class);
+    digester.addBeanPropertySetter("faces-config/component/description");
+    digester.addBeanPropertySetter("faces-config/component/component-type", "componentType");
+    digester.addBeanPropertySetter("faces-config/component/component-clas", "componentClass");
+    digester.addBeanPropertySetter("faces-config/component/component-extension/accepts-child-components",
+      "accepts-child-components");
+    digester.addBeanPropertySetter("faces-config/component/component-extension/component-family",
+      "family");
+    digester.addBeanPropertySetter("faces-config/component/component-extension/renderer-type",
+      "rendererType");
+    digester.addBeanPropertySetter(
+      "faces-config/component/component-extension/component-metadata/preferred-children",
+      "preferredChildren");
+    digester.addSetNext("faces-config/component", "addComponent");
+    
+    digester.addObjectCreate("faces-config/component/facet", Facet.class);
+    digester.addBeanPropertySetter("faces-config/component/facet/facet-name", "name");
+    digester.addBeanPropertySetter("faces-config/component/facet/description");
+    digester.addBeanPropertySetter(
+      "faces-config/component/facet/facet-extension/facet-metadata/preferred-children",
+      "preferredChildren");
+    digester.addSetNext("faces-config/component/facet", "addFacet");
+
+    digester.addObjectCreate("faces-config/component/property", Property.class);
+    digester.addBeanPropertySetter("faces-config/component/property/property-name", "name");
+    digester.addBeanPropertySetter("faces-config/component/property/property-class", "propertyClass");
+    digester.addBeanPropertySetter("faces-config/component/property/description");
+    digester.addBeanPropertySetter("faces-config/component/property/default-value", "defaultValue");
+    digester.addBeanPropertySetter(
+      "faces-config/component/property/property-extension/property-metadata/attribute-values",
+      "attributeValues");
+    digester.addSetNext("faces-config/component/property", "addProperty");
+    
+    return (FacesConfigData)digester.parse(stream);
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/Component.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/Component.java
new file mode 100644
index 0000000..385a76c
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/Component.java
@@ -0,0 +1,176 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidadexhibition.metadata.facescontext;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Andrew Robinson
+ */
+public class Component
+{
+  private String _componentType;
+  private String _description;
+  private String _componentClass;
+  private String _rendererType;
+  private String _family;
+  private String _preferredChildren;
+  private boolean _acceptsChildComponents;
+  private Map<String, Facet> _facets = new HashMap<String, Facet>();
+  private Map<String, Property> _properties = new HashMap<String, Property>();
+
+  /**
+   * @return the preferredChildren
+   */
+  public String getPreferredChildren()
+  {
+    return _preferredChildren;
+  }
+  
+  /**
+   * @param preferredChildren the preferredChildren to set
+   */
+  public void setPreferredChildren(String preferredChildren)
+  {
+    _preferredChildren = preferredChildren;
+  }
+  
+  /**
+   * @return the acceptsChildComponents
+   */
+  public boolean isAcceptsChildComponents()
+  {
+    return _acceptsChildComponents;
+  }
+  
+  /**
+   * @param acceptsChildComponents the acceptsChildComponents to set
+   */
+  public void setAcceptsChildComponents(boolean acceptsChildComponents)
+  {
+    _acceptsChildComponents = acceptsChildComponents;
+  }
+  
+  /**
+   * @return the rendererType
+   */
+  public String getRendererType()
+  {
+    return _rendererType;
+  }
+  
+  /**
+   * @param rendererType the rendererType to set
+   */
+  public void setRendererType(String rendererType)
+  {
+    _rendererType = rendererType;
+  }
+  
+  /**
+   * @return the family
+   */
+  public String getFamily()
+  {
+    return _family;
+  }
+  
+  /**
+   * @param family the family to set
+   */
+  public void setFamily(String family)
+  {
+    _family = family;
+  }
+  
+  /**
+   * @return the type
+   */
+  public String getComponentType()
+  {
+    return _componentType;
+  }
+
+  /**
+   * @param componentType the type to set
+   */
+  public void setComponentType(String componentType)
+  {
+    _componentType = componentType;
+  }
+
+  /**
+   * @return the description
+   */
+  public String getDescription()
+  {
+    return _description;
+  }
+
+  /**
+   * @param description the description to set
+   */
+  public void setDescription(String description)
+  {
+    _description = description;
+  }
+  
+  /**
+   * @return the componentClass
+   */
+  public String getComponentClass()
+  {
+    return _componentClass;
+  }
+  
+  /**
+   * @param componentClass the componentClass to set
+   */
+  public void setComponentClass(String componentClass)
+  {
+    _componentClass = componentClass;
+  }
+  
+  /**
+   * @return the facets
+   */
+  public Map<String, Facet> getFacets()
+  {
+    return _facets;
+  }
+  
+  /**
+   * @return the properties
+   */
+  public Map<String, Property> getProperties()
+  {
+    return _properties;
+  }
+  
+  public void addFacet(Facet facet)
+  {
+    _facets.put(facet.getName(), facet);
+  }
+  
+  public void addProperty(Property prop)
+  {
+    _properties.put(prop.getName(), prop);
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/FacesConfigData.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/FacesConfigData.java
new file mode 100644
index 0000000..d89120a
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/FacesConfigData.java
@@ -0,0 +1,49 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidadexhibition.metadata.facescontext;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public class FacesConfigData
+{
+  private Map<String, Component> _components = new HashMap<String, Component>();
+  
+  public void addData(FacesConfigData data)
+  {
+    _components.putAll(data.getComponents());
+  }
+  
+  public void addComponent(Component comp)
+  {
+    _components.put(comp.getComponentType(), comp);
+  }
+  
+  /**
+   * @return the components
+   */
+  public Map<String, Component> getComponents()
+  {
+    return _components;
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/Facet.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/Facet.java
new file mode 100644
index 0000000..2352e17
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/Facet.java
@@ -0,0 +1,77 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidadexhibition.metadata.facescontext;
+
+/**
+ * @author Andrew Robinson
+ */
+public class Facet
+{
+  private String _name;
+  private String _preferredChildren;
+  private String _description;
+
+  /**
+   * @return the name
+   */
+  public String getName()
+  {
+    return _name;
+  }
+
+  /**
+   * @param name the name to set
+   */
+  public void setName(String name)
+  {
+    _name = name;
+  }
+
+  /**
+   * @return the preferredChildren
+   */
+  public String getPreferredChildren()
+  {
+    return _preferredChildren;
+  }
+
+  /**
+   * @param preferredChildren the preferredChildren to set
+   */
+  public void setPreferredChildren(String preferredChildren)
+  {
+    _preferredChildren = preferredChildren;
+  }
+
+  /**
+   * @return the description
+   */
+  public String getDescription()
+  {
+    return _description;
+  }
+
+  /**
+   * @param description the description to set
+   */
+  public void setDescription(String description)
+  {
+    _description = description;
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/Property.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/Property.java
new file mode 100644
index 0000000..5386212
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/facescontext/Property.java
@@ -0,0 +1,111 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidadexhibition.metadata.facescontext;
+
+/**
+ * @author Andrew Robinson
+ */
+public class Property
+{
+  private String _name;
+  private String _propertyClass;
+  private String _description;
+  private String _defaultValue;
+  private String _attributeValues;
+
+  /**
+   * @return the name
+   */
+  public String getName()
+  {
+    return _name;
+  }
+
+  /**
+   * @param name the name to set
+   */
+  public void setName(String name)
+  {
+    _name = name;
+  }
+
+  /**
+   * @return the propertyClass
+   */
+  public String getPropertyClass()
+  {
+    return _propertyClass;
+  }
+
+  /**
+   * @param propertyClass the propertyClass to set
+   */
+  public void setPropertyClass(String propertyClass)
+  {
+    _propertyClass = propertyClass;
+  }
+
+  /**
+   * @return the description
+   */
+  public String getDescription()
+  {
+    return _description;
+  }
+
+  /**
+   * @param description the description to set
+   */
+  public void setDescription(String description)
+  {
+    _description = description;
+  }
+
+  /**
+   * @return the defaultValue
+   */
+  public String getDefaultValue()
+  {
+    return _defaultValue;
+  }
+
+  /**
+   * @param defaultValue the defaultValue to set
+   */
+  public void setDefaultValue(String defaultValue)
+  {
+    _defaultValue = defaultValue;
+  }
+
+  /**
+   * @return the attributeValues
+   */
+  public String getAttributeValues()
+  {
+    return _attributeValues;
+  }
+
+  /**
+   * @param attributeValues the attributeValues to set
+   */
+  public void setAttributeValues(String attributeValues)
+  {
+    _attributeValues = attributeValues;
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/tld/Attribute.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/tld/Attribute.java
new file mode 100644
index 0000000..47d2651
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/tld/Attribute.java
@@ -0,0 +1,108 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidadexhibition.metadata.tld;
+
+public class Attribute
+{
+  private String _name;
+  private String _description;
+  private String _deferredValueType;
+  private String _deferredValueMethod;
+  private boolean _required;
+
+  /**
+   * @return the name
+   */
+  public String getName()
+  {
+    return _name;
+  }
+
+  /**
+   * @param name the name to set
+   */
+  public void setName(String name)
+  {
+    _name = name;
+  }
+
+  /**
+   * @return the description
+   */
+  public String getDescription()
+  {
+    return _description;
+  }
+
+  /**
+   * @param description the description to set
+   */
+  public void setDescription(String description)
+  {
+    _description = description;
+  }
+
+  /**
+   * @return the deferredValueType
+   */
+  public String getDeferredValueType()
+  {
+    return _deferredValueType;
+  }
+
+  /**
+   * @param deferredValueType the deferredValueType to set
+   */
+  public void setDeferredValueType(String deferredValueType)
+  {
+    _deferredValueType = deferredValueType;
+  }
+
+  /**
+   * @return the deferredValueMethod
+   */
+  public String getDeferredValueMethod()
+  {
+    return _deferredValueMethod;
+  }
+
+  /**
+   * @param deferredValueMethod the deferredValueMethod to set
+   */
+  public void setDeferredValueMethod(String deferredValueMethod)
+  {
+    _deferredValueMethod = deferredValueMethod;
+  }
+
+  /**
+   * @return the required
+   */
+  public boolean isRequired()
+  {
+    return _required;
+  }
+
+  /**
+   * @param required the required to set
+   */
+  public void setRequired(boolean required)
+  {
+    _required = required;
+  }
+}
\ No newline at end of file
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/tld/Tag.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/tld/Tag.java
new file mode 100644
index 0000000..b362683
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/tld/Tag.java
@@ -0,0 +1,91 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidadexhibition.metadata.tld;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Tag
+{
+  private String _name;
+  private String _description;
+  private String _tagClass;
+  private Map<String, Attribute> _attributes = new HashMap<String, Attribute>();
+
+  /**
+   * @return the tagClass
+   */
+  public String getTagClass()
+  {
+    return _tagClass;
+  }
+  
+  /**
+   * @param tagClass the tagClass to set
+   */
+  public void setTagClass(String tagClass)
+  {
+    _tagClass = tagClass;
+  }
+  
+  /**
+   * @return the name
+   */
+  public String getName()
+  {
+    return _name;
+  }
+
+  /**
+   * @param name the name to set
+   */
+  public void setName(String name)
+  {
+    _name = name;
+  }
+
+  /**
+   * @return the description
+   */
+  public String getDescription()
+  {
+    return _description;
+  }
+
+  /**
+   * @param description the description to set
+   */
+  public void setDescription(String description)
+  {
+    _description = description;
+  }
+
+  /**
+   * @return the attributes
+   */
+  public Map<String, Attribute> getAttributes()
+  {
+    return _attributes;
+  }
+  
+  public void addAttribute(Attribute attr)
+  {
+    _attributes.put(attr.getName(), attr);
+  }
+}
\ No newline at end of file
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/tld/TagLibrary.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/tld/TagLibrary.java
new file mode 100644
index 0000000..95cc400
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/metadata/tld/TagLibrary.java
@@ -0,0 +1,61 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidadexhibition.metadata.tld;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public class TagLibrary
+{
+  private String _shortName;
+  private Map<String, Tag> _tags = new HashMap<String, Tag>();
+
+  /**
+   * @return the shortName
+   */
+  public String getShortName()
+  {
+    return _shortName;
+  }
+
+  /**
+   * @param shortName the shortName to set
+   */
+  public void setShortName(String shortName)
+  {
+    _shortName = shortName;
+  }
+  
+  public void addTag(Tag tag)
+  {
+    _tags.put(tag.getName(), tag);
+  }
+  
+  /**
+   * @return the tags
+   */
+  public Map<String, Tag> getTags()
+  {
+    return _tags;
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/util/Functions.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/util/Functions.java
new file mode 100644
index 0000000..c5c6663
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/util/Functions.java
@@ -0,0 +1,22 @@
+/**
+ * 
+ */
+package org.apache.myfaces.trinidadexhibition.util;
+
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public final class Functions
+{
+  private Functions() {}
+  
+  public static String getActionURL(String viewId)
+  {
+    FacesContext facesContext = FacesContext.getCurrentInstance();
+    return facesContext.getApplication().getViewHandler().getActionURL(
+      facesContext, viewId);
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/ComponentIndexBean.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/ComponentIndexBean.java
new file mode 100644
index 0000000..b63c5a4
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/ComponentIndexBean.java
@@ -0,0 +1,42 @@
+/**
+ * 
+ */
+package org.apache.myfaces.trinidadexhibition.webapp;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.myfaces.trinidadexhibition.util.UtilFunctions;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public class ComponentIndexBean
+{
+  private Map<String, Integer> _numRowsMap = null;
+  
+  /**
+   * @return the numRowsMap
+   */
+  public Map<String, Integer> getNumRowsMap()
+  {
+    if (_numRowsMap == null)
+    {
+      synchronized (this)
+      {
+        if (_numRowsMap == null)
+        {
+          _numRowsMap = new HashMap<String, Integer>(3);
+          MetaDataBean metaData = UtilFunctions.evaluateEl("#{metaData}", MetaDataBean.class);
+          for (String str : new String[] { "tr", "trh", "trs" })
+          {
+            int count = metaData.getTagLibraries().get(str).getTags().size();
+            _numRowsMap.put(str, (int)Math.ceil(count / 3f));
+          }
+        }
+      }
+    }
+    return _numRowsMap;
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/MenusBean.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/MenusBean.java
new file mode 100644
index 0000000..ef69aa2
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/MenusBean.java
@@ -0,0 +1,40 @@
+/**
+ * 
+ */
+package org.apache.myfaces.trinidadexhibition.webapp;
+
+import javax.faces.model.SelectItem;
+
+import org.apache.myfaces.trinidadexhibition.util.UtilFunctions;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public class MenusBean
+{
+  private final SelectItem[] _mainMenuItems;
+  
+  public MenusBean()
+  {
+    _mainMenuItems = new SelectItem[] {
+      buildItem("menus_component_demo"),
+      buildItem("menus_feature_demo"),
+      buildItem("menus_example_apps"),
+      buildItem("menus_resources"),
+    };
+  }
+  
+  /**
+   * @return the mainMenuItems
+   */
+  public SelectItem[] getMainMenuItems()
+  {
+    return _mainMenuItems;
+  }
+  
+  private SelectItem buildItem(String key)
+  {
+    return new SelectItem(key, UtilFunctions.getBundleString(key));
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/MetaDataBean.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/MetaDataBean.java
new file mode 100644
index 0000000..f3cbbf7
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/MetaDataBean.java
@@ -0,0 +1,153 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidadexhibition.webapp;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.faces.FacesException;
+import javax.servlet.jsp.tagext.JspTag;
+
+import org.apache.myfaces.trinidad.webapp.UIXComponentTag;
+import org.apache.myfaces.trinidadexhibition.metadata.MetaDataUtils;
+import org.apache.myfaces.trinidadexhibition.metadata.facescontext.FacesConfigData;
+import org.apache.myfaces.trinidadexhibition.metadata.tld.Tag;
+import org.apache.myfaces.trinidadexhibition.metadata.tld.TagLibrary;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public class MetaDataBean
+{
+  private String _version;
+  private Map<String, TagLibrary> _tagLibraries;
+  private FacesConfigData _facesConfigData;
+  private Map<String, String> _componentTypeToTagName = new HashMap<String, String>();
+  private Map<String, String> _tagNameToComponentType = new HashMap<String, String>();
+  
+  public String getVersion()
+    throws IOException
+  {
+    if (_version == null)
+    {
+      synchronized (this)
+      {
+        if (_version == null)
+        {
+          _version = MetaDataUtils.getVersion();
+        }
+      }
+    }
+    return _version;
+  }
+  
+  /**
+   * @return the tagLibraries
+   */
+  public Map<String, TagLibrary> getTagLibraries()
+  {
+    initTagLibraries();
+    return _tagLibraries;
+  }
+  
+  /**
+   * @return the facesConfigData
+   */
+  public FacesConfigData getFacesConfigData()
+  {
+    initFacesConfigData();
+    return _facesConfigData;
+  }
+  
+  /**
+   * @return the componentTypeToTagName
+   */
+  public Map<String, String> getComponentTypeToTagName()
+  {
+    return _componentTypeToTagName;
+  }
+  
+  /**
+   * @return the tagNameToComponentType
+   */
+  public Map<String, String> getTagNameToComponentType()
+  {
+    return _tagNameToComponentType;
+  }
+  
+  private void initFacesConfigData()
+  {
+    if (_facesConfigData != null) return;
+    synchronized (this)
+    {
+      if (_facesConfigData != null) return;
+      
+      try
+      {
+        _facesConfigData = MetaDataUtils.getFacesConfigData();
+      }
+      catch (Exception ex)
+      {
+        throw new FacesException("Failed to parse faces-config data", ex);
+      }
+    }
+  }
+
+  private void initTagLibraries()
+  {
+    if (_tagLibraries != null) return;
+    synchronized (this)
+    {
+      if (_tagLibraries != null) return;
+      _tagLibraries = new HashMap<String, TagLibrary>();
+      
+      try
+      {
+        _tagLibraries.put("tr", MetaDataUtils.getTagLibrary("tr"));
+        _tagLibraries.put("trh", MetaDataUtils.getTagLibrary("trh"));
+        _tagLibraries.put("trs", MetaDataUtils.getTagLibrary("trs"));
+        
+        for (TagLibrary library : _tagLibraries.values())
+        {
+          for (Tag tag : library.getTags().values())
+          {
+            @SuppressWarnings("unchecked")
+            Class<JspTag> tagClass = (Class<JspTag>)Class.forName(tag.getTagClass());
+            
+            if (UIXComponentTag.class.isAssignableFrom(tagClass))
+            {
+              UIXComponentTag jspTag = (UIXComponentTag)tagClass.newInstance();
+              String tagName = new StringBuilder(library.getShortName())
+                .append(':').append(tag.getName()).toString();
+              String compType = jspTag.getComponentType();
+              _componentTypeToTagName.put(compType, tagName);
+              _tagNameToComponentType.put(tagName, compType);
+            }
+          }
+        }
+      }
+      catch (Exception ex)
+      {
+        throw new FacesException("Failed to parse TLD information", ex);
+      }
+    }
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/PreferencesBean.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/PreferencesBean.java
new file mode 100644
index 0000000..f6d6c66
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/PreferencesBean.java
@@ -0,0 +1,63 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidadexhibition.webapp;
+
+
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public class PreferencesBean
+{
+  private String _skinFamily = "demo-skin";
+  private String _accessibilityMode;
+  
+  /**
+   * @return the skinFamily
+   */
+  public String getSkinFamily()
+  {
+    return _skinFamily;
+  }
+  
+  /**
+   * @param skinFamily the skinFamily to set
+   */
+  public void setSkinFamily(String skinFamily)
+  {
+    _skinFamily = skinFamily;
+  }
+
+  /**
+   * @return the accessibilityMode
+   */
+  public String getAccessibilityMode()
+  {
+    return _accessibilityMode;
+  }
+
+  /**
+   * @param accessibilityMode the accessibilityMode to set
+   */
+  public void setAccessibilityMode(String accessibilityMode)
+  {
+    _accessibilityMode = accessibilityMode;
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/SourceCodeServlet.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/SourceCodeServlet.java
new file mode 100644
index 0000000..309ec2b
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/SourceCodeServlet.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law
+ * or agreed to in writing, software distributed under the License is
+ * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+package org.apache.myfaces.trinidadexhibition.webapp;
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+
+public class SourceCodeServlet
+  extends HttpServlet
+{
+  @Override
+  public void doGet(HttpServletRequest req, HttpServletResponse res)
+    throws IOException, ServletException
+  {
+    String webPage = req.getServletPath();
+
+    // remove the '*.source' suffix that maps to this servlet
+    int source = webPage.indexOf(".source");
+    webPage = webPage.substring(0, source);
+
+    // remove "/faces" mapping if present
+    webPage = StringUtils.remove(webPage, "/faces");
+
+    // get the actual file location of the requested resource
+    String realPath =
+        getServletConfig().getServletContext().getRealPath(webPage);
+
+    // output an HTML page
+    res.setContentType("text/plain");
+
+    // print some html
+    ServletOutputStream out = res.getOutputStream();
+
+    // print the file
+    InputStream in = null;
+    try
+    {
+
+      in = new BufferedInputStream(new FileInputStream(realPath));
+      int ch;
+      while ((ch = in.read()) != -1)
+      {
+        out.print((char)ch);
+      }
+    }
+    finally
+    {
+      if (in != null)
+        in.close(); // very important
+    }
+  }
+
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/resources/org/apache/myfaces/trinidadexhibition/BundleMessages.properties b/trinidad-examples/trinidad-exhibition/web/src/main/resources/org/apache/myfaces/trinidadexhibition/BundleMessages.properties
new file mode 100644
index 0000000..c320e47
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/resources/org/apache/myfaces/trinidadexhibition/BundleMessages.properties
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+template_main_about_link=About
+template_main_about_title=About - Trinidad Exhibition
+template_main_about_version=Version:
+template_main_main_menu_text=Jump To
+
+template_component_view_source=View Source
+
+copyright=� 2008 The Apache Software Foundation
+
+menus_component_demo=Component Demonstration
+menus_feature_demo=Feature Demonstration
+menus_example_apps=Example Applications
+menus_resources=External Resource Links
+
+# /components/index.xhtml
+component_index_tab_tr=Trinidad Core
+component_index_tab_trh=Trinidad HTML
+component_index_tab_trs=Trinidad Sandbox
\ No newline at end of file
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/facelets/templates/component.xhtml b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/facelets/templates/component.xhtml
new file mode 100644
index 0000000..fe4d0c2
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/facelets/templates/component.xhtml
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<html
+  xmlns="http://www.w3.org/1999/xhtml"
+  xmlns:c="http://java.sun.com/jstl/core"
+  xmlns:f="http://java.sun.com/jsf/core"
+  xmlns:fn="http://java.sun.com/jsp/jstl/functions"
+  xmlns:h="http://java.sun.com/jsf/html"
+  xmlns:ui="http://java.sun.com/jsf/facelets"
+  xmlns:tr="http://myfaces.apache.org/trinidad"
+  xmlns:trh="http://myfaces.apache.org/trinidad/html"
+  xmlns:tre="http://myfaces.apache.org/trinidad/exhibition">
+  <body>
+    <ui:composition template="/WEB-INF/facelets/templates/main.xhtml">
+      <ui:define name="globalLinksStart">
+        <tre:viewSource text="#{msgs.template_component_view_source}" />
+      </ui:define>
+    </ui:composition>
+  </body>
+</html>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/facelets/templates/main.xhtml b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/facelets/templates/main.xhtml
new file mode 100644
index 0000000..4c4221d
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/facelets/templates/main.xhtml
@@ -0,0 +1,161 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<tr:document
+  xmlns="http://www.w3.org/1999/xhtml"
+  xmlns:c="http://java.sun.com/jstl/core"
+  xmlns:f="http://java.sun.com/jsf/core"
+  xmlns:fn="http://java.sun.com/jsp/jstl/functions"
+  xmlns:h="http://java.sun.com/jsf/html"
+  xmlns:ui="http://java.sun.com/jsf/facelets"
+  xmlns:tr="http://myfaces.apache.org/trinidad"
+  xmlns:trh="http://myfaces.apache.org/trinidad/html"
+  xmlns:tre="http://myfaces.apache.org/trinidad/exhibition"
+  inlineStyle="height: 100%; width: 100%; margin: 0px; padding: 0px;">
+  <f:facet name="metaContainer">
+    <tr:group>
+      <ui:insert name="head" />
+      <style type="text/css">
+HTML,
+BODY,
+FORM {
+  height: 100%;
+  width: 100%;
+  margin: 0px;
+  padding: 0px;
+  overflow: auto;
+}
+DIV.templateBody {
+  position: absolute;
+  height: 100%;
+  width: 100%;
+  overflow: auto;
+}
+.aboutLabel,
+.aboutValue {
+  text-align: left;
+  vertical-align: top;
+}
+.aboutLabel {
+  font-weight: bold;
+}
+.aboutValue {
+  width: 100%;
+}
+      </style>
+    </tr:group>
+  </f:facet>
+  <tr:form id="mainForm">
+    <tr:panelBorderLayout
+      id="templateFrame"
+      layout="positioned"
+      inlineStyle="height: 99.9%; width: 99.9%; position: absolute; top: 0px; left: 0px;"
+      topHeight="45px"
+      rightWidth="225px"
+      bottomHeight="30px"
+      innerTopHeight="6px"
+      innerRightWidth="6px"
+      innerBottomHeight="6px"
+      innerLeftWidth="6px">
+      <f:facet name="top">
+        <tr:panelBorderLayout
+          layout="positioned"
+          inlineStyle="height: 100%; width: 100%; position: absolute; top: 0px; left: 0px;"
+          leftWidth="114px"
+          rightWidth="150px">
+          <f:facet
+            name="left">
+            <tr:group>
+              <div class="AFTitleBarLogo">
+                <h:outputText value="&#160;" escape="false" />
+              </div>
+            </tr:group>
+          </f:facet>
+          <f:facet
+            name="right">
+            <tr:panelGroupLayout
+              inlineStyle="white-space: nowrap; display: block; overflow: hidden;
+                height: 100%; position: relative; padding-right: 6px;"
+              styleClass="AFTitleBar">
+              <f:facet name="separator">
+                <tr:outputText value="&#160;|&#160;" escape="false" />
+              </f:facet>
+              <tr:panelPopup
+                triggerType="hover"
+                text="#{msgs.template_main_main_menu_text}">
+                <tr:iterator
+                  var="_item"
+                  value="#{menus.mainMenuItems}">
+                  <tr:commandLink
+                    partialSubmit="true"
+                    immediate="true"
+                    text="#{_item.label}"
+                    action="#{_item.value}"
+                    styleClass="popupMenuLink" />
+                </tr:iterator>
+              </tr:panelPopup>
+              <tr:panelPopup
+                id="aboutDialog"
+                text="#{msgs.template_main_about_link}"
+                modal="true"
+                width="450"
+                position="centered"
+                triggerType="click"
+                title="#{msgs.template_main_about_title}">
+                <h:panelGrid
+                  columns="2"
+                  columnClasses="aboutLabel, aboutValue"
+                  styleClass="AFLogoWatermark"
+                  style="height: 200px; width: 100%;">
+                  <tr:outputText
+                    value="#{msgs.template_main_about_version}" />
+                  <tr:outputText
+                    value="#{metaData.version}" />
+                </h:panelGrid>
+              </tr:panelPopup>
+            </tr:panelGroupLayout>
+          </f:facet>
+          <div class="AFTitleBarFade">
+            <tr:icon name="AFTitleBarFadeIcon" />
+          </div>
+        </tr:panelBorderLayout>
+      </f:facet>
+      <f:facet name="right">
+        <tr:group>
+          <div class="templateRight">
+            <ui:insert name="right" />
+          </div>
+        </tr:group>
+      </f:facet>
+      <f:facet name="innerTop"><tr:outputText value="&#160;" escape="false" /></f:facet>
+      <f:facet name="innerRight"><tr:outputText value="&#160;" escape="false" /></f:facet>
+      <f:facet name="innerBottom"><tr:outputText value="&#160;" escape="false" /></f:facet>
+      <f:facet name="innerLeft"><tr:outputText value="&#160;" escape="false" /></f:facet>
+      <f:facet name="bottom">
+        <tr:outputText
+          value="#{msgs.copyright}"
+          inlineStyle="display: block; padding-left: 8px;"
+          styleClass="AFPageFooter"/>
+      </f:facet>
+      <div
+        class="templateBody">
+        <ui:insert name="body" />
+      </div>
+    </tr:panelBorderLayout>
+  </tr:form>
+</tr:document>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/faces-config.xml b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/faces-config.xml
new file mode 100644
index 0000000..f3bb6c0
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/faces-config.xml
@@ -0,0 +1,115 @@
+<?xml version="1.0"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+	   
+-->
+<!DOCTYPE faces-config PUBLIC
+  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
+  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd" >
+<faces-config>
+  <application>
+    <!-- Use the Trinidad RenderKit -->
+    <default-render-kit-id>
+      org.apache.myfaces.trinidad.core
+    </default-render-kit-id>
+
+    <locale-config>
+      <default-locale>en</default-locale>
+      <!-- TODO: add translations -->
+    </locale-config>
+    
+    <message-bundle>
+      org.apache.myfaces.trinidadexhibition.BundleMessages
+    </message-bundle>
+
+    <resource-bundle>
+      <base-name>org.apache.myfaces.trinidadexhibition.BundleMessages</base-name>
+      <var>msgs</var>
+    </resource-bundle>
+  </application>
+  
+  <managed-bean>
+    <description>
+      Bean for collecting faces meta data for use in the demo pages.
+    </description>
+    <managed-bean-name>metaData</managed-bean-name>
+    <managed-bean-class>
+      org.apache.myfaces.trinidadexhibition.webapp.MetaDataBean
+    </managed-bean-class>
+    <managed-bean-scope>application</managed-bean-scope>
+  </managed-bean>
+  
+  <managed-bean>
+    <description>
+      Bean for managing the exhibition menus
+    </description>
+    <managed-bean-name>menus</managed-bean-name>
+    <managed-bean-class>
+      org.apache.myfaces.trinidadexhibition.webapp.MenusBean
+    </managed-bean-class>
+  </managed-bean>
+
+  <managed-bean>
+    <description>
+      Bean for storing the application preferences
+    </description>
+    <managed-bean-name>prefs</managed-bean-name>
+    <managed-bean-class>
+      org.apache.myfaces.trinidadexhibition.webapp.PreferencesBean
+    </managed-bean-class>
+    <managed-bean-scope>session</managed-bean-scope>
+  </managed-bean>
+
+  <managed-bean>
+    <description>
+      Bean for the component index page
+    </description>
+    <managed-bean-name>componentIndex</managed-bean-name>
+    <managed-bean-class>
+      org.apache.myfaces.trinidadexhibition.webapp.ComponentIndexBean
+    </managed-bean-class>
+    <managed-bean-scope>application</managed-bean-scope>
+  </managed-bean>
+  
+  <navigation-rule>
+    <!-- Global rules -->
+
+    <!-- Main menu -->
+    <navigation-case>
+      <from-outcome>menus_component_demo</from-outcome>
+      <to-view-id>/components/index.xhtml</to-view-id>
+      <redirect/>
+    </navigation-case>
+    <navigation-case>
+      <from-outcome>menus_feature_demo</from-outcome>
+      <to-view-id>/features/index.xhtml</to-view-id>
+      <redirect/>
+    </navigation-case>
+    <navigation-case>
+      <from-outcome>menus_example_apps</from-outcome>
+      <to-view-id>/examples/index.xhtml</to-view-id>
+      <redirect/>
+    </navigation-case>
+    <navigation-case>
+      <from-outcome>menus_resources</from-outcome>
+      <to-view-id>resources.xhtml</to-view-id>
+      <redirect/>
+    </navigation-case>
+  </navigation-rule>
+
+</faces-config>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/trfn.taglib.xml b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/trfn.taglib.xml
new file mode 100644
index 0000000..1d51aff
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/trfn.taglib.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE facelet-taglib
+  PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
+<facelet-taglib xmlns="http://java.sun.com/JSF/Facelet">
+  <namespace>http://myfaces.apache.org/trinidad/exhibition/functions</namespace>
+  <function>
+    <function-name>getActionURL</function-name>
+    <function-class>org.apache.myfaces.trinidadexhibition.util.Functions</function-class>
+    <function-signature>java.lang.String getActionURL(java.lang.String)</function-signature>
+  </function>
+</facelet-taglib>
\ No newline at end of file
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/trinidad-config.xml b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/trinidad-config.xml
new file mode 100644
index 0000000..9353b6a
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/trinidad-config.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+	   
+-->
+<trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
+  <debug-output>true</debug-output>
+  <!-- Uncomment to switch back to ALERT style client-side validation,
+    or set to DISABLED to disable it altogether
+  <client-validation>ALERT</client-validation>
+  -->
+  <accessibility-mode>#{prefs.accessibilityMode}</accessibility-mode>
+  <skin-family>#{prefs.skinFamily}</skin-family>
+  
+</trinidad-config>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/trinidad-skins.xml b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/trinidad-skins.xml
new file mode 100644
index 0000000..33e98ed
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/trinidad-skins.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<skins xmlns="http://myfaces.apache.org/trinidad/skin">
+  <skin>
+      <id>test-myfaces.desktop</id>
+      <family>test-myfaces</family>
+      <extends>simple.desktop</extends>
+      <render-kit-id>org.apache.myfaces.trinidad.desktop</render-kit-id>
+      <style-sheet-name>skins/test-myfaces/test-myfaces.css</style-sheet-name>
+  </skin>
+  <skin>
+      <id>demo-skin.desktop</id>
+      <family>demo-skin</family>
+      <extends>test-myfaces.desktop</extends>
+      <render-kit-id>org.apache.myfaces.trinidad.desktop</render-kit-id>
+      <style-sheet-name>skins/demo-skin/demo-skin.css</style-sheet-name>
+  </skin>
+</skins>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/web.xml b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..0af0796
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,194 @@
+<?xml version = '1.0' encoding = 'ISO-8859-1'?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+	   
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+         version="2.5">
+  
+  <context-param>
+    <param-name>facelets.LIBRARIES</param-name>
+    <param-value>/WEB-INF/trfn.taglib.xml</param-value>
+  </context-param>
+  
+  <!-- Use client-side state saving.  In Trinidad, it is an
+     optimized, token-based mechanism that is almost always a
+     better choice than the standard JSF server-side state saving. -->
+  <context-param>
+    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
+    <param-value>client</param-value>
+  </context-param>
+
+  <context-param>
+    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+    <param-value>.xhtml</param-value>
+  </context-param>
+
+  <!-- Parameter to set the maximum number of client view state tokens.
+     Uncomment this to test low-token-count scenarios.
+  <context-param>
+    <param-name>org.apache.myfaces.trinidad.CLIENT_STATE_MAX_TOKENS</param-name>
+    <param-value>3</param-value>
+  </context-param>
+  -->
+
+  <!-- Trinidad by default uses an optimized client-side state saving
+     mechanism. To disable that, uncomment the following -->
+  <!--context-param>
+    <param-name>org.apache.myfaces.trinidad.CLIENT_STATE_METHOD</param-name>
+    <param-value>all</param-value>
+  </context-param-->
+
+  <!-- Trinidad also supports an optimized strategy for caching some
+   view state at an application level, which significantly improves
+   scalability.  However, it makes it harder to develop (updates to
+   pages will not be noticed until the server is restarted), and in
+   some rare cases cannot be used for some pages (see Trinidad
+   documentation for more information) -->
+  <context-param>
+    <param-name>org.apache.myfaces.trinidad.USE_APPLICATION_VIEW_CACHE</param-name>
+    <param-value>false</param-value>
+  </context-param>
+
+  <!-- Comment this if you are not debugging skinning and want the 
+    styleclasses to not be compressed -->
+  <context-param>
+    <param-name>org.apache.myfaces.trinidad.DISABLE_CONTENT_COMPRESSION</param-name>
+    <param-value>true</param-value>
+  </context-param>
+
+  <!-- If this parameter is enabled, Trinidad will automatically
+    check the modification date of your JSPs, and discard saved
+    state when they change. Trinidad will also automatically check
+    if your skinning css files have changed without having to restart
+    the server; this makes development easier,
+    but adds overhead that should be avoided when your application
+    is deployed. -->
+  <context-param>
+    <param-name>org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION</param-name>
+    <param-value>true</param-value>
+  </context-param>
+
+  <!-- Enables Change Persistence at a session scope.  By default,
+    Change Persistence is entirely disabled. The ChangeManager is
+    an API, which can persist component modifications (like,
+    is a showDetail or tree expanded or collapsed). For providing
+    a custom Change Persistence implementation inherit from the 
+    Trinidad API's ChangeManager class. As the value you have 
+    to use the fullqualified class name. -->
+  <!--context-param>
+    <param-name>org.apache.myfaces.trinidad.CHANGE_PERSISTENCE</param-name>
+    <param-value>session</param-value>
+  </context-param-->
+  
+  <context-param>
+    <param-name>org.apache.myfaces.trinidad.resource.DEBUG</param-name>
+    <param-value>false</param-value>
+  </context-param>
+
+  <context-param>
+    <param-name>org.apache.myfaces.trinidad.DEBUG_JAVASCRIPT</param-name>
+    <param-value>true</param-value>
+  </context-param>
+
+  <!-- With setting this parameter you are able to specify the logical
+    outcome prefix to launch the dialog framework. If not set, the
+    default value (dialog:) is used. -->
+  <!--context-param>
+    <param-name>org.apache.myfaces.trinidad.DIALOG_NAVIGATION_PREFIX</param-name>
+    <param-value>userInputHere:</param-value>
+  </context-param--> 
+
+  <context-param>
+    <param-name>org.apache.myfaces.trinidad.ALTERNATE_VIEW_HANDLER</param-name>
+    <param-value>com.sun.facelets.FaceletViewHandler</param-value>
+  </context-param>
+
+  <context-param>
+    <param-name>facelets.VIEW_MAPPINGS</param-name>
+    <param-value>*.xhtml</param-value>
+  </context-param>     
+
+  <context-param>
+    <param-name>facelets.SKIP_COMMENTS</param-name>
+    <param-value>true</param-value>
+  </context-param>
+
+  <filter>
+    <filter-name>trinidad</filter-name>
+    <filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class>
+  </filter>
+  
+  <filter-mapping>
+    <filter-name>trinidad</filter-name>
+    <servlet-name>faces</servlet-name>
+  </filter-mapping>
+
+  <!-- Faces Servlet -->
+  <servlet>
+    <servlet-name>faces</servlet-name>
+    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+  </servlet>
+  
+  <!-- resource loader servlet -->
+  <servlet>
+    <servlet-name>resources</servlet-name>
+    <servlet-class>org.apache.myfaces.trinidad.webapp.ResourceServlet</servlet-class>
+  </servlet>
+
+  <!-- source code servlet -->
+  <servlet>
+    <servlet-name>source</servlet-name>
+    <servlet-class>
+      org.apache.myfaces.trinidadexhibition.webapp.SourceCodeServlet
+    </servlet-class>
+  </servlet>
+
+  <!-- Faces Servlet Mappings -->
+  <servlet-mapping>
+    <servlet-name>faces</servlet-name>
+    <url-pattern>/faces/*</url-pattern>
+  </servlet-mapping>
+
+  <servlet-mapping>
+    <servlet-name>faces</servlet-name>
+    <url-pattern>*.jsf</url-pattern>
+  </servlet-mapping>
+    
+  <servlet-mapping>
+    <servlet-name>resources</servlet-name>
+    <url-pattern>/adf/*</url-pattern>
+  </servlet-mapping>
+  
+  <servlet-mapping>
+    <servlet-name>resources</servlet-name>
+    <url-pattern>/myfaces_skin/*</url-pattern>
+  </servlet-mapping>
+
+  <servlet-mapping>
+    <servlet-name>source</servlet-name>
+    <url-pattern>*.source</url-pattern>
+  </servlet-mapping>
+
+  <!-- Welcome Files -->
+  <welcome-file-list>
+    <welcome-file>index.jsf</welcome-file>
+  </welcome-file-list>
+</web-app>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/components/index.xhtml b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/components/index.xhtml
new file mode 100644
index 0000000..029a586
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/components/index.xhtml
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<html
+  xmlns="http://www.w3.org/1999/xhtml"
+  xmlns:c="http://java.sun.com/jstl/core"
+  xmlns:f="http://java.sun.com/jsf/core"
+  xmlns:fn="http://java.sun.com/jsp/jstl/functions"
+  xmlns:h="http://java.sun.com/jsf/html"
+  xmlns:ui="http://java.sun.com/jsf/facelets"
+  xmlns:tr="http://myfaces.apache.org/trinidad"
+  xmlns:trh="http://myfaces.apache.org/trinidad/html"
+  xmlns:tre="http://myfaces.apache.org/trinidad/exhibition"
+  xmlns:trfn="http://myfaces.apache.org/trinidad/exhibition/functions">
+  <body>
+    <ui:composition template="/WEB-INF/facelets/templates/main.xhtml">
+      <ui:define name="body">
+        <tr:panelTabbed>
+          <tr:showDetailItem
+            text="#{msgs.component_index_tab_tr}">
+            <tr:panelList
+              rows="#{componentIndex.numRowsMap['tr']}">
+              <tr:goLink 
+                
+            </tr:panelList>
+          </tr:showDetailItem>
+          <tr:showDetailItem
+            text="#{msgs.component_index_tab_trh}">
+          </tr:showDetailItem>
+          <tr:showDetailItem
+            text="#{msgs.component_index_tab_trs}">
+          </tr:showDetailItem>          
+        </tr:panelTabbed>
+      </ui:define>
+    </ui:composition>
+  </body>
+</html>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/index.xhtml b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/index.xhtml
new file mode 100644
index 0000000..fb6cc71
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/index.xhtml
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<html
+  xmlns="http://www.w3.org/1999/xhtml"
+  xmlns:c="http://java.sun.com/jstl/core"
+  xmlns:f="http://java.sun.com/jsf/core"
+  xmlns:fn="http://java.sun.com/jsp/jstl/functions"
+  xmlns:h="http://java.sun.com/jsf/html"
+  xmlns:ui="http://java.sun.com/jsf/facelets"
+  xmlns:tr="http://myfaces.apache.org/trinidad"
+  xmlns:trh="http://myfaces.apache.org/trinidad/html"
+  xmlns:tre="http://myfaces.apache.org/trinidad/exhibition">
+  <body>
+    <ui:composition template="/WEB-INF/facelets/templates/main.xhtml">
+      <ui:define name="body">
+        Tree: <tr:outputText value="#{metaData.tagLibraries['tr'].tags['tree'].description}" escape="false" /><br/>
+        Tree component:
+          <tr:outputText
+            value="#{metaData.facesConfigData.components['org.apache.myfaces.trinidad.CoreTree'].description}"
+            escape="false" /><br/>
+        forEach: <tr:outputText value="#{metaData.tagLibraries['tr'].tags['forEach'].description}" escape="false" /><br/>
+        
+        <tr:panelBox background="dark">
+          Test1
+        </tr:panelBox>
+        <tr:panelBox background="medium">
+          Test2
+        </tr:panelBox>
+        <tr:panelBox background="light">
+          Test3
+        </tr:panelBox>
+        <tr:panelBox background="transparent">
+          Test4
+        </tr:panelBox>
+        #{prefs.skinFamily}
+      </ui:define>
+    </ui:composition>
+  </body>
+</html>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/skins/demo-skin/demo-skin.css b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/skins/demo-skin/demo-skin.css
new file mode 100644
index 0000000..16a39e1
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/skins/demo-skin/demo-skin.css
@@ -0,0 +1,8 @@
+/* This file holds the extensions to the myfaces skin that are specific to the demo */
+
+.OraLink.popupMenuLink {
+  display: block;
+  white-space: nowrap;
+  padding: 0px 8px;
+  padding-top: 2px;
+}
\ No newline at end of file
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/skins/test-myfaces/README b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/skins/test-myfaces/README
new file mode 100644
index 0000000..b07c543
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/skins/test-myfaces/README
@@ -0,0 +1,9 @@
+This is not a real skin, but a way for developers to change and test the myfaces skin
+without having to re-deploy the skin jar over and over again.
+
+To use, execute this command from the trinidad-exhibition working copy directory on a Linux OS:
+(cd web/src/main/webapp/skins/test-myfaces/ && \
+ln -snf ../../../../../../../../trinidad-skins/myfaces-skin/src/main/resources/META-INF/style/myfaces-desktop.css \
+test-myfaces.css) 
+
+Now all changes to this test skin will be made to the real one.
\ No newline at end of file
diff --git a/trinidad-skins/myfaces-skin/pom.xml b/trinidad-skins/myfaces-skin/pom.xml
new file mode 100644
index 0000000..c976915
--- /dev/null
+++ b/trinidad-skins/myfaces-skin/pom.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+  xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+  
+  <modelVersion>4.0.0</modelVersion>
+  
+  <artifactId>trinidad-myfaces-skin</artifactId>
+
+  <name>Apache MyFaces Trinidad MyFaces Skin</name>
+  <description>
+    Skin to make Trinidad resemble the look and feel of the MyFaces site
+  </description>
+
+  <parent>
+    <groupId>org.apache.myfaces.trinidad</groupId>
+    <artifactId>trinidad</artifactId>
+    <version>1.2.8-SNAPSHOT</version>
+  </parent>
+  
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.myfaces.core</groupId>
+      <artifactId>myfaces-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>trinidad-api</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+    
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
+      <artifactId>trinidad-impl</artifactId>
+      <version>${pom.version}</version>
+    </dependency>
+  </dependencies>
+
+</project>
+
diff --git a/trinidad-skins/myfaces-skin/src/main/java/org/apache/myfaces/trinidad/resource/MyFacesSkinImageResourceLoader.java b/trinidad-skins/myfaces-skin/src/main/java/org/apache/myfaces/trinidad/resource/MyFacesSkinImageResourceLoader.java
new file mode 100644
index 0000000..3efc385
--- /dev/null
+++ b/trinidad-skins/myfaces-skin/src/main/java/org/apache/myfaces/trinidad/resource/MyFacesSkinImageResourceLoader.java
@@ -0,0 +1,48 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidad.resource;
+
+import java.io.IOException;
+import java.net.URL;
+
+/**
+ * Loads images for the MyFaces skin
+ */
+public class MyFacesSkinImageResourceLoader
+  extends ClassLoaderResourceLoader
+{
+  public MyFacesSkinImageResourceLoader()
+  {
+    super("META-INF/images");
+  }
+  
+  /**
+   * @see org.apache.myfaces.trinidad.resource.ClassLoaderResourceLoader#findResource(
+   * java.lang.String)
+   */
+  @Override
+  protected URL findResource(String path) throws IOException
+  {
+    if (path != null && path.startsWith("/myfaces_skin"))
+    {
+      path = path.substring(13);
+    }
+    return super.findResource(path);
+  }
+}
diff --git a/trinidad-skins/myfaces-skin/src/main/java/org/apache/myfaces/trinidad/resource/MyFacesSkinResourceLoader.java b/trinidad-skins/myfaces-skin/src/main/java/org/apache/myfaces/trinidad/resource/MyFacesSkinResourceLoader.java
new file mode 100644
index 0000000..ce82dda
--- /dev/null
+++ b/trinidad-skins/myfaces-skin/src/main/java/org/apache/myfaces/trinidad/resource/MyFacesSkinResourceLoader.java
@@ -0,0 +1,17 @@
+/**
+ * 
+ */
+package org.apache.myfaces.trinidad.resource;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public class MyFacesSkinResourceLoader
+  extends RegexResourceLoader
+{
+  public MyFacesSkinResourceLoader()
+  {
+    register("(/.*\\.(jgp|gif|png|jpeg|cur))", new MyFacesSkinImageResourceLoader());
+  }
+}
diff --git a/trinidad-skins/myfaces-skin/src/main/java/org/apache/myfaces/trinidad/skins/MyFacesSkinLoader.java b/trinidad-skins/myfaces-skin/src/main/java/org/apache/myfaces/trinidad/skins/MyFacesSkinLoader.java
new file mode 100644
index 0000000..ad4fab7
--- /dev/null
+++ b/trinidad-skins/myfaces-skin/src/main/java/org/apache/myfaces/trinidad/skins/MyFacesSkinLoader.java
@@ -0,0 +1,63 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidad.skins;
+
+import javax.faces.context.ExternalContext;
+
+import org.apache.myfaces.trinidad.config.Configurator;
+import org.apache.myfaces.trinidad.skin.SkinFactory;
+import org.apache.myfaces.trinidadinternal.skin.SkinExtension;
+
+/**
+ * Loads the skins into the skin factory
+ *
+ * @author Andrew Robinson
+ */
+public class MyFacesSkinLoader
+  extends Configurator
+{
+  /**
+   * @see org.apache.myfaces.trinidad.config.Configurator#init(javax.faces.context.ExternalContext)
+   */
+  @Override
+  public void init(ExternalContext externalContext)
+  {
+    super.init(externalContext);
+    
+    SkinFactory skinFactory = SkinFactory.getFactory();
+    
+    SkinExtension skin = new SkinExtension(
+      skinFactory.getSkin(null, "simple.desktop"),
+      "myfaces.desktop",
+      "myfaces",
+      "org.apache.myfaces.trinidad.desktop",
+      "META-INF/style/myfaces-desktop.css");
+    
+    skinFactory.addSkin(skin.getId(), skin);
+    
+    skin = new SkinExtension(
+      skinFactory.getSkin(null, "simple.pda"),
+      "myfaces.pda",
+      "myfaces",
+      "org.apache.myfaces.trinidad.pda",
+      "META-INF/style/myfaces-pda.css");
+    
+    skinFactory.addSkin(skin.getId(), skin);
+  }
+}
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/bg-fade-1.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/bg-fade-1.png
new file mode 100644
index 0000000..cb82ada
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/bg-fade-1.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/bg-fade-2.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/bg-fade-2.png
new file mode 100644
index 0000000..3effe10
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/bg-fade-2.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/bg-fade-3.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/bg-fade-3.png
new file mode 100644
index 0000000..e9d793d
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/bg-fade-3.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/brown-bullet.gif b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/brown-bullet.gif
new file mode 100644
index 0000000..a4357cb
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/brown-bullet.gif differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/dialog-close.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/dialog-close.png
new file mode 100644
index 0000000..edf5f76
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/dialog-close.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/external-link.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/external-link.png
new file mode 100644
index 0000000..3f999fc
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/external-link.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/footer-bg.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/footer-bg.png
new file mode 100644
index 0000000..5e3f9cd
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/footer-bg.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/menu-expand.gif b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/menu-expand.gif
new file mode 100644
index 0000000..b964caf
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/menu-expand.gif differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-small.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-small.png
new file mode 100644
index 0000000..b8c532b
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-small.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-with-text-small.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-with-text-small.png
new file mode 100644
index 0000000..361192c
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-with-text-small.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-with-text-watermark.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-with-text-watermark.png
new file mode 100644
index 0000000..318314c
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-with-text-watermark.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-with-text.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-with-text.png
new file mode 100644
index 0000000..a401785
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo-with-text.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo.png
new file mode 100644
index 0000000..43e4a48
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/myfaces-logo.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/orange-bullet.gif b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/orange-bullet.gif
new file mode 100644
index 0000000..a23c02b
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/orange-bullet.gif differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-bottom-left.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-bottom-left.png
new file mode 100644
index 0000000..07b0acf
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-bottom-left.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-bottom-right.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-bottom-right.png
new file mode 100644
index 0000000..5d85cab
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-bottom-right.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-bottom.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-bottom.png
new file mode 100644
index 0000000..1fd108a
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-bottom.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-center.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-center.png
new file mode 100644
index 0000000..355358c
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-center.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-left.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-left.png
new file mode 100644
index 0000000..d8e774b
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-left.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-right.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-right.png
new file mode 100644
index 0000000..14378bb
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-right.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-top-left.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-top-left.png
new file mode 100644
index 0000000..60fe49b
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-top-left.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-top-right.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-top-right.png
new file mode 100644
index 0000000..3e29bae
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-top-right.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-top.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-top.png
new file mode 100644
index 0000000..df7d42e
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-dark-top.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-bottom-left.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-bottom-left.png
new file mode 100644
index 0000000..dbc7029
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-bottom-left.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-bottom-right.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-bottom-right.png
new file mode 100644
index 0000000..9e72eb6
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-bottom-right.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-bottom.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-bottom.png
new file mode 100644
index 0000000..303496d
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-bottom.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-center.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-center.png
new file mode 100644
index 0000000..82deaec
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-center.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-left.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-left.png
new file mode 100644
index 0000000..670b3b5
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-left.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-right.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-right.png
new file mode 100644
index 0000000..ca4fbdc
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-right.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-top-left.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-top-left.png
new file mode 100644
index 0000000..c8cb777
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-top-left.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-top-right.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-top-right.png
new file mode 100644
index 0000000..856a33c
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-top-right.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-top.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-top.png
new file mode 100644
index 0000000..3ac7050
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-light-top.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-bottom-left.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-bottom-left.png
new file mode 100644
index 0000000..dcaf41e
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-bottom-left.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-bottom-right.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-bottom-right.png
new file mode 100644
index 0000000..062e5ae
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-bottom-right.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-bottom.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-bottom.png
new file mode 100644
index 0000000..a4b529f
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-bottom.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-center.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-center.png
new file mode 100644
index 0000000..627bfa1
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-center.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-left.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-left.png
new file mode 100644
index 0000000..a700996
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-left.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-right.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-right.png
new file mode 100644
index 0000000..9a20e10
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-right.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-top-left.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-top-left.png
new file mode 100644
index 0000000..7a66b8a
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-top-left.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-top-right.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-top-right.png
new file mode 100644
index 0000000..763a000
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-top-right.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-top.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-top.png
new file mode 100644
index 0000000..44f5d2d
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/panel-box-medium-top.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/title-bg-fade.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/title-bg-fade.png
new file mode 100644
index 0000000..f0edab9
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/title-bg-fade.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/title-bg.png b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/title-bg.png
new file mode 100644
index 0000000..7b41b40
Binary files /dev/null and b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/images/title-bg.png differ
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/services/org.apache.myfaces.trinidad.config.Configurator b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/services/org.apache.myfaces.trinidad.config.Configurator
new file mode 100644
index 0000000..9e40c1f
--- /dev/null
+++ b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/services/org.apache.myfaces.trinidad.config.Configurator
@@ -0,0 +1 @@
+org.apache.myfaces.trinidad.skins.MyFacesSkinLoader
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/servlets/resources/myfaces_skin.resources b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/servlets/resources/myfaces_skin.resources
new file mode 100644
index 0000000..03bc138
--- /dev/null
+++ b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/servlets/resources/myfaces_skin.resources
@@ -0,0 +1 @@
+org.apache.myfaces.trinidad.resource.MyFacesSkinResourceLoader
\ No newline at end of file
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/style/myfaces-desktop.css b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/style/myfaces-desktop.css
new file mode 100644
index 0000000..d602da0
--- /dev/null
+++ b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/style/myfaces-desktop.css
@@ -0,0 +1,315 @@
+/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/
+.AFBackgroundLightGradientStart:alias {
+  background-color: #ecf2e4;
+}
+.AFBackgroundLightGradientEnd:alias {
+  background-color: #dae5cb;
+}
+.AFLightTextColor:alias {
+  color: #669900;
+}
+.AFLightTextDisabledColor:alias {
+  color: #8c9973
+}
+.AFDarkTextColor:alias {
+  color: #705F38;
+}
+.AFDarkTextDisabledColor:alias {
+  color: #706b5f;
+}
+.AFTextColorHover:alias {
+  color: #FF9900;
+}
+.AFLightElementBorder:alias {
+  border: 1px solid #669900;
+}
+
+.AFDefaultLink:alias {
+  text-decoration: none;
+  -tr-rule-ref:selector(".AFLightTextColor:alias");
+}
+.AFDefaultLinkHover:alias {
+  text-decoration: none;
+  -tr-rule-ref:selector(".AFTextColorHover:alias");
+}
+.AFDefaultLinkDisabled:alias {
+  text-decoration: none;
+  -tr-rule-ref:selector(".AFLightTextDisabledColor:alias");
+}
+
+.AFLinkAccessKeyStyle:alias {
+  text-decoration: underline;
+}
+.OraLink,
+.OraLink:link,
+.OraLinkText,
+.OraLink:visited,
+.p_OraTreeRow A,
+.p_OraTreeRow A:link,
+.p_OraTreeRow A:visited,
+.OraNavBarActiveLink {
+  -tr-rule-ref:selector(".AFDefaultLink:alias");
+  -tr-rule-ref:selector(".AFDefaultFont:alias");
+}
+.OraLink:hover,
+.p_OraTreeRow A:hover,
+.OraNavBarActiveLink:hover {
+  -tr-rule-ref:selector(".AFDefaultLinkHover:alias");
+}
+.OraLinkDisabled,
+.OraLinkDisabled:hover {
+  -tr-rule-ref:selector(".AFDefaultLinkDisabled:alias");
+}
+
+.AFFormControlContent {
+  width: 150px;
+  background-position: top;
+  background-repeat: repeat-x;
+}
+af|inputText::content {
+  -tr-rule-ref:selector(".AFFormControlContent:alias");
+  -tr-rule-ref:selector(".AFLightElementBorder:alias");
+  /*background-image: TODO */
+}
+
+.AFRequiredIcon:alias {
+  content: '*';
+}
+.AFTitleBar,
+.AFTitleBar .OraLink,
+.AFTitleBar .OraLink:link,
+.AFTitleBar .OraLink:visited {
+  color: white;
+}
+.AFTitleBar .OraLink:hover {
+  text-decoration: underline;
+}
+
+.AFTitleBar {
+  background-image: url(/myfaces_skin/title-bg.png);
+  background-position: top;
+  background-repeat: repeat-x;
+  height: 45px;
+  line-height: 45px;
+  text-align: right;
+}
+.AFTitleBarLogo {
+  background-image: url(/myfaces_skin/myfaces-logo-with-text-small.png);
+  background-position: top left;
+  background-repeat: no-repeat;
+  height: 45px;
+  line-height: 45px;
+  width: 114px;
+}
+.AFTitleBarFade IMG {
+  /* Use an indirect selector as percentages are not allowed for icons */
+  height: 45px;
+  width: 100%;
+}
+.AFTitleBarFadeIcon:alias {
+  content: url(/myfaces_skin/title-bg-fade.png);
+}
+.AFLogoWatermark {
+  background-image: url(/myfaces_skin/myfaces-logo-with-text-watermark.png);
+  background-position: center;
+  background-repeat: no-repeat;
+  background-attachment: fixed;
+  background-color: white;
+  color: black;
+}
+.AFPageFooter {
+  height: 30px;
+  line-height: 30px;
+  background-image: url(/myfaces_skin/footer-bg.png);
+  background-position: bottom;
+  background-repeat: repeat-x;
+  color: white;
+  font-size: x-small;
+}
+
+/* af|panelPopup */
+af|panelPopup::title-bar {
+  background-color: #51822c;
+  border-width: 0px;
+}
+af|panelPopup::title-text {
+  font-weight: bold;
+  color: white;
+}
+af|panelPopup::content {
+  background-color: white;
+}
+af|panelPopup::container {
+  -tr-rule-ref:selector('.AFLightElementBorder:alias');
+}
+af|panelPopup::close-icon {
+  content: url(/myfaces_skin/dialog-close.png);
+}
+
+/* af|panelBox */
+.AFPanelBoxCorner:alias {
+  width: 10px;
+  height: 10px;
+  background-repeat: no-repeat;
+}
+.AFPanelBoxTopBottom:alias {
+  height: 10px;
+  background-repeat: repeat-x;
+}
+.AFPanelBoxLeftRight:alias {
+  width: 10px;
+  background-repeat: repeat-y;
+  background-position: top;
+}
+.AFPanelBoxCenter:alias {
+  background-position: top;
+  background-repeat: repeat-x;
+}
+af|panelBox::dark af|panelBox::body {
+  background-image: url(/myfaces_skin/panel-box-dark-center.png);
+  color: white;
+  -tr-rule-ref:selector('.AFPanelBoxCenter:alias');
+}
+af|panelBox::dark af|panelBox::top-start:ltr,
+af|panelBox::dark af|panelBox::top-end:rtl {
+  background-image: url(/myfaces_skin/panel-box-dark-top-left.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::dark af|panelBox::top-end:ltr,
+af|panelBox::dark af|panelBox::top-start:rtl {
+  background-image: url(/myfaces_skin/panel-box-dark-top-right.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::dark af|panelBox::bottom-start:ltr,
+af|panelBox::dark af|panelBox::bottom-end:rtl {
+  background-image: url(/myfaces_skin/panel-box-dark-bottom-left.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::dark af|panelBox::bottom-end:ltr,
+af|panelBox::dark af|panelBox::bottom-start:rtl {
+  background-image: url(/myfaces_skin/panel-box-dark-bottom-right.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::dark af|panelBox::top {
+  background-image: url(/myfaces_skin/panel-box-dark-top.png);
+  -tr-rule-ref:selector('.AFPanelBoxTopBottom:alias');
+}
+af|panelBox::dark af|panelBox::bottom {
+  background-image: url(/myfaces_skin/panel-box-dark-bottom.png);
+  -tr-rule-ref:selector('.AFPanelBoxTopBottom:alias');
+}
+af|panelBox::dark af|panelBox::start:ltr,
+af|panelBox::dark af|panelBox::end:rtl {
+  background-image: url(/myfaces_skin/panel-box-dark-left.png);
+  -tr-rule-ref:selector('.AFPanelBoxLeftRight:alias');
+}
+af|panelBox::dark af|panelBox::end:ltr,
+af|panelBox::dark af|panelBox::start:rtl {
+  background-image: url(/myfaces_skin/panel-box-dark-right.png);
+  -tr-rule-ref:selector('.AFPanelBoxLeftRight:alias');
+}
+af|panelBox::medium af|panelBox::body {
+  background-image: url(/myfaces_skin/panel-box-medium-center.png);
+  color: black;
+  background-color: #f4f1ea;
+  -tr-rule-ref:selector('.AFPanelBoxCenter:alias');
+}
+af|panelBox::medium af|panelBox::top-start:ltr,
+af|panelBox::medium af|panelBox::top-end:rtl {
+  background-image: url(/myfaces_skin/panel-box-medium-top-left.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::medium af|panelBox::top-end:ltr,
+af|panelBox::medium af|panelBox::top-start:rtl {
+  background-image: url(/myfaces_skin/panel-box-medium-top-right.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::medium af|panelBox::bottom-start:ltr,
+af|panelBox::medium af|panelBox::bottom-end:rtl {
+  background-image: url(/myfaces_skin/panel-box-medium-bottom-left.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::medium af|panelBox::bottom-end:ltr,
+af|panelBox::medium af|panelBox::bottom-start:rtl {
+  background-image: url(/myfaces_skin/panel-box-medium-bottom-right.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::medium af|panelBox::top {
+  background-image: url(/myfaces_skin/panel-box-medium-top.png);
+  -tr-rule-ref:selector('.AFPanelBoxTopBottom:alias');
+}
+af|panelBox::medium af|panelBox::bottom {
+  background-image: url(/myfaces_skin/panel-box-medium-bottom.png);
+  -tr-rule-ref:selector('.AFPanelBoxTopBottom:alias');
+}
+af|panelBox::medium af|panelBox::start:ltr,
+af|panelBox::medium af|panelBox::end:rtl {
+  background-image: url(/myfaces_skin/panel-box-medium-left.png);
+  -tr-rule-ref:selector('.AFPanelBoxLeftRight:alias');
+}
+af|panelBox::medium af|panelBox::end:ltr,
+af|panelBox::medium af|panelBox::start:rtl {
+  background-image: url(/myfaces_skin/panel-box-medium-right.png);
+  -tr-rule-ref:selector('.AFPanelBoxLeftRight:alias');
+}
+af|panelBox::light af|panelBox::body {
+  background-image: url(/myfaces_skin/panel-box-light-center.png);
+  color: black;
+  background-color: #fafafa;
+  -tr-rule-ref:selector('.AFPanelBoxCenter:alias');
+}
+af|panelBox::light af|panelBox::top-start:ltr,
+af|panelBox::light af|panelBox::top-end:rtl {
+  background-image: url(/myfaces_skin/panel-box-light-top-left.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::light af|panelBox::top-end:ltr,
+af|panelBox::light af|panelBox::top-start:rtl {
+  background-image: url(/myfaces_skin/panel-box-light-top-right.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::light af|panelBox::bottom-start:ltr,
+af|panelBox::light af|panelBox::bottom-end:rtl {
+  background-image: url(/myfaces_skin/panel-box-light-bottom-left.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::light af|panelBox::bottom-end:ltr,
+af|panelBox::light af|panelBox::bottom-start:rtl {
+  background-image: url(/myfaces_skin/panel-box-light-bottom-right.png);
+  -tr-rule-ref:selector('.AFPanelBoxCorner:alias');
+}
+af|panelBox::light af|panelBox::top {
+  background-image: url(/myfaces_skin/panel-box-light-top.png);
+  -tr-rule-ref:selector('.AFPanelBoxTopBottom:alias');
+}
+af|panelBox::light af|panelBox::bottom {
+  background-image: url(/myfaces_skin/panel-box-light-bottom.png);
+  -tr-rule-ref:selector('.AFPanelBoxTopBottom:alias');
+}
+af|panelBox::light af|panelBox::start:ltr,
+af|panelBox::light af|panelBox::end:rtl {
+  background-image: url(/myfaces_skin/panel-box-light-left.png);
+  -tr-rule-ref:selector('.AFPanelBoxLeftRight:alias');
+}
+af|panelBox::light af|panelBox::end:ltr,
+af|panelBox::light af|panelBox::start:rtl {
+  background-image: url(/myfaces_skin/panel-box-light-right.png);
+  -tr-rule-ref:selector('.AFPanelBoxLeftRight:alias');
+}
\ No newline at end of file
diff --git a/trinidad-skins/myfaces-skin/src/main/resources/META-INF/style/myfaces-pda.css b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/style/myfaces-pda.css
new file mode 100644
index 0000000..48e70a7
--- /dev/null
+++ b/trinidad-skins/myfaces-skin/src/main/resources/META-INF/style/myfaces-pda.css
@@ -0,0 +1 @@
+/* TODO */
\ No newline at end of file
diff --git a/trinidad-skins/myfaces-skin/src/main/svg/dark-panel-box.svg b/trinidad-skins/myfaces-skin/src/main/svg/dark-panel-box.svg
new file mode 100644
index 0000000..ca9e51d
--- /dev/null
+++ b/trinidad-skins/myfaces-skin/src/main/svg/dark-panel-box.svg
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="200"
+   height="200"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="dark-panel-box.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/home/anrobins/development/trinidad/branches/exhibition/trinidad-skins/myfaces-skin/src/main/svg/light-panel-box.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4410">
+      <stop
+         style="stop-color:#a4bf7a;stop-opacity:1;"
+         offset="0"
+         id="stop4412" />
+      <stop
+         id="stop4502"
+         offset="0.76664793"
+         style="stop-color:#a4bf7a;stop-opacity:1;" />
+      <stop
+         style="stop-color:#7baf55;stop-opacity:1;"
+         offset="1"
+         id="stop4414" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4410"
+       id="linearGradient4416"
+       x1="186.06427"
+       y1="431.15625"
+       x2="186.27887"
+       y2="244"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter4498">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.5075"
+         id="feGaussianBlur4500" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.6153845"
+     inkscape:cx="99.99999"
+     inkscape:cy="100.68715"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:snap-guide="true"
+     inkscape:window-width="1149"
+     inkscape:window-height="741"
+     inkscape:window-x="13"
+     inkscape:window-y="1070" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Outer blur"
+     transform="translate(-82.35714,-237.57646)"
+     style="display:inline">
+    <rect
+       rx="19.54303"
+       ry="19.54303"
+       y="237.07646"
+       x="82.85714"
+       height="200"
+       width="200"
+       id="rect2411"
+       style="opacity:0.45;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#7baf55;stroke-width:0.99984616000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4498);stroke-miterlimit:4;stroke-dasharray:none"
+       transform="matrix(0.9701492,0,0,0.9701493,4.9584221,10.562004)" />
+  </g>
+  <g
+     inkscape:label="Outer border"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="opacity:1;display:inline"
+     transform="translate(-82.35714,-237.57646)">
+    <rect
+       style="fill:#7baf55;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.49302216999999998px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.59793814"
+       id="rect2403"
+       width="191.50697"
+       height="191.50697"
+       x="86.603653"
+       y="241.82297"
+       ry="16.692278"
+       rx="16.692278" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="White border"
+     style="display:inline">
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-2.1797111"
+       inkscape:original="M 103.28125 241.8125 C 94.033728 241.8125 86.59375 249.25246 86.59375 258.5 L 86.59375 416.625 C 86.59375 425.87252 94.03373 433.34373 103.28125 433.34375 L 261.40625 433.34375 C 270.65377 433.34375 278.125 425.87252 278.125 416.625 L 278.125 258.5 C 278.125 249.25248 270.65379 241.8125 261.40625 241.8125 L 103.28125 241.8125 z "
+       xlink:href="#rect2403"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.49302217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       id="path4389"
+       inkscape:href="#rect2403"
+       d="M 103.28125,244 C 95.202831,244 88.78125,250.42156 88.78125,258.5 L 88.78125,416.625 C 88.78125,424.70341 95.207742,431.15623 103.28125,431.15625 L 261.40625,431.15625 C 269.47975,431.15625 275.9375,424.6985 275.9375,416.625 L 275.9375,258.5 C 275.9375,250.42649 269.48469,244 261.40625,244 L 103.28125,244 z"
+       transform="matrix(1.0045083,0,0,1.0045083,-83.181499,-239.10002)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer8"
+     inkscape:label="Inner"
+     style="display:inline">
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="0"
+       inkscape:original="M 103.28125 244 C 95.202831 244 88.78125 250.42156 88.78125 258.5 L 88.78125 416.625 C 88.78125 424.70341 95.207742 431.15623 103.28125 431.15625 L 261.40625 431.15625 C 269.47975 431.15625 275.9375 424.6985 275.9375 416.625 L 275.9375 258.5 C 275.9375 250.42649 269.48469 244 261.40625 244 L 103.28125 244 z "
+       xlink:href="#path4389"
+       style="opacity:1;fill:url(#linearGradient4416);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path4407"
+       inkscape:href="#path4389"
+       d="M 103.28125,244 C 95.202831,244 88.78125,250.42156 88.78125,258.5 L 88.78125,416.625 C 88.78125,424.70341 95.207742,431.15623 103.28125,431.15625 L 261.40625,431.15625 C 269.47975,431.15625 275.9375,424.6985 275.9375,416.625 L 275.9375,258.5 C 275.9375,250.42649 269.48469,244 261.40625,244 L 103.28125,244 z"
+       transform="matrix(0.9805527,0,0,0.9805527,-78.812975,-231.01312)"
+       inkscape:export-xdpi="49.040001"
+       inkscape:export-ydpi="49.040001" />
+  </g>
+</svg>
diff --git a/trinidad-skins/myfaces-skin/src/main/svg/light-panel-box.svg b/trinidad-skins/myfaces-skin/src/main/svg/light-panel-box.svg
new file mode 100644
index 0000000..88ffcf7
--- /dev/null
+++ b/trinidad-skins/myfaces-skin/src/main/svg/light-panel-box.svg
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="200"
+   height="200"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="light-panel-box.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/home/anrobins/development/trinidad/branches/exhibition/trinidad-skins/myfaces-skin/src/main/svg/light-panel-box.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4410">
+      <stop
+         style="stop-color:#cccccc;stop-opacity:1;"
+         offset="0"
+         id="stop4412" />
+      <stop
+         style="stop-color:#aaaaaa;stop-opacity:1;"
+         offset="1"
+         id="stop4414" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4410"
+       id="linearGradient4416"
+       x1="186.06427"
+       y1="431.15625"
+       x2="186.27887"
+       y2="244"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter4498">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.5075"
+         id="feGaussianBlur4500" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.6153845"
+     inkscape:cx="99.99999"
+     inkscape:cy="99.999964"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:snap-guide="true"
+     inkscape:window-width="1149"
+     inkscape:window-height="741"
+     inkscape:window-x="0"
+     inkscape:window-y="1050" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Outer blur"
+     transform="translate(-82.35714,-237.57646)"
+     style="display:inline">
+    <rect
+       rx="19.54303"
+       ry="19.54303"
+       y="237.07646"
+       x="82.85714"
+       height="200"
+       width="200"
+       id="rect2411"
+       style="opacity:0.1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4498)"
+       transform="matrix(0.9701492,0,0,0.9701493,4.9584221,10.562004)" />
+  </g>
+  <g
+     inkscape:label="Gray border"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="opacity:1;display:inline"
+     transform="translate(-82.35714,-237.57646)">
+    <rect
+       style="fill:#cccccc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.49302216999999998px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:0.75"
+       id="rect2403"
+       width="191.50697"
+       height="191.50697"
+       x="86.603653"
+       y="241.82297"
+       ry="16.692278"
+       rx="16.692278" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="White border"
+     style="display:inline">
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-2.1797111"
+       inkscape:original="M 103.28125 241.8125 C 94.033728 241.8125 86.59375 249.25246 86.59375 258.5 L 86.59375 416.625 C 86.59375 425.87252 94.03373 433.34373 103.28125 433.34375 L 261.40625 433.34375 C 270.65377 433.34375 278.125 425.87252 278.125 416.625 L 278.125 258.5 C 278.125 249.25248 270.65379 241.8125 261.40625 241.8125 L 103.28125 241.8125 z "
+       xlink:href="#rect2403"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.49302217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       id="path4389"
+       inkscape:href="#rect2403"
+       d="M 103.28125,244 C 95.202831,244 88.78125,250.42156 88.78125,258.5 L 88.78125,416.625 C 88.78125,424.70341 95.207742,431.15623 103.28125,431.15625 L 261.40625,431.15625 C 269.47975,431.15625 275.9375,424.6985 275.9375,416.625 L 275.9375,258.5 C 275.9375,250.42649 269.48469,244 261.40625,244 L 103.28125,244 z"
+       transform="matrix(1.0045083,0,0,1.0045083,-83.181499,-239.10002)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer8"
+     inkscape:label="Inner"
+     style="display:inline">
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="0"
+       inkscape:original="M 103.28125 244 C 95.202831 244 88.78125 250.42156 88.78125 258.5 L 88.78125 416.625 C 88.78125 424.70341 95.207742 431.15623 103.28125 431.15625 L 261.40625 431.15625 C 269.47975 431.15625 275.9375 424.6985 275.9375 416.625 L 275.9375 258.5 C 275.9375 250.42649 269.48469 244 261.40625 244 L 103.28125 244 z "
+       xlink:href="#path4389"
+       style="opacity:0.095;fill:url(#linearGradient4416);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path4407"
+       inkscape:href="#path4389"
+       d="M 103.28125,244 C 95.202831,244 88.78125,250.42156 88.78125,258.5 L 88.78125,416.625 C 88.78125,424.70341 95.207742,431.15623 103.28125,431.15625 L 261.40625,431.15625 C 269.47975,431.15625 275.9375,424.6985 275.9375,416.625 L 275.9375,258.5 C 275.9375,250.42649 269.48469,244 261.40625,244 L 103.28125,244 z"
+       transform="matrix(0.9805527,0,0,0.9805527,-78.812975,-231.01312)" />
+  </g>
+</svg>
diff --git a/trinidad-skins/myfaces-skin/src/main/svg/medium-panel-box.svg b/trinidad-skins/myfaces-skin/src/main/svg/medium-panel-box.svg
new file mode 100644
index 0000000..b391a9e
--- /dev/null
+++ b/trinidad-skins/myfaces-skin/src/main/svg/medium-panel-box.svg
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="200"
+   height="200"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="medium-panel-box.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/home/anrobins/development/trinidad/branches/exhibition/trinidad-skins/myfaces-skin/src/main/svg/light-panel-box.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient4410">
+      <stop
+         style="stop-color:#f4f1ea;stop-opacity:1;"
+         offset="0"
+         id="stop4412" />
+      <stop
+         id="stop4502"
+         offset="0.76664793"
+         style="stop-color:#f4f1ea;stop-opacity:1;" />
+      <stop
+         style="stop-color:#e5dcce;stop-opacity:1;"
+         offset="1"
+         id="stop4414" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4410"
+       id="linearGradient4416"
+       x1="186.06427"
+       y1="431.15625"
+       x2="186.27887"
+       y2="244"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter4498">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="1.5075"
+         id="feGaussianBlur4500" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.6153845"
+     inkscape:cx="99.99999"
+     inkscape:cy="100.68715"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:snap-guide="true"
+     inkscape:window-width="1149"
+     inkscape:window-height="741"
+     inkscape:window-x="102"
+     inkscape:window-y="1066" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Outer blur"
+     transform="translate(-82.35714,-237.57646)"
+     style="display:inline">
+    <rect
+       rx="19.54303"
+       ry="19.54303"
+       y="237.07646"
+       x="82.85714"
+       height="200"
+       width="200"
+       id="rect2411"
+       style="opacity:0.65;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#d9d2c6;stroke-width:0.99984616000000004;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter4498);stroke-miterlimit:4;stroke-dasharray:none"
+       transform="matrix(0.9701492,0,0,0.9701493,4.9584221,10.562004)" />
+  </g>
+  <g
+     inkscape:label="Outer border"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="opacity:1;display:inline"
+     transform="translate(-82.35714,-237.57646)">
+    <rect
+       style="fill:#d9d2c6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.49302216999999998px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;opacity:1"
+       id="rect2403"
+       width="191.50697"
+       height="191.50697"
+       x="86.603653"
+       y="241.82297"
+       ry="16.692278"
+       rx="16.692278" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer7"
+     inkscape:label="White border"
+     style="display:inline">
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="-2.1797111"
+       inkscape:original="M 103.28125 241.8125 C 94.033728 241.8125 86.59375 249.25246 86.59375 258.5 L 86.59375 416.625 C 86.59375 425.87252 94.03373 433.34373 103.28125 433.34375 L 261.40625 433.34375 C 270.65377 433.34375 278.125 425.87252 278.125 416.625 L 278.125 258.5 C 278.125 249.25248 270.65379 241.8125 261.40625 241.8125 L 103.28125 241.8125 z "
+       xlink:href="#rect2403"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.49302217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       id="path4389"
+       inkscape:href="#rect2403"
+       d="M 103.28125,244 C 95.202831,244 88.78125,250.42156 88.78125,258.5 L 88.78125,416.625 C 88.78125,424.70341 95.207742,431.15623 103.28125,431.15625 L 261.40625,431.15625 C 269.47975,431.15625 275.9375,424.6985 275.9375,416.625 L 275.9375,258.5 C 275.9375,250.42649 269.48469,244 261.40625,244 L 103.28125,244 z"
+       transform="matrix(1.0045083,0,0,1.0045083,-83.181499,-239.10002)" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer8"
+     inkscape:label="Inner"
+     style="display:inline">
+    <path
+       sodipodi:type="inkscape:offset"
+       inkscape:radius="0"
+       inkscape:original="M 103.28125 244 C 95.202831 244 88.78125 250.42156 88.78125 258.5 L 88.78125 416.625 C 88.78125 424.70341 95.207742 431.15623 103.28125 431.15625 L 261.40625 431.15625 C 269.47975 431.15625 275.9375 424.6985 275.9375 416.625 L 275.9375 258.5 C 275.9375 250.42649 269.48469 244 261.40625 244 L 103.28125 244 z "
+       xlink:href="#path4389"
+       style="opacity:1;fill:url(#linearGradient4416);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;stroke-miterlimit:4;stroke-dasharray:none"
+       id="path4407"
+       inkscape:href="#path4389"
+       d="M 103.28125,244 C 95.202831,244 88.78125,250.42156 88.78125,258.5 L 88.78125,416.625 C 88.78125,424.70341 95.207742,431.15623 103.28125,431.15625 L 261.40625,431.15625 C 269.47975,431.15625 275.9375,424.6985 275.9375,416.625 L 275.9375,258.5 C 275.9375,250.42649 269.48469,244 261.40625,244 L 103.28125,244 z"
+       transform="matrix(0.9805527,0,0,0.9805527,-78.812975,-231.01312)"
+       inkscape:export-xdpi="49.040001"
+       inkscape:export-ydpi="49.040001" />
+  </g>
+</svg>
diff --git a/trinidad-skins/pom.xml b/trinidad-skins/pom.xml
new file mode 100644
index 0000000..73737fe
--- /dev/null
+++ b/trinidad-skins/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+  xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+  
+  <modelVersion>4.0.0</modelVersion>
+  
+  <artifactId>trinidad-skins</artifactId>
+
+  <packaging>pom</packaging>
+  <name>Apache MyFaces Trinidad Skins</name>
+  <description>
+    The parent maven project for the Apache MyFaces Trinidad Skins
+  </description>
+
+  <parent>
+    <groupId>org.apache.myfaces.trinidad</groupId>
+    <artifactId>trinidad</artifactId>
+    <version>1.2.8-SNAPSHOT</version>
+  </parent>
+
+  <modules>
+    <module>myfaces-skin</module>
+    <!-- TODO: move the others out of the demo -->
+  </modules>
+
+</project>
+

-- 
To stop receiving notification emails like this one, please contact
"commits@myfaces.apache.org" <co...@myfaces.apache.org>.