<!--
   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 name="Run as part of postBuild" default="main">
	<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${buildHome}/build-files/ant-contrib.jar" />
	<taskdef resource="org/pluginbuilder/anttasks/pluginbuildertasks.properties" classpath="${buildHome}/build-files/pluginbuilder-anttasks.jar" />
	
	
    <target name="main">
    	<property name="UpdateSiteStagingLocation" value="${buildDirectory}/tmpUpdateSite/updateSite"/>
    	<property name="UpdateSiteFinalLocation" value="${buildResultsDirectory}/../updateSite"/>
    	<property name="siteXmlFile" value="${UpdateSiteStagingLocation}/site.xml"/>
    	
        <antcall target="-generateUpdateSite"/>
    	<antcall target="-createNightlyBuildSiteXml"/>
    	<zip destfile="${buildResultsDirectory}/updateSite-${version.full}.zip" basedir="${UpdateSiteStagingLocation}"/>
    	<antcall target="deleteSiteXml"/>
    	<copy todir="${UpdateSiteFinalLocation}">
    		<fileset dir="${UpdateSiteStagingLocation}" includes="**"/>
    	</copy>
    	<delete dir="${UpdateSiteStagingLocation}/../.." includes="tmpUpdateSite/**" includeemptydirs="true"/>
    	<antcall target="-p2"/>
    </target>
	
	<target name="deleteSiteXml" unless="isNightlyBuild">
		<!-- in release builds the site.xml should not be overwritten, so older version can survive -->
		<delete file="${siteXmlFile}"/>
	</target>
    
    <!--======================================================-->
    <!-- UpdateSite Export target, to be called from allElements  -->
    <!-- ==================================================== -->
    <target name="updateSiteExport">
        <ant antfile="build.xml" dir="${buildDirectory}/features/${id}/" target="build.update.jar">
            <property name="feature.destination" value="${UpdateSiteStagingLocation}/features"/>
            <property name="plugin.destination" value="${UpdateSiteStagingLocation}/plugins"/>
        </ant>
    </target>
    
    <target name="-generateUpdateSite">
        <!-- Create the directory structure -->
        <mkdir dir="${UpdateSiteStagingLocation}"/>
        <mkdir dir="${UpdateSiteStagingLocation}/features"/>
        <mkdir dir="${UpdateSiteStagingLocation}/plugins"/>
    	<condition property="jarProcessor.sign" value="true">
    		<istrue value="${signJars}"/>
    	</condition>
        <!-- Build the jar files -->
        <ant antfile="${builder}/customTargets.xml" target="allElements">
            <property name="genericTargets" value="${builder}/postBuild.xml"/>
            <property name="target" value="updateSiteExport"/>
        </ant>
        <!-- site.xml files for integration and release builds are handled elsewhere -->
        <antcall target="-createNightlyBuildSiteXml"/>
        <delete dir="${buildDirectory}/temp.updatesite"/>
    </target>
	
    <target name="-createNightlyBuildSiteXml">
    	<echo>${siteXmlFile}</echo>
        <echo file="${siteXmlFile}">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;site&gt;
		&lt;description&gt;${updateSiteDescription}&lt;/description&gt;
</echo>
    	<foreach list="${pluginbuilder.features}" delimiter="," target="-appendFeatureElement" param="featureId" inheritall="true"/> 
        <echo file="${siteXmlFile}" append="true">		&lt;category-def name=&quot;${updateSiteCategoryName}&quot;
            label=&quot;${updateSiteCategoryLabel}&quot;&gt;
		&lt;/category-def&gt;
&lt;/site&gt;</echo>
    </target>

	<target name="-appendFeatureElement">
		<!-- we can not rely on ${version.full} at this point since people could use
			a fix feature id like 0.5.0.qualifier. ${version.full} would only work if
			the feature were set to 0.0.0 --> 
		<loadfile property="featurexml" srcfile="${buildDirectory}/features/${featureId}/feature.xml"/>
		<SetRegex input="${featurexml}" match="^.*&lt;feature.+?version=&quot;(.+?)&quot;.*$" property="realFeatureVersion" value="\1" />
    	<echo file="${siteXmlFile}" append="true">		&lt;feature 
		url=&quot;features/${featureId}_${realFeatureVersion}.jar&quot; 
		id=&quot;${featureId}&quot; 
		version=&quot;${realFeatureVersion}&quot;&gt; 
    	&lt;category name=&quot;${updateSiteCategoryName}&quot;/&gt; 
		&lt;/feature&gt;
</echo>    	
    </target>
	
	<target name="-p2">
		<condition property="is.p2" value="true">
				<equals  arg1="${generate.p2.metadata}" arg2="true"/>
		</condition>
		<property name="p2archive" value="${buildResultsDirectory}/p2-repository-${version.full}.zip"/>
		<antcall target="-createP2Archive"/>
		<antcall target="-createP2UpdateSite"/>
	</target>
		
	<target name="-createP2Archive" if="is.p2">
		<pathconvert property="repodir">
			<resources>
			      <url url="${p2.metadata.repo}"/>
			</resources>
			<map from="file:" to=""/>
		</pathconvert>
		<zip destfile="${p2archive}" basedir="${repodir}"/>
	</target>
	
	<target name="-createP2UpdateSite" if="is.p2">
		<property name="p2updatesite" value="${buildResultsDirectory}/../p2-updateSite"/>
		<delete dir="${p2updatesite}"/>
		<mkdir dir="${p2updatesite}"/>
		<unzip src="${p2archive}" dest="${p2updatesite}"/>
	</target>
	
</project>
