<?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>stanbol-parent</artifactId>
    <version>3</version>
  </parent>
  
  <groupId>org.apache.stanbol</groupId>
  <artifactId>apache-stanbol-enhancement-engines</artifactId>
  <version>0.10.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Apache Stanbol Enhancement Engines</name>
  <description>
    Pseudo project to build all Enhancement Engines
  </description>
  <inceptionYear>2010</inceptionYear>

  <scm>
    <connection>
      scm:svn:http://svn.apache.org/repos/asf/stanbol/branches/STANBOL-913
    </connection>
    <developerConnection>
      scm:svn:https://svn.apache.org/repos/asf/stanbol/branches/STANBOL-913
    </developerConnection>
    <url>http://stanbol.apache.org/</url>
  </scm>

  <modules>
	  <!-- Content processing / Metadata extraction -->
    <module>tika</module>
    <module>htmlextractor</module>
    <module>xmpextractor</module>

    <!-- NLP processing engines -->
	  <module>langdetect</module>
    <module>langid</module>
    <module>opennlp</module>

    <!-- Chinese language support -->
    <module>smartcn-token</module> <!-- sentence detection and tokenizing -->
    <module>paoding-token</module> <!-- tokenizing -->
    <module>nlp2rdf</module> <!-- converts AnalyzedText ContentPart to RDF -->

    <!-- RESTful NLP analyser service engine-->
    <module>restful-nlp</module> <!-- see STANBOL-893 -->
    <module>restful-langident</module> <!-- see STANBOL-895 -->
  
  	<!-- EntityLinking -->
    <module>entitylinking</module>
    <module>entityhublinking</module>
    <module>entitytagging</module>
    <!-- deprecated -->
    <module>keywordextraction</module>

	  <!-- Categorization -->
    <module>topic/engine</module>
    <module>topic/web</module>

	  <!-- Sentiment -->
    <module>sentiment-wordclassifier</module>
    <module>sentiment-summarization</module>

    <!-- UIMA based engines -->
    <module>uima</module>
    
    <!-- Enhancement Engines using external services -->
    <module>celi</module> <!-- http://linguagrid.org -->
    <module>dbpedia-spotlight</module> <!-- dbpedia Spotlight -->
    <module>geonames</module> <!-- http://geonames.org -->
    <module>opencalais</module> <!-- http://opencalais.com/ -->
    <module>zemanta</module> <!-- htt://zemanta.com -->
  </modules>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-bundle-plugin</artifactId>
          <inherited>true</inherited>
          <configuration>
            <instructions>
              <Bundle-Category>Stanbol Enhancement Engines</Bundle-Category>
            </instructions>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>    
  </build>

  <profiles>
    <profile>
      <id>apache-release</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
            <configuration>
              <excludeSubProjects>false</excludeSubProjects>
              <excludes>
                <!--
                  All license headers are also checked per
                  artifact. These excludes are necessary
                  to make the reactor build suceed. Consider
                  the excluded files here as already checked
                  in the artifacts.
                -->

                <!-- exclude hidden files -->
                <exclude>**/.*</exclude>
                <exclude>**/.*/*</exclude>
                <exclude>**/.*/**/*</exclude>

                <!-- exclude build files -->
                <exclude>**/target/**</exclude>
                <exclude>**/*.log</exclude>             

                <!-- exclude generated files listing the licenses of deps -->
                <exclude>DEPENDENCIES</exclude>
                <exclude>DEPENDENCIES-BY-LICENSE</exclude>
                <exclude>RAT-REPORT</exclude>
                <exclude>**/src/license/THIRD-PARTY.properties</exclude>

                <!-- exclude certain file types -->
                <exclude>**/*.config</exclude>
                <exclude>**/*.cfg</exclude>
                <exclude>**/*.ref</exclude>
                <exclude>**/*.txt</exclude>
                <exclude>**/*.tsv</exclude>
                <exclude>**/*.sem</exclude>
                <exclude>**/*.svg</exclude>
                <exclude>**/*.css</exclude>
                <exclude>**/*.js</exclude>

                <!-- exclude test files --> 
                <exclude>**/test/**/*.eml</exclude>
                <exclude>**/test/**/*.nt</exclude>
                <exclude>**/test/**/*.html</exclude>
                <exclude>**/test/**/*.xhtml</exclude>
                <exclude>**/test/**/*.rdf</exclude>
                <exclude>**/test/**/*.rtf</exclude>
                <exclude>**/test/**/*.rules</exclude>
                <exclude>**/test/**/*.odt</exclude>
              </excludes>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>license-maven-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>aggregate-add-third-party</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
