<?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.stanbol</groupId>
    <artifactId>org.apache.stanbol.data.parent</artifactId>
    <version>1.2.0-SNAPSHOT</version>
    <relativePath>../../../parent</relativePath>
  </parent>

  <groupId>org.apache.stanbol</groupId>
  <artifactId>org.apache.stanbol.data.opennlp.lang.da</artifactId>
  <version>1.2.0-SNAPSHOT</version>
  <packaging>bundle</packaging>

  <name>Apache Stanbol Data: OpenNLP Models for Danish</name>
  <description>
    Bundle containing all necessary/available models for parsing Danish language texts. This does not include Models for named entity recocnition (NER).
  </description>
  <inceptionYear>2011</inceptionYear>

  <scm>
    <connection>
      scm:svn:http://svn.apache.org/repos/asf/stanbol/branches/apache-stanbol-1.0.0-branch/data/opennlp/lang/da
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/stanbol/branches/apache-stanbol-1.0.0-branch/data/opennlp/lang/da
    </developerConnection>
    <url>http://stanbol.apache.org/branches/apache-stanbol-1.0.0-branch</url>
  </scm>

  <properties>
    <downloadWarning>
*                  
* WARNING - this build downloads some OpenNLP files that are *not*
* licensed under the Apache License, and have more restrictive usage
* terms than the Apache Stanbol code. See STANBOL-545 for more
* information: https://issues.apache.org/jira/browse/STANBOL-545
*
    </downloadWarning>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <configuration>
          <instructions>
            <_versionpolicy>$${version;===;${@}}</_versionpolicy>

            <!-- 
              Extension used to provide files in that directory to the
              DataFileProvider
              -->
            <Data-Files>${opennlp.model.path}</Data-Files>
            <!-- 
              Use a priority lower than 0 to allow providers without a
              defined ranking to override this default data.
             -->
            <Data-Files-Priority>
              -100
            </Data-Files-Priority>
          </instructions>
        </configuration>
      </plugin>
      <plugin>
        <!-- 
          Ant is used to download the models from the
          http://opennlp.sourceforge.net site.
        -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>download</id>
            <phase>generate-resources</phase>
            <configuration>
              <!--
                TODO: I would like to add an "unless" constraint to the
                target that prevents execution if Maven operates in offline
                mode. However I was not able to find out how to obtain this
                information. ${settings.offline} (as noted by several
                resources) does not work.
                Until fixed builds will fail if no internetconnection is
                available!
              -->
              <target>
                <property name="target.directory" value="${project.basedir}/downloads/resources/${opennlp.model.path}" />
                <property name="model.url" value="${opennlp.model.home}" />
                                
                <echo message="copy OpenNLP models" />
                <echo message=" FROM ${model.url} " />
                <echo message=" TO ${target.directory}" />

                <ant antfile="${basedir}/download_models.xml">
                  <target name="download" />
                </ant>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludes><!-- exclude OpenNLP model files -->
              <exclude>**/*.bin</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
