<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more contributor
license agreements.  See the NOTICE.txt 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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.oodt</groupId>
    <artifactId>oodt-core</artifactId>
    <version>0.11</version>
    <relativePath>../core/pom.xml</relativePath>
  </parent>
  <artifactId>cas-metadata</artifactId>
  <name>Catalog and Archive Service Generic Multi-valued Metadata Container</name>
  <description>A Multi-valued, generic Metadata container class. The class uses an internal
	Map of string keys pointing to vectors of strings. The data
	structure looks like the following:

	[std:string key]⇒std:vector of std:strings

	The multi-valued nature of the class is handled transparently by this Metadata
	container. Since all values are stored internally as string vectors, the difference
	between a scalar value and a non-scalar is handled by determining whether the list of
	values for a particular key is greater than 1.</description>
  <!-- All dependencies should be listed in core/pom.xml and be ordered alphabetically by package and artifact.
     Once the dependency is in the core pom, it can then be used in other modules without the version tags.
     For example, within core/pom.xml:

      <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk</artifactId>
      <version>1.7.4</version>
    </dependency>

     Elsewhere in the platform:
     <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk</artifactId>
    </dependency>

     Where possible the same dependency version should be used across the whole platform but if required the version
     can be overridden in a specific pom and should have a comment explaing why the version has been overridden
  -->
  <dependencies>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.oodt</groupId>
      <artifactId>oodt-commons</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.oodt</groupId>
      <artifactId>pcs-input</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-all</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-hibernate3</artifactId>
      <exclusions>
        <exclusion>
          <groupId>javax.transaction</groupId>
          <artifactId>jta</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
  <build>
    <resources>
      <resource>
        <targetPath>org/apache/oodt/cas/metadata/util</targetPath>
        <directory>${basedir}/src/main/resources</directory>
        <includes>
          <include>tika-mimetypes.xml</include>
        </includes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.8.1</version>
        <configuration>
          <redirectTestOutputToFile>true</redirectTestOutputToFile>

          <systemProperties>
            <property>
              <name>java.io.tmpdir</name>
              <value>${project.build.outputDirectory}</value>
            </property>
            <property>
              <name>java.util.logging.config.file</name>
              <value>${basedir}/src/main/resources/logging.properties</value>
            </property>
          </systemProperties>
          <forkMode>never</forkMode>
          <includes>
            <include>**/*Test*.java</include>
          </includes>
          <excludes>
            <exclude>org/apache/oodt/cas/metadata/MetadataTestCase.java</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <scm>
    <!--<connection>scm:svn:https://svn.apache.org/repos/asf/oodt/trunk/metadata</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/oodt/trunk/metadata</developerConnection>
    <url>http://svn.apache.org/viewvc/oodt/trunk/metadata</url>-->
    <tag>0.11</tag>
  </scm>
  <profiles>
    <profile>
      <id>audit</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>rat-maven-plugin</artifactId>
            <configuration>
              <excludes>
                <exclude>**/testdata/*</exclude>
                <exclude>**/resources/examples/*</exclude>
              </excludes>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>check</goal>
                </goals>
                <phase>verify</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
