<?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>stratos-mgt-parent-feature</artifactId>
        <version>4.1.5</version>
    </parent>

    <artifactId>org.apache.stratos.manager.server.feature</artifactId>
    <packaging>pom</packaging>
    <name>Apache Stratos - Management Core Feature</name>
    <description>This feature contains the core bundles required for Stratos Manager</description>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>prefilter-resources</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>src/main/resources</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>resources</directory>
                                    <includes>
                                        <include>conf/agent.properties</include>
                                        <include>p2.inf</include>
                                        <include>build.properties</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.wso2.maven</groupId>
                <artifactId>carbon-p2-plugin</artifactId>
                <executions>
                    <execution>
                        <id>p2-feature-generation</id>
                        <phase>package</phase>
                        <goals>
                            <goal>p2-feature-gen</goal>
                        </goals>
                        <configuration>
                            <id>org.apache.stratos.manager.server</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>
                                <!-- Stratos bundles -->
                                <bundleDef>org.apache.stratos:org.apache.stratos.manager:${project.version}</bundleDef>
                                <bundleDef>
                                    org.apache.stratos:org.apache.stratos.manager.service.stub:${project.version}
                                </bundleDef>
                                <bundleDef>
                                    org.apache.stratos:org.apache.stratos.cloud.controller.service.stub:${project.version}
                                </bundleDef>
                                <bundleDef>
                                    org.apache.stratos:org.apache.stratos.autoscaler.service.stub:${project.version}
                                </bundleDef>
                                <bundleDef>
                                    org.apache.stratos:org.apache.stratos.messaging:${project.version}
                                </bundleDef>
                                <bundleDef>
                                    org.apache.stratos:org.apache.stratos.common:${project.version}
                                </bundleDef>

                                <!-- Misc -->
                                <bundleDef>org.wso2.andes.wso2:andes-client:${andes.client.version}</bundleDef>
                                <bundleDef>com.google.code.gson:gson:${gson.version}</bundleDef>
                                <bundleDef>org.apache.commons:commons-lang3:${commons.lang3.version}</bundleDef>
                                <bundleDef>
                                    org.eclipse.jgit:org.eclipse.jgit:${eclipse.jgit.wso2.osgi.version}
                                </bundleDef>
                                <bundleDef>com.jcraft:jsch:${jsch.version}</bundleDef>
                                <bundleDef>com.gitblit:gitblit:${gitblit.version}</bundleDef>
                            </bundles>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
