<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE faces-config PUBLIC
 "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
 "http://java.sun.com/dtd/web-facesconfig_1_1.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.
-->

<faces-config xmlns="http://java.sun.com/JSF/Configuration">

$baseContent

#set ($componentList = ${model.getComponents()})
#foreach( $component in $componentList )
#if ($modelIds.contains($component.modelId) 
    && !($component.className.contains("UIComponent"))
    && !($component.isConfigExcluded()))
  <component>
    <component-type>$component.type</component-type>
    <component-class>$component.className</component-class>
  </component>    
#end
#end
#set ($converterList = ${model.getConverters()})
#foreach( $converter in $converterList )
#if ($modelIds.contains($converter.modelId) &&
    !($converter.isConfigExcluded().booleanValue()) &&
    $converter.converterId)
  <converter>
    <converter-id>$converter.converterId</converter-id>
    <converter-class>$converter.className</converter-class>
  </converter>
#end
#end
#set ($validatorList = ${model.getValidators()})
#foreach( $validator in $validatorList )
#if ($modelIds.contains($validator.modelId) &&
    !($validator.isConfigExcluded().booleanValue()) &&
    $validator.validatorId)
  <validator>
    <validator-id>$validator.validatorId</validator-id>
    <validator-class>$validator.className</validator-class>
  </validator>
#end
#end
#set ($renderKitList = ${model.getRenderKits()})
#foreach( $renderKit in $renderKitList )
  <render-kit>
    <render-kit-id>$renderKit.renderKitId</render-kit-id>
#if ($renderKit.className)
    <render-kit-class>$renderKit.className</render-kit-class>
#end
#set ($rendererList = ${renderKit.getRenderers()})
#foreach( $renderer in $rendererList )
      <renderer>
        <component-family>$renderer.componentFamily</component-family>
        <renderer-type>$renderer.rendererType</renderer-type>
        <renderer-class>$renderer.className</renderer-class>
      </renderer>
#end
  </render-kit>
#end
</faces-config>
