<?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.stratos</groupId>
        <artifactId>autoscaler-features</artifactId>
        <version>4.1.5</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>org.apache.stratos.autoscaler.feature</artifactId>
    <packaging>pom</packaging>
    <name>Apache Stratos - Autoscaler Feature</name>
    <description>This feature contains the required bundles for autoscaling functionality</description>

    <build>
        <plugins>
            <plugin>
                <groupId>org.wso2.maven</groupId>
                <artifactId>carbon-p2-plugin</artifactId>
                <executions>
                    <execution>
                        <id>4-p2-feature-generation</id>
                        <phase>package</phase>
                        <goals>
                            <goal>p2-feature-gen</goal>
                        </goals>
                        <configuration>
                            <id>org.apache.stratos.autoscaler</id>
                            <propertiesFile>../../../etc/feature.properties</propertiesFile>
                            <adviceFile>
                                <properties>
                                    <propertyDef>org.wso2.carbon.p2.category.type:server</propertyDef>
                                    <propertyDef>org.eclipse.equinox.p2.type.group:false</propertyDef>
                                </properties>
                            </adviceFile>
                            <bundles>
                                <bundleDef>
                                    org.wso2.carbon:org.wso2.carbon.identity.oauth.stub:${carbon.platform.patch.version.4.2.3}
                                </bundleDef>
                                <bundleDef>
                                    org.wso2.carbon:org.wso2.carbon.identity.application.mgt.stub:${carbon.platform.version.4.2.0}
                                </bundleDef>

                                <!-- Stratos bundles -->
                                <bundleDef>
                                    org.apache.stratos:org.apache.stratos.autoscaler:${project.version}
                                </bundleDef>
                                <bundleDef>
                                    org.apache.stratos:org.apache.stratos.cloud.controller.service.stub:${project.version}
                                </bundleDef>
                                <bundleDef>
                                    org.apache.stratos:org.apache.stratos.manager.service.stub:${project.version}
                                </bundleDef>
                                <bundleDef>
                                    org.apache.stratos:org.apache.stratos.common:${project.version}
                                </bundleDef>
                                <bundleDef>
                                    org.apache.stratos:org.apache.stratos.messaging:${project.version}
                                </bundleDef>

                                <!-- Misc -->
                                <bundleDef>
                                    commons-configuration:commons-configuration:${commons.configuration.version}
                                </bundleDef>
                                <bundleDef>org.mvel:mvel2:${mvel2.version}</bundleDef>
                                <bundleDef>org.apache.amber.wso2:amber:${amber.version}</bundleDef>
                                <bundleDef>com.nimbusds.wso2:nimbus-jose-jwt:${nimbus.jose.jwt.wso2.version}</bundleDef>
                            </bundles>
                            <importFeatures>
                                <importFeatureDef>
                                    org.wso2.carbon.core:${carbon.kernel.version}
                                </importFeatureDef>
                                <importFeatureDef>
                                    org.wso2.carbon.ntask.core:${carbon.platform.patch.version.4.2.1}
                                </importFeatureDef>
                            </importFeatures>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
