<!--
 ! 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>
  <artifactId>asterix-license</artifactId>
  <name>asterix-license</name>
  <parent>
    <groupId>org.apache.asterix</groupId>
    <artifactId>apache-asterixdb</artifactId>
    <version>0.9.0</version>
  </parent>

  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
      <comments>A business-friendly OSS license</comments>
    </license>
  </licenses>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.hyracks</groupId>
        <artifactId>license-automation-plugin</artifactId>
        <version>${hyracks.version}</version>
        <executions>
          <execution>
            <phase>generate-resources</phase>
            <goals>
              <goal>generate</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <templateRootDir>${basedir}/../src/main/licenses/templates</templateRootDir>
          <outputDir>${basedir}/..</outputDir>
          <location>ignored</location>
          <generatedFiles>
            <generatedFile>
              <template>asterix-source-license.ftl</template>
              <outputFile>LICENSE</outputFile>
            </generatedFile>
            <generatedFile>
              <!-- TODO(mblow): share the template with hyracks as a maven artifact -->
              <template>asterix-notice.ftl</template>
              <outputFile>NOTICE</outputFile>
            </generatedFile>
          </generatedFiles>
          <excludedScopes>
            <excludedScope>test</excludedScope>
          </excludedScopes>
          <licenseDirectory>${basedir}/../src/main/licenses/content</licenseDirectory>
          <models>
             <model>${basedir}/../src/main/appended-resources/supplemental-models.xml</model>
          </models>
          <licenses>
            <license>
              <displayName>The Apache Software License, Version 2.0</displayName>
              <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
              <aliasUrls>
                <aliasUrl>http://www.apache.org/licenses/LICENSE-2.0</aliasUrl>
                <aliasUrl>https://www.apache.org/licenses/LICENSE-2.0.txt</aliasUrl>
                <aliasUrl>http://www.apache.org/licenses/LICENSE-2.0.html</aliasUrl>
              </aliasUrls>
              <metric>1</metric>
            </license>
          </licenses>
          <templateProperties>
            <asterixAppResourcesPrefix>asterix-app/src/main/resources/</asterixAppResourcesPrefix>
            <hivecompatPrefix>asterix-hivecompat/src/main/java/</hivecompatPrefix>
            <packageName />
          </templateProperties>
        </configuration>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.asterix</groupId>
                    <artifactId>license-automation-plugin</artifactId>
                    <versionRange>${project.version}</versionRange>
                    <goals>
                      <goal>generate</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
