<?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.
	   
-->
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:af="http://myfaces.apache.org/trinidad"
              xmlns:xi="http://www.w3.org/2001/XInclude"
              xmlns:md="http://myfaces.apache.org/bali/xml/metadata"
              xmlns:mfp="http://myfaces.apache.org/maven-faces-plugin" >

  <component>  
  
    <component-type>org.apache.myfaces.trinidad.Command</component-type>
    <component-class>org.apache.myfaces.trinidad.component.UIXCommand</component-class>

    <description>
      A base abstraction for components that implement ActionSource.
    </description>

    <xi:include href="TestInclude.xml" xpointer="/faces-config/component/*"></xi:include>

    <property>
      <property-name>action</property-name>
      <property-class>javax.faces.el.MethodBinding</property-class>
      <description>
          The reference to the Java method that will be invoked when
          an ActionEvent is broadcast by this component.  The method
          signature takes zero parameters and may return String or void.
          If a non-null String value is returned, it will be used as
          an outcome for navigation.
      </description>
      <property-extension>
        <mfp:state-holder>true</mfp:state-holder>
        <mfp:method-binding-signature>
          <mfp:return-type>String</mfp:return-type>
        </mfp:method-binding-signature>
        <md:attributeMetadata>
          <md:preferred>true</md:preferred>
        </md:attributeMetadata>
      </property-extension>
    </property>

    <property>
      <property-name>actionListener</property-name>
      <property-class>javax.faces.el.MethodBinding</property-class>
      <description>
          The reference to the Java method that will be invoked when
          an ActionEvent is broadcast by this component.  The method
          signature takes a single ActionEvent parameter and returns
          void.
      </description>
      <property-extension>
        <mfp:state-holder>true</mfp:state-holder>
        <mfp:method-binding-signature>
          <mfp:parameter-type>javax.faces.event.ActionEvent</mfp:parameter-type>
          <mfp:return-type>void</mfp:return-type>
        </mfp:method-binding-signature>
        <md:attributeMetadata>
          <md:preferred>true</md:preferred>
        </md:attributeMetadata>
      </property-extension>
    </property>

    <property>
      <property-name>returnListener</property-name>
      <property-class>javax.faces.el.MethodBinding</property-class>
      <description>
          The reference to the Java method that will be invoked when
          a dialog ReturnEvent is broadcast by this component.  The method
          signature takes a single ReturnEvent parameter and returns
          void.
      </description>
      <property-extension>
        <mfp:state-holder>true</mfp:state-holder>
        <mfp:method-binding-signature>
          <mfp:parameter-type>org.apache.myfaces.trinidad.event.ReturnEvent</mfp:parameter-type>
          <mfp:return-type>void</mfp:return-type>
        </mfp:method-binding-signature>
      </property-extension>
    </property>

    <property>
      <property-name>immediate</property-name>
      <property-class>boolean</property-class>
      <description>
        a reference to an action method sent by the command component, 
or the static outcome of an action.  When immediate is true, the 
default ActionListener provided by the JavaServer Faces implementation 
should be executed during Apply Request Values phase of the request 
processing lifecycle, rather than waiting until the Invoke Application 
phase.
      </description>
      <property-extension>
        <mfp:required>false</mfp:required>
      </property-extension>
    </property>

    <component-extension>
      <mfp:component-family>org.apache.myfaces.trinidad.Command</mfp:component-family>
      <mfp:default-renderer-type>org.apache.myfaces.trinidad.Button</mfp:default-renderer-type>
      <mfp:component-supertype>org.apache.myfaces.trinidad.ComponentBase</mfp:component-supertype>

      <mfp:jsp-tag-class>org.apache.myfaces.trinidadinternal.taglib.UIXCommandTag</mfp:jsp-tag-class>
      <mfp:jsp-tag-name>af:command</mfp:jsp-tag-name>

      <mfp:event>
        <mfp:event-type>javax.faces.Action</mfp:event-type>
        <mfp:event-delivery-phases>Invoke Application,Apply Request Values</mfp:event-delivery-phases>
      </mfp:event>

      <mfp:event>
        <mfp:event-type>org.apache.myfaces.trinidad.Launch</mfp:event-type>
        <mfp:event-delivery-phases>Invoke Application,Apply Request Values</mfp:event-delivery-phases>
      </mfp:event>

      <mfp:event>
        <mfp:event-type>org.apache.myfaces.trinidad.Return</mfp:event-type>
        <mfp:event-delivery-phases>Apply Request Values</mfp:event-delivery-phases>
      </mfp:event>

      <md:elementMetadata>
        <md:group>${md:getTranslatedString("PALETTE_INPUT")}</md:group>
      </md:elementMetadata>
    </component-extension>

  </component>
</faces-config>
