<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.royale.examples</groupId>
    <artifactId>BE0013_Dividing_an_Apache_Royale_application_with_modules</artifactId>
    <version>0.9.8-SNAPSHOT</version>
  </parent>

  <artifactId>JewelModule</artifactId>
  <version>0.9.8-SNAPSHOT</version>
  <packaging>swf</packaging>

  <name>Apache Royale: Examples: Blog: 0013:  - JewelModule</name>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.royale.compiler</groupId>
        <artifactId>royale-maven-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <mainClass>JewelModule.mxml</mainClass>
          <targets>JSRoyale</targets>
          <debug>false</debug>
          <additionalCompilerOptions>-source-map=true;-js-compiler-option=--variable_map_input_file ../../../../../MainJewelApp/target/javascript/bin/js-release/gccvars.txt;-js-compiler-option+=--property_map_input_file ../../../../../MainJewelApp/target/javascript/bin/js-release/gccprops.txt</additionalCompilerOptions>
        </configuration>
      </plugin>

      <!-- copy module files from Module target folder to Application target folder-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <!-- for js-release (copy all to 'modules' folder)-->
          <execution>
            <id>copy-resources-release</id>
            <phase>install</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <resources>
                <resource>
                  <directory>${project.basedir}/target/javascript/bin/js-release/</directory>
                </resource>
              </resources>
              <outputDirectory>${project.basedir}/../MainJewelApp/target/javascript/bin/js-release/modules/</outputDirectory>
            </configuration>
          </execution>
          <!-- for js-debug (copy all to js-debug but will need a next step later (check **))-->
          <execution>
            <id>copy-resources-debug</id>
            <phase>install</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <resources>
                <resource>
                  <directory>${project.basedir}/target/javascript/bin/js-debug/</directory>
                </resource>
              </resources>
              <outputDirectory>${project.basedir}/../MainJewelApp/target/javascript/bin/js-debug/</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- (**) for js-debug: we need to move two files from 'target/js-debug' to 'target/js-debug/modules' since Application expect to find it there -->
      <plugin>
        <groupId>com.coderplus.maven.plugins</groupId>
        <artifactId>copy-rename-maven-plugin</artifactId>
        <version>1.0</version>
        <executions>
          <execution>
            <id>debug-move-files</id>
            <phase>install</phase>
            <goals>
              <goal>rename</goal>
            </goals>
            <configuration>
              <fileSets>
                <fileSet>
                  <sourceFile>${project.basedir}/../MainJewelApp/target/javascript/bin/js-debug/${project.artifactId}__deps.js</sourceFile>
                  <destinationFile>${project.basedir}/../MainJewelApp/target/javascript/bin/js-debug/modules/${project.artifactId}__deps.js</destinationFile>
                </fileSet>
                <fileSet>
                  <sourceFile>${project.basedir}/../MainJewelApp/target/javascript/bin/js-debug/${project.artifactId}.css</sourceFile>
                  <destinationFile>${project.basedir}/../MainJewelApp/target/javascript/bin/js-debug/modules/${project.artifactId}.css</destinationFile>
                </fileSet>
              </fileSets>
            </configuration>
          </execution>
        </executions>
      </plugin>

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


