<?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/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>persistence</artifactId>
    <groupId>org.apache.usergrid</groupId>
    <version>2.0.0-SNAPSHOT</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>

  <artifactId>graph</artifactId>

  <name>Usergrid Graph</name>

  <dependencies>

    <dependency>
      <groupId>org.apache.usergrid</groupId>
      <artifactId>common</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.usergrid</groupId>
      <artifactId>common</artifactId>
      <version>${project.version}</version>
      <classifier>tests</classifier>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-collections4</artifactId>
      <version>4.0</version>
    </dependency>



    <dependency>
      <groupId>org.apache.usergrid</groupId>
      <artifactId>collection</artifactId>
      <version>${project.version}</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>


      <dependency>
          <groupId>com.codahale.metrics</groupId>
          <artifactId>metrics-core</artifactId>
          <version>${metrics.version}</version>
      </dependency>

      <dependency>
          <groupId>com.codahale.metrics</groupId>
          <artifactId>metrics-graphite</artifactId>
          <version>${metrics.version}</version>
      </dependency>

    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>${mockito.version}</version>
      <scope>test</scope>
    </dependency>




  </dependencies>

  <build>
    <plugins>

<!--      <plugin>
        <groupId>org.safehaus.chop</groupId>
        <artifactId>chop-maven-plugin</artifactId>
        <version>${chop.version}</version>


        NOTE: you should be putting most of these variables into your settings.xml
        as an automatically activated profile.


        <configuration>
          <accessKey>${aws.s3.key}</accessKey>
          <secretKey>${aws.s3.secret}</secretKey>
          <availabilityZone>${availabilityZone}</availabilityZone>
          <bucketName>${aws.s3.bucket}</bucketName>
          <managerAppUsername>admin</managerAppUsername>
          <managerAppPassword>${manager.app.password}</managerAppPassword>
          <testPackageBase>org.apache.usergrid</testPackageBase>
          <runnerSSHKeyFile>${runner.ssh.key.file}</runnerSSHKeyFile>
          <failIfCommitNecessary>false</failIfCommitNecessary>
          <amiID>${ami.id}</amiID>
          <instanceType>m1.large</instanceType>
          <resultsDirectory>${resultsDirectory}</resultsDirectory>
          <dumpType>${dumpType}</dumpType>
          <coldRestartTomcat>true</coldRestartTomcat>
          <awsSecurityGroup>${security.group}</awsSecurityGroup>
          <runnerKeyPairName>${runner.keypair.name}</runnerKeyPairName>
          <runnerCount>6</runnerCount>
          <runnerName>${runner.name}</runnerName>
          <securityGroupExceptions>

            Add your own IP address as an exception to allow access
            but please do this in the settings.xml file .. essentially
            all parameters should be in the settings.xml file.

            <param>${myip.address}/32:24981</param>
            <param>${myip.address}/32:22</param>
          </securityGroupExceptions>
        </configuration>
      </plugin>-->

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <!-- We want to exclude any chop tests or stress tests.  They kill the embedded cassandra and
          aren't intended to be part of the build process-->
          <excludes>
            <exclude>**/*ChopTest.java</exclude>
            <exclude>**/*LoadTest.java</exclude>
            <exclude>**/*StressTest.java</exclude>
          </excludes>
        </configuration>
      </plugin>

    </plugins>
  </build>
</project>
