<?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-components-parent</artifactId>
        <version>4.1.0-SNAPSHOT</version>
    </parent>

	<modelVersion>4.0.0</modelVersion>
	<artifactId>org.apache.stratos.cartridge.mgt.ui</artifactId>
	<packaging>bundle</packaging>
	<name>Apache Stratos - Cartridge Management UI</name>
	<description>Cartridge management UI bundle</description>

	<dependencies>
		<dependency>
			<groupId>org.wso2.carbon</groupId>
			<artifactId>org.wso2.carbon.ui</artifactId>
			<version>4.2.0</version>
		</dependency>
		<dependency>
			<groupId>org.wso2.carbon</groupId>
			<artifactId>org.wso2.carbon.utils</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.stratos</groupId>
			<artifactId>org.apache.stratos.manager.stub</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.stratos</groupId>
			<artifactId>org.apache.stratos.adc.reponotification.service.stub</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
               <groupId>com.google.code.gson</groupId>
               <artifactId>gson</artifactId>
               <version>2.1</version>
           </dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>

				<extensions>true</extensions>
				<configuration>
					<instructions>
						<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
						<Bundle-Name>${project.artifactId}</Bundle-Name>
						<Export-Package>
							!org.apache.stratos.cartridge.mgt.ui.internal,
							org.apache.stratos.cartridge.mgt.ui.*;version="2.1.3"
                        </Export-Package>
						<Bundle-Activator>
                            org.apache.stratos.cartridge.mgt.ui.internal.CartridgeManagementUIActivator
                        </Bundle-Activator>
						<Private-Package>org.apache.stratos.cartridge.mgt.ui.internal</Private-Package>
						<Carbon-Component>UIBundle</Carbon-Component>
						<Import-Package>
							!org.apache.stratos.cartridge.mgt.ui.*,
							org.apache.stratos.manager.stub.*;version="1.0.0",
							*;resolution:=optional
                        </Import-Package>
					</instructions>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>
