<!--
  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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.apache.airavata</groupId>
  <artifactId>admin-dashboard</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>Admin Monitoring Dashboard</name>
  <description>A WebApp for admins to monitor and debug workflows</description>
  
  <properties>
  	<war.plugin.version>2.1.1</war.plugin.version>
  	<cargo.version>1.3.1</cargo.version>
  </properties>
  <build>
		<finalName>admin-dashboard</finalName>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>2.3.2</version>
					<configuration>
						<source>1.6</source>
						<target>1.6</target>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>${war.plugin.version}</version>
			</plugin>
			<plugin>
				<groupId>org.codehaus.cargo</groupId>
				<artifactId>cargo-maven2-plugin</artifactId>
				<version>${cargo.version}</version>
				<configuration>
					<wait>true</wait>
					<configuration>
						<properties>
							<cargo.servlet.port>6060</cargo.servlet.port>
							<cargo.tomcat.ajp.port>6009</cargo.tomcat.ajp.port>
							<cargo.protocol>http</cargo.protocol>
							<cargo.jvmargs>
                                <![CDATA[-Xdebug -Xrunjdwp:transport=dt_socket,address=6000,server=y,suspend=n -noverify]]>
							</cargo.jvmargs>
							<cargo.tomcat.context.reloadable>true</cargo.tomcat.context.reloadable>
						</properties>
						<home>${project.build.directory}/tomcat7x</home>
					</configuration>
					<container>
						<containerId>tomcat7x</containerId>
						<timeout>180000</timeout>
						<zipUrlInstaller>
							<url>
								http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.16/bin/apache-tomcat-7.0.16.zip
							</url>
						</zipUrlInstaller>
					</container>
					<deployables>
						<deployable>
							<groupId>com.apache.airavata</groupId>
							<artifactId>admin-dashboard</artifactId>
							<type>war</type>
							<properties>
								<context>/admin</context>
							</properties>
						</deployable>
					</deployables>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>