<section role="NotInToc" id="rich_recursiveTreeNodesAdaptor">
   <title>
				&lt;
				rich:recursiveTreeNodesAdaptor
				&gt;
				<emphasis role="since">
         <superscript> available since <emphasis role="version">3.1.0</emphasis>
         </superscript>
      </emphasis>
   </title>
   <section>
        <title>Description</title>
        <para> 
            The <emphasis role="bold">
            <property>&lt;rich:recursiveTreeNodesAdaptor&gt;</property>
         </emphasis> is 
            an extension of a <emphasis role="bold">
            <property>&lt;rich:treeNodesAdaptor&gt;</property>
         </emphasis> component 
            that provides the possibility to define data models and process nodes recursively. </para>
        <figure>
            <title>Expanded tree with <emphasis role="bold">
                <property>&lt;rich:recursiveTreeNodesAdaptor&gt;</property>
                </emphasis>
         </title>
            <mediaobject>
                <imageobject>
                    <imagedata fileref="images/recursiveTreeNodesAdaptor_init.png"/>
                </imageobject>
            </mediaobject>
        </figure>

    </section>
   <section>
        <title>Key Features</title>
        <itemizedlist>
            <listitem>
            <para>Allows to define combined data models</para>
         </listitem>
            <listitem>
            <para>Possibility to define nodes for processing via attributes</para>
         </listitem>
            <listitem>
            <para>Allows to process nodes recursively</para>
         </listitem>
        </itemizedlist>
    </section>
   <section>
      <title>Details of Usage</title>
      <para>
        The <emphasis role="bold">
            <property>&lt;rich:recursiveTreeNodesAdaptor&gt;</property>
         </emphasis> component has a 
        <emphasis>
            <property>"roots"</property>
         </emphasis> attribute that defines collection to use at the top of recursion. 
      </para>
      <para>
        The <emphasis>
            <property>"nodes"</property>
         </emphasis> attribute defines collection to use on another recursion levels.  
      </para>
      <para>
        The <emphasis>
            <property>"var"</property>
         </emphasis> attribute is used to access to the current collection element.
      </para>
      <para>
        The <emphasis role="bold">
            <property>&lt;rich:recursiveTreeNodesAdaptor&gt;</property>
         </emphasis> component can be nested without any limitations. 
        See the following example.  
      </para>
      <para>
         <emphasis role="bold">Example:</emphasis>
      </para>
      <programlisting role="XML"><![CDATA[...
<rich:tree adviseNodeOpened="#{treeModelBean.adviseNodeOpened}" switchType="client">
	<rich:treeNodesAdaptor id="project" nodes="#{loaderBean.projects}" var="project">	
		<rich:treeNode>
			<h:commandLink action="#{project.click}" value="Project: #{project.name}" />
		</rich:treeNode>
		<rich:recursiveTreeNodesAdaptor id="dir" var="dir" root="#{project.dirs}" nodes="#{dir.directories}">
			<rich:treeNode>
				<h:commandLink action="#{dir.click}" value="Directory: #{dir.name}" />
			</rich:treeNode>			
			<rich:treeNodesAdaptor id="file" var="file" nodes="#{dir.files}">
				<rich:treeNode>
					<h:commandLink action="#{file.click}" value="File: #{file.name}" />
				</rich:treeNode>
			</rich:treeNodesAdaptor>
			<rich:treeNodesAdaptor id="file1" var="file" nodes="#{dir.files}">
				<rich:treeNode>
					<h:commandLink action="#{file.click}" value="File1: #{file.name}" />
				</rich:treeNode>
			</rich:treeNodesAdaptor>
			<rich:recursiveTreeNodesAdaptor id="archiveEntry" var="archiveEntry"
							roots="#{dir.files}" nodes="#{archiveEntry.archiveEntries}" 
							includedRoot="#{archiveEntry.class.simpleName == 'ArchiveFile'}"
							includedNode="#{archiveEntry.class.simpleName == 'ArchiveEntry'}">		
				<rich:treeNode id="archiveEntryNode">
					<h:commandLink action="#{archiveEntry.click}" value="Archive entry: #{archiveEntry.name}" />
				</rich:treeNode>
			</rich:recursiveTreeNodesAdaptor>
		</rich:recursiveTreeNodesAdaptor>
	</rich:treeNodesAdaptor>
</rich:tree>
...
]]></programlisting>

    </section>
   <section>
      <title>Reference Data</title>
      <para>
         <ulink url="&tlddoc;rich/recursiveTreeNodesAdaptor.html">Table of 
							&lt;rich:recursiveTreeNodesAdaptor&gt; 
							 attributes</ulink>.
						</para>
      <table>
         <title>Component Identification Parameters </title>
         <tgroup cols="2">
            <thead>
               <row>
                  <entry>Name</entry>
                  <entry>Value</entry>
               </row>
            </thead>
            <tbody>
               <row>
                  <entry>component-type</entry>
                  <entry>org.richfaces.RecursiveTreeNodesAdaptor</entry>
               </row>
               <row>
                  <entry>component-class</entry>
                  <entry>org.richfaces.component.html.HtmlRecursiveTreeNodesAdaptor</entry>
               </row>
               <row>
                  <entry>component-family</entry>
                  <entry>org.richfaces.RecursiveTreeNodesAdaptor</entry>
               </row>
               <!--
		<row>
          <entry>renderer-type</entry>
          <entry>org.richfaces.EffectRenderer</entry>
        </row>
		-->
        <row>
                  <entry>tag-class</entry>
                  <entry>org.richfaces.taglib.RecursiveTreeNodesAdaptorTag</entry>
               </row>
            </tbody>
         </tgroup>
      </table>
   </section>
   <section>
      <title>Relevant Resources Links</title>
      <para>
         <ulink url="http://livedemo.exadel.com/richfaces-demo/richfaces/treeNodesAdaptor.jsf?c=recursiveTreeNodesAdaptor">On the component Live Demo page</ulink>
      you can see the example of <emphasis role="bold">
            <property>&lt;rich:recursiveTreeNodesAdaptor&gt;</property>
         </emphasis> usage. </para>
  </section>
</section>
