<?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>

  <name>Apache MyFaces Trinidad Examples</name>
  <description>Parent project for the Trinidad Example Projects</description>

  <parent>
    <groupId>org.apache.myfaces.trinidad</groupId>
    <artifactId>trinidad</artifactId>
    <version>2.1.0</version>
  </parent>

  <artifactId>trinidad-example</artifactId>
  <packaging>pom</packaging>

  <properties>
    <portlet.version>1.0</portlet.version>
  </properties>


  <!-- Project dependencies -->
  <dependencies>
    <!-- Apache Trinidad -->
    <dependency>
      <groupId>org.apache.myfaces.trinidad</groupId>
      <artifactId>trinidad-api</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.myfaces.trinidad</groupId>
      <artifactId>trinidad-impl</artifactId>
    </dependency>
    
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.myfaces.portlet-bridge</groupId>
      <artifactId>portlet-bridge-api</artifactId>
    </dependency>
      
    <dependency>
      <groupId>org.apache.myfaces.portlet-bridge</groupId>
      <artifactId>portlet-bridge-impl</artifactId>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
    
    <dependency>
      <groupId>javax.portlet</groupId>
      <artifactId>portlet-api</artifactId>
    </dependency>
  </dependencies>
  
  <modules>
    <module>trinidad-blank</module>
    <module>trinidad-demo</module>
  </modules>

  <!-- 
  This is needed because an error in the master pom's configuration for checkstyle does not allow for
  resource bundles to be named properly.  Eventually I'm thinking we'll want our own checkstyle configurations.
  -->
  <build>  
    <plugins>
      <plugin>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <configuration>
          <configLocation>trinidad/checkstyle.xml</configLocation>
          <headerLocation>default/myfaces-header.txt</headerLocation>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.apache.myfaces.buildtools</groupId>
            <artifactId>checkstyle-rules</artifactId>
            <version>3</version>
          </dependency>
          <dependency>
            <groupId>org.apache.myfaces.trinidad</groupId>
            <artifactId>trinidad-build</artifactId>
            <version>${project.version}</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>


  <profiles>
    <!-- 
      This profile is for preparing a release.  Execute this profile like this:
      
       mvn release:prepare
       
       NOTE: the apache-release profile is invoked on any execution of the maven-release-plugin
       as per the apache-10 common ancestor file.
     -->
    <profile>
     <id>apache-release</id>
     <modules>
       <module>trinidad-example-assembly</module>
     </modules>      
    </profile>
    
    <!--
      This profile activates MyFaces as the release to use for these demos.  By default
      MyFaces is used when these examples are run in Jetty and/or used with the -PincludeJSF
      flag.  To invoke this profile, simply do not include a -Djsf= property on your maven
      command line.  Execute this profile like this:
      
      mvn -PjettyConfig jetty:run
    -->    
    <profile>
      <id>jettyConfig</id>
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <scope>compile</scope>
          </dependency>

          <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <scope>runtime</scope>
          </dependency>

          <dependency>
            <groupId>org.apache.myfaces.core</groupId>
            <artifactId>myfaces-api</artifactId>
            <scope>compile</scope>
          </dependency>

          <dependency>
            <groupId>org.apache.myfaces.core</groupId>
            <artifactId>myfaces-impl</artifactId>
            <scope>runtime</scope>
          </dependency>
          
         </dependencies>
       </dependencyManagement>
     </profile>
     
     <!--
       The component showcase should only be included if we are not performing a release.  The activation of this
       profile should only be invoked if release:perform has not been invoked.  Notice that this WILL invoke durring
       a release:prepare.
     -->
     <profile>
      <id>buildShowcase</id>
      <activation>
        <property>
          <name>!performRelease</name>
        </property>
      </activation>      
      
      <modules>
        <module>trinidad-components-showcase</module>
      </modules>          
     </profile>
    
    <profile>
      <id>myfaces</id>
      <activation>
        <property>
          <name>!jsf</name>
        </property>
      </activation>
      <dependencies>
        <dependency>
          <groupId>org.apache.myfaces.core</groupId>
          <artifactId>myfaces-api</artifactId>
        </dependency>
        <dependency>
          <groupId>org.apache.myfaces.core</groupId>
          <artifactId>myfaces-impl</artifactId>
        </dependency>
      </dependencies>
      
    </profile>
    <!--
      This profile activates the JSF RI as the release to use for these demos.  When activated
      the JSF RI is used when these examples are run in Jetty and/or used with the 
      -PincludeJSF flag.  To invoke this profile, simply do include a -Djsf=ri property on 
      your maven command line.  Execute this profile like this:
      
      mvn -PjettyConfig -Djsf=ri jetty:run
    -->    
    <profile>
      <id>jsfri</id>
      <activation>
        <property>
          <name>jsf</name>
          <value>ri</value>
        </property>
      </activation>
      <dependencies>
        <dependency>
          <groupId>com.sun.faces</groupId>
          <artifactId>jsf-api</artifactId>
        </dependency>
        <dependency>
          <groupId>com.sun.faces</groupId>
          <artifactId>jsf-impl</artifactId>
        </dependency>
      </dependencies>      
    </profile>
  </profiles>
</project>
