<project default="p2.build" basedir=".">

	<!-- TODO: Verify These Properties References An Actual Directory. -->
	<property name="eclipse.dir" 
		value="/opt/uframe-eclipse" />
	<property name="build.version"
		value="1.0.0" />
	<property name="build.os"
		value="linux" />
	<property name="build.ws"
		value="gtk" />
	<property name="build.arch"
		value="x86" />
	<property name="workspace.dir" value="${basedir}/../" />
	
	<property name="pde.build.script"
		value="org.eclipse.pde.build_3.6.1.R36x_v20100823/scripts/build.xml" />
	<property name="eclipse.launcher.jar"
		value="org.eclipse.equinox.launcher_1.1.0.v20100507.jar" />
	
	<!-- Verify That We Have Access To A Copy Of Eclipse -->
	<target name="verify">
	</target>
	
	<!-- Creates The Temporary Directories That We Will Need To Build
	     The P2 Repositories. -->
	<target name="init" depends="verify">
		<!-- We Will Use A Temporary p2 Directory And Leave The
			 cave/tmp Directory For The Original PDE Build. -->
		<mkdir dir="${basedir}/cave/p2" />
		
		<!-- Copy The P2 Build build.properties File. -->
		<copy tofile="${basedir}/cave/p2/build.properties" 
			file="${basedir}/build.properties.p2" verbose="true" />
		
		<!-- We Will Copy The Plugins Here Eventually. -->
		<mkdir dir="${basedir}/cave/p2/plugins" />
		<!-- We Will Copy The Features Here Eventually. -->
		<mkdir dir="${basedir}/cave/p2/features" />
		
		<mkdir dir="${basedir}/cave/p2/repository" />
		<mkdir dir="${basedir}/cave/p2/dist" />
		
		<!-- BEGIN: Copy The Plugins -->
		<echo message="PLUGINS: com.*/**" />
		<copy todir="${basedir}/cave/p2/plugins">
			<fileset dir="${workspace.dir}"
				includes="com.*/**" />
		</copy>
		
		<echo message="PLUGINS: ucar.*/**" />
		<copy todir="${basedir}/cave/p2/plugins">
			<fileset dir="${workspace.dir}"
				includes="ucar.*/**" />
		</copy>
		
		<echo message="PLUGINS: *.feature*/**" />
		<copy todir="${basedir}/cave/p2/plugins">
			<fileset dir="${workspace.dir}"
				includes="*.feature*/**" />
		</copy>
		
		<echo message="PLUGINS: ncsa.*/**" />
		<copy todir="${basedir}/cave/p2/plugins">
			<fileset dir="${workspace.dir}"
				includes="ncsa.*/**" />
		</copy>
		
		<echo message="PLUGINS: org.*/**" />
		<copy todir="${basedir}/cave/p2/plugins">
			<fileset dir="${workspace.dir}"
				includes="org.*/**" />
		</copy>
		
		<echo message="PLUGINS: net.*/**" />
		<copy todir="${basedir}/cave/p2/plugins">
			<fileset dir="${workspace.dir}"
				includes="net.*/**" />
		</copy>
		
		<echo message="PLUGINS: ohd*/**" />
		<copy todir="${basedir}/cave/p2/plugins">
			<fileset dir="${workspace.dir}"
				includes="ohd*/**" />
		</copy>
		
		<echo message="PLUGINS: meteolib.*/**" />
		<copy todir="${basedir}/cave/p2/plugins">
			<fileset dir="${workspace.dir}"
				includes="meteolib.*/**" />
		</copy>
		
		<echo message="PLUGINS: javax.*/**" />
		<copy todir="${basedir}/cave/p2/plugins">
			<fileset dir="${workspace.dir}"
				includes="javax.*/**" />
		</copy>
		
		<echo message="PLUGINS: gov.*/**" />
		<copy todir="${basedir}/cave/p2/plugins">
			<fileset dir="${workspace.dir}"
				includes="gov.*/**" />
		</copy>
		
		<echo message="PLUGINS: edu.*/**" />
		<copy todir="${basedir}/cave/p2/plugins">
			<fileset dir="${workspace.dir}"
				includes="edu.*/**" />
		</copy>
		<!-- END: Copy The Plugins -->
		
		<!-- Copy The Features -->
		<echo message="FEATURES: *viz*feature*" />
		<copy todir="${basedir}/cave/p2/features">
			<fileset dir="${workspace.dir}"
				includes="*viz*feature*/**" />
		</copy>
	</target>
	
	<!-- Cleans Up Any Temporary Directories -->
	<target name="clean">
		<if>
			<available file="${basedir}/cave/p2" type="dir" />
			<then>
				<delete includeemptydirs="true">
					<fileset dir="${basedir}/cave/p2" />
				</delete>
			</then>
		</if>
	</target>
	
	<tstamp>
		<format property="build.timestamp"
			pattern="yyyyMMddHHmm" />
	</tstamp>
	
	<target name="p2.build" depends="clean, init">		
		<!-- We Need To Build The p2 Repos In A Certain Order Due To
		     Dependencies. -->

		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.viz.feature.awips" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.cots.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.common.core.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.core.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.core.maps.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.sounding.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.dataplugin.obs.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.dataplugins.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.d2d.core.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.localization.perspective.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.alertviz.localization.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.viz.radar.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.viz.text.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.viz.warngen.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.viz.grib.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.viz.gfe.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.displays.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.viz.satellite.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.d2d.skewt.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.ncep.core.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.ncep.dataplugins.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.ncep.displays.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.ncep.nsharp.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.viz.avnfps.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.viz.hydro.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.d2d.xy.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.d2d.nsharp.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.viz.volumebrowser.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.d2d.gfe.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.dat.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				value="com.raytheon.uf.viz.ncep.perspective.feature" />
		</antcall>
        <antcall target="p2.build.repo">
            <param name="feature"
                value="com.raytheon.uf.viz.nwsauth.feature" />
        </antcall>
		<antcall target="p2.build.repo">
		     <param name="feature"
		          value="com.raytheon.uf.viz.thinclient.feature" />
		</antcall>
		<antcall target="p2.build.repo">
		     <param name="feature"
		          value="com.raytheon.uf.viz.npp.feature" />
		</antcall>
		<antcall target="p2.build.repo">
			<param name="feature"
				  value="com.raytheon.uf.viz.collaboration.feature" />
		</antcall>
		
		<antcall target="cleanup.features" />
	</target>
	
	<target name="p2.build.repo">
		<!-- Update The Feature -->
		<property name="process.feature.tool"
			value="${workspace.dir}/build/tools/ProcessFeature.jar" />
		<java 
			jar="${process.feature.tool}"
			fork="true"
			failonerror="false"
			resultproperty="feature.tool.exitcode">
			
			<arg value="-u" />
			<arg value="${basedir}/cave/p2/features/${feature}" />
			<arg value="${build.version}" />
		</java>
		<if>
			<equals arg1="${feature.tool.exitcode}" 
				arg2="255" />
			<then>
				<fail message="${process.feature.tool} FAILED." />
			</then>
		</if>
		
		
		<!-- Build The Repository -->
		<java
			classname="org.eclipse.core.launcher.Main"
			fork="true"
			failonerror="true">
			
			<arg value="-application" />
			<arg value="org.eclipse.ant.core.antRunner" />
			<arg value="-buildfile" />
			<arg value="${eclipse.dir}/plugins/${pde.build.script}" />
			<arg value="-Dbuilder=${basedir}/cave/p2" />
			<arg value="-DbuildDirectory=${basedir}/cave/p2" />
			<arg value="-DbaseLocation=${eclipse.dir}" />
			<arg value="-DtopLevelElementId=${feature}" />
			<arg value="-DforceContextQualifier=${build.timestamp}" />
			<arg value="-Dconfigs=${build.os},${build.ws},${build.arch}" />
			
			<classpath>
				<pathelement 
					location="${eclipse.dir}/plugins/${eclipse.launcher.jar}" />
			</classpath>
		</java>
		
		<!-- Package The Repository -->
		<zip
			destfile="${basedir}/cave/p2/dist/${feature}-repo-${build.os}.${build.arch}.zip"
			basedir="${basedir}/cave/p2/repository" />
		
		<!-- Cleanup The Current Build -->
		<if>
			<available file="${basedir}/cave/p2/I.CAVE" type="dir" />
			<then>
				<delete includeemptydirs="true">
					<fileset dir="${basedir}/cave/p2/I.CAVE" />
				</delete>
			</then>
		</if>
		<if>
			<available file="${basedir}/cave/p2/repository" type="dir" />
			<then>
				<delete includeemptydirs="true">
					<fileset dir="${basedir}/cave/p2/repository" />
				</delete>
			</then>
		</if>
		<mkdir dir="${basedir}/cave/p2/repository" />
	</target>
	
	<target name="cleanup.features">
		<!-- Remove 'com.raytheon.viz.feature.awips' -->
		<if>
			<available 
				file="${basedir}/cave/p2/features/com.raytheon.viz.feature.awips" 
				type="dir" />
			<then>
				<delete includeemptydirs="true">
					<fileset 
						dir="${basedir}/cave/p2/features/com.raytheon.viz.feature.awips" 
					/>
				</delete>
			</then>
		</if>
		
		<!-- Remove 'com.raytheon.uf.viz.eclipse.feature' -->
		<if>
			<available 
				file="${basedir}/cave/p2/features/com.raytheon.uf.viz.eclipse.feature" 
				type="dir" />
			<then>
				<delete includeemptydirs="true">
					<fileset 
						dir="${basedir}/cave/p2/features/com.raytheon.uf.viz.eclipse.feature" 
					/>
				</delete>
			</then>
		</if>
		
		<!-- Remove 'com.raytheon.uf.viz.feature.alertviz' -->
		<if>
			<available 
				file="${basedir}/cave/p2/features/com.raytheon.uf.viz.feature.alertviz" 
				type="dir" />
			<then>
				<delete includeemptydirs="true">
					<fileset 
						dir="${basedir}/cave/p2/features/com.raytheon.uf.viz.feature.alertviz" 
					/>
				</delete>
			</then>
		</if>
		
		<!-- Remove 'com.raytheon.viz.feature.awips.developer' -->
		<if>
			<available 
				file="${basedir}/cave/p2/features/com.raytheon.viz.feature.awips.developer" 
				type="dir" />
			<then>
				<delete includeemptydirs="true">
					<fileset 
						dir="${basedir}/cave/p2/features/com.raytheon.viz.feature.awips.developer" 
					/>
				</delete>
			</then>
		</if>
	</target>
	
	<taskdef resource="net/sf/antcontrib/antlib.xml" 
		classpath="${basedir}/lib/ant/ant-contrib-1.0b3.jar" />
</project>