<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<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.5</version>
    <relativePath>../core/pom.xml</relativePath>
  </parent>
  <artifactId>cas-catalog</artifactId>
  <name>OODT CAS Virtual Catalog and Integration Service.</name>
  <description>CAS Catalog is an effort to virtualize underlying 
  catalogs for use in the CAS system. Heterogeneous catalog models 
  are mapped to a common dictionary, and then integrated locally so that
  they may be queried across and ingested into.
  </description>
  <scm>
   	<connection>scm:svn:https://svn.apache.org/repos/asf/oodt/tags/0.5/catalog</connection>
   	<developerConnection>scm:svn:https://svn.apache.org/repos/asf/oodt/tags/0.5/catalog</developerConnection>
   	<url>http://svn.apache.org/viewvc/oodt/tags/0.5/catalog</url>
  </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>**/src/main/java/org/apache/oodt/cas/catalog/query/parser/*.java</exclude>
              </excludes>
            </configuration>
            <executions>
              <execution>
                <phase>verify</phase>
                <goals>
                  <goal>check</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>tmpdir</id>
      <activation>
        <property>
           <name>test.tmpdir</name>
        </property>
      </activation>
       <build>
        <plugins>
         <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.4.3</version>
          <configuration>
          <systemProperties>
             <property>
               <name>java.io.tmpdir</name>
               <value>${test.tmpdir}</value>
              </property>
           </systemProperties>
           </configuration>
         </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-2</version>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/assembly.xml</descriptor>
          </descriptors>
          <archive />
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <resources>
      <resource>
        <targetPath>org/apache/oodt/cas/catalog/config</targetPath>
        <directory>${basedir}/src/main/resources/policy</directory>
        <includes>
          <include>catserv-properties.xml</include>          
          <include>catserv-beans.xml</include>    
          <include>catserv-server-config.xml</include>
          <include>catserv-server-cmd-line-beans.xml</include>          
          <include>catserv-client-config.xml</include>                          
          <include>catserv-client-action-beans.xml</include>          
          <include>catserv-client-cmd-line-beans.xml</include>          
        </includes>
      </resource>
    </resources>
  </build>
  <ciManagement>
    <notifiers>
      <notifier>
        <configuration>
          <address>chris.mattmann@jpl.nasa.gov</address>
        </configuration>
      </notifier>
    </notifiers>
  </ciManagement>
  <dependencies>
    <dependency>
      <groupId>org.apache.oodt</groupId>
      <artifactId>oodt-commons</artifactId>
      <version>${project.parent.version}</version>    
    </dependency>
    <dependency>
      <groupId>org.apache.oodt</groupId>
      <artifactId>cas-metadata</artifactId>
      <version>${project.parent.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.oodt</groupId>
      <artifactId>cas-cli</artifactId>
      <version>${project.parent.version}</version>    
    </dependency>  
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>1.4</version>
    </dependency>
    <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
      <version>3.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.lucene</groupId>
      <artifactId>lucene-core</artifactId>
      <version>2.0.0</version>
    </dependency>
    <dependency>
      <groupId>xmlrpc</groupId>
      <artifactId>xmlrpc</artifactId>
      <version>2.0.1</version>
    </dependency>
    <dependency>
      <groupId>com.thoughtworks.xstream</groupId>
      <artifactId>xstream</artifactId>
      <version>1.3.1</version>
      <exclusions>
        <exclusion>
          <!-- xom is an optional dependency of xstream. Its also an Apache incompatible license -->
          <groupId>xom</groupId>
          <artifactId>xom</artifactId>
        </exclusion> 
      </exclusions>
    </dependency>
    <dependency>
      <groupId>hsqldb</groupId>
      <artifactId>hsqldb</artifactId>
      <version>1.8.0.7</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
<!-- 
  <reporting>
  	<plugins>
  		<plugin>
  			<groupId>org.apache.maven.plugins</groupId>
  			<artifactId>maven-project-info-reports-plugin</artifactId>
  			<version>2.4</version>
  			<configuration>
  				<checkoutDirectoryName>catalog</checkoutDirectoryName>
  			</configuration>
  		</plugin>
  	</plugins>
  </reporting>
-->
</project>
