<?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><![CDATA[

          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.

          Test to make sure that markup in a pre block is escaped.
          <pre>
            <af:commandButton />
          </pre>
          <pre>
            <af:commandButton />
          </pre>

      ]]>
      </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><![CDATA[

          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>

    <property>
      <description><![CDATA[the visibility of the component.  If it is "false", the component will
      be hidden on the client.  Unlike "rendered", this does not affect the lifecycle on the server
      - the component may have its bindings executed, etc. - and the visibility of the component can
      be toggled on and off on the client, or toggled with PPR.  When "rendered" is false, the
      component will not in any way be rendered, and cannot be made visible on the client.
      In most cases, use the "rendered" property instead of the "visible" property.]]>
      </description>
      <property-name>visible</property-name>
      <property-class>boolean</property-class>
      <default-value>true</default-value>
      <property-extension>
        <mfp:required>false</mfp:required>
        <mfp:unsupported-render-kits>org.apache.myfaces.trinidad.core</mfp:unsupported-render-kits>
        <mfp:property-metadata>
          <mfp:deprecated>The "visible" attribute has been deprecated.
            Use the af:showPopupBehavior tag or the show/hide methods on the popup client component.
          </mfp:deprecated>
          <mfp:no-op/>
        </mfp:property-metadata>
      </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:implementation-type>trinidad</mfp:implementation-type> -->

      <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>
