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

    <parent>
        <groupId>org.apache.stratos</groupId>
        <artifactId>stratos-features-parent</artifactId>
        <version>4.1.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>org.apache.stratos</groupId>
    <artifactId>stratos-manager-features</artifactId>
    <packaging>pom</packaging>
    <name>Apache Stratos - Manager Features Aggregator Module</name>
    <description>features</description>
    <url>http://apache.org</url>

    <modules>
	<module>stratos-mgt</module>
        <module>common</module>
        <module>tenant-mgt</module>
        <module>gapp</module>
        <!--module>throttling</module-->
        <!--module>usage</module-->
        <module>deployment</module>
        <module>status-monitor</module>
        <module>tenant-activity</module>
        <module>cartridge-mgt</module>
        <module>logging-mgt</module>
        <module>rest-endpoint/org.apache.stratos.rest.endpoint.feature</module>
        <module>styles/org.apache.stratos.manager.styles.feature</module>
        <module>metadataservice/org.apache.stratos.metadataservice.feature</module>
    </modules>

    <properties>
        <stratos.version>2.1.0</stratos.version>
	<synapse.version>2.1.0-wso2v6</synapse.version>
        <carbon.version>4.2.0</carbon.version>
        <quartz.wso2.version>2.1.1.wso2v1</quartz.wso2.version>
	<carbon.p2.plugin.version>1.5</carbon.p2.plugin.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.stratos</groupId>
                <artifactId>org.apache.stratos.activation</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.wso2.carbon</groupId>
                <artifactId>org.wso2.carbon.sample.installer</artifactId>
                <version>${stratos.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.stratos</groupId>
                <artifactId>org.apache.stratos.redirector.servlet</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.stratos</groupId>
                <artifactId>org.apache.stratos.redirector.servlet.ui</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.stratos</groupId>
                <artifactId>org.apache.stratos.common</artifactId>
                <version>${project.version}</version>
	    </dependency>
	    <dependency>
                <groupId>org.wso2.carbon</groupId>
                <artifactId>org.wso2.carbon.stratos.landing.page.deployer</artifactId>
                <version>${stratos.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.stratos</groupId>
                <artifactId>org.apache.stratos.throttling.agent</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.stratos</groupId>
                <artifactId>org.apache.stratos.tenant.activity</artifactId>
                <version>${project.version}</version>
            </dependency>
	    <dependency>
                <groupId>org.apache.stratos</groupId>
                <artifactId>org.apache.stratos.throttling.agent.stub</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.stratos</groupId>
                <artifactId>org.apache.stratos.usage.agent</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.stratos</groupId>
                <artifactId>org.apache.stratos.tenant.dispatcher</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.quartz-scheduler.wso2</groupId>
                <artifactId>quartz</artifactId>
                <version>${quartz.wso2.version}</version>
            </dependency>
            <dependency>
                <groupId>org.wso2.carbon</groupId>
                <artifactId>org.wso2.carbon.task</artifactId>
                <version>${wso2carbon.version}</version>
            </dependency>
            <dependency>
                <groupId>org.wso2.carbon</groupId>
                <artifactId>org.wso2.carbon.application.upload</artifactId>
                <version>${wso2carbon.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.synapse</groupId>
                <artifactId>synapse-tasks</artifactId>
                <version>${synapse.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.stratos</groupId>
                <artifactId>org.apache.stratos.sso.redirector.ui</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>org.wso2.carbon</groupId>
                <artifactId>org.wso2.carbon.google.analytics.ui</artifactId>
                <version>${stratos.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
