<!--
    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.
	   
-->
  <application>
    <view-handler>org.apache.myfaces.trinidadinternal.application.ViewHandlerImpl</view-handler>
    <state-manager>org.apache.myfaces.trinidadinternal.application.StateManagerImpl</state-manager>
    <navigation-handler>org.apache.myfaces.trinidadinternal.application.NavigationHandlerImpl</navigation-handler>
    <variable-resolver>org.apache.myfaces.trinidadinternal.el.TrinidadVariableResolver</variable-resolver>
  </application>

  <lifecycle>
    <phase-listener>org.apache.myfaces.trinidadinternal.context.TrinidadPhaseListener</phase-listener>
  </lifecycle>

  <converter>
    <converter-id>javax.faces.Short</converter-id>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.ShortConverter</converter-class>
  </converter>     
  <converter>
    <converter-for-class>java.lang.Short</converter-for-class>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.ShortConverter</converter-class>
  </converter>
  
  <converter>
    <converter-id>javax.faces.Byte</converter-id>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.ByteConverter</converter-class>
  </converter>     
  <converter>
    <converter-for-class>java.lang.Byte</converter-for-class>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.ByteConverter</converter-class>
  </converter>  

  <converter>
    <converter-id>javax.faces.Integer</converter-id>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.IntegerConverter</converter-class>
  </converter>     
  <converter>
    <converter-for-class>java.lang.Integer</converter-for-class>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.IntegerConverter</converter-class>
  </converter>
  
  <converter>
    <converter-id>javax.faces.Long</converter-id>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.LongConverter</converter-class>
  </converter>     
  <converter>
    <converter-for-class>java.lang.Long</converter-for-class>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.LongConverter</converter-class>
  </converter>
  
  <converter>
    <converter-id>javax.faces.Float</converter-id>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.FloatConverter</converter-class>
  </converter>     
  <converter>
    <converter-for-class>java.lang.Float</converter-for-class>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.FloatConverter</converter-class>
  </converter>  
  
  <converter>
    <converter-id>javax.faces.Double</converter-id>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.DoubleConverter</converter-class>
  </converter>     
  <converter>
    <converter-for-class>java.lang.Double</converter-for-class>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.DoubleConverter</converter-class>
  </converter>        
  
  <validator>
    <validator-id>javax.faces.LongRange</validator-id>
    <validator-class>org.apache.myfaces.trinidadinternal.validator.LongRangeValidator</validator-class>
  </validator>
  
  <validator>
    <display-name>validateDateTimeRange</display-name>
    <validator-id>org.apache.myfaces.trinidad.DateTimeRange</validator-id>
    <validator-class>org.apache.myfaces.trinidad.validator.DateTimeRangeValidator</validator-class>   
  </validator>

  <validator>
    <display-name>validateRegularExpression</display-name>
    <validator-id>org.apache.myfaces.trinidad.RegExp</validator-id>
    <validator-class>org.apache.myfaces.trinidadinternal.validator.RegExpValidator</validator-class>
  </validator>

  <validator>
    <display-name>validateByteLength</display-name>
    <validator-id>org.apache.myfaces.trinidad.ByteLength</validator-id>
    <validator-class>org.apache.myfaces.trinidadinternal.validator.ByteLengthValidator</validator-class>   
  </validator>

   <converter>
    <display-name>Color Converter</display-name>
    <converter-id>org.apache.myfaces.trinidad.Color</converter-id>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.ColorConverter</converter-class>
  </converter>
  
  <converter>
    <description>Color Converter</description>
    <converter-for-class>java.awt.Color</converter-for-class>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.ColorConverter</converter-class>
  </converter>

  <converter>
    <display-name>Date Time Converter</display-name>
    <converter-id>javax.faces.DateTime</converter-id>
    <converter-class>org.apache.myfaces.trinidadinternal.convert.DateTimeConverter</converter-class>
  </converter>

  <converter>
    <display-name>Date Time Converter</display-name>
    <converter-id>org.apache.myfaces.trinidad.DateTime</converter-id>    
    <converter-class>org.apache.myfaces.trinidadinternal.convert.DateTimeConverter</converter-class>
  </converter>
  
  <converter>
    <display-name>Date Time Converter</display-name>
    <converter-for-class>java.util.Date</converter-for-class>   
    <converter-class>org.apache.myfaces.trinidadinternal.convert.DateTimeConverter</converter-class>
  </converter>
  
  <converter>
    <display-name>Date Time Converter</display-name>
    <converter-for-class>java.sql.Timestamp</converter-for-class>   
    <converter-class>org.apache.myfaces.trinidadinternal.convert.TimestampConverter</converter-class>
  </converter>

  <converter>
    <display-name>Date Time Converter</display-name>
    <converter-for-class>java.sql.Date</converter-for-class>   
    <converter-class>org.apache.myfaces.trinidadinternal.convert.JavaSqlDateConverter</converter-class>
  </converter>

  <converter>
    <display-name>Number Converter</display-name>
    <converter-for-class>java.lang.Number</converter-for-class>   
    <converter-class>org.apache.myfaces.trinidad.convert.NumberConverter</converter-class>
  </converter>

  <converter>
    <display-name>Number Converter</display-name>
    <converter-id>javax.faces.Number</converter-id>
    <converter-class>org.apache.myfaces.trinidad.convert.NumberConverter</converter-class>
  </converter>
  
  <converter>
    <display-name>Number Converter</display-name>
    <converter-id>org.apache.myfaces.trinidad.Number</converter-id> 
    <converter-class>org.apache.myfaces.trinidad.convert.NumberConverter</converter-class>
  </converter>
  
  <referenced-bean>
    <description>implicit object provided by Trinidad</description>
    <display-name>Request Context</display-name>
    <referenced-bean-name>requestContext</referenced-bean-name>
    <referenced-bean-class>org.apache.myfaces.trinidad.context.RequestContext</referenced-bean-class>
  </referenced-bean>

  <referenced-bean>
    <description>Trinidad Process Scope Map</description>
    <display-name>Process Scope</display-name>
    <referenced-bean-name>processScope</referenced-bean-name>
    <referenced-bean-class>java.util.Map</referenced-bean-class>
  </referenced-bean>

