<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2013 The Android Open Source Project

Licensed 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>

  <groupId>com.googlesource.gerrit.plugins.reviewers</groupId>
  <artifactId>reviewers</artifactId>
  <packaging>jar</packaging>
  <version>2.13</version>
  <name>reviewers</name>

  <properties>
    <Gerrit-ApiType>plugin</Gerrit-ApiType>
    <Gerrit-ApiVersion>${project.version}</Gerrit-ApiVersion>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <archive>
            <manifestEntries>
              <Gerrit-PluginName>reviewers</Gerrit-PluginName>
              <Gerrit-Module>com.googlesource.gerrit.plugins.reviewers.Module</Gerrit-Module>
              <Gerrit-HttpModule>com.googlesource.gerrit.plugins.reviewers.HttpModule</Gerrit-HttpModule>
              <Implementation-Vendor>Gerrit Code Review</Implementation-Vendor>
              <Implementation-URL>http://code.google.com/p/gerrit/</Implementation-URL>

              <Implementation-Title>${Gerrit-ApiType} ${project.artifactId}</Implementation-Title>
              <Implementation-Version>${project.version}</Implementation-Version>

              <Gerrit-ApiType>${Gerrit-ApiType}</Gerrit-ApiType>
              <Gerrit-ApiVersion>${Gerrit-ApiVersion}</Gerrit-ApiVersion>
            </manifestEntries>
          </archive>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>gwt-maven-plugin</artifactId>
        <version>2.7.0</version>
        <configuration>
          <module>com.googlesource.gerrit.plugins.reviewers.ReviewersForm</module>
          <disableClassMetadata>true</disableClassMetadata>
          <disableCastChecking>true</disableCastChecking>
          <webappDirectory>${project.build.directory}/classes/static</webappDirectory>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>com.google.gerrit</groupId>
      <artifactId>gerrit-${Gerrit-ApiType}-api</artifactId>
      <version>${Gerrit-ApiVersion}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.google.gerrit</groupId>
      <artifactId>gerrit-plugin-gwtui</artifactId>
      <version>${Gerrit-ApiVersion}</version>
    </dependency>
    <dependency>
     <groupId>com.google.gwt</groupId>
      <artifactId>gwt-user</artifactId>
      <version>2.7.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <repositories>
    <repository>
      <id>gerrit-api-repository</id>
      <url>https://gerrit-api.commondatastorage.googleapis.com/snapshot/</url>
    </repository>
  </repositories>
  <description>Add default reviewers with different strategies</description>
</project>
