<?xml version="1.0" encoding="UTF-8"?>

<!--
  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.
-->

<model xmlns="https://codehaus-plexus.github.io/MODELLO/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="https://codehaus-plexus.github.io/MODELLO/1.8.0 https://codehaus-plexus.github.io/modello/xsd/https://codehaus-plexus.github.io/modello/xsd/modello-1.8.0.xsd"
  xml.namespace="http://maven.apache.org/DOCUMENT/${version}"
  xml.schemaLocation="https://maven.apache.org/xsd/document-${version}.xsd">
  <id>document</id>
  <name>Document</name>
  <description><![CDATA[
    <p>This is a reference for the Document descriptor model used in Doxia, also known as <code>pdf.xml</code>.</p>
    <p>It is composed of 3 parts:</p>
    <ol>
      <li>document metadata, mostly inspired by the
        <a href="http://docs.oasis-open.org/office/v1.1/">Open Document Format Specification v. 1.1</a></li>
      <li>table of content,</li>
      <li>cover description.</li>
    </ol>
    <p>An XSD is available at:</p>
    <ul>
      <li><a href="https://maven.apache.org/xsd/document-1.0.1.xsd">https://maven.apache.org/xsd/document-1.0.1.xsd</a>.</li>
    </ul>
  ]]></description>
  <defaults>
    <default>
      <key>package</key>
      <value>org.apache.maven.doxia.document</value>
    </default>
  </defaults>

  <classes>
    <class rootElement="true" xml.tagName="document">
      <name>DocumentModel</name>
      <description>Describes the overall document model.</description>
      <version>1.0.0+</version>
      <fields>
        <field xml.attribute="true">
          <name>outputName</name>
          <description><![CDATA[
            The name of the generated document, without extension.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>meta</name>
          <description><![CDATA[
            The Meta information properties.
          ]]></description>
          <version>1.0.0+</version>
          <association>
            <type>DocumentMeta</type>
          </association>
          <identifier>true</identifier>
        </field>
        <field xdoc.separator="blank">
          <name>toc</name>
          <description><![CDATA[
            The TOC (Table of Contents) information properties.
          ]]></description>
          <version>1.0.0+</version>
          <association>
            <type>DocumentTOC</type>
          </association>
          <identifier>true</identifier>
        </field>
        <field xdoc.separator="blank">
          <name>cover</name>
          <description><![CDATA[
            The meta data to construct a cover page for the document.
          ]]></description>
          <version>1.0.0+</version>
          <association>
            <type>DocumentCover</type>
          </association>
          <identifier>true</identifier>
        </field>
      </fields>
    </class>

    <class>
      <name>DocumentMeta</name>
      <description><![CDATA[
        <p>
          Metadata is general information about a document.
        </p>

        <p>
          The metadata elements used here were mostly inspired by the
          <a href="http://docs.oasis-open.org/office/v1.1/">Open Document Format Specification v. 1.1</a>,
          which in turn borrows heavily upon the metadata standards developed by the
          <a href="http://www.dublincore.org">Dublin Core Metadata Initiative</a>.
        </p>
      ]]></description>
      <version>1.0.0+</version>
      <fields>
        <field>
          <name>title</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The title of the document.
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>author</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The unique author of the document, usually as a String of "firstName lastName". For
            more authors, you could use the &lt;authors/&gt; tag.
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>authors</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The authors of the document. The names of the entities that
            are primarily responsible for the content of the document.
          ]]></description>
          <association xml.itemsStyle="wrapped" xml.tagName="author">
            <type>DocumentAuthor</type>
            <multiplicity>*</multiplicity>
          </association>
          <identifier>true</identifier>
        </field>
        <field>
          <name>subject</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The subject of the document.
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>keywords</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The keywords for the document, usually as a String of comma separated keywords.
            @deprecated use the &lt;keyWords/&gt; tag instead of.
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>keyWords</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            A keyword pertaining to the document. The metadata can contain any
            number of keyword elements, each element specifying one keyword.
          ]]></description>
          <association xml.itemsStyle="wrapped" xml.tagName="keyWord">
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <identifier>true</identifier>
        </field>
        <field>
          <name>pageSize</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The pagesize of the document.
            At least "US", "USLetter" and "A4" should be supported.
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>generator</name>
          <version>1.0.0+</version>
          <description><![CDATA[
             A string that identifies the application or tool that was
             used to create or last modify the document.
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>description</name>
          <version>1.0.0+</version>
          <description><![CDATA[
             A brief description of the document.
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>initialCreator</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The name of the person who created the document initially.
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>creator</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The name of the person who last modified the document.
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>printedBy</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The name of the person who last printed the document.
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>creationDate</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The date and time when the document was created initially.
            Use the ISO 8601 format "yyyy-MM-dd'T'HH:mm:ss.SSS" in xml.
          ]]></description>
          <type>Date</type>
          <identifier>true</identifier>
        </field>
        <field java.getter="false">
          <name>creationdate</name>
          <version>1.0.1+</version>
          <description><![CDATA[
            The date as String (recommended format is ISO 8601) when the document was created initially.
            Only used if <code>creationDate</code> is not set.
            @since 1.1.1
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>date</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The date and time when the document was last modified.
            Use the ISO 8601 format "yyyy-MM-dd'T'HH:mm:ss.SSS" in xml.
          ]]></description>
          <type>Date</type>
          <identifier>true</identifier>
        </field>
        <field java.getter="false">
          <name>modifydate</name>
          <version>1.0.1+</version>
          <description><![CDATA[
            The date as String (recommended format is ISO 8601) when the document was last modified.
            Only used if <code>date</code> is not set.
            @since 1.1.1
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>printDate</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The date and time when the document was last printed.
            Use the ISO 8601 format "yyyy-MM-dd'T'HH:mm:ss.SSS" in xml.
          ]]></description>
          <type>Date</type>
          <identifier>true</identifier>
        </field>
        <field java.getter="false">
          <name>printdate</name>
          <version>1.0.1+</version>
          <description><![CDATA[
            The date as String (recommended format is ISO 8601) when the document was last printed.
            Only used if <code>printDate</code> is not set.
            @since 1.1.1
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>template</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            A template that was used to create the document.
          ]]></description>
          <association>
            <type>DocumentTemplate</type>
          </association>
          <identifier>true</identifier>
        </field>
        <!--
        <field>
          <name>autoReload</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The auto-reload element specifies whether a document is reloaded
            or replaced by another document after a certain period of time
            has elapsed.
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        -->
        <field>
          <name>hyperlinkBehaviour</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The hyperlink-behaviour element specifies the default behavior
            for hyperlinks in the document.
          ]]></description>
          <association>
            <type>DocumentHyperlinkBehaviour</type>
          </association>
          <identifier>true</identifier>
        </field>
        <field>
          <name>language</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The default language of the document. The language is represented by
            a two or three letter Language Code taken from the ISO 639 standard,
            optionally followed by a hyphen (-) and a two-letter Country Code
            taken from the ISO 3166 standard.
          ]]></description>
          <type>String</type>
          <defaultValue>en-US</defaultValue>
          <identifier>true</identifier>
        </field>
        <field>
          <name>editingCycles</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The number of editing cycles the document has been through.
          ]]></description>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>editingDuration</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The total time spent editing the document.
          ]]></description>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>documentStatistic</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The statistics of the document, for example, the page count,
            word count, etc.
          ]]></description>
          <association>
            <type>DocumentStatistic</type>
          </association>
          <identifier>true</identifier>
        </field>
        <field>
          <name>confidential</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            whether the content of the document is in some sense confidential.
          ]]></description>
          <type>boolean</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>draft</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            whether the content of the document is in some sense preliminary.
          ]]></description>
          <type>boolean</type>
          <identifier>true</identifier>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <code>
            <![CDATA[
    /**
     * @return a comma separated String of all defined keyWords.
     * @see #getKeywords()
     * @see #getKeyWords()
     * @since 1.1.1
     */
    public String getAllKeyWords()
    {
        StringBuffer sb = new StringBuffer();
        boolean hasKeywords = false;
        if ( getKeywords() != null && getKeywords().trim().length() > 0 )
        {
            java.util.StringTokenizer st = new java.util.StringTokenizer( getKeywords().trim(), "," );
            while ( st.hasMoreTokens() )
            {
                String s = st.nextToken();

                sb.append( s.trim() );

                if ( st.hasMoreTokens() )
                {
                    sb.append( ", " );
                }

                hasKeywords = true;
            }
        }
        if ( getKeyWords() != null )
        {
            for ( java.util.Iterator it = getKeyWords().iterator(); it.hasNext(); )
            {
                String keyword = (String) it.next();

                if ( hasKeywords )
                {
                    sb.append( ", " );
                    hasKeywords = false;
                }

                if ( keyword.trim().length() > 0 )
                {
                    sb.append( keyword.trim() );

                    if ( it.hasNext() )
                    {
                        sb.append( ", " );
                    }
                }
            }
        }

        String ret = sb.toString().trim();
        if ( ret.endsWith( "," ) )
        {
            return ret.substring( 0, ret.length() - 1 );
        }

        return ret;
    }

    /**
     * @return {@link #getAuthor()} if the unique author name is defined. Otherwise, return all authors full names
     * comma separated.
     * @see #getAuthor()
     * @see #getAuthors()
     * @since 1.1.1
     */
    public String getAllAuthorNames()
    {
        StringBuffer sb = new StringBuffer();
        if ( getAuthor() != null && getAuthor().trim().length() > 0 )
        {
            return getAuthor().trim();
        }

        if ( getAuthors() != null )
        {
            for ( java.util.Iterator it = getAuthors().iterator(); it.hasNext(); )
            {
                DocumentAuthor author = (DocumentAuthor) it.next();

                sb.append( author.getFullName().trim() );

                if ( it.hasNext() )
                {
                    sb.append( ", " );
                }
            }
        }

        return sb.toString();
    }

    /** ISO 8601 date format, i.e. <code>yyyy-MM-dd</code> **/
    private static final java.text.DateFormat ISO_8601_FORMAT = new java.text.SimpleDateFormat( "yyyy-MM-dd", java.util.Locale.ENGLISH );

    /**
     * Get the date and time when the document was created initially.
     *
     * @return the <code>getCreationDate()</code> if setted, formatted using ISO-8601 English format, otherwise return
     * the <code>creationdate</code>.
     * @since 1.1.1
     * @see #getCreationDate()
     */
    public String getCreationdate()
    {
        if ( getCreationDate() != null )
        {
            return ISO_8601_FORMAT.format( getCreationDate() );
        }

        return this.creationdate;
    }

    /**
     * Get the date and time when the document was last modified.
     *
     * @return the <code>getDate()</code> if setted, formatted using ISO-8601 English format, otherwise return
     * the <code>modifydate</code>.
     * @since 1.1.1
     * @see #getDate()
     */
    public String getModifydate()
    {
        if ( getDate() != null )
        {
            return ISO_8601_FORMAT.format( getDate() );
        }

        return this.modifydate;
    }

    /**
     * Get the date and time when the document was last printed.
     *
     * @return the <code>getPrintDate()</code> if setted, formatted using ISO-8601 English format, otherwise return
     * the <code>printdate</code>.
     * @since 1.1.1
     * @see #getPrintDate()
     */
    public String getPrintdate()
    {
        if ( getPrintDate() != null )
        {
            return ISO_8601_FORMAT.format( getPrintDate() );
        }

        return this.printdate;
    }
            ]]>
          </code>
        </codeSegment>
      </codeSegments>
    </class>

    <class>
      <name>DocumentAuthor</name>
      <description>An author of the document.</description>
      <version>1.0.0+</version>
      <fields>
        <field>
          <name>firstName</name>
          <description><![CDATA[
             The first name of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>lastName</name>
          <description><![CDATA[
            The last name of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>name</name>
          <description><![CDATA[
            The full name of the author, usually as a String of "firstName lastName".
            @since 1.1.1
          ]]></description>
          <version>1.0.1+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>initials</name>
          <description><![CDATA[
             The initials of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>title</name>
          <description><![CDATA[
             The title of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>position</name>
          <description><![CDATA[
             The position of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>email</name>
          <description><![CDATA[
            The email address of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>phoneNumber</name>
          <description><![CDATA[
            The telephone number of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>faxNumber</name>
          <description><![CDATA[
            The fax number of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>companyName</name>
          <description><![CDATA[
            The name of the company that employs the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>street</name>
          <description><![CDATA[
             The street name of the address of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>city</name>
          <description><![CDATA[
            The city name of the address of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>postalCode</name>
          <description><![CDATA[
            The postal code of the address of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>country</name>
          <description><![CDATA[
            The country of the address of the author.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>state</name>
          <description><![CDATA[
            The state or province of the address of the author, if applicable.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <code>
            <![CDATA[
    /**
     * Get the full name of the author.
     *
     * @return <code>name</code> if defined, <code>firsName lastName</code> otherwise.
     * @see #getName()
     * @see #getFirstName()
     * @see #getLastName()
     * @since 1.1.1
     */
    public String getFullName()
    {
        if ( getName() != null && getName().trim().length() > 0 )
        {
            return getName().trim();
        }

        return ( getFirstName() != null ? getFirstName().trim() : "null" ) + " "
            + ( getLastName() != null ? getLastName().trim() : "null" );
    }
            ]]>
          </code>
        </codeSegment>
      </codeSegments>
    </class>

    <class>
      <name>DocumentTemplate</name>
      <description>A template that was used to create the document.</description>
      <version>1.0.0+</version>
      <fields>
        <field xml.attribute="true">
          <name>href</name>
          <description><![CDATA[
            The location of the document template.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>title</name>
          <description><![CDATA[
            The name of the document template.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>date</name>
          <description><![CDATA[
            The date and time when the template was last modified, prior
            to being used to create the current document.
            Use the ISO 8601 format "yyyy-MM-dd'T'HH:mm:ss.SSS" in xml.
          ]]></description>
          <version>1.0.0+</version>
          <type>Date</type>
          <identifier>true</identifier>
        </field>
        <field java.getter="false" xml.attribute="true">
          <name>modifydate</name>
          <version>1.0.1+</version>
          <description><![CDATA[
            The date as String (recommended format is ISO 8601) when the template was last modified.
            Only used if <code>date</code> is not set.
            @since 1.1.1
          ]]></description>
          <type>String</type>
          <identifier>true</identifier>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <code>
            <![CDATA[
    /** ISO 8601 date format, i.e. <code>yyyy-MM-dd</code> **/
    private static final java.text.DateFormat ISO_8601_FORMAT = new java.text.SimpleDateFormat( "yyyy-MM-dd", java.util.Locale.ENGLISH );

    /**
     * Get the date and time when the template was last modified.
     *
     * @return the <code>getDate()</code> if setted, formatted using ISO-8601 English format, otherwise return
     * the <code>modifydate</code>.
     * @since 1.1.1
     * @see #getDate()
     */
    public String getModifydate()
    {
        if ( getDate() != null )
        {
            return ISO_8601_FORMAT.format( getDate() );
        }

        return this.modifydate;
    }
            ]]>
          </code>
        </codeSegment>
      </codeSegments>
    </class>

    <class>
      <name>DocumentHyperlinkBehaviour</name>
      <description>Specifies the default behavior for hyperlinks in the document.</description>
      <version>1.0.0+</version>
      <fields>
        <field xml.attribute="true">
          <name>targetFrame</name>
          <description><![CDATA[
            The name of the default target frame.
            <p>
              Specifies the name of the default target frame in which to display
              a document referenced by a hyperlink.
            </p>

            <p>
              This attribute can have one of the following values:
            </p>

            <dl>
              <dd>_self</dd>
              <dt>
                The referenced document replaces the content
                of the current frame.
              </dt>

              <dd>_blank</dd>
              <dt>
                The referenced document is displayed in a new frame.
              </dt>

              <dd>_parent</dd>
              <dt>
                The referenced document is displayed in the parent frame
                of the current frame.
              </dt>

              <dd>_top</dd>
              <dt>
                The referenced document is displayed in the topmost frame,
                that is the frame that contains the current frame as a child
                or descendent but is not contained within another frame.
              </dt>

              <dd>A frame name</dd>
              <dt>
                The referenced document is displayed in the named frame.
                If the named frame does not exist, a new frame with that
                name is created.
              </dt>
            </dl>
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <defaultValue>_self</defaultValue>
          <identifier>true</identifier>
        </field>
      </fields>
    </class>

    <class>
      <name>DocumentStatistic</name>
      <description>Statistical attributes of the document.</description>
      <version>1.0.0+</version>
      <fields>
        <field xml.attribute="true">
          <name>pageCount</name>
          <description><![CDATA[
            The number of pages in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>tableCount</name>
          <description><![CDATA[
            The number of tabels in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>drawCount</name>
          <description><![CDATA[
            The number of drawings in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>imageCount</name>
          <description><![CDATA[
            The number of images in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>objectCount</name>
          <description><![CDATA[
            The number of objects in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>oleObjectCount</name>
          <description><![CDATA[
            The number of ole-objects in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>paragraphCount</name>
          <description><![CDATA[
            The number of paragraphs in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>wordCount</name>
          <description><![CDATA[
            The number of words in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>characterCount</name>
          <description><![CDATA[
            The number of characters in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>rowCount</name>
          <description><![CDATA[
            The number of rows in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>frameCount</name>
          <description><![CDATA[
            The number of frames in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>sentenceCount</name>
          <description><![CDATA[
            The number of sentences in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>syllableCount</name>
          <description><![CDATA[
            The number of syllables in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>nonWhitespaceCharacterCount</name>
          <description><![CDATA[
            The number of non-whitespace-characters in the document.
          ]]></description>
          <version>1.0.0+</version>
          <type>long</type>
          <identifier>true</identifier>
        </field>
      </fields>
    </class>

    <class>
      <name>DocumentCover</name>
      <description>Contains meta-data information for the document cover page.</description>
      <version>1.0.0+</version>
      <fields>
        <field>
          <name>coverTitle</name>
          <description><![CDATA[
            The title to appear on the cover.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>coverSubTitle</name>
          <description><![CDATA[
            a sub-title to appear on the cover.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>coverVersion</name>
          <description><![CDATA[
            The version of the project that appears on the cover page.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>coverType</name>
          <description><![CDATA[
            The type of the document. This might be used on the cover page to
            specify the type of information contained in the document
            (eg 'User Guide', 'Manual', etc.).
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>coverDate</name>
          <description><![CDATA[
            The date to appear on the cover.
            Use the ISO 8601 format "yyyy-MM-dd'T'HH:mm:ss.SSS" in xml.
          ]]></description>
          <version>1.0.0+</version>
          <type>Date</type>
          <identifier>true</identifier>
        </field>
        <field java.getter="false">
          <name>coverdate</name>
          <description><![CDATA[
            The date as String (recommended format is ISO 8601) to appear on the cover.
            Only used if <code>coverDate</code> is not set.
            @since 1.1.1
          ]]></description>
          <version>1.0.1+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>authors</name>
          <description><![CDATA[
            The authors that appear on the cover page.
            Only used if author is not given.
          ]]></description>
          <version>1.0.0+</version>
          <association xml.itemsStyle="wrapped" xml.tagName="author">
            <type>DocumentAuthor</type>
            <multiplicity>*</multiplicity>
          </association>
          <identifier>true</identifier>
        </field>
        <field>
          <name>author</name>
          <description><![CDATA[
            A shortcut for the unique author that appears on the cover page.
            For more authors, you could use the &lt;authors/&gt; tag.
            @since 1.1.1
          ]]></description>
          <version>1.0.1+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>projectName</name>
          <description><![CDATA[
            The name of the project.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>projectLogo</name>
          <description><![CDATA[
            The location of an image file that represents the project logo.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>companyName</name>
          <description><![CDATA[
            The name of the entity that is responsible for the content of the
            document, or a copyright holder.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>companyLogo</name>
          <description><![CDATA[
            The location of an image file that represents the company logo.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <code>
            <![CDATA[
    /**
     * @return {@link #getAuthor()} if the unique author name is defined. Otherwise, return all authors full names
     * comma separated.
     * @see #getAuthor()
     * @see #getAuthors()
     * @since 1.1.1
     */
    public String getAllAuthorNames()
    {
        StringBuffer sb = new StringBuffer();
        if ( getAuthor() != null && getAuthor().trim().length() > 0 )
        {
            return getAuthor().trim();
        }

        if ( getAuthors() != null )
        {
            for ( java.util.Iterator it = getAuthors().iterator(); it.hasNext(); )
            {
                DocumentAuthor author = (DocumentAuthor) it.next();

                sb.append( author.getFullName().trim() );

                if ( it.hasNext() )
                {
                    sb.append( ", " );
                }
            }
        }

        return sb.toString();
    }

    /** ISO 8601 date format, i.e. <code>yyyy-MM-dd</code> **/
    private static final java.text.DateFormat ISO_8601_FORMAT = new java.text.SimpleDateFormat( "yyyy-MM-dd", java.util.Locale.ENGLISH );

    /**
     * Get the date to appear on the cover.
     *
     * @return the <code>getCoverDate()</code> if setted, formatted using ISO-8601 English format, otherwise return
     * the <code>coverdate</code>.
     * @since 1.1.1
     * @see #getCoverDate()
     */
    public String getCoverdate()
    {
        if ( getCoverDate() != null )
        {
            return ISO_8601_FORMAT.format( getCoverDate() );
        }

        return this.coverdate;
    }
            ]]>
          </code>
        </codeSegment>
      </codeSegments>
    </class>

    <class xsd.compositor="sequence">
      <name>DocumentTOC</name>
      <description>A Table Of Content for the document.</description>
      <version>1.0.0+</version>
      <fields>
        <field xml.attribute="true">
          <name>name</name>
          <description><![CDATA[
            The name to use for the Table of Contents.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>depth</name>
          <description><![CDATA[
            The level up to which toc items are included by default.
            Defaults to 0 which means only top-level element entries are included.
            A depth of 1 includes one level of sub-items (sub-sections), etc.
            This may be overridden for individual entries by using the collapse
            attribute of the corresponding toc item.
          ]]></description>
          <version>1.0.0+</version>
          <type>int</type>
          <identifier>true</identifier>
          <defaultValue>0</defaultValue>
        </field>
        <field>
          <name>items</name>
          <description><![CDATA[
            TOC item.
          ]]></description>
          <version>1.0.0+</version>
          <association xml.itemsStyle="flat">
            <type>DocumentTOCItem</type>
            <multiplicity>*</multiplicity>
          </association>
          <identifier>true</identifier>
        </field>
      </fields>
    </class>

    <class xsd.compositor="sequence">
      <name>DocumentTOCItem</name>
      <description>A menu item.</description>
      <version>1.0.0+</version>
      <fields>
        <field xml.attribute="true">
          <name>name</name>
          <description><![CDATA[
            The name to use for the toc.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>ref</name>
          <description><![CDATA[
            The ref to use for the item.
          ]]></description>
          <version>1.0.0+</version>
          <type>String</type>
          <identifier>true</identifier>
        </field>
        <field xml.attribute="true">
          <name>collapse</name>
          <description><![CDATA[
           Whether to show any child elements of a TOCItem, overriding
           the depth given in DocumentTOC. By default, all children
           are expanded up to the depth given in DocumentTOC.
          ]]></description>
          <version>1.0.0+</version>
          <type>boolean</type>
          <identifier>true</identifier>
        </field>
        <field>
          <name>items</name>
          <description><![CDATA[
           A table of content item containing sub-items.
          ]]></description>
          <version>1.0.0+</version>
          <association xml.itemsStyle="flat">
            <type>DocumentTOCItem</type>
            <multiplicity>*</multiplicity>
          </association>
          <identifier>true</identifier>
        </field>
      </fields>
    </class>
  </classes>
</model>
