<!--
Copyright (C) 2015 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.labelui</groupId>
  <artifactId>labelui</artifactId>
  <packaging>jar</packaging>
  <version>2.12.6</version>
  <name>labelui</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>
          <includes>
            <include>**/*.*</include>
          </includes>
          <archive>
            <manifestEntries>
              <Gerrit-PluginName>labelui</Gerrit-PluginName>
              <Gerrit-Module>com.googlesource.gerrit.plugins.labelui.Module</Gerrit-Module>
              <Gerrit-HttpModule>com.googlesource.gerrit.plugins.labelui.HttpModule</Gerrit-HttpModule>
              <Implementation-Vendor>Gerrit Code Review</Implementation-Vendor>
              <Implementation-URL>https://www.gerritcodereview.com/</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.labelui.LabelUI</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>snapshot-repository</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </repository>
  </repositories>
</project>
