<?xml version="1.0" ?>
<model jpox.mapping-in-package="true"
       jpox.table-prefix="ARCHIVA_"
       xsd.namespace="http://maven.apache.org/archiva/MODEL-1.0.0"
       xsd.target-namespace="http://maven.apache.org/archiva/MODEL-1.0.0">
  <id>archiva-base-model</id>
  <name>ArchivaBaseModel</name>
  <version>1.0.0</version>
  <description>Archiva Model</description>
  <defaults>
    <default>
      <key>package</key>
      <value>org.apache.maven.archiva.model</value>
    </default>
  </defaults>

  <classes>
    <class stash.storable="false"
           rootElement="true"
           jpox.enabled="false">
      <name>ArchivaAll</name>
      <version>1.0.0+</version>
      <description>
        This object is only used for the XML backup / restore features of Archiva.
        This object is not serialized to the Database.
      </description>
      <fields>
        <!-- Note: these are only managed repositories. This should be reviewed as to whether they are still needed
        <field>
          <name>repositories</name>
          <version>1.0.0+</version>
          <association>
            <type>ArchivaRepositoryModel</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
         -->
        <field>
          <name>artifacts</name>
          <version>1.0.0+</version>
          <association>
            <type>ArchivaArtifactModel</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>repositoryMetadata</name>
          <version>1.0.0+</version>
          <association>
            <type>ArchivaRepositoryMetadata</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>projects</name>
          <version>1.0.0+</version>
          <association>
            <type>ArchivaProjectModel</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>repositoryProblems</name>
          <version>1.0.0+</version>
          <association>
            <type>RepositoryProblem</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>repositoryContentStatistics</name>
          <version>1.0.0+</version>
          <association>
            <type>RepositoryContentStatistics</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = 3259707008803111764L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <!-- _______________________________________________________________
          ____                      _ _
         |  _ \ ___ _ __   ___  ___(_) |_ ___  _ __ _   _
         | |_) / _ \ '_ \ / _ \/ __| | __/ _ \| '__| | | |
         |  _ <  __/ |_) | (_) \__ \ | || (_) | |  | |_| |
         |_| \_\___| .__/ \___/|___/_|\__\___/|_|   \__, |
                   |_|                              |___/
      -->
    <!-- 
    <class stash.storable="true"
           jpox.table="REPOSITORIES">
      <name>ArchivaRepositoryModel</name>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="50"
               jpox.primary-key="true"
               jpox.value-strategy="off">
          <name>id</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The unique ID for the repository.
          </description>
        </field>
        <field stash.maxSize="250">
          <name>name</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Name of the repository.
          </description>
        </field>
        <field stash.maxSize="250">
          <name>url</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The URL of the repository.
          </description>
        </field>
	<field stash.maxSize="250">
          <name>repositoryUsername</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            The Username of the repository.
          </description>
        </field>
        <field stash.maxSize="250">
          <name>repositoryPassword</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            The Password of the repository.
          </description>
        </field>
        <field stash.maxSize="20">
          <name>creationSource</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Source of this repository.
            (Example: Configuration, POM)
          </description>
        </field>
        <field stash.maxSize="16">
          <name>layoutName</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The layout of the repository.
            (Either 'default', or 'legacy')
          </description>
          <defaultValue>default</defaultValue>
        </field>
        <field>
          <name>releasePolicy</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>boolean</type>
          <required>true</required>
          <description>
            The releases policy of the repository.
          </description>
          <defaultValue>true</defaultValue>
        </field>
        <field>
          <name>snapshotPolicy</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>boolean</type>
          <required>true</required>
          <description>
            The snapshot policy of the repository.
          </description>
          <defaultValue>false</defaultValue>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = 6823195399928260795L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>
     -->

    <!-- _______________________________________________________________
           _         _   _  __            _
          / \   _ __| |_(_)/ _| __ _  ___| |_
         / _ \ | '__| __| | |_ / _` |/ __| __|
        / ___ \| |  | |_| |  _| (_| | (__| |_
       /_/   \_\_|   \__|_|_|  \__,_|\___|\__|

      -->

    <class stash.storable="true"
           jpox.table="ARTIFACT"
           jpox.use-identifiers-as-primary-key="false"
           jpox.identity-type="application"
           jpox.identity-class="org.apache.maven.archiva.model.jpox.ArchivaArtifactModelKey">
      <name>ArchivaArtifactModel</name>
      <version>1.0.0+</version>
      <fields>
        <!-- 
           NOTE TO ARCHIVA DEVELOPERS....
           
           The ArchivaArtifact object should contain no platform specifics!!
           Put Java specifics in the ArchivaArtifactJavaDetails object.
           Put .Net specifics in the ArchivaArtifactDotNetDetails object.
         -->
        <field stash.maxSize="250"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>groupId</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Group ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="80"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>artifactId</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Artifact ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="50"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>version</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The version of the repository content.
          </description>
        </field>
        <field stash.maxSize="50"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>classifier</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The classifier for this artifact.
          </description>
        </field>
        <field stash.maxSize="50"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent"
               jpox.column="FILE_TYPE">
          <name>type</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The type of artifact.
          </description>
        </field>
        <field stash.maxSize="50"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>repositoryId</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <required>true</required>
          <type>String</type>
          <description>
            The repository associated with this content.
          </description>
        </field>
        <field jpox.column="SNAPSHOT_VERSION">
          <name>snapshot</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>boolean</type>
          <required>true</required>
          <description>
            True if this is a snapshot.
          </description>
          <defaultValue>false</defaultValue>
        </field>
        <field stash.maxSize="35">
          <name>checksumMD5</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The MD5 checksum for the artifact file.
          </description>
        </field>
        <field stash.maxSize="45">
          <name>checksumSHA1</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The SHA1 checksum for the artifact file.
          </description>
        </field>
        <field>
          <name>lastModified</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>Date</type>
          <required>true</required>
          <description>
            The Last Modified Timestamp of this artifact.
          </description>
        </field>
        <field jpox.column="FILE_SIZE">
          <name>size</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>long</type>
          <required>true</required>
          <description>
            The size of the artifact on disk.
          </description>
        </field>
        <field stash.maxSize="16">
          <name>platform</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The platform of this artifact. (default: "java")
          </description>
          <defaultValue>java</defaultValue>
        </field>
        <field>
          <name>whenIndexed</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>Date</type>
          <required>false</required>
          <description>
            The timestamp when this artifact was indexed.
          </description>
        </field>
        <field>
          <name>whenProcessed</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>Date</type>
          <required>false</required>
          <description>
            When this artifact's contents was processed.
          </description>
        </field>
        <field>
          <name>origin</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The origin of this artifact. (Filesystem, Proxy, Deploy)
          </description>
        </field>
        <field>
          <name>whenGathered</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>Date</type>
          <required>false</required>
          <description>
            When this artifact was gathered or disovered from the repository.
          </description>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -6292417108113887384L;
          ]]></code>
        </codeSegment>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    /**
     * Identify if this artifact's contents have been processed or not.
     * 
     * @return true if the artifact's contents have been processed.
     */
    public boolean isProcessed()
    {
        return !(whenProcessed == null);
    }          
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>
    <class stash.storable="true"
           jpox.table="JAVA_ARTIFACT"
           jpox.use-identifiers-as-primary-key="false"
           jpox.identity-type="application"
           jpox.identity-class="org.apache.maven.archiva.model.jpox.ArchivaArtifactJavaDetailsKey">
      <name>ArchivaArtifactJavaDetails</name>
      <interfaces>
        <interface>org.apache.maven.archiva.model.ArchivaArtifactPlatformDetails</interface>
      </interfaces>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>groupId</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Group ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="80"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>artifactId</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Artifact ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="50"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>version</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The version of the repository content.
          </description>
        </field>
        <field stash.maxSize="50"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>classifier</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The classifier for this artifact.
          </description>
        </field>
        <field stash.maxSize="50"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent"
               jpox.column="FILE_TYPE">
          <name>type</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The type of artifact.
          </description>
        </field>
        <field stash.maxSize="50"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>repositoryId</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <required>true</required>
          <type>String</type>
          <description>
            The repository associated with this content.
          </description>
        </field>
        <field>
          <name>checksumBytecode</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The SHA1 checksum for the bytecode in the artifact file. (Can be empty if
            the artifact contains no bytecode)
          </description>
        </field>
        <field>
          <name>jdk</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The JDK revision of the bytecode. (Can be empty if the artifact contains no bytecode)
          </description>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -4774236779581844880L;
          ]]></code>
        </codeSegment>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    /**
     * Identify this implementation as a set of java details.
     * 
     * @return the Java platform string
     */
    public String getPlatform()
    {
        return "java";
    }          
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <!-- _______________________________________________________________
       __  __      _            _       _
      |  \/  | ___| |_ __ _  __| | __ _| |_ __ _
      | |\/| |/ _ \ __/ _` |/ _` |/ _` | __/ _` |
      | |  | |  __/ || (_| | (_| | (_| | || (_| |
      |_|  |_|\___|\__\__,_|\__,_|\__,_|\__\__,_|

    -->

    <class stash.storable="true"
           jpox.use-identifiers-as-primary-key="false"
           jpox.identity-type="application"
           jpox.identity-class="org.apache.maven.archiva.model.jpox.ArchivaRepositoryMetadataKey"
           jpox.table="REPOSITORY_METADATA">
      <name>ArchivaRepositoryMetadata</name>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>groupId</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Group ID of the metadata.
          </description>
        </field>
        <field stash.maxSize="80"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>artifactId</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Artifact ID of the metadata.
          </description>
        </field>
        <field stash.maxSize="50"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>version</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Version of the metadata.
          </description>
        </field>
        <field>
          <name>latestVersion</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <type>String</type>
          <description>
            The latest version id.
          </description>
        </field>
        <field>
          <name>releasedVersion</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <type>String</type>
          <description>
            The released version id.
          </description>
        </field>
        <field>
          <name>snapshotVersion</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <description>
            The snapshot version id.
          </description>
          <association stash.part="true"
                       jpox.join="false">
            <type>SnapshotVersion</type>
            <multiplicity>1</multiplicity>
          </association>
        </field>
        <field>
          <name>plugins</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <description>
            The available plugins.
          </description>
          <association stash.part="true"
                       jpox.join="false">
            <type>Plugin</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>availableVersions</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            The list of available version ids.
          </description>
        </field>
        <field>
          <name>lastUpdated</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            When the metadata was last updated.
          </description>
        </field>
        <field>
          <name>fileLastModified</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>Date</type>
          <required>true</required>
          <description>
            The Last Modified Timestamp of this file.
          </description>
        </field>
        <field jpox.column="FILE_SIZE">
          <name>fileSize</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>long</type>
          <required>true</required>
          <description>
            The size of the artifact on disk.
          </description>
        </field>
        <field>
          <name>whenIndexed</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>Date</type>
          <required>false</required>
          <description>
            The timestamp when this artifact was indexed.
          </description>
        </field>
        <field>
          <name>origin</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The origin of this artifact. (Filesystem, Proxy, Deploy)
          </description>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = 914715358219606100L;
          ]]></code>
        </codeSegment>
        <codeSegment>
          <version>1.0.0</version>
          <code>
            public void updateTimestamp()
            {
            setLastUpdatedTimestamp( new java.util.Date() );
            }

            public void setLastUpdatedTimestamp( java.util.Date date )
            {
            java.util.TimeZone timezone = java.util.TimeZone.getTimeZone( "UTC" );
            java.text.DateFormat fmt = new java.text.SimpleDateFormat( "yyyyMMddHHmmss" );
            fmt.setTimeZone( timezone );
            setLastUpdated( fmt.format( date ) );
            }
          </code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true"
           jpox.table="REPOSITORY_METADATA_SNAPSHOTS">
      <name>SnapshotVersion</name>
      <description>The Snapshot Version</description>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="20"
               jpox.column="VERSION_TIMESTAMP">
          <name>timestamp</name>
          <type>String</type>
          <identifier>false</identifier>
          <required>true</required>
          <description>
            The unique timestamp for the snapshot version.
          </description>
        </field>
        <field>
          <name>buildNumber</name>
          <type>int</type>
          <identifier>false</identifier>
          <required>true</required>
          <description>The incremental build number of the snapshot.</description>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -1251466956496493405L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true"
           jpox.table="REPOSITORY_METADATA_PLUGINS">
      <name>Plugin</name>
      <description>The Plugin</description>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="20"
               jpox.column="PLUGIN_PREFIX">
          <name>prefix</name>
          <type>String</type>
          <identifier>false</identifier>
          <required>true</required>
          <description>
            The prefix for a plugin
          </description>
        </field>
        <field
               jpox.column="PLUGIN_ARTIFACT_ID">
          <name>artifactId</name>
          <type>String</type>
          <identifier>true</identifier>
          <required>true</required>
          <description>
            The artifactId for a plugin
          </description>
        </field>
        <field jpox.column="PLUGIN_NAME">
          <name>name</name>
          <type>String</type>
          <identifier>false</identifier>
          <required>true</required>
          <description>
            The name for a plugin
          </description>
        </field>
      </fields>
    </class>


    <!-- _______________________________________________________________
        ____       __
       |  _ \ ___ / _| ___ _ __ ___ _ __   ___ ___  ___
       | |_) / _ \ |_ / _ \ '__/ _ \ '_ \ / __/ _ \/ __|
       |  _ (  __/  _|  __/ | |  __/ | | | (_|  __/\__ \
       |_| \_\___|_|  \___|_|  \___|_| |_|\___\___||___/
    -->

    <class stash.storable="true"
           jpox.table="PROJECT_REFERENCE">
      <name>ProjectReference</name>
      <description>A reference to another (unversioned) Project</description>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250"
               null-value="default">
          <name>groupId</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Group ID of the project reference.
          </description>
        </field>
        <field stash.maxSize="80"
               null-value="default">
          <name>artifactId</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Artifact ID of the project reference.
          </description>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = 8947981859537138991L;
          ]]></code>
        </codeSegment>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static String defaultString( String value )
    {
        if ( value == null )
        {
            return "";
        }
        
        return value.trim();
    }
          
    public static String toKey( ProjectReference reference )
    {
        StringBuffer key = new StringBuffer();

        key.append( defaultString( reference.getGroupId() ) ).append( ":" );
        key.append( defaultString( reference.getArtifactId() ) );

        return key.toString();
    }
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true"
           jpox.table="VERSIONED_REFERENCE">
      <name>VersionedReference</name>
      <description>A reference to another Versioned Project</description>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250"
               null-value="default">
          <name>groupId</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Group ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="80"
               null-value="default">
          <name>artifactId</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Artifact ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="50"
               null-value="default">
          <name>version</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The version of the repository content.
          </description>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -6990353165677563113L;
          ]]></code>
        </codeSegment>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static String defaultString( String value )
    {
        if ( value == null )
        {
            return "";
        }
        
        return value.trim();
    }
          
    public static String toKey( VersionedReference reference )
    {
        StringBuffer key = new StringBuffer();

        key.append( defaultString( reference.getGroupId() ) ).append( ":" );
        key.append( defaultString( reference.getArtifactId() ) ).append( ":" );
        key.append( defaultString( reference.getVersion() ) );

        return key.toString();
    }
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true"
           jpox.table="ARTIFACT_REFERENCE">
      <name>ArtifactReference</name>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250"
               null-value="default">
          <name>groupId</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Group ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="80"
               null-value="default">
          <name>artifactId</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Artifact ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="50"
               null-value="default">
          <name>version</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The version of the repository content.
          </description>
        </field>
        <field stash.maxSize="50"
               null-value="default">
          <name>classifier</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The classifier for this artifact.
          </description>
        </field>
        <field stash.maxSize="50"
               null-value="default"
               jpox.column="FILE_TYPE">
          <name>type</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The type of artifact.
          </description>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -6116764846682178732L;
          ]]></code>
        </codeSegment>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static String defaultString( String value )
    {
        if ( value == null )
        {
            return "";
        }
        
        return value.trim();
    }
          
    public static String toKey( ArtifactReference artifactReference )
    {
        StringBuffer key = new StringBuffer();

        key.append( defaultString( artifactReference.getGroupId() ) ).append( ":" );
        key.append( defaultString( artifactReference.getArtifactId() ) ).append( ":" );
        key.append( defaultString( artifactReference.getVersion() ) ).append( ":" );
        key.append( defaultString( artifactReference.getClassifier() ) ).append( ":" );
        key.append( defaultString( artifactReference.getType() ) );

        return key.toString();
    }

    public static String toVersionlessKey( ArtifactReference artifactReference )
    {
        StringBuffer key = new StringBuffer();

        key.append( defaultString( artifactReference.getGroupId() ) ).append( ":" );
        key.append( defaultString( artifactReference.getArtifactId() ) ).append( ":" );
        key.append( defaultString( artifactReference.getClassifier() ) ).append( ":" );
        key.append( defaultString( artifactReference.getType() ) );

        return key.toString();
    }
          ]]></code>
        </codeSegment>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    public int hashCode()
    {
        final int PRIME = 31;
        int result = 1;
        result = PRIME * result + ( ( groupId == null ) ? 0 : groupId.hashCode() );
        result = PRIME * result + ( ( artifactId == null ) ? 0 : artifactId.hashCode() );
        result = PRIME * result + ( ( version == null ) ? 0 : version.hashCode() );
        result = PRIME * result + ( ( classifier == null ) ? 0 : classifier.hashCode() );
        result = PRIME * result + ( ( type == null ) ? 0 : type.hashCode() );
        return result;
    }

    public boolean equals( Object obj )
    {
        if ( this == obj )
        {
            return true;
        }
        
        if ( obj == null )
        {
            return false;
        }
        
        if ( getClass() != obj.getClass() )
        {
            return false;
        }

        final ArtifactReference other = (ArtifactReference) obj;

        if ( groupId == null )
        {
            if ( other.groupId != null )
            {
                return false;
            }
        }
        else if ( !groupId.equals( other.groupId ) )
        {
            return false;
        }

        if ( artifactId == null )
        {
            if ( other.artifactId != null )
            {
                return false;
            }
        }
        else if ( !artifactId.equals( other.artifactId ) )
        {
            return false;
        }

        if ( version == null )
        {
            if ( other.version != null )
            {
                return false;
            }
        }
        else if ( !version.equals( other.version ) )
        {
            return false;
        }

        if ( classifier == null )
        {
            if ( other.classifier != null )
            {
                return false;
            }
        }
        else if ( !classifier.equals( other.classifier ) )
        {
            return false;
        }
        
        if ( type == null )
        {
            if ( other.type != null )
            {
                return false;
            }
        }
        else if ( !type.equals( other.type ) )
        {
            return false;
        }
        
        return true;
    }          
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <!-- _______________________________________________________________
         __  __                         ____            _           _
        |  \/  | __ ___   _____ _ __   |  _ \ _ __ ___ (_) ___  ___| |_
        | |\/| |/ _` \ \ / / _ \ '_ \  | |_) | '__/ _ \| |/ _ \/ __| __|
        | |  | | (_| |\ V /  __/ | | | |  __/| | | (_) | |  __/ (__| |_
        |_|  |_|\__,_| \_/ \___|_| |_| |_|   |_|  \___// |\___|\___|\__|
                                                     |__/
     -->

    <class stash.storable="true"
           jpox.table="PROJECT"
           jpox.use-identifiers-as-primary-key="false"
           jpox.identity-type="application"
           jpox.identity-class="org.apache.maven.archiva.model.jpox.ArchivaProjectModelKey">
      <name>ArchivaProjectModel</name>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>groupId</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Group ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="80"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>artifactId</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Artifact ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="50"
               jpox.primary-key="true"
               jpox.value-strategy="off"
               jpox.persistence-modifier="persistent">
          <name>version</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The version of the repository content.
          </description>
        </field>
        <field>
          <name>parentProject</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <association stash.part="true"
                       jpox.join="false">
            <type>VersionedReference</type>
            <multiplicity>1</multiplicity>
          </association>
          <description>
            The content key for a parent reference.
          </description>
        </field>
        <field>
          <name>packaging</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>true</required>
          <type>String</type>
          <description>
            The declared packaging for this project model.
          </description>
        </field>
        <field>
          <name>name</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <type>String</type>
          <description>
            The name of this project.
          </description>
        </field>
        <field stash.maxSize="8192">
          <name>description</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <type>String</type>
          <description>
            The description of this project.
          </description>
        </field>
        <field>
          <name>origin</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>true</required>
          <type>String</type>
          <description>
            The Origin of this Model. (Filesystem, Proxy, or Deploy)
          </description>
        </field>
        <field>
          <name>whenIndexed</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <type>Date</type>
          <description>
            The timestamp when this model was indexed.
          </description>
        </field>
        <field stash.maxSize="250">
          <name>url</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <type>String</type>
          <description>
            The URL for the project's homepage.
          </description>
        </field>
        <field>
          <name>organization</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <association stash.part="true"
                       jpox.join="false">
            <type>Organization</type>
          </association>
        </field>
        <field>
          <name>licenses</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>false</required>
          <association stash.part="true"
                       jpox.join="false">
            <type>License</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>mailingLists</name>
          <version>1.0.0+</version>
          <description>The mailing lists.</description>
          <required>false</required>
          <association stash.part="true"
                       jpox.join="false">
            <type>MailingList</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>issueManagement</name>
          <version>1.0.0+</version>
          <description><![CDATA[The project's issue management system information.]]></description>
          <association stash.part="true"
                       jpox.join="false">
            <type>IssueManagement</type>
          </association>
        </field>
        <field>
          <name>ciManagement</name>
          <version>1.0.0+</version>
          <description><![CDATA[The project's continuous integration information.]]></description>
          <association stash.part="true"
                       jpox.join="false">
            <type>CiManagement</type>
          </association>
        </field>
        <field>
          <name>scm</name>
          <version>1.0.0+</version>
          <description>
            <![CDATA[Specification for the SCM used by the project, such as CVS, Subversion, etc.]]></description>
          <association stash.part="true"
                       jpox.join="false">
            <type>Scm</type>
          </association>
        </field>
        <field>
          <name>individuals</name>
          <version>1.0.0+</version>
          <description>
            The list of individuals around this project.
          </description>
          <association stash.part="true"
                       jpox.join="false">
            <type>Individual</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>dependencies</name>
          <version>1.0.0+</version>
          <description><![CDATA[
              This element describes all of the dependencies associated with a
              project.
          ]]></description>
          <association stash.part="true"
                       jpox.join="false">
            <type>Dependency</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>dependencyManagement</name>
          <version>1.0.0+</version>
          <description>
            The list of dependency management settings.
          </description>
          <association stash.part="true"
                       jpox.join="false">
            <type>Dependency</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>repositories</name>
          <version>1.0.0+</version>
          <description>
            The list project repositories in use by this project.
          </description>
          <association stash.part="true"
                       jpox.join="false">
            <type>ProjectRepository</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>plugins</name>
          <version>1.0.0+</version>
          <description>
            The list of plugins that this project uses.
          </description>
          <association stash.part="true"
                       jpox.join="false">
            <type>ArtifactReference</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>reports</name>
          <version>1.0.0+</version>
          <description>
            The list of reports that this project uses.
          </description>
          <association stash.part="true"
                       jpox.join="false">
            <type>ArtifactReference</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>buildExtensions</name>
          <version>1.0.0+</version>
          <description>
            The list of build extensions that this project uses.
          </description>
          <association stash.part="true"
                       jpox.join="false">
            <type>ArtifactReference</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>properties</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            Properties on the project.  Only really used to resolve
            variables inside of the project during an effective project
            model resolution.
          ]]></description>
          <type>Properties</type>
          <association xml.mapStyle="inline">
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>relocation</name>
          <version>1.0.0+</version>
          <description>If relocated, this is the new location reference</description>
          <association stash.part="true"
                       jpox.join="false">
            <type>VersionedReference</type>
            <multiplicity>1</multiplicity>
          </association>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -4216128775884469616L;
          ]]></code>
        </codeSegment>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    public Dependency asDependency()
    {
        Dependency dep = new Dependency();
        
        dep.setGroupId( groupId );
        dep.setArtifactId( artifactId );
        dep.setVersion( version );
        dep.setType( packaging );
        
        return dep;
    }          
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true"
           jpox.table="MAILING_LISTS">
      <name>MailingList</name>
      <description>A Mailing List</description>
      <version>1.0.0+</version>
      <fields>
        <field>
          <name>name</name>
          <version>1.0.0+</version>
          <description>The name of the mailing list.</description>
          <type>String</type>
        </field>
        <field>
          <name>subscribeAddress</name>
          <version>1.0.0+</version>
          <description>The email address to subscribe to this mailing list.</description>
          <type>String</type>
        </field>
        <field>
          <name>unsubscribeAddress</name>
          <version>1.0.0+</version>
          <description>The email address to unsubscribe to this mailing list.</description>
          <type>String</type>
        </field>
        <field>
          <name>postAddress</name>
          <version>1.0.0+</version>
          <description>The email address to post to this mailing list.</description>
          <type>String</type>
        </field>
        <field stash.maxSize="250">
          <name>mainArchiveUrl</name>
          <version>1.0.0+</version>
          <description>The url to the archive for this mailing list.</description>
          <type>String</type>
        </field>
        <field>
          <name>otherArchives</name>
          <version>1.0.0+</version>
          <description>The email address to subscribe to this mailing list.</description>
          <association stash.part="true"
                       jpox.join="false">
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = 843006855864469245L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true"
           jpox.table="ORGANIZATION">
      <name>Organization</name>
      <description>Specifies the organization that produces this project.</description>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250">
          <name>name</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <description><![CDATA[The full name of the organization.]]></description>
          <type>String</type>
        </field>
        <field stash.maxSize="250">
          <name>url</name>
          <version>1.0.0+</version>
          <description><![CDATA[The URL to the organization's home page.]]></description>
          <type>String</type>
        </field>
        <field stash.maxSize="250"
               jpox.column="FAVICON_URL">
          <name>favicon</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The URL to the organization's logo image.  This can be an URL relative
            to the base directory of the generated web site,
            (e.g., <code>/images/org-logo.png</code>) or an absolute URL
            (e.g., <code>http://my.corp/logo.png</code>).  This value is used
            when generating the project documentation.
          ]]></description>
          <type>String</type>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -7782212828768434535L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true"
           jpox.table="LICENSES">
      <name>License</name>
      <description><![CDATA[
        Describes the licenses for this project.  This is used to generate
        the license page of the project's web site, as well as being taken into consideration in other reporting and
        validation. The licenses listed for the project are that of the project itself, and not of dependencies.
      ]]></description>
      <version>1.0.0+</version>
      <fields>
        <field jpox.column="LICENSE_ID">
          <name>id</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <type>int</type>
          <description>
            The type of license.
          </description>
        </field>
        <field stash.maxSize="250">
          <name>name</name>
          <version>1.0.0+</version>
          <description><![CDATA[The full legal name of the license.]]></description>
          <type>String</type>
        </field>
        <field stash.maxSize="250">
          <name>url</name>
          <version>1.0.0+</version>
          <description><![CDATA[The official url for the license text.]]></description>
          <type>String</type>
        </field>
        <field stash.maxSize="8192">
          <name>comments</name>
          <description>
            Addendum information pertaining to this license.
          </description>
          <version>1.0.0+</version>
          <type>String</type>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = 6078130909089038238L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true"
           jpox.table="ISSUE_MANAGEMENT">
      <name>IssueManagement</name>
      <description>
        Information about the issue tracking (or bug tracking) system used to manage this project.
      </description>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250">
          <name>url</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <description><![CDATA[URL for the issue management system used by the project.]]></description>
          <type>String</type>
        </field>
        <field jpox.column="SYSTEM_NAME">
          <name>system</name>
          <version>1.0.0+</version>
          <description><![CDATA[The name of the issue management system, e.g. Bugzilla]]></description>
          <type>String</type>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -8881904886381224821L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class>
      <name>CiManagement</name>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250">
          <name>url</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <description>
            <![CDATA[URL for the continuous integration system used by the project if it has a web interface.]]></description>
          <type>String</type>
        </field>
        <field stash.maxSize="50"
               jpox.column="SYSTEM_NAME">
          <name>system</name>
          <version>1.0.0+</version>
          <description>
            <![CDATA[The name of the continuous integration system, e.g. <code>continuum</code>.]]></description>
          <type>String</type>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = 7592740408468517476L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true">
      <name>Individual</name>
      <description>
        Description of a person who has contributed to the project.
        This includes contributors and commitors.
      </description>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250">
          <name>email</name>
          <identifier>true</identifier>
          <version>1.0.0+</version>
          <description><![CDATA[The email address of the individual.]]></description>
          <type>String</type>
        </field>
        <field>
          <name>name</name>
          <version>1.0.0+</version>
          <description><![CDATA[The full name of the individual.]]></description>
          <type>String</type>
        </field>
        <field>
          <name>principal</name>
          <version>1.0.0+</version>
          <description>
            The RedBack (plexus security) principal associated with this Invididual.
          </description>
          <type>String</type>
        </field>
        <field>
          <name>commitor</name>
          <version>1.0.0+</version>
          <description>
            The flag if this user is a developer and/or commitor.
          </description>
          <type>boolean</type>
        </field>
        <field stash.maxSize="250">
          <name>url</name>
          <version>1.0.0+</version>
          <description><![CDATA[The URL for the homepage of the individual.]]></description>
          <type>String</type>
        </field>
        <!-- TODO: should this just be a single Organization element -->
        <field>
          <name>organization</name>
          <alias>organisation</alias>
          <version>1.0.0+</version>
          <description><![CDATA[The organization to which the individual belongs.]]></description>
          <type>String</type>
        </field>
        <field stash.maxSize="250">
          <name>organizationUrl</name>
          <alias>organisationUrl</alias>
          <version>1.0.0+</version>
          <description><![CDATA[The URL of the organization.]]></description>
          <type>String</type>
        </field>
        <field jpox.column="CONTRIBUTOR_ROLES">
          <name>roles</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The roles the individual plays in the project.  Each role is
            described by a <code>role</code> element, the body of which is a
            role name. This can also be used to describe the contribution.
          ]]></description>
          <association stash.part="true"
                       jpox.join="false">
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>timezone</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The timezone the individual is in. This is a number in the range -11 to 12.
          ]]></description>
          <type>String</type>
        </field>
        <field>
          <name>properties</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            Properties about the individual, such as an instant messenger handle.
          ]]></description>
          <type>Properties</type>
          <association xml.mapStyle="inline">
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -3847642264665088605L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true"
           jpox.table="DEPENDENCY">
      <name>Dependency</name>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250">
          <name>groupId</name>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Group ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="80">
          <name>artifactId</name>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The Artifact ID of the repository content.
          </description>
        </field>
        <field stash.maxSize="50">
          <name>version</name>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The version of the repository content.
          </description>
        </field>
        <field stash.maxSize="50">
          <name>classifier</name>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <defaultValue></defaultValue>
          <description><![CDATA[
            The classifier of the dependency. This allows distinguishing two artifacts that belong to the same POM but
            were built differently, and is appended to the filename after the version. For example,
            <code>jdk14</code> and <code>jdk15</code>.
          ]]></description>
        </field>
        <field stash.maxSize="50"
               jpox.column="DEPENDENCY_TYPE">
          <name>type</name>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description><![CDATA[
            The type of dependency. This defaults to <code>jar</code>. While it usually represents the extension on
            the filename of the dependency, that is not always the case. A type can be mapped to a different
            extension and a classifier.
            The type often correspongs to the packaging used, though this is also not always the case.
            Some examples are <code>jar</code>, <code>war</code>, <code>ejb-client</code> and <code>test-jar</code>.
            New types can be defined by plugins that set
            <code>extensions</code> to <code>true</code>, so this is not a complete list.
          ]]></description>
          <defaultValue>jar</defaultValue>
        </field>
        <field>
          <name>transitive</name>
          <version>1.0.0+</version>
          <required>false</required>
          <description>True if the dependency is only here due a transitive resolution</description>
          <type>boolean</type>
          <!-- <defaultValue>false</defaultValue> -->
        </field>
        <field>
          <name>fromParent</name>
          <version>1.0.0+</version>
          <required>false</required>
          <description>True if the dependency is only here due a parent pom</description>
          <type>boolean</type>
          <!-- <defaultValue>false</defaultValue> -->
        </field>
        <field stash.maxSize="250">
          <name>url</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            This url will be provided to the user if the jar file cannot be downloaded
            from the central repository.
          ]]></description>
          <type>String</type>
        </field>
        <field jpox.column="DEPENDENCY_SCOPE">
          <name>scope</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The scope of the dependency - <code>compile</code>, <code>runtime</code>, <code>test</code>,
            <code>system</code>, and <code>provided</code>. Used to
            calculate the various classpaths used for compilation, testing, and so on. It also assists in determining
            which artifacts to include in a distribution of this project. For more information, see
            <a href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
            dependency mechanism</a>.
            ]]>
          </description>
          <type>String</type>
        </field>
        <field stash.maxSize="250">
          <name>systemPath</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            FOR SYSTEM SCOPE ONLY. Note that use of this property is <b>discouraged</b> and may be replaced in later
            versions. This specifies the path on the filesystem for this dependency.
            Requires an absolute path for the value, not relative.
            Use a property that gives the machine specific absolute path,
            e.g. <code>${java.home}</code>.
          ]]></description>
          <type>String</type>
        </field>
        <field>
          <name>exclusions</name>
          <version>1.0.0+</version>
          <description>
            Lists a set of artifacts that should be excluded from this dependency's artifact list when it comes to
            calculating transitive dependencies.
          </description>
          <association stash.part="true"
                       jpox.join="false">
            <type>Exclusion</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>optional</name>
          <version>1.0.0+</version>
          <description>
            Indicates the dependency is optional for use of this library. While the version of the dependency will be
            taken into account for dependency calculation if the library is used elsewhere, it will not be passed on
            transitively.
          </description>
          <type>boolean</type>
          <defaultValue>false</defaultValue>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -5401218809636164002L;
          ]]></code>
        </codeSegment>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    public String toString()
    {
        return Dependency.toKey( this );
    }          
          
    public static String toKey( Dependency dep )
    {
        StringBuffer key = new StringBuffer();

        key.append( dep.getGroupId() ).append( ":" );
        key.append( dep.getArtifactId() ).append( ":" );
        key.append( dep.getVersion() ).append( ":" );
        if ( dep.getClassifier() != null )
        {
            key.append( dep.getClassifier() );
        }
        key.append( ":" );
        key.append( dep.getType() );

        return key.toString();
    }

    public static String toVersionlessKey( Dependency dep )
    {
        StringBuffer key = new StringBuffer();

        key.append( dep.getGroupId() ).append( ":" );
        key.append( dep.getArtifactId() ).append( ":" );
        if ( dep.getClassifier() != null )
        {
            key.append( dep.getClassifier() );
        }
        key.append( ":" );
        key.append( dep.getType() );

        return key.toString();
    }
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true"
           jpox.table="EXCLUSIONS">
      <name>Exclusion</name>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250">
          <name>groupId</name>
          <version>1.0.0+</version>
          <description><![CDATA[The group ID of the project to exclude.]]></description>
          <type>String</type>
          <required>true</required>
        </field>
        <field stash.maxSize="80">
          <name>artifactId</name>
          <version>1.0.0+</version>
          <description><![CDATA[The artifact ID of the project to exclude.]]></description>
          <type>String</type>
          <required>true</required>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = 5655957444245343314L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true"
           jpox.table="SCM">
      <name>Scm</name>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="250" jpox.column="SCM_URL">
          <name>connection</name>
          <version>1.0.0+</version>
          <description><![CDATA[
              The source control management system URL
              that describes the repository and how to connect to the
              repository. For more information, see the
              <a href="http://maven.apache.org/scm/scm-url-format.html">URL format</a>
              and <a href="http://maven.apache.org/scm/scms-overview.html">list of supported SCMs</a>.
              This connection is read-only.
          ]]></description>
          <type>String</type>
        </field>
        <field stash.maxSize="250">
          <name>developerConnection</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            Just like <code>connection</code>, but for developers, i.e. this scm connection
            will not be read only.
          ]]></description>
          <type>String</type>
        </field>
        <field stash.maxSize="250">
          <name>url</name>
          <version>1.0.0+</version>
          <description>
            <![CDATA[The URL to the project's browsable SCM repository, such as ViewVC or Fisheye.]]></description>
          <type>String</type>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = 4075086167850885575L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <class stash.storable="true" jpox.table="PROJECT_REPOSITORIES">
      <name>ProjectRepository</name>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="50">
          <name>id</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            A unique identifier for a repository. This is used to match the repository to configuration in
            the <code>settings.xml</code> file, for example.
          ]]></description>
          <type>String</type>
        </field>
        <field stash.maxSize="250">
          <name>name</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            Human readable name of the repository.
          ]]></description>
          <type>String</type>
        </field>
        <field stash.maxSize="250">
          <name>url</name>
          <version>1.0.0+</version>
          <description><![CDATA[
             The url of the repository, in the form <code>protocol://hostname/path</code>.
          ]]></description>
          <type>String</type>
        </field>
        <field stash.maxSize="16">
          <name>layout</name>
          <version>1.0.0+</version>
          <description><![CDATA[
            The type of layout this repository uses for locating and storing artifacts - can be <code>legacy</code> or
            <code>default</code>.
          ]]></description>
          <type>String</type>
          <defaultValue>default</defaultValue>
        </field>
        <field>
          <name>plugins</name>
          <version>1.0.0+</version>
          <description>
            Flag indicating if this repository is for plugin resolution.
          </description>
          <type>boolean</type>
        </field>
        <field>
          <name>releases</name>
          <version>1.0.0+</version>
          <description>
            Flag indicating if this repository has release versioned artifacts.
          </description>
          <type>boolean</type>
        </field>
        <field>
          <name>snapshots</name>
          <version>1.0.0+</version>
          <description>
            Flag indicating if this repository has snapshot versioned artifacts.
          </description>
          <type>boolean</type>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = 8906309721278091848L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <!-- _______________________________________________________________
          _   _            _ _   _
         | | | | ___  __ _| | |_| |__
         | |_| |/ _ \/ _` | | __| '_ \
         |  _  |  __/ (_| | | |_| | | |
         |_| |_|\___|\__,_|_|\__|_| |_|
      -->

    <class stash.storable="true"
           jpox.table="REPOSITORY_PROBLEMS">
      <name>RepositoryProblem</name>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="50">
          <name>repositoryId</name>
          <version>1.0.0+</version>
          <required>true</required>
          <type>String</type>
          <description>
            The repository associated with this path and problem.
          </description>
        </field>
        <field stash.maxSize="250"
               jpox.column="REPO_PATH">
          <name>path</name>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            The path into the repository for the problem.
          </description>
        </field>
        <field stash.maxSize="250">
          <name>groupId</name>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The Group ID of the repository content with the problem.
          </description>
        </field>
        <field stash.maxSize="80">
          <name>artifactId</name>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The Artifact ID of the repository content with the problem.
          </description>
        </field>
        <field stash.maxSize="50">
          <name>version</name>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            The version of the repository content with the problem.
          </description>
        </field>
        <field stash.maxSize="50"
               jpox.column="PROBLEM_TYPE">
          <name>type</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>true</required>
          <type>String</type>
          <description>
            The type of health problem.
          </description>
        </field>
        <field stash.maxSize="20"
               jpox.column="PROBLEM_ORIGIN">
          <name>origin</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>true</required>
          <type>String</type>
          <description>
            The origin of the health problem.
          </description>
        </field>
        <field stash.maxSize="4096">
          <name>message</name>
          <identifier>false</identifier>
          <version>1.0.0+</version>
          <required>true</required>
          <type>String</type>
          <description>
            The origin of the health problem.
          </description>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -3426958367216659565L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>

    <!-- _______________________________________________________________
          ____  _        _   _     _   _
         / ___|| |_ __ _| |_(_)___| |_(_) ___ ___
         \___ \| __/ _` | __| / __| __| |/ __/ __|
          ___) | || (_| | |_| \__ \ |_| | (__\__ \
         |____/ \__\__,_|\__|_|___/\__|_|\___|___/
      -->

    <class stash.storable="true"
           jpox.table="REPOSITORY_STATS">
      <name>RepositoryContentStatistics</name>
      <version>1.0.0+</version>
      <fields>
        <field stash.maxSize="50">
          <name>repositoryId</name>
          <version>1.0.0+</version>
          <identifier>false</identifier>
          <required>true</required>
          <type>String</type>
          <description>
            The repository id the statistics belong to.
          </description>
        </field>
        <field>
          <name>whenGathered</name>
          <version>1.0.0+</version>
          <identifier>false</identifier>
          <required>true</required>
          <type>Date</type>
          <description>
            The timestamp on when this set of statistics was gathered.
          </description>
        </field>
        <field>
          <name>duration</name>
          <version>1.0.0+</version>
          <identifier>false</identifier>
          <required>true</required>
          <type>long</type>
          <description>
            The duration (in milliseconds) for the gathering of the statistics.
          </description>
        </field>
        <field>
          <name>totalFileCount</name>
          <version>1.0.0+</version>
          <identifier>false</identifier>
          <required>true</required>
          <type>long</type>
          <description>
            The total number of files in the repository.
          </description>
        </field>
        <field>
          <name>newFileCount</name>
          <version>1.0.0+</version>
          <identifier>false</identifier>
          <required>true</required>
          <type>long</type>
          <description>
            The number of new files discovered.
          </description>
        </field>
        <field>
          <name>totalProjectCount</name>
          <version>1.0.0+</version>
          <identifier>false</identifier>
          <required>true</required>
          <type>long</type>
          <description>
            The total number of unique projects in the repository.
          </description>
        </field>
        <field>
          <name>totalGroupCount</name>
          <version>1.0.0+</version>
          <identifier>false</identifier>
          <required>true</required>
          <type>long</type>
          <description>
            The total number of unique groups in the repository.
          </description>
        </field>
        <field>
          <name>totalArtifactCount</name>
          <version>1.0.0+</version>
          <identifier>false</identifier>
          <required>true</required>
          <type>long</type>
          <description>
            The total number of artifacts in the repository. 
          </description>
        </field>
        <field>
          <name>totalSize</name>
          <version>1.0.0+</version>
          <identifier>false</identifier>
          <required>true</required>
          <type>long</type>
          <description>
            The total size in bytes of the repository.
          </description>
        </field>
      </fields>
      <codeSegments>
        <codeSegment>
          <version>1.0.0+</version>
          <code><![CDATA[
    private static final long serialVersionUID = -7113629916828442780L;
          ]]></code>
        </codeSegment>
      </codeSegments>
    </class>
  </classes>
</model>
