<?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>
    <parent>
    <groupId>org.apache.ctakes</groupId>
    <artifactId>ctakes</artifactId>
    <version>5.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>ctakes-examples</artifactId>
  <name>Apache cTAKES Examples</name>
  <description>Apache cTAKES Examples</description>
  <dependencies>
      <!--  coreference module has dependencies on almost everything, use it to maximize example possibilities.  -->
      <dependency>
          <groupId>org.apache.ctakes</groupId>
          <artifactId>ctakes-gui</artifactId>
      </dependency>
     <dependency>
        <groupId>org.apache.ctakes</groupId>
        <artifactId>ctakes-fhir</artifactId>
     </dependency>
     <dependency>
        <groupId>org.apache.ctakes</groupId>
        <artifactId>ctakes-pbj</artifactId>
     </dependency>
      <dependency>
      <groupId>org.apache.ctakes</groupId>
        <artifactId>ctakes-coreference</artifactId>
    </dependency>
     <dependency>
        <groupId>org.apache.ctakes</groupId>
        <artifactId>ctakes-side-effect</artifactId>
     </dependency>
     <dependency>
        <groupId>org.apache.ctakes</groupId>
        <artifactId>ctakes-smoking-status</artifactId>
     </dependency>
     <dependency>
     	<groupId>org.apache.uima</groupId>
     	<artifactId>uimafit-cpe</artifactId>
     </dependency>
  </dependencies>
    <profiles>
        <profile>
            <id>runPiperGui</id>
            <activation>
                <property>
                    <name>runPiperGui</name>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                   <goal>exec</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                           <executable>java</executable>
                           <includeProjectDependencies>true</includeProjectDependencies>
                           <includePluginDependencies>true</includePluginDependencies>
                           <workingDirectory>${project.parent.basedir}</workingDirectory>
                            <arguments>
                                <argument>-classpath</argument>
                                <classpath/>
                                <argument>-Xmx3G</argument>
                                <argument>org.apache.ctakes.gui.pipeline.PiperRunnerGui</argument>
                            </arguments>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
       <profile>
          <id>runDictionaryGui</id>
          <activation>
             <property>
                <name>runDictionaryGui</name>
             </property>
          </activation>
          <build>
             <plugins>
                <plugin>
                   <groupId>org.codehaus.mojo</groupId>
                   <artifactId>exec-maven-plugin</artifactId>
                   <executions>
                      <execution>
                         <goals>
                            <goal>exec</goal>
                         </goals>
                      </execution>
                   </executions>
                   <configuration>
                      <executable>java</executable>
                      <includeProjectDependencies>true</includeProjectDependencies>
                      <includePluginDependencies>true</includePluginDependencies>
                      <workingDirectory>${project.parent.basedir}</workingDirectory>
                      <arguments>
                         <argument>-classpath</argument>
                         <classpath/>
                         <argument>-Xmx3G</argument>
                         <argument>org.apache.ctakes.gui.dictionary.DictionaryCreator</argument>
                      </arguments>
                   </configuration>
                </plugin>
             </plugins>
          </build>
       </profile>
       <profile>
          <id>runCPE</id>
          <activation>
             <property>
                <name>runCPE</name>
             </property>
          </activation>
          <!--  ctakes does NOT require the uimaj tools, but the cpe profile does  -->
          <dependencies>
             <dependency>
                <groupId>org.apache.uima</groupId>
                <artifactId>uimaj-tools</artifactId>
             </dependency>
          </dependencies>
          <build>
             <plugins>
                <plugin>
                   <groupId>org.codehaus.mojo</groupId>
                   <artifactId>exec-maven-plugin</artifactId>
                   <configuration>
                      <mainClass>org.apache.uima.tools.cpm.CpmFrame</mainClass>
                      <arguments>
                         <argument />
                      </arguments>
                   </configuration>
                   <dependencies/>
                </plugin>
             </plugins>
          </build>
       </profile>

       <profile>
          <id>runCVD</id>
          <activation>
             <property>
                <name>runCVD</name>
             </property>
          </activation>
          <!--  ctakes does NOT require the uimaj tools, but the cvd profile does  -->
          <dependencies>
             <dependency>
                <groupId>org.apache.uima</groupId>
                <artifactId>uimaj-tools</artifactId>
             </dependency>
          </dependencies>
          <build>
             <plugins>
                <plugin>
                   <groupId>org.codehaus.mojo</groupId>
                   <artifactId>exec-maven-plugin</artifactId>
                   <configuration>
                      <mainClass>org.apache.uima.tools.cvd.CVD</mainClass>
                      <!-- Have to specify at least one parameter otherwise, CVD thinks
                         it's an invalid param because MVN passes null when joining to the mvn thread -->
                      <arguments>
                         <argument>-lookandfeel</argument>
                         <argument>javax.swing.plaf.metal.MetalLookAndFeel</argument>
                      </arguments>
                   </configuration>
                   <dependencies/>
                </plugin>
             </plugins>
          </build>
       </profile>

    </profiles>
</project>
