<!--
  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">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>cloud-awsapi</artifactId>
  <name>Apache CloudStack AWS API Bridge</name>
  <packaging>war</packaging>
  <parent>
    <groupId>org.apache.cloudstack</groupId>
    <artifactId>cloudstack</artifactId>
    <version>4.6.0-SNAPSHOT</version>
  </parent>
  <dependencies>
    <dependency>
      <groupId>org.apache.cloudstack</groupId>
      <artifactId>cloud-utils</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.axis2</groupId>
      <artifactId>axis2</artifactId>
      <version>${cs.axis2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.axis2</groupId>
      <artifactId>axis2-adb</artifactId>
      <version>${cs.axis2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.axis2</groupId>
      <artifactId>axis2-webapp</artifactId>
      <type>war</type>
      <version>${cs.axis2.version}</version>
      <exclusions>
        <exclusion>
          <groupId>xerces</groupId>
          <artifactId>xercesImpl</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.ws.commons.axiom</groupId>
      <artifactId>axiom-api</artifactId>
      <version>${cs.axiom.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.ws.commons.axiom</groupId>
      <artifactId>axiom-impl</artifactId>
      <version>${cs.axiom.version}</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.cloudstack</groupId>
      <artifactId>cloud-plugin-syslog-alerts</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.cloudstack</groupId>
      <artifactId>cloud-plugin-snmp-alerts</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.neethi</groupId>
      <artifactId>neethi</artifactId>
      <version>${cs.neethi.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.ws.commons.axiom</groupId>
          <artifactId>axiom-api</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.apache.ws.commons.axiom</groupId>
          <artifactId>axiom-impl</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.googlecode.json-simple</groupId>
      <artifactId>json-simple</artifactId>
      <version>1.1</version>
    </dependency>
    <dependency>
      <groupId>org.jasypt</groupId>
      <artifactId>jasypt</artifactId>
    </dependency>
    <dependency>
      <groupId>com.caringo.client</groupId>
      <artifactId>CAStorSDK</artifactId>
      <version>1.3.1-CS40</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <version>1.6.1</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.ws.security</groupId>
      <artifactId>wss4j</artifactId>
      <version>1.6.1</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>joda-time</groupId>
      <artifactId>joda-time</artifactId>
      <version>1.5.2</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.opensaml</groupId>
      <artifactId>xmltooling</artifactId>
      <version>1.3.1</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.opensaml</groupId>
      <artifactId>openws</artifactId>
      <version>1.4.1</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>velocity</groupId>
      <artifactId>velocity</artifactId>
      <version>1.5</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.opensaml</groupId>
      <artifactId>opensaml</artifactId>
      <version>2.5.1-1</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.santuario</groupId>
      <artifactId>xmlsec</artifactId>
      <version>1.4.2</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcprov-jdk16</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>org.antlr</groupId>
      <artifactId>antlr-runtime</artifactId>
      <version>3.4</version>
    </dependency>
    <dependency>
      <groupId>dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6.1</version>
    </dependency>
    <dependency>
      <groupId>javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.9.0.GA</version>
    </dependency>
    <dependency>
      <groupId>org.apache.cloudstack</groupId>
      <artifactId>cloud-framework-db</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
  <build>
    <resources>
      <resource>
        <directory>src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
      <resource>
        <directory>../utils/conf/</directory>
      </resource>
      <resource>
        <directory>${basedir}/resource/AmazonEC2</directory>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <executions>
          <execution>
            <id>cloudstack-checkstyle</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>com/cloud/gate/util/UtilTestCase.java</exclude>
            <exclude>com/cloud/gate/service/ServiceTestCase.java</exclude>
            <exclude>com/cloud/gate/util/CloudStackClientTestCase.java</exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <webXml>./web/web.xml</webXml>
          <warSourceDirectory>./target/generated-webapp</warSourceDirectory>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <version>6.1.26</version>
        <configuration>
          <connectors>
            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
              <port>7080</port>
              <maxIdleTime>60000</maxIdleTime>
            </connector>
          </connectors>
          <contextPath>/awsapi</contextPath>
          <webXml>${basedir}/web/web.xml</webXml>
          <webAppSourceDirectory>${project.build.directory}/${project.build.finalName}</webAppSourceDirectory>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>generate-resource</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <copy todir="${basedir}/target/generated-webapp/WEB-INF/classes">
                  <fileset dir="${basedir}/conf">
                    <include name="*.*"/>
                  </fileset>
                  <globmapper from="*.in" to="*"/>
                  <filterchain>
                    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
                      <param type="propertiesfile" value="${cs.replace.properties}"/>
                    </filterreader>
                  </filterchain>
                </copy>
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.axis2</groupId>
        <artifactId>axis2-aar-maven-plugin</artifactId>
        <version>1.6.2</version>
        <extensions>true</extensions>
        <configuration>
          <includeDependencies>false</includeDependencies>
          <aarName>cloud-ec2</aarName>
          <outputDirectory>${project.build.directory}/WEB-INF/services</outputDirectory>
          <fileSets>
            <fileSet>
              <directory>resource/AmazonEC2</directory>
              <outputDirectory>META-INF</outputDirectory>
              <includes>
                <include>services.xml</include>
              </includes>
            </fileSet>
          </fileSets>
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>aar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>downloadec2wsdl</id>
      <activation>
        <property>
          <name>downloadec2wsdl</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
              <execution>
                <phase>generate-resources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <target name="download-2012-08-15.ec2-wsdl">
                    <!-- Create the WSDL directory structure used by codegen -->
                    <mkdir dir="wsdl"/>
                    <echo message="Downloading 2012-08-15.ec2-wsdl..."/>
                    <get src="http://s3.amazonaws.com/ec2-downloads/2012-08-15.ec2.wsdl"
                      dest="${basedir}/wsdl/" verbose="true" usetimestamp="true"/>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>gencodefromwsdl</id>
      <activation>
        <property>
          <name>gencodefromwsdl</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-wsdl2code-maven-plugin</artifactId>
            <version>1.5.6</version>
            <executions>
              <execution>
                <phase>generate-sources</phase>
                <goals>
                  <goal>wsdl2code</goal>
                </goals>
                <configuration>
                  <wsdlFile>${basedir}/wsdl/2012-08-15.ec2.wsdl</wsdlFile>
                  <packageName>com.amazon.ec2</packageName>
                  <generateServerSide>true</generateServerSide>
                  <generateServicesXml>true</generateServicesXml>
                  <generateServerSideInterface>true</generateServerSideInterface>
                  <namespaceToPackages>http://ec2.amazonaws.com/doc/2012-08-15/=com.amazon.ec2</namespaceToPackages>
                  <outputDirectory>${basedir}</outputDirectory>
                </configuration>
              </execution>
              <execution>
                <id>generate-aws-ec2-source-client</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>wsdl2code</goal>
                </goals>
                <configuration>
                  <wsdlFile>${basedir}/wsdl/2012-08-15.ec2.wsdl</wsdlFile>
                  <packageName>com.amazon.ec2.client</packageName>
                  <namespaceToPackages>http://ec2.amazonaws.com/doc/2012-08-15/=com.amazon.ec2.client</namespaceToPackages>
                  <outputDirectory>${basedir}</outputDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>removewsdl</id>
      <activation>
        <property>
          <name>removewsdl</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
              <execution>
                <phase>clean</phase>
                <goals>
                  <goal>exec</goal>
                </goals>
                <configuration>
                  <executable>rm</executable>
                  <arguments>
                    <argument>-rf</argument>
                    <argument>${basedir}/wsdl/</argument>
                    <argument>${basedir}/resources/AmazonEC2.wsdl</argument>
                  </arguments>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
