<!--
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.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="https://codehaus-plexus.github.io/MODELLO/1.4.0 https://codehaus-plexus.github.io/modello/xsd/modello-1.4.0.xsd">

  <!-- Source: http://www.jcoderz.org/fawkez/browser/trunk/src/xml/schema/pmd.xsd  -->

  <name>Pmd</name>
  
  <defaults>
    <default>
      <key>package</key>
      <value>org.apache.maven.plugins.pmd.model</value>
    </default>
  </defaults>
  <versionDefinition>
    <type>namespace</type>
    <value>1.0+</value>
  </versionDefinition>
 
  <classes>
    <class rootElement="true" xml.tagName="pmd">
      <name>PmdErrorDetail</name>
      <fields>
        <field>
          <name>files</name>
          <association xml.tagName="file" xml.itemsStyle="flat">
            <type>PmdFile</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>suppressedViolations</name>
          <association xml.tagName="suppressedviolation" xml.itemsStyle="flat">
            <type>SuppressedViolation</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>errors</name>
          <association xml.tagName="error" xml.itemsStyle="flat">
            <type>ProcessingError</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
      </fields>
    </class>
    <class>
      <name>PmdFile</name>
      <fields>
        <field xml.attribute="true">
          <name>name</name>
          <type>String</type>
        </field>
        <field>
          <name>violations</name>
          <association xml.tagName="violation" xml.itemsStyle="flat">
            <type>Violation</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
      </fields>
    </class>
    <class>
      <name>Violation</name>
      <fields>
        <field xml.attribute="true">
          <name>beginline</name>
          <type>int</type>
        </field>
        <field xml.attribute="true">
            <name>endline</name>
            <type>int</type>
        </field>
        <field xml.tagName="class" xml.attribute="true">
          <name>violationClass</name>
          <type>String</type>
        </field>
        <field xml.tagName="package" xml.attribute="true">
          <name>violationPackage</name>
          <type>String</type>
        </field>
        <field xml.attribute="true">
          <name>rule</name>
          <type>String</type>
        </field>
        <field  xml.attribute="true">
          <name>priority</name>
          <type>int</type>
        </field>
        <field xml.attribute="true">
            <name>externalInfoUrl</name>
            <type>String</type>
        </field>
        <field xml.content="true">
          <name>text</name>
          <type>String</type>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <code>
          <![CDATA[
            private String fileName;
            
            public void setFileName( String fileName )
            {
              this.fileName = fileName;
            }
          
            public String getFileName()
            {
              return fileName;
            }
          ]]>
          </code>
        </codeSegment>
      </codeSegments>
    </class>
    <class>
        <name>SuppressedViolation</name>
        <fields>
            <field xml.attribute="true">
                <name>filename</name>
                <type>String</type>
            </field>
            <field xml.tagName="suppressiontype" xml.attribute="true">
                <name>suppressionType</name>
                <type>String</type>
            </field>
            <field xml.tagName="msg" xml.attribute="true">
                <name>ruleMessage</name>
                <type>String</type>
            </field>
            <field xml.tagName="usermsg" xml.attribute="true">
                <name>userMessage</name>
                <type>String</type>
            </field>
        </fields>
    </class>
    <class>
        <name>ProcessingError</name>
        <fields>
            <field xml.attribute="true">
                <name>filename</name>
                <type>String</type>
            </field>
            <field xml.attribute="true">
                <name>msg</name>
                <type>String</type>
            </field>
            <field xml.content="true">
                <name>detail</name>
                <type>String</type>
            </field>
        </fields>
    </class>
  </classes>
</model>