<!--
   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>
    <groupId>org.apache.ambari.contrib.views</groupId>
    <artifactId>capacity-scheduler</artifactId>
    <version>1.0.0.0-SNAPSHOT</version>
    <name>Capacity Scheduler</name>

    <parent>
        <groupId>org.apache.ambari.contrib.views</groupId>
        <artifactId>ambari-contrib-views</artifactId>
        <version>2.0.0.0-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>4.0-beta</version> <!-- version -->
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>tomcat</groupId>
                    <artifactId>jasper-runtime</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.9</version>
        </dependency>
        <dependency>
          <groupId>commons-validator</groupId>
          <artifactId>commons-validator</artifactId>
          <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ambari</groupId>
            <artifactId>ambari-views</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.ambari.contrib.views</groupId>
            <artifactId>ambari-views-utils</artifactId>
            <version>2.0.0.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>3.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <properties>
      <ambari.dir>${project.parent.parent.parent.basedir}</ambari.dir>
      <ui.directory>${basedir}/src/main/resources/ui</ui.directory>
    </properties>

    <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-clean-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <filesets>
            <fileset>
              <directory>${ui.directory}</directory>
              <followSymlinks>false</followSymlinks>
               <includes>
                <include>public/**</include>
                <include>node_modules/**</include>
                <include>bower_components/**</include>
                <include>node/**</include>
              </includes>
             </fileset>
          </filesets>
        </configuration>
      </plugin>
      <plugin>
        <groupId>com.github.eirslett</groupId>
        <artifactId>frontend-maven-plugin</artifactId>
        <version>1.4</version>
        <configuration>
          <yarnVersion>v0.23.2</yarnVersion>
          <workingDirectory>${ui.directory}</workingDirectory>
          <npmInheritsProxyConfigFromMaven>false</npmInheritsProxyConfigFromMaven>
          <!-- setting npm_config_tmp environment variable is a workaround for
               https://github.com/Medium/phantomjs/issues/673 -->
          <environmentVariables>
            <npm_config_tmp>/tmp/npm_config_tmp</npm_config_tmp>
          </environmentVariables>
        </configuration>
        <executions>
          <execution>
            <id>install node and yarn</id>
            <goals>
                <goal>install-node-and-yarn</goal>
            </goals>
            <!-- optional: default phase is "generate-resources" -->
            <phase>initialize</phase>
            <configuration>
                <nodeVersion>v4.5.0</nodeVersion>
                <npmVersion>2.15.0</npmVersion>
            </configuration>
          </execution>
          <execution>
            <id>yarn install --pure-lockfile</id>
            <goals>
              <goal>yarn</goal>
            </goals>
            <phase>generate-resources</phase>
            <configuration>
              <arguments>install --unsafe-perm</arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>exec-maven-plugin</artifactId>
        <groupId>org.codehaus.mojo</groupId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <id>Bower install</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <workingDirectory>${ui.directory}</workingDirectory>
              <executable>${ui.directory}/node/${node.executable}</executable>
              <arguments>
                <argument>${ui.directory}/node_modules/bower/bin/bower</argument>
                <argument>install</argument>
                <argument>--allow-root</argument>
              </arguments>
            </configuration>
          </execution>
          <execution>
            <id>Brunch build</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <workingDirectory>${ui.directory}</workingDirectory>
              <executable>${ui.directory}/node/${node.executable}</executable>
              <arguments>
                <argument>node_modules/brunch/bin/brunch</argument>
                <argument>build</argument>
                <argument>--production</argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <phase>generate-resources</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    <includeScope>runtime</includeScope>
                </configuration>
            </execution>
          <execution>
            <id>copy-artifact</id>
            <phase>package</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>${project.groupId}</groupId>
                  <artifactId>${project.artifactId}</artifactId>
                  <version>${project.version}</version>
                  <type>${project.packaging}</type>
                </artifactItem>
              </artifactItems>
              <outputDirectory>${views.jars.dir.rel}</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
         <groupId>org.vafer</groupId>
         <artifactId>jdeb</artifactId>
         <version>1.0.1</version>
         <executions>
             <execution>
                 <phase>none</phase>
                 <goals>
                     <goal>jdeb</goal>
                 </goals>
             </execution>
         </executions>
         <configuration>
             <skip>true</skip>
             <submodules>false</submodules>
         </configuration>
     </plugin>
    </plugins>
    <resources>
        <resource>
        <directory>src/main/resources/ui/public</directory>
        <filtering>false</filtering>
        </resource>

        <resource>
        <directory>src/main/resources/</directory>
        <filtering>false</filtering>
        <includes>
            <include>view.xml</include>
            <include>view.log4j.properties</include>
        </includes>
        </resource>
        <resource>
            <targetPath>WEB-INF/lib</targetPath>
            <filtering>false</filtering>
            <directory>target/lib</directory>
        </resource>
    </resources>
    <pluginManagement>
        <plugins>
        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
        <plugin>
            <groupId>org.eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
            <lifecycleMappingMetadata>
                <pluginExecutions>
                <pluginExecution>
                    <pluginExecutionFilter>
                    <groupId>
                        org.codehaus.mojo
                    </groupId>
                    <artifactId>
                        exec-maven-plugin
                    </artifactId>
                    <versionRange>
                        [1.2.1,)
                    </versionRange>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    </pluginExecutionFilter>
                    <action>
                    <ignore></ignore>
                    </action>
                </pluginExecution>
                <pluginExecution>
                    <pluginExecutionFilter>
                    <groupId>
                        com.github.eirslett
                    </groupId>
                    <artifactId>
                        frontend-maven-plugin
                    </artifactId>
                    <versionRange>
                        [0.0.14,)
                    </versionRange>
                    <goals>
                        <goal>
                        install-node-and-npm
                        </goal>
                        <goal>npm</goal>
                    </goals>
                    </pluginExecutionFilter>
                    <action>
                    <ignore></ignore>
                    </action>
                </pluginExecution>
                </pluginExecutions>
            </lifecycleMappingMetadata>
            </configuration>
        </plugin>
        </plugins>
    </pluginManagement>
    </build>
    <profiles>
      <profile>
        <id>windows</id>
        <activation>
          <os>
            <family>win</family>
          </os>
        </activation>
        <properties>
          <node.executable>node.exe</node.executable>
          <skip.nodegyp.chmod>true</skip.nodegyp.chmod>
        </properties>
      </profile>
      <profile>
        <id>linux</id>
        <activation>
          <os>
            <family>unix</family>
          </os>
        </activation>
        <properties>
          <node.executable>node</node.executable>
          <skip.nodegyp.chmod>false</skip.nodegyp.chmod>
        </properties>
      </profile>
    </profiles>
  </project>
