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:34 UTC

[myfaces-trinidad] branch exhibition_branch created (now e4a0095)

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

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


      at e4a0095  Update SVN to the point that I stopped working on this branch

This branch includes the following new commits:

     new 23e53d6  create branch for exhibition based on new trunk
     new 6323eb8  Merging original exhibition onto new branch created from the recent trunk
     new 3f74fc8  update poms
     new e4a0095  Update SVN to the point that I stopped working on this branch

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


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

[myfaces-trinidad] 03/04: update poms

Posted by de...@apache.org.
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 3f74fc8b905c09a15056332975292dd8070a9b6f
Author: Andrew Robinson <ar...@apache.org>
AuthorDate: Tue Jul 29 05:06:28 2008 +0000

    update poms
---
 trinidad-examples/trinidad-exhibition/api/pom.xml   |  2 +-
 trinidad-examples/trinidad-exhibition/build/pom.xml |  2 +-
 trinidad-examples/trinidad-exhibition/impl/pom.xml  |  2 +-
 trinidad-examples/trinidad-exhibition/pom.xml       | 15 ++++++---------
 trinidad-examples/trinidad-exhibition/web/pom.xml   | 16 ++++++++--------
 trinidad-skins/myfaces-skin/pom.xml                 |  2 +-
 trinidad-skins/pom.xml                              |  2 +-
 7 files changed, 19 insertions(+), 22 deletions(-)

diff --git a/trinidad-examples/trinidad-exhibition/api/pom.xml b/trinidad-examples/trinidad-exhibition/api/pom.xml
index 6829698..dfdc9bb 100644
--- a/trinidad-examples/trinidad-exhibition/api/pom.xml
+++ b/trinidad-examples/trinidad-exhibition/api/pom.xml
@@ -40,7 +40,7 @@
     <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>
+    <version>1.2.9-SNAPSHOT</version>
   </parent>
 
   <build>
diff --git a/trinidad-examples/trinidad-exhibition/build/pom.xml b/trinidad-examples/trinidad-exhibition/build/pom.xml
index 156f48d..2c7c3e1 100644
--- a/trinidad-examples/trinidad-exhibition/build/pom.xml
+++ b/trinidad-examples/trinidad-exhibition/build/pom.xml
@@ -40,7 +40,7 @@
     <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>
+    <version>1.2.9-SNAPSHOT</version>
   </parent>
 
   <build>
diff --git a/trinidad-examples/trinidad-exhibition/impl/pom.xml b/trinidad-examples/trinidad-exhibition/impl/pom.xml
index 33b1bd6..c26bd0b 100644
--- a/trinidad-examples/trinidad-exhibition/impl/pom.xml
+++ b/trinidad-examples/trinidad-exhibition/impl/pom.xml
@@ -40,7 +40,7 @@
     <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>
+    <version>1.2.9-SNAPSHOT</version>
   </parent>
 
   <build>
diff --git a/trinidad-examples/trinidad-exhibition/pom.xml b/trinidad-examples/trinidad-exhibition/pom.xml
index c976390..b150535 100644
--- a/trinidad-examples/trinidad-exhibition/pom.xml
+++ b/trinidad-examples/trinidad-exhibition/pom.xml
@@ -26,9 +26,7 @@
   
   <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>
@@ -40,7 +38,7 @@
     <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>
+    <version>1.2.9-SNAPSHOT</version>
   </parent>
 
   <packaging>pom</packaging>
@@ -121,15 +119,15 @@
     </dependency>
     
     <dependency>
-      <groupId>${pom.groupId}</groupId>
+      <groupId>org.apache.myfaces.trinidad</groupId>
       <artifactId>trinidad-api</artifactId>
-      <version>${trinidad-version}</version>
+      <version>${pom.version}</version>
     </dependency>
     
     <dependency>
-      <groupId>${pom.groupId}</groupId>
+      <groupId>org.apache.myfaces.trinidad</groupId>
       <artifactId>trinidad-impl</artifactId>
-      <version>${trinidad-version}</version>
+      <version>${pom.version}</version>
     </dependency>
     
     <dependency>
@@ -230,9 +228,8 @@
   
   <properties>
     <jsf-ri-scope>provided</jsf-ri-scope>
-    <jsf-ri-version>1.2_07</jsf-ri-version>
+    <jsf-ri-version>1.2_09</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>
diff --git a/trinidad-examples/trinidad-exhibition/web/pom.xml b/trinidad-examples/trinidad-exhibition/web/pom.xml
index 09b7cea..020c1dd 100644
--- a/trinidad-examples/trinidad-exhibition/web/pom.xml
+++ b/trinidad-examples/trinidad-exhibition/web/pom.xml
@@ -41,18 +41,18 @@
     <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>
+    <version>1.2.9-SNAPSHOT</version>
   </parent>
   
   <dependencies>
     
     <dependency>
-      <groupId>${pom.groupId}</groupId>
+      <groupId>org.apache.myfaces.trinidad</groupId>
       <artifactId>trinidad-exhibition-impl</artifactId>
       <version>${pom.version}</version>
       <exclusions>
         <exclusion>
-          <groupId>${pom.groupId}</groupId>
+          <groupId>org.apache.myfaces.trinidad</groupId>
           <artifactId>trinidad-exhibition-build</artifactId>
         </exclusion>
       </exclusions>
@@ -66,14 +66,14 @@
     </dependency>
     
     <dependency>
-      <groupId>${pom.groupId}</groupId>
+      <groupId>org.apache.myfaces.trinidad</groupId>
       <artifactId>trinidad-myfaces-skin</artifactId>
       <version>${pom.version}</version>
     </dependency>
     
     <dependency>
-      <groupId>${pom.groupId}</groupId>
-      <artifactId>sandbox-impl</artifactId>
+      <groupId>org.apache.myfaces.trinidad</groupId>
+      <artifactId>trinidad-sandbox-impl</artifactId>
       <version>${pom.version}</version>
     </dependency>
     
@@ -145,13 +145,13 @@
         <dependency>
           <groupId>javax.faces</groupId>
           <artifactId>jsf-api</artifactId>
-          <version>1.2_07</version>
+          <version>1.2_09</version>
           <scope>compile</scope>
         </dependency>
         <dependency>
           <groupId>javax.faces</groupId>
           <artifactId>jsf-impl</artifactId>
-          <version>1.2_07</version>
+          <version>1.2_09</version>
           <scope>runtime</scope>
         </dependency>
       </dependencies>
diff --git a/trinidad-skins/myfaces-skin/pom.xml b/trinidad-skins/myfaces-skin/pom.xml
index c976915..6b371e4 100644
--- a/trinidad-skins/myfaces-skin/pom.xml
+++ b/trinidad-skins/myfaces-skin/pom.xml
@@ -35,7 +35,7 @@
   <parent>
     <groupId>org.apache.myfaces.trinidad</groupId>
     <artifactId>trinidad</artifactId>
-    <version>1.2.8-SNAPSHOT</version>
+    <version>1.2.9-SNAPSHOT</version>
   </parent>
   
   <dependencies>
diff --git a/trinidad-skins/pom.xml b/trinidad-skins/pom.xml
index 73737fe..c7b3088 100644
--- a/trinidad-skins/pom.xml
+++ b/trinidad-skins/pom.xml
@@ -36,7 +36,7 @@
   <parent>
     <groupId>org.apache.myfaces.trinidad</groupId>
     <artifactId>trinidad</artifactId>
-    <version>1.2.8-SNAPSHOT</version>
+    <version>1.2.9-SNAPSHOT</version>
   </parent>
 
   <modules>

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

[myfaces-trinidad] 04/04: Update SVN to the point that I stopped working on this branch

Posted by de...@apache.org.
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 e4a0095b21ee65c23817f90efe0114e26a85e3a7
Author: Andrew Robinson <ar...@apache.org>
AuthorDate: Thu Dec 17 05:27:37 2009 +0000

    Update SVN to the point that I stopped working on this branch
---
 .../trinidad/model/ViewIdPropertyMenuModel.java    |  3 +-
 trinidad-examples/trinidad-exhibition/api/pom.xml  |  1 -
 .../trinidadexhibition/util/UtilFunctions.java     | 55 +++++++++++++++++-
 .../trinidad-exhibition/build/pom.xml              |  1 -
 trinidad-examples/trinidad-exhibition/impl/pom.xml |  1 -
 trinidad-examples/trinidad-exhibition/web/pom.xml  |  4 +-
 .../trinidadexhibition/faces/ManagedBean.java      | 41 ++++++++++++++
 .../trinidadexhibition/faces/NavigationItem.java   | 65 ++++++++++++++++++++++
 .../faces/NavigationItemConverter.java             | 50 +++++++++++++++++
 .../trinidadexhibition/metadata/MetaDataUtils.java |  1 +
 .../metadata/tld/TagLibrary.java                   | 17 ++++++
 .../myfaces/trinidadexhibition/util/Functions.java |  8 +++
 .../webapp/ComponentIndexBean.java                 | 26 ++++++++-
 .../trinidadexhibition/webapp/MenusBean.java       | 40 -------------
 .../webapp/MenusDefinitionBean.java                | 55 ++++++++++++++++++
 .../webapp/WEB-INF/facelets/templates/main.xhtml   | 21 ++++---
 .../web/src/main/webapp/WEB-INF/faces-config.xml   | 28 ++++++++--
 .../web/src/main/webapp/WEB-INF/trfn.taglib.xml    |  8 +++
 .../web/src/main/webapp/components/index.xhtml     | 22 +++-----
 .../web/src/main/webapp/index.xhtml                | 32 ++++-------
 .../main/webapp/{index.xhtml => resources.xhtml}   | 40 ++++++-------
 21 files changed, 402 insertions(+), 117 deletions(-)

diff --git a/trinidad-api/src/main/java/org/apache/myfaces/trinidad/model/ViewIdPropertyMenuModel.java b/trinidad-api/src/main/java/org/apache/myfaces/trinidad/model/ViewIdPropertyMenuModel.java
index 16b4c13..ae9b499 100644
--- a/trinidad-api/src/main/java/org/apache/myfaces/trinidad/model/ViewIdPropertyMenuModel.java
+++ b/trinidad-api/src/main/java/org/apache/myfaces/trinidad/model/ViewIdPropertyMenuModel.java
@@ -19,7 +19,6 @@
 package org.apache.myfaces.trinidad.model;
 
 import java.beans.IntrospectionException;
-
 import java.util.HashMap;
 import java.util.Map;
 
@@ -50,7 +49,7 @@ import org.apache.myfaces.trinidad.logging.TrinidadLogger;
  * <li>returns the path to the node with the current viewId or null if the current viewId can't be found
  * </ul>
  * <p>
- * Assuming that NavigationTree is a tree of beans with a vieId getter, an
+ * Assuming that NavigationTree is a tree of beans with a viewId getter, an
  * example of creating a MenuModel with this class might look like:
  * <pre><code>
  *     CollectionModel collectionModel = ModelUtils.toCollectionModel(new NavigationTree());
diff --git a/trinidad-examples/trinidad-exhibition/api/pom.xml b/trinidad-examples/trinidad-exhibition/api/pom.xml
index dfdc9bb..b407ff5 100644
--- a/trinidad-examples/trinidad-exhibition/api/pom.xml
+++ b/trinidad-examples/trinidad-exhibition/api/pom.xml
@@ -26,7 +26,6 @@
   
   <modelVersion>4.0.0</modelVersion>
   
-  <groupId>org.apache.myfaces.trinidad</groupId>
   <artifactId>trinidad-exhibition-api</artifactId>
 
   <name>Trinidad Exhibition API</name>
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
index 6efcb55..7f7767c 100644
--- 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
@@ -3,11 +3,19 @@
  */
 package org.apache.myfaces.trinidadexhibition.util;
 
+import java.io.IOException;
 import java.text.MessageFormat;
 import java.util.ResourceBundle;
 
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.application.ViewHandler;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 
+import org.apache.myfaces.trinidad.context.RequestContext;
+
 /**
  *
  * @author Andrew Robinson
@@ -34,11 +42,54 @@ public final class UtilFunctions
     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)
+    
+    @SuppressWarnings("unchecked")
+    T t = (T)facesContext.getApplication().getExpressionFactory().createValueExpression(el, returnType)
       .getValue(facesContext.getELContext());
+    
+    return t;
+  }
+  
+  public static void setExpression(String expression, Object value)
+  {
+    FacesContext facesContext = FacesContext.getCurrentInstance();
+    ValueExpression el = facesContext.getApplication().getExpressionFactory().createValueExpression(facesContext,
+      value == null ? Object.class : value.getClass());
+    
+    el.setValue(facesContext.getELContext(), value);
+  }
+  
+  public static void navigateToViewId(String viewId, boolean forceRedirect)
+  {
+    FacesContext facesContext = FacesContext.getCurrentInstance();
+    ViewHandler viewHandler = facesContext.getApplication().getViewHandler();
+    ExternalContext externalContext = facesContext.getExternalContext();
+    
+    RequestContext requestContext = RequestContext.getCurrentInstance();
+    
+    if (forceRedirect || requestContext.isPartialRequest(facesContext))
+    {
+      // if PPR, then we need to redirect
+      String path = viewHandler.getActionURL(facesContext, viewId);
+      try
+      {
+        externalContext.redirect(externalContext.encodeActionURL(path));
+      }
+      catch (IOException ex)
+      {
+        throw new FacesException(ex);
+      }
+    }
+    else
+    {
+      // navigate using "normal" JSF view ID navigation
+      //create new view
+      UIViewRoot viewRoot = viewHandler.createView(facesContext, viewId);
+      facesContext.setViewRoot(viewRoot);
+      facesContext.renderResponse();
+    }
   }
 }
diff --git a/trinidad-examples/trinidad-exhibition/build/pom.xml b/trinidad-examples/trinidad-exhibition/build/pom.xml
index 2c7c3e1..7da0e3f 100644
--- a/trinidad-examples/trinidad-exhibition/build/pom.xml
+++ b/trinidad-examples/trinidad-exhibition/build/pom.xml
@@ -26,7 +26,6 @@
 
   <modelVersion>4.0.0</modelVersion>
 
-  <groupId>org.apache.myfaces.trinidad</groupId>
   <artifactId>trinidad-exhibition-build</artifactId>
 
   <name>Trinidad Exhibition Build</name>
diff --git a/trinidad-examples/trinidad-exhibition/impl/pom.xml b/trinidad-examples/trinidad-exhibition/impl/pom.xml
index c26bd0b..119f5df 100644
--- a/trinidad-examples/trinidad-exhibition/impl/pom.xml
+++ b/trinidad-examples/trinidad-exhibition/impl/pom.xml
@@ -26,7 +26,6 @@
   
   <modelVersion>4.0.0</modelVersion>
   
-  <groupId>org.apache.myfaces.trinidad</groupId>
   <artifactId>trinidad-exhibition-impl</artifactId>
 
   <name>Trinidad Exhibition IMPL</name>
diff --git a/trinidad-examples/trinidad-exhibition/web/pom.xml b/trinidad-examples/trinidad-exhibition/web/pom.xml
index 020c1dd..0e2c2cb 100644
--- a/trinidad-examples/trinidad-exhibition/web/pom.xml
+++ b/trinidad-examples/trinidad-exhibition/web/pom.xml
@@ -26,7 +26,6 @@
   
   <modelVersion>4.0.0</modelVersion>
   
-  <groupId>org.apache.myfaces.trinidad</groupId>
   <artifactId>trinidad-exhibition</artifactId>
   <packaging>war</packaging>
   
@@ -73,8 +72,9 @@
     
     <dependency>
       <groupId>org.apache.myfaces.trinidad</groupId>
-      <artifactId>trinidad-sandbox-impl</artifactId>
+      <artifactId>sandbox-impl</artifactId>
       <version>${pom.version}</version>
+      <optional>true</optional>
     </dependency>
     
     <dependency>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/faces/ManagedBean.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/faces/ManagedBean.java
new file mode 100644
index 0000000..87b589a
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/faces/ManagedBean.java
@@ -0,0 +1,41 @@
+/**
+ * 
+ */
+package org.apache.myfaces.trinidadexhibition.faces;
+
+import javax.faces.context.FacesContext;
+
+import org.apache.myfaces.trinidadexhibition.util.UtilFunctions;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public class ManagedBean
+{
+  protected FacesContext getFacesContext()
+  {
+    return FacesContext.getCurrentInstance();
+  }
+  
+  protected <T> T evaluateExpression(String expression, Class<T> expectedClass)
+  {
+    return UtilFunctions.evaluateEl(expression, expectedClass);
+  }
+  
+  protected void setExpression(String expression, Object value)
+  {
+    UtilFunctions.setExpression(expression, value);
+  }
+  
+  protected void navigate(String outcome)
+  {
+    navigate(outcome, outcome);
+  }
+  
+  protected void navigate(String action, String outcome)
+  {
+    FacesContext fctx = getFacesContext();
+    fctx.getApplication().getNavigationHandler().handleNavigation(fctx, action, action);
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/faces/NavigationItem.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/faces/NavigationItem.java
new file mode 100644
index 0000000..b4b70b5
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/faces/NavigationItem.java
@@ -0,0 +1,65 @@
+/**
+ * 
+ */
+package org.apache.myfaces.trinidadexhibition.faces;
+
+import javax.faces.event.ActionEvent;
+
+import org.apache.myfaces.trinidadexhibition.util.UtilFunctions;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public class NavigationItem
+{
+  private String _messageKey;
+  private String _viewId;
+  
+  public NavigationItem()
+  {
+  }
+  
+  public NavigationItem(String messageKey, String viewId)
+  {
+    _messageKey = messageKey;
+    _viewId = viewId;
+  }
+
+  /**
+   * @return the key
+   */
+  public String getMessageKey()
+  {
+    return _messageKey;
+  }
+
+  /**
+   * @param messageKey the key to set
+   */
+  public void setMessageKey(String messageKey)
+  {
+    _messageKey = messageKey;
+  }
+
+  /**
+   * @return the viewId
+   */
+  public String getViewId()
+  {
+    return _viewId;
+  }
+  
+  /**
+   * @param viewId the viewId to set
+   */
+  public void setViewId(String viewId)
+  {
+    _viewId = viewId;
+  }
+  
+  public void actionPerfomed(ActionEvent event)
+  {
+    UtilFunctions.navigateToViewId(getViewId(), true);
+  }
+}
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/faces/NavigationItemConverter.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/faces/NavigationItemConverter.java
new file mode 100644
index 0000000..df3cfeb
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/faces/NavigationItemConverter.java
@@ -0,0 +1,50 @@
+/**
+ * 
+ */
+package org.apache.myfaces.trinidadexhibition.faces;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public class NavigationItemConverter
+  implements Converter
+{
+
+  /**
+   * @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext,
+   * javax.faces.component.UIComponent, java.lang.String)
+   */
+  public NavigationItem getAsObject(FacesContext context, UIComponent component,
+    String value) throws ConverterException
+  {
+    String[] str = value.split("\\s*,\\s*", 2);
+    if (str.length < 2)
+    {
+      throw new ConverterException("NavigationItem string must have a comma to separate the view ID and the " +
+      		"bundle key");
+    }
+    return new NavigationItem(str[0], str[1]);
+  }
+
+  /**
+   * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext,
+   * javax.faces.component.UIComponent, java.lang.Object)
+   */
+  public String getAsString(FacesContext context, UIComponent component,
+    Object value) throws ConverterException
+  {
+    if (value instanceof NavigationItem)
+    {
+      NavigationItem item = (NavigationItem)value;
+      return String.format("%s,%s", item.getMessageKey(), item.getViewId());
+    }
+    return value == null ? "" : value.toString();
+  }
+
+}
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
index 962f226..f46fb53 100644
--- 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
@@ -76,6 +76,7 @@ public final class MetaDataUtils
     
     digester.addObjectCreate("taglib", TagLibrary.class);
     digester.addBeanPropertySetter("taglib/short-name", "shortName");
+    digester.addBeanPropertySetter("taglib/display-name", "displayName");
     
     digester.addObjectCreate("taglib/tag", Tag.class);
     digester.addBeanPropertySetter("taglib/tag/name");
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
index 95cc400..16ff999 100644
--- 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
@@ -28,9 +28,26 @@ import java.util.Map;
 public class TagLibrary
 {
   private String _shortName;
+  private String _displayName;
   private Map<String, Tag> _tags = new HashMap<String, Tag>();
 
   /**
+   * @return the displayName
+   */
+  public String getDisplayName()
+  {
+    return _displayName;
+  }
+
+  /**
+   * @param displayName the displayName to set
+   */
+  public void setDisplayName(String displayName)
+  {
+    _displayName = displayName;
+  }
+
+  /**
    * @return the shortName
    */
   public String getShortName()
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
index c5c6663..af5bed4 100644
--- 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
@@ -5,6 +5,9 @@ package org.apache.myfaces.trinidadexhibition.util;
 
 import javax.faces.context.FacesContext;
 
+import org.apache.myfaces.trinidad.model.ChildPropertyMenuModel;
+import org.apache.myfaces.trinidad.model.MenuModel;
+
 /**
  *
  * @author Andrew Robinson
@@ -19,4 +22,9 @@ public final class Functions
     return facesContext.getApplication().getViewHandler().getActionURL(
       facesContext, viewId);
   }
+
+  public static MenuModel asMenuModel(Object value, String childProperty, Object focusRowKey)
+  {
+    return new ChildPropertyMenuModel(value, childProperty, focusRowKey);
+  }
 }
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
index b63c5a4..fbf1635 100644
--- 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
@@ -6,6 +6,9 @@ package org.apache.myfaces.trinidadexhibition.webapp;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.myfaces.trinidad.model.ChildPropertyMenuModel;
+import org.apache.myfaces.trinidad.model.MenuModel;
+import org.apache.myfaces.trinidadexhibition.metadata.tld.TagLibrary;
 import org.apache.myfaces.trinidadexhibition.util.UtilFunctions;
 
 /**
@@ -15,6 +18,22 @@ import org.apache.myfaces.trinidadexhibition.util.UtilFunctions;
 public class ComponentIndexBean
 {
   private Map<String, Integer> _numRowsMap = null;
+  private final MenuModel _tagLibrariesMenuModel;
+  
+  public ComponentIndexBean()
+  {
+    MetaDataBean metaData = getMetaDataBean();
+    _tagLibrariesMenuModel = new ChildPropertyMenuModel(metaData.getTagLibraries().values().toArray(
+      new TagLibrary[metaData.getTagLibraries().size()]), null, null);
+  }
+  
+  /**
+   * @return the tagLibrariesMenuModel
+   */
+  public MenuModel getTagLibrariesMenuModel()
+  {
+    return _tagLibrariesMenuModel;
+  }
   
   /**
    * @return the numRowsMap
@@ -28,7 +47,7 @@ public class ComponentIndexBean
         if (_numRowsMap == null)
         {
           _numRowsMap = new HashMap<String, Integer>(3);
-          MetaDataBean metaData = UtilFunctions.evaluateEl("#{metaData}", MetaDataBean.class);
+          MetaDataBean metaData = getMetaDataBean();
           for (String str : new String[] { "tr", "trh", "trs" })
           {
             int count = metaData.getTagLibraries().get(str).getTags().size();
@@ -39,4 +58,9 @@ public class ComponentIndexBean
     }
     return _numRowsMap;
   }
+  
+  private MetaDataBean getMetaDataBean()
+  {
+    return UtilFunctions.evaluateEl("#{metaData}", MetaDataBean.class);
+  }
 }
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
deleted file mode 100644
index ef69aa2..0000000
--- a/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/MenusBean.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 
- */
-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/MenusDefinitionBean.java b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/MenusDefinitionBean.java
new file mode 100644
index 0000000..e7f9ebc
--- /dev/null
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/java/org/apache/myfaces/trinidadexhibition/webapp/MenusDefinitionBean.java
@@ -0,0 +1,55 @@
+/**
+ * 
+ */
+package org.apache.myfaces.trinidadexhibition.webapp;
+
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+
+import org.apache.myfaces.trinidadexhibition.faces.ManagedBean;
+import org.apache.myfaces.trinidadexhibition.faces.NavigationItem;
+import org.apache.myfaces.trinidadexhibition.faces.NavigationItemConverter;
+
+/**
+ *
+ * @author Andrew Robinson
+ */
+public class MenusDefinitionBean
+  extends ManagedBean
+{
+  private NavigationItem[] _mainMenu;
+
+  /**
+   * @return the mainMenu
+   */
+  public NavigationItem[] getMainMenu()
+  {
+    return _mainMenu;
+  }
+
+  /**
+   * @param mainMenu the mainMenu to set
+   */
+  public void setMainMenu(NavigationItem[] mainMenu)
+  {
+    _mainMenu = mainMenu;
+  }
+  
+  public void setMainMenuFromString(List<String> items)
+  {
+    setMainMenu(convert(items));
+  }
+  
+  private NavigationItem[] convert(List<String> items)
+  {
+    NavigationItemConverter converter = new NavigationItemConverter();
+    FacesContext facesContext = getFacesContext();
+    NavigationItem[] navItems = new NavigationItem[items.size()];
+    for (int i = 0; i < navItems.length; ++i)
+    {
+      navItems[i] = converter.getAsObject(facesContext, null, items.get(i));
+    }
+    return navItems;
+  }
+}
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
index 4c4221d..637905d 100644
--- 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
@@ -98,16 +98,19 @@ DIV.templateBody {
               <tr:panelPopup
                 triggerType="hover"
                 text="#{msgs.template_main_main_menu_text}">
-                <tr:iterator
+                <tr:navigationPane
+                  hint="list"
                   var="_item"
-                  value="#{menus.mainMenuItems}">
-                  <tr:commandLink
-                    partialSubmit="true"
-                    immediate="true"
-                    text="#{_item.label}"
-                    action="#{_item.value}"
-                    styleClass="popupMenuLink" />
-                </tr:iterator>
+                  value="#{menuDefs.mainMenu}">
+                  <f:facet name="nodeStamp">
+                    <tr:commandNavigationItem
+                      text="#{msgs[_item.messageKey]}"
+                      actionListener="#{_item.actionPerformed}"
+                      disabled="#{_item.viewId eq facesContext.viewRoot.viewId}"
+                      styleClass="popupMenuLink"
+                      immediate="true" />
+                  </f:facet>
+                </tr:navigationPane>
               </tr:panelPopup>
               <tr:panelPopup
                 id="aboutDialog"
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
index f3bb6c0..61831e6 100644
--- 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
@@ -43,6 +43,13 @@
     </resource-bundle>
   </application>
   
+  <!-- Converters: -->
+  <converter>
+    <converter-for-class>org.apache.myfaces.trinidadexhibition.faces.NavigationItem</converter-for-class>
+    <converter-class>org.apache.myfaces.trinidadexhibition.faces.NavigationItemConverter</converter-class>
+  </converter>
+  
+  <!-- Managed beans: -->
   <managed-bean>
     <description>
       Bean for collecting faces meta data for use in the demo pages.
@@ -56,12 +63,21 @@
   
   <managed-bean>
     <description>
-      Bean for managing the exhibition menus
+      Bean for managing the exhibition menu definitions
     </description>
-    <managed-bean-name>menus</managed-bean-name>
+    <managed-bean-name>menuDefs</managed-bean-name>
     <managed-bean-class>
-      org.apache.myfaces.trinidadexhibition.webapp.MenusBean
+      org.apache.myfaces.trinidadexhibition.webapp.MenusDefinitionBean
     </managed-bean-class>
+    <managed-property>
+      <property-name>mainMenuFromString</property-name>
+      <list-entries>
+        <value>menus_component_demo, /components/index.xhtml</value>
+        <value>menus_feature_demo, /features/index.xhtml</value>
+        <value>menus_example_apps, /examples/index.xhtml</value>
+        <value>menus_resources, /resources.xhtml</value>
+      </list-entries>
+    </managed-property>
   </managed-bean>
 
   <managed-bean>
@@ -77,7 +93,7 @@
 
   <managed-bean>
     <description>
-      Bean for the component index page
+      Bean for the component index page meta data
     </description>
     <managed-bean-name>componentIndex</managed-bean-name>
     <managed-bean-class>
@@ -88,6 +104,10 @@
   
   <navigation-rule>
     <!-- Global rules -->
+    <navigation-case>
+      <from-outcome>components_index</from-outcome>
+      <to-view-id>/components/index.xhtml</to-view-id>
+    </navigation-case>
 
     <!-- Main menu -->
     <navigation-case>
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
index 1d51aff..77ceaa5 100644
--- 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
@@ -8,4 +8,12 @@
     <function-class>org.apache.myfaces.trinidadexhibition.util.Functions</function-class>
     <function-signature>java.lang.String getActionURL(java.lang.String)</function-signature>
   </function>
+  <function>
+    <function-name>asMenuModel</function-name>
+    <function-class>org.apache.myfaces.trinidadexhibition.util.Functions</function-class>
+    <function-signature>
+      org.apache.myfaces.trinidad.model.MenuModel asMenuModel(java.lang.Object,
+        java.lang.String, java.lang.Object)
+    </function-signature>
+  </function>
 </facelet-taglib>
\ No newline at end of file
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
index 029a586..47f3ce4 100644
--- a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/components/index.xhtml
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/components/index.xhtml
@@ -33,20 +33,14 @@
     <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>          
+          <!-- Use a for each loop since panelTabbed does not support flattened component -->
+          <c:forEach
+            var="_tagLibrary"
+            items="#{tagLibrariesMenuModel}">
+            <tr:showDetailItem
+              text="#{_tagLibrary.displayName} - (#{_tagLibrary.shortName})">
+            </tr:showDetailItem>
+          </c:forEach>
         </tr:panelTabbed>
       </ui:define>
     </ui:composition>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/index.xhtml b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/index.xhtml
index fb6cc71..22be4ca 100644
--- a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/index.xhtml
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/index.xhtml
@@ -31,26 +31,18 @@
   <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}
+        <tr:navigationPane
+          hint="bar"
+          var="_item"
+          value="#{menuDefs.mainMenu}">
+          <f:facet name="nodeStamp">
+            <tr:commandNavigationItem
+              text="#{msgs[_item.messageKey]}"
+              actionListener="#{_item.actionPerfomed}"
+              immediate="true" />
+          </f:facet>
+        </tr:navigationPane>
+        TODO
       </ui:define>
     </ui:composition>
   </body>
diff --git a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/index.xhtml b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/resources.xhtml
similarity index 65%
copy from trinidad-examples/trinidad-exhibition/web/src/main/webapp/index.xhtml
copy to trinidad-examples/trinidad-exhibition/web/src/main/webapp/resources.xhtml
index fb6cc71..138be45 100644
--- a/trinidad-examples/trinidad-exhibition/web/src/main/webapp/index.xhtml
+++ b/trinidad-examples/trinidad-exhibition/web/src/main/webapp/resources.xhtml
@@ -31,26 +31,26 @@
   <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}
+        <tr:navigationPane
+          hint="bar"
+          var="_item"
+          value="#{menuDefs.mainMenu}">
+          <f:facet name="nodeStamp">
+            <tr:commandNavigationItem
+              text="#{msgs[_item.messageKey]}"
+              actionListener="#{_item.actionPerfomed}"
+              immediate="true" />
+          </f:facet>
+        </tr:navigationPane>
+        <tr:navigationPane
+          hint="list">
+          <tr:commandNavigationItem
+            text="Apache MyFaces"
+            destination="http://myfaces.apache.org/" />
+          <tr:commandNavigationItem
+            text="Apache MyFaces Trinidad"
+            destination="http://myfaces.apache.org/trinidad/index.html" />
+        </tr:navigationPane>
       </ui:define>
     </ui:composition>
   </body>

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

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

Posted by de...@apache.org.
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>.

[myfaces-trinidad] 01/04: create branch for exhibition based on new trunk

Posted by de...@apache.org.
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 23e53d6ff2c0c331085a29233bf1950da5c8c578
Author: Andrew Robinson <ar...@apache.org>
AuthorDate: Tue Jul 29 03:10:36 2008 +0000

    create branch for exhibition based on new trunk

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