<!--
    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>
   <groupId>javax.portlet</groupId>
   <artifactId>tck</artifactId>
   <name>Portlet API Technology Compatibility Kit</name>
   <version>3.0-SNAPSHOT</version>
   <packaging>pom</packaging>

   <licenses>
      <license>
         <name>apache_v2</name>
         <url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
      </license>
   </licenses>

   <scm>
      <connection>scm:git:https://github.com/msnicklous/portletspec3</connection>
      <developerConnection>scm:git:https://github.com/msnicklous/portletspec3</developerConnection>
      <url>scm:git:https://github.com/msnicklous/portletspec3</url>
   </scm>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

      <!-- To automatically generate a list of test cases, each module transforms the portlet.xml file -->
      <!-- using an XSLT transformation. -->

      <!-- Configuration used by XML transformations -->
      <!-- test.file.xslt Name of stylesheet in ${project.build.directory}/xml-resources/ dirs -->
      <!-- test.file.dir location of generated xml files in individual modules for tests -->
      <!-- test.file.name per-module name of xml file containing list of covered test cases -->
      <test.file.xsl>test.xsl</test.file.xsl>
      <test.file.dir>generated-resources/xml/module</test.file.dir>
      <test.file.name>${project.artifactId}-tests.xml</test.file.name>

      <!-- page.file.xsl Name of stylesheet used to create page definititions -->
      <!-- page.file.name per-module name of xml file containing page definitions for test -->
      <page.file.xsl>plutoSinglePortletPage.xsl</page.file.xsl>
      <page.file.name>${project.artifactId}-pages.xml</page.file.name>
      <page.file.final.xsl>plutoPageCombiner.xsl</page.file.final.xsl>
      <page.file.final.name>pluto-portal-driver-config.xml</page.file.final.name>

      <!-- test.context.base context string used when addressing test pages. Used by module stylesheet -->
      <test.context.base>pluto/portal/</test.context.base>

      <!-- test.list.xsl Name of stylesheet to combine test case lists from subproject -->
      <!-- test.list.dir location of finished xml file containing complete test case list -->
      <!-- test.list.name name of xml file containing complete test case list -->
      <test.list.xsl>testCombiner.xsl</test.list.xsl>
      <test.list.dir>generated-resources/xml/final</test.list.dir>
      <test.list.name>test.xml</test.list.name>

      <!-- This variable is used by the test driver to determine how test page links are
           to be found. Values: 
      
           generateURLs    the driver generates URLs based on config information. 
           followLinks     the driver looks for links containing the page name and clicks them in 
                           order to access the test pages. In this case, the portal must 
                           produce navigation links to each of the test pages.
                                  
           If configured to generate URLs, the driver generates URLs of the form: 
           http://<test.server.host>:<test.server.port>/<test.context.base><test.page.name> 
           where <test.page.name> is the name of the test page generated by the individual modules 
      -->
      <test.url.strategy>followLinks</test.url.strategy>
      
      <!-- Configuration of URL to login page -->
      <test.server.login.url>http://localhost:8080/pluto/portal/About%20Apache%20Pluto</test.server.login.url>

      <!-- Configuration of portlet container under test for generated URLs-->
      <!-- (only needed if test.url.strategy=generateURLs)                 -->
      <test.server.host>localhost</test.server.host>
      <test.server.port>8080</test.server.port>
      
      <!-- HTML field IDs and values for username & password to enable automatic login -->
      <test.server.username.id>j_username</test.server.username.id>
      <test.server.username>pluto</test.server.username>
      <test.server.password.id>j_password</test.server.password.id>
      <test.server.password>pluto</test.server.password>
      
      <!-- Specifies the browser to be used by selenium WebDriver for running the tests. -->
      <!-- Can be used with firefox or HTMLUnit without setting the test.browser.webDriver property. -->
      <!-- Use of Chrome or IE requires the webDriver to be downloaded ad available. Set the -->
      <!-- test.browser.webDriver property to point to the appropriate WebDriver server. -->
      <test.browser>firefox</test.browser>
      <test.browser>HTMLUnit</test.browser>
      <!-- commented outline below shows configuration for the Internet Explorer  driver -->
      <!-- test.browser.webDriver>C:\ntutil\IEDriverServer_x64_2.42.0\IEDriverServer.exe</test.browser.webDriver -->

     <!-- Specify timeout in seconds for the driver to wait for page load. must be an integer. -->
      <test.timeout>3</test.timeout>

      <!-- Set in subprojects containing additional test case file. default is no additional file (false) -->
      <additional.testcase.uri>false</additional.testcase.uri>
      <!-- Set to true for modules that define all test cases in a file (TCs are not generated from the portlet.xml) -->
      <additional.testcases.only>false</additional.testcases.only>

   </properties>

   <modules>
      <module>common</module>
      <module>TestModule1</module>
      <module>TestModule2</module>
      <module>TestModule3</module>
      <module>TestModule3-portlet1</module>
      <module>TestModule3-portlet2</module>
      <module>V2AnnotationTests</module>
      <module>V2EnvironmentTests</module>
      <module>V2ExceptionTests</module>
      <module>V2FilterTests</module>
      <module>V2PortletTests</module>
      <module>V2RequestTests</module>
      <module>V2ResponseTests</module>
      <module>V2URLTests</module>
      <module>V2WrapperTests</module>
      <module>V2AddlEnvironmentTests</module>
      <module>V2AddlFilterTests</module>
      <module>V2AddlPortletTests</module>
      <module>V2AddlRequestTests</module>
      <module>V2AddlResponseTests</module>
      <module>V2AddlUrlTests</module>
      <module>V2PortletTagLibraryTests</module>
      <module>V2PortletTagLibraryTests2</module>
      <module>V2PortletTagLibraryTests3</module>
      <module>V2DispatcherTests</module>
      <module>V2DispatcherTests2</module>
      <module>V2DispatcherTests3S</module>
      <module>V2DispatcherTests4</module>
      <module>V2DispatcherTests5</module>
      <module>V2DispatcherTests6</module>
      <module>V2DispatcherReqRespTests1</module>
      <module>V2DispatcherReqRespTests2</module>
      <module>V2DispatcherReqRespTests3</module>
      <module>V2DispatcherReqRespTests4</module>
      <module>V2DispatcherReqRespTests5S</module>
      <module>V2SigTestsAction</module>
      <module>V2SigTestsEnv</module>
      <module>V2SigTestsEvent</module>
      <module>V2SigTestsException</module>
      <module>V2SigTestsFilter</module>
      <module>V2SigTestsRender</module>
      <module>V2SigTestsResource</module>
      <module>V2SigTestsURL</module>
      <module>V2SigTestsWrapper</module>
      <module>deploy</module>
      <module>driver</module>
   </modules>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>javax.portlet</groupId>
            <artifactId>portlet-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
         </dependency>
         <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
         </dependency>

         <!-- for eclipse JSP tooling purposes -->
         <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
         </dependency>
         <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>provided</scope>
         </dependency>
         <dependency>
            <groupId>org.apache.portals.pluto</groupId>
            <artifactId>pluto-taglib</artifactId>
            <version>2.1.0-M3</version>
            <scope>provided</scope>
         </dependency>

         <!-- For creating and executing tests -->
         <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
         </dependency>
         <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.43.1</version>
            <scope>test</scope>
         </dependency>
      </dependencies>
   </dependencyManagement>

   <build>
      <finalName>${project.artifactId}</finalName>

      <pluginManagement>
         <plugins>
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-jar-plugin</artifactId>
               <version>2.4</version>
               <configuration>
                  <skipIfEmpty>true</skipIfEmpty>
               </configuration>
            </plugin>
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>3.1</version>
               <configuration>
                  <source>1.6</source>
                  <target>1.6</target>
               </configuration>
            </plugin>
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-war-plugin</artifactId>
               <version>2.4</version>
               <configuration>
                  <archiveClasses>false</archiveClasses>
                  <webResources>
                     <webResource>
                        <directory>${project.build.directory}/${test.file.dir}</directory>
                        <targetPath>${test.file.dir}</targetPath>
                     </webResource>
                  </webResources>
               </configuration>
            </plugin>

            <!-- For generating portlets that can be deployed to Pluto -->
            <plugin>
               <groupId>org.apache.portals.pluto</groupId>
               <artifactId>maven-pluto-plugin</artifactId>
               <version>2.0.3</version>
               <dependencies>
                  <dependency>
                     <groupId>org.apache.portals.pluto</groupId>
                     <artifactId>pluto-util</artifactId>
                     <version>2.0.3</version>
                     <scope>runtime</scope>
                  </dependency>
               </dependencies>
            </plugin>

            <!-- For Performing xml translations to create test.xml files -->
            <plugin>
               <groupId>org.codehaus.mojo</groupId>
               <artifactId>xml-maven-plugin</artifactId>
               <version>1.0</version>
               <executions>
                  <execution>
                     <phase>generate-resources</phase>
                     <goals>
                        <goal>transform</goal>
                     </goals>
                  </execution>
               </executions>
               <configuration>
                  <transformationSets>

                     <!-- automatically generate test case list for module -->
                     <transformationSet>
                        <dir>${basedir}/src/main/webapp/WEB-INF</dir>
                        <includes>
                           <include>portlet.xml</include>
                        </includes>
                        <outputDir>${project.build.directory}/${test.file.dir}</outputDir>
                        <fileMappers>
                           <fileMapper
                              implementation="org.codehaus.plexus.components.io.filemappers.MergeFileMapper">
                              <targetName>${test.file.name}</targetName>
                           </fileMapper>
                        </fileMappers>
                        <parameters>
                           <parameter>
                              <name>additionalTCs</name>
                              <value>${additional.testcase.uri}</value>
                           </parameter>
                           <parameter>
                              <name>copyOnly</name>
                              <value>${additional.testcases.only}</value>
                           </parameter>
                        </parameters>
                        <stylesheet>${project.build.directory}/xml-resources/${test.file.xsl}</stylesheet>
                     </transformationSet>

                     <!-- Automatically generate page file for the module -->
                     <transformationSet>
                        <dir>${basedir}/src/main/webapp/WEB-INF</dir>
                        <includes>
                           <include>portlet.xml</include>
                        </includes>
                        <outputDir>${project.build.directory}/${test.file.dir}</outputDir>
                        <fileMappers>
                           <fileMapper
                              implementation="org.codehaus.plexus.components.io.filemappers.MergeFileMapper">
                              <targetName>${page.file.name}</targetName>
                           </fileMapper>
                        </fileMappers>
                        <parameters>
                           <parameter>
                              <name>portlet-app-context</name>
                              <value>${project.artifactId}-${project.version}</value>
                           </parameter>
                        </parameters>
                        <stylesheet>${project.build.directory}/xml-resources/${page.file.xsl}</stylesheet>
                     </transformationSet>

                  </transformationSets>
               </configuration>
            </plugin>

            <!-- For extracting the XML transformation stylesheets from common module -->
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-dependency-plugin</artifactId>
               <version>2.8</version>
               <executions>
                  <execution>
                     <id>xml-resource-dependencies</id>
                     <phase>generate-sources</phase>
                     <goals>
                        <goal>unpack-dependencies</goal>
                     </goals>
                     <configuration>
                        <includeArtifactIds>tck-common</includeArtifactIds>
                        <includes>xml-resources/**</includes>
                        <outputDirectory>${project.build.directory}</outputDirectory>
                     </configuration>
                  </execution>
               </executions>
            </plugin>
         </plugins>
      </pluginManagement>

      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9.1</version>
            <configuration>
               <doctitle>
                  JSR 362 Portlet Specification 3.0 TCK Working Document
               </doctitle>
               <windowtitle>
                  JSR 362 Portlet Specification 3.0 TCK Working Document
               </windowtitle>
               <stylesheetfile>${javadoc.css.file}</stylesheetfile>
               <!-- link to Java EE APIs for cross-references -->
               <links>
                  <link>http://docs.oracle.com/javaee/7/api/</link>
               </links>
               <docfilessubdirs>true</docfilessubdirs>
               <bottom>
               <![CDATA[Java Portlet Specification V3.0 Working Document.
                  See the <a href="doc-files/NOTICE.txt">Copyright</a> and 
                  <a href="doc-files/LICENSE.txt">License</a> provided with this distribution.
                  Use is subject to
                  <a href="http://www.apache.org/licenses/LICENSE-2.0">license terms</a>.]]>
               </bottom>
            </configuration>
            <executions>
               <execution>
                  <id>aggregate</id>
                  <goals>
                    <goal>aggregate</goal>
                  </goals>
                  <phase>site</phase>
               </execution>
            </executions>
         </plugin>
      </plugins>
   </build>

   <reporting>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>2.17</version>
            <configuration>
               <aggregate>true</aggregate>
               <reportsDirectories>
                  <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
                  <reportsDirectory>${project.build.directory}/jasmine</reportsDirectory>
               </reportsDirectories>
            </configuration>
         </plugin>
      </plugins>
   </reporting>

   <profiles>
      <profile>
         <id>pluto</id>

         <dependencyManagement>
            <dependencies>
               <dependency>
                  <groupId>javax.servlet</groupId>
                  <artifactId>jstl</artifactId>
                  <version>1.1.2</version>
                  <scope>compile</scope>
                  <exclusions>
                     <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>jsp-api</artifactId>
                     </exclusion>
                  </exclusions>
               </dependency>
               <dependency>
                  <groupId>taglibs</groupId>
                  <artifactId>standard</artifactId>
                  <version>1.1.2</version>
                  <scope>compile</scope>
               </dependency>
            </dependencies>
         </dependencyManagement>

      </profile>
   </profiles>

</project>
