<?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>
    <artifactId>extscript-examples</artifactId>
    <packaging>pom</packaging>
    <name>Examples Submodule</name>
    <version>1.0.6-SNAPSHOT</version>

    <description>
        Examples Meta Project, see the subprojects
        for starting various parts of ext-scripting
    </description>
    <properties>
        <tomcat7-maven-plugin.version>2.0</tomcat7-maven-plugin.version>
    </properties>

    <parent>
        <groupId>org.apache.myfaces.extensions.scripting</groupId>
        <artifactId>extscript-root</artifactId>
        <version>1.0.6-SNAPSHOT</version>
    </parent>

    <scm>
        <connection>
            scm:svn:http://svn.apache.org/repos/asf/myfaces/extensions/scripting/trunk/extscript-examples
        </connection>
        <developerConnection>
            scm:svn:https://svn.apache.org/repos/asf/myfaces/extensions/scripting/trunk/extscript-examples
        </developerConnection>
        <url>http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-examples
        </url>
    </scm>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>${tomcat7-maven-plugin.version}</version>
                <configuration>
                    <path>/</path>
                    <port>9080</port>
                </configuration>
            </plugin>

            <!-- tomcat plugin as alternative testing ground -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <version>1.0</version>
            </plugin>
        </plugins>
    </build>
    <modules>
        <!--
        <module>myfaces12-example</module>
        -->
        <module>myfaces20-example</module>
        <module>myfaces20-extscript-helloworld</module>
        <module>blog-example</module>
        <module>cdi-example</module>
        <module>spring-example</module>
        <!--
        <module>weld-example</module>
        -->

    </modules>


    <profiles>
        <!--
             This profile is started with -D development and fetches in a secondary
             web.xml which is used internally for development purposes
         -->
        <profile>
            <id>development</id>

            <properties>
                <maven.war.webxml>${basedir}/src/main/conf/dev/web.xml</maven.war.webxml>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.mortbay.jetty</groupId>
                        <artifactId>jetty-maven-plugin</artifactId>
                        <version>8.1.2.v20120308</version>
                        <configuration>
                            <connectors>
                                <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                                    <port>9090</port>
                                    <maxIdleTime>60000</maxIdleTime>
                                </connector>
                            </connectors>
                            <scanIntervalSeconds>1</scanIntervalSeconds>
                            <webAppConfig>
                                <overrideDescriptor>
                                    src/main/myfaces/override-myfaces-web.xml
                                </overrideDescriptor>
                            </webAppConfig>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <!-- we use different profiles for jetty and myfaces so that their respective listeners are fetched -->
        <profile>
            <id>myfaces</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.mortbay.jetty</groupId>
                        <artifactId>jetty-maven-plugin</artifactId>
                        <version>8.1.2.v20120308</version>
                        <configuration>
                            <connectors>
                                <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                                    <port>9090</port>
                                    <maxIdleTime>60000</maxIdleTime>
                                </connector>
                            </connectors>
                            <scanIntervalSeconds>1</scanIntervalSeconds>
                            <webAppConfig>
                                <overrideDescriptor>
                                    src/main/myfaces/override-web.xml
                                </overrideDescriptor>
                            </webAppConfig>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>mojarra</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.mortbay.jetty</groupId>
                        <artifactId>jetty-maven-plugin</artifactId>
                        <version>8.1.2.v20120308</version>
                        <configuration>
                            <connectors>
                                <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                                    <port>9090</port>
                                    <maxIdleTime>60000</maxIdleTime>
                                </connector>
                            </connectors>
                            <scanIntervalSeconds>1</scanIntervalSeconds>
                            <webAppConfig>
                                <overrideDescriptor>
                                    src/main/mojarra/override-web.xml
                                </overrideDescriptor>
                            </webAppConfig>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

</project>
