<!--
  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.camel</groupId>
    <artifactId>camel-parent</artifactId>
    <version>2.18.0-SNAPSHOT</version>
    <relativePath>../parent</relativePath>
  </parent>

   <artifactId>camel-website</artifactId>
   <packaging>jar</packaging>
   <name>Camel Website</name>

   <build>
      <plugins>
         <plugin>
            <groupId>com.github.eirslett</groupId>
            <artifactId>frontend-maven-plugin</artifactId>
            <version>0.0.27</version>
            <executions>
               <execution>
                  <id>install node and npm</id>
                  <goals>
                     <goal>install-node-and-npm</goal>
                  </goals>
                  <phase>generate-sources</phase>
                  <configuration>
                     <nodeVersion>v0.10.32</nodeVersion>
                     <npmVersion>1.4.12</npmVersion>
                  </configuration>
               </execution>
               <execution>
                  <id>npm install</id>
                  <goals>
                     <goal>npm</goal>
                  </goals>
                  <phase>generate-sources</phase>
                  <configuration>
                     <arguments>install</arguments>
                  </configuration>
               </execution>
            </executions>
         </plugin>
         <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.6</version>
            <executions>
               <execution>
                  <phase>generate-sources</phase>
                  <configuration>
                     <target>
                        <condition property="gitbook.cmd" 
                                   value="${basedir}/node_modules/.bin/gitbook.cmd" 
                                   else="${basedir}/node_modules/.bin/gitbook">
                           <os family="windows" />
                        </condition>

                        <!-- lets generate the gitbook -->
                        <mkdir dir="${basedir}/target/docs/user-manual" />
                        <copy todir="${basedir}/target/docs/user-manual" >
                          <fileset dir="${basedir}/../docs/user-manual/en"/>
                        </copy>
                        <copy todir="${basedir}/target/docs/user-manual" flatten="true">
                          <fileset dir="{basedir}/../../components">
                            <include name="**/src/main/docs/**"/>
                          </fileset>
                          <fileset dir="{basedir}/../../camel-core">
                            <include name="**/src/main/docs/**"/>
                          </fileset>
                        </copy>

                        <mkdir dir="${basedir}/target/classes/user-manual" />
                        <echo>executing ${gitbook.cmd}</echo>
                        <exec executable="${gitbook.cmd}">
                           <arg value="build" />
                           <arg value="${basedir}/target/docs/user-manual" />
                           <arg value="${basedir}/target/classes/user-manual" />
                        </exec>

                        <condition property="grunt.cmd" 
                                   value="${basedir}/node_modules/.bin/grunt.cmd" 
                                   else="${basedir}/node_modules/.bin/grunt">
                           <os family="windows" />
                        </condition>
                        <echo>executing ${grunt.cmd}</echo>
                        <exec executable="${grunt.cmd}" failonerror="false"/>

                     </target>
                  </configuration>
                  <goals>
                     <goal>run</goal>
                  </goals>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>
</project>
