<?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">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.royale.typedefs</groupId>
    <artifactId>royale-typedefs-parent</artifactId>
    <version>0.9.6</version>
  </parent>

  <artifactId>royale-typedefs-googlemaps</artifactId>
  <version>0.9.6</version>
  <packaging>swc</packaging>

  <name>Apache Royale: TypeDefs: GoogleMaps</name>

  <properties>
    <googlemaps.version>v3_11</googlemaps.version>
  </properties>

  <build>
    <plugins>
      <!-- Download JavaScript form GitHub -->
      <plugin>
        <groupId>com.googlecode.maven-download-plugin</groupId>
        <artifactId>download-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <id>get-createjs</id>
            <phase>validate</phase>
            <goals>
              <goal>wget</goal>
            </goals>
            <configuration>
              <skipCache>true</skipCache>
              <url>https://raw.githubusercontent.com/royale-extras/closure-compiler/royale/contrib/externs/maps/google_maps_api_${googlemaps.version}.js</url>
              <outputFileName>google_maps_api_${googlemaps.version}.js</outputFileName>
              <outputDirectory>${project.build.directory}/downloads</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
      
      <plugin>
        <groupId>org.apache.royale.compiler</groupId>
        <artifactId>royale-maven-plugin</artifactId>
        <version>${royale.compiler.version}</version>
        <extensions>true</extensions>
        <configuration>
          <includeSources>true</includeSources>
          <externcInput>
            <fileSet>
              <directory>${project.basedir}/target/downloads</directory>
              <includes>
                <include>**/*.js</include>
              </includes>
            </fileSet>
          </externcInput>
          <includeFiles>
            <include-file>
              <name>externs/google_maps_api_v3_11.js</name>
              <path>downloads/google_maps_api_v3_11.js</path>
            </include-file>
          </includeFiles>
          <skipSwc>true</skipSwc>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.apache.royale.compiler</groupId>
            <artifactId>compiler-jx</artifactId>
            <version>${royale.compiler.version}</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>org.apache.royale.typedefs</groupId>
      <artifactId>royale-typedefs-js</artifactId>
      <version>0.9.6</version>
      <type>swc</type>
      <classifier>typedefs</classifier>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

</project>
