<?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>
  <artifactId>brooklyn-archetype-quickstart</artifactId>
  <packaging>maven-archetype</packaging>
  <name>Brooklyn Quick-Start Project Archetype</name>
  <description>
    This project defines an archetype for creating new projects which consume brooklyn,
    including an example application and an example new entity type,
    able to build an OSGi JAR and a binary assembly, with logging and READMEs.
  </description>

  <parent>
    <groupId>org.apache.brooklyn</groupId>
    <artifactId>brooklyn-parent</artifactId>
    <version>0.8.1-SNAPSHOT</version>  <!-- BROOKLYN_VERSION -->
    <relativePath>../../../parent/pom.xml</relativePath>
  </parent>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-archetype-plugin</artifactId>
        <!-- all we want to do is skip _integration tests_ when skipTests is set, not other phases;
             but for some reason this seems to do it, and it still builds the archetype (!?).
             whereas setting skip inside the integration-test execution goal does NOT work.
              
             TODO promote to root pom.xml when we better understand why
        -->
        <configuration>
          <skip>${skipTests}</skip>
        </configuration>
      </plugin>
      
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <configuration>
          <filesets>
            <fileset> 
                <directory>src/test/resources/projects/integration-test-1/reference</directory> 
                <includes><include>**/*</include></includes>
            </fileset>
            <fileset> 
                <directory>src/main/resources/archetype-resources/</directory> 
                <includes><include>**/*</include></includes>
            </fileset>
          </filesets>
        </configuration>
      </plugin>

      <plugin>
        <groupId>com.google.code.maven-replacer-plugin</groupId>
        <artifactId>maven-replacer-plugin</artifactId>
        <executions>
          <execution>
            <id>copy-brooklyn-sample-to-integration-test-reference</id>
            <phase>clean</phase>
            <goals> <goal>replace</goal> </goals>
            <configuration>
              <basedir>${basedir}/src/brooklyn-sample</basedir> 
              <outputBasedir>${basedir}</outputBasedir>
              <outputDir>src/test/resources/projects/integration-test-1/reference</outputDir>
              <includes> <include>**</include> </includes>
              <excludes> 
                <exclude>.*</exclude> 
                <exclude>.*/**</exclude> 
                <exclude>target/**</exclude> 
                <exclude>*.log</exclude> 
              </excludes>
              
              <replacements />
            </configuration>
          </execution>
          <!-- would be nice to reduce the repetion below, but don't see how;
               have tried with valueTokenMap but it must lie beneath basedir;
               and tried with {input,output}FilePattern but that doesn't apply to dirs  -->
          <execution>
            <!-- copy creating variables and unpackaged, for src/main/java -->
            <id>copy-brooklyn-sample-to-archetype-src-main-java</id>
            <phase>clean</phase>
            <goals> <goal>replace</goal> </goals>
            <configuration>
              <basedir>${basedir}/src/brooklyn-sample/src/main/java/com/acme/sample/brooklyn</basedir>
              <outputBasedir>${basedir}</outputBasedir>
              <outputDir>src/main/resources/archetype-resources/src/main/java</outputDir>
              <includes> <include>**/*</include> </includes>
              <replacements>
                <replacement> <token>brooklyn-sample</token> <value>\$\{artifactId}</value> </replacement>
                <replacement> <token>com\.acme\.sample\.brooklyn</token> <value>\$\{package}</value> </replacement>
                <replacement> <token>com/acme/sample/brooklyn</token> <value>\$\{packageInPathFormat}</value> </replacement>
                <replacement> <token>com\.acme\.sample</token> <value>\$\{groupId}</value> </replacement>
                <replacement> <token>0.1.0-SNAPSHOT</token> <value>\$\{version}</value> </replacement>
              </replacements>
            </configuration>
          </execution>
          <execution>
            <!-- copy creating variables and unpackaged, for src/test/java -->
            <id>copy-brooklyn-sample-to-archetype-src-test-java</id>
            <phase>clean</phase>
            <goals> <goal>replace</goal> </goals>
            <configuration>
              <basedir>${basedir}/src/brooklyn-sample/src/test/java/com/acme/sample/brooklyn</basedir>
              <outputBasedir>${basedir}</outputBasedir>
              <outputDir>src/main/resources/archetype-resources/src/test/java</outputDir>
              <includes> <include>**/*</include> </includes>
              <replacements>
                <replacement> <token>brooklyn-sample</token> <value>\$\{artifactId}</value> </replacement>
                <replacement> <token>com\.acme\.sample\.brooklyn</token> <value>\$\{package}</value> </replacement>
                <replacement> <token>com/acme/sample/brooklyn</token> <value>\$\{packageInPathFormat}</value> </replacement>
                <replacement> <token>com\.acme\.sample</token> <value>\$\{groupId}</value> </replacement>
                <replacement> <token>0.1.0-SNAPSHOT</token> <value>\$\{version}</value> </replacement>
              </replacements>
            </configuration>
          </execution>
          <execution>
            <!-- copy creating variables, for all other places -->
            <id>copy-brooklyn-sample-to-archetype-resources</id>
            <phase>clean</phase>
            <goals> <goal>replace</goal> </goals>
            <configuration>
              <basedir>${basedir}/src/brooklyn-sample/</basedir>
              <outputBasedir>${basedir}</outputBasedir>
              <outputDir>src/main/resources/archetype-resources/</outputDir>
              <includes> <include>**/*</include> </includes>
              <excludes> 
                <exclude>src/main/java/**</exclude> 
                <exclude>src/test/java/**</exclude> 
                <exclude>target/**</exclude> 
                <exclude>test-output/**</exclude> 
                <exclude>.*</exclude> 
                <exclude>**/*.png</exclude> 
                <exclude>.*/**</exclude> 
                <exclude>*.log</exclude>
                <exclude>**/*.sh</exclude>
              </excludes>
              <replacements>
                <!-- special chars in velocity have to be escaped.
                     fortunately we only use fairly simple examples so we don't need to solve the general case! -->
                <!-- escaping # is ugly -->
                <replacement> <token>(#+)</token> <value>#set\(\$H='$1'\)\${H}</value> </replacement>
                <!-- and escaping $ doesn't even seem to work; perhaps an old version of velocity in use?
                     (however velocity ignores $ except for variables which are defined, so we're okay)
                <replacement> <token>\$</token> <value>\\\$</value> </replacement>
                -->
                
                <replacement> <token>brooklyn-sample</token> <value>\$\{artifactId}</value> </replacement>
                <replacement> <token>com\.acme\.sample\.brooklyn</token> <value>\$\{package}</value> </replacement>
                <replacement> <token>com/acme/sample/brooklyn</token> <value>\$\{packageInPathFormat}</value> </replacement>
                <replacement> <token>com\.acme\.sample</token> <value>\$\{groupId}</value> </replacement>
                <replacement> <token>0.1.0-SNAPSHOT</token> <value>\$\{version}</value> </replacement>
              </replacements>
            </configuration>
          </execution>
          <execution>
            <!-- copy creating variables, for all other places -->
            <id>copy-brooklyn-sample-to-archetype-resources-binary</id>
            <phase>clean</phase>
            <goals> <goal>replace</goal> </goals>
            <configuration>
              <basedir>${basedir}/src/brooklyn-sample/</basedir>
              <outputBasedir>${basedir}</outputBasedir>
              <outputDir>src/main/resources/archetype-resources/</outputDir>
              <includes>
                <include>**/*.png</include>
                <include>**/*.sh</include>
              </includes>
              <excludes> 
                <exclude>target/**</exclude> 
                <exclude>test-output/**</exclude> 
                <exclude>.*</exclude> 
                <exclude>.*/**</exclude> 
              </excludes>
              <!-- no replacements for binary (put one just so we can use this plugin for consistency) -->
              <replacements><replacement> <token>NONCE_123456789XYZ</token> <value>NONCE_123456789XYZ</value> </replacement></replacements>
            </configuration>
          </execution>
          
        </executions>
      </plugin>

    </plugins>
      <pluginManagement>
        <plugins>
          <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
            <configuration>
              <excludes combine.children="append">
                <!-- 
                    The maven archetype are files "without any degree of creativity". They are intended
                    purely as a template to generate a new project for a user, where upon the user can
                    write their code within this new project.
                    The exclusions seem to need to include code that is auto-generated during a test run.
                -->
                <exclude>**/src/main/resources/archetype-resources/**/*</exclude>
                <exclude>**/src/test/resources/projects/integration-test-1/goal.txt</exclude>
                <exclude>**/src/test/resources/projects/integration-test-1/reference/**/*</exclude>
                <exclude>**/src/main/java/sample/**/*Sample*.java</exclude>
                <exclude>**/src/main/resources/logback-custom.xml</exclude>
                <exclude>**/src/brooklyn-sample/README.md</exclude>
                <exclude>**/src/brooklyn-sample/pom.xml</exclude>
                <exclude>**/src/brooklyn-sample/src/main/assembly/files/conf/*</exclude>
                <exclude>**/src/brooklyn-sample/src/main/java/**/*.java</exclude>
                <exclude>**/src/brooklyn-sample/src/main/resources/logback-custom.xml</exclude>
                <exclude>**/src/brooklyn-sample/src/test/java/**/*.java</exclude>
              </excludes>
            </configuration>
          </plugin>
        </plugins>
      </pluginManagement>

  </build>

</project>
