<?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.camel</groupId>
    <artifactId>camel-parent</artifactId>
    <version>2.3.0</version>
  </parent>

  <artifactId>examples</artifactId>
  <name>Camel :: Examples</name>
  <description>Camel Examples</description>
  <packaging>pom</packaging>

  <repositories>
    <!-- this should not be required as its syncd to ibiblio -->
    <repository>
      <id>apache.m2.repo</id>
      <name>Apache Maven2 Repository</name>
      <url>http://people.apache.org/repo/m2-ibiblio-rsync-repository</url>
    </repository>
  </repositories>

  <pluginRepositories>
    <!-- this should not be required as its syncd to ibiblio -->
    <pluginRepository>
      <id>apache.m2.repo</id>
      <name>Apache Maven2 Repository</name>
      <url>http://people.apache.org/repo/m2-ibiblio-rsync-repository</url>
    </pluginRepository>
  </pluginRepositories>

  <modules>
    <module>camel-example-aggregate</module>
    <module>camel-example-axis</module>
    <module>camel-example-bam</module>
    <module>camel-example-cafe</module>
    <module>camel-example-cxf</module>
    <module>camel-example-docs</module>
    <module>camel-example-etl</module>
    <module>camel-example-gae</module>
    <module>camel-example-gauth</module>
    <module>camel-example-guice-jms</module>
    <module>camel-example-jms-file</module>
    <module>camel-example-loadbalancing-mina</module>
    <module>camel-example-loan-broker</module>
    <module>camel-example-management</module>
    <module>camel-example-osgi</module>
    <module>camel-example-pojo-messaging</module>
    <module>camel-example-reportincident</module>
    <module>camel-example-route-throttling</module>
    <module>camel-example-spring</module>
    <module>camel-example-spring-javaconfig</module>
    <module>camel-example-spring-jms</module>
    <module>camel-example-spring-xquery</module>
    <module>camel-example-spring-security</module>
    <module>camel-example-tracer</module>
  </modules>

  <profiles>
    <!-- 
      This profile allows you to add a repository to the repo list so that 
      you can test the examples out against a staged version of the camel distribution 
    -->
    <profile>
      <id>add-remote-repo</id>
      <activation>
        <property>
          <name>remoteRepo</name>
        </property>
      </activation>

      <repositories>
        <repository>
          <id>dynamic.repo</id>
          <name>Repository Dynamicly Added Via the Command Line</name>
          <url>$remoteRepo</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>dynamic.repo</id>
          <name>Repository Dynamicly Added Via the Command Line</name>
          <url>$remoteRepo</url>
        </pluginRepository>
      </pluginRepositories>

    </profile>
  </profiles>

</project>
