<!--
  ~ 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 basedir="." default="help">

    <!--Set your elcipse home directory  -->
    <property environment="env" />
    <property name="eclipse.home" value="${env.ECLIPSE_HOME}"></property>
	
    <!-- properties file to load the versions of dependencies -->
    <property file="../../../etc/project.properties"/>
    <property name="service.plugin.version" value="Axis2_Service_Archiver_${version_number}"></property>
    <property name="service.plugin.zip.name" value="axis2-eclipse-service-archiver-wizard.zip"></property>
	
    <property name="src" value="./src"></property>
    <property name="service.src.dir" value="../axis2-eclipse-service-plugin/src/main/java"></property>
    <property name="output" value="../target/eclipse_plugins"></property>
    <property name="output.target" value="${output}/release"></property>
    <property name="service.output.dir" value="${output}/service-archiver"></property>
    <property name="plugin.output.dir" value="${output}/plugin"></property>
    <property name="service.plugin.output.dir" value="${plugin.output.dir}/${service.plugin.version}"></property>

    <property name="source.dir.name" value="src"></property>
    <property name="lib.dir.name" value="lib"></property>
    <property name="bin.dir.name" value="bin"></property>
    <property name="help.dir.name" value="help"></property>
    <property name="icons.dir.name" value="icons"></property>

    <property name="plugin.project.file.name" value=".project"></property>
    <property name="plugin.classpath.file.name" value=".classpath"></property>
    <property name="plugin.help.file.name" value="help_toc.xml"></property>
    <property name="tool_docs_version" value="1_4"></property>

    <property name="service.resource.dir" value="../conf/service"></property>
    <property name="service.help.resource.file" value="../../../modules/documentation/xdocs/tools/${tool_docs_version}/eclipse/servicearchiver-plugin.html"></property>
    <property name="service.help.images.dir" value="../../../modules/documentation/xdocs/tools/${tool_docs_version}/eclipse/images"></property>
    <property name="axis2.lib.dir" value="../../../target/lib"></property>

    <!--Filter tockens for the copy command to filter the versions of external dependencies -->
    <filter token="version_number" value="${version_number}" />
    <filter token="ant.version" value="${ant.version}" />
    <filter token="commons.logging.version" value="${commons.logging.version}" />
    <filter token="log4j.version" value="${log4j.version}" />


     <!--Service wizard libraries -->
     <fileset id="service.libs" dir="${axis2.lib.dir}">
	     	<include name="ant-${ant.version}.jar" />
		<include name="log4j-${log4j.version}.jar" />
		<include name="commons-logging-${commons.logging.version}.jar" />
	    	<include name="axis2-${version_number}.jar" />
     </fileset>
	
	
    <!-- Default target to generate all the services -->
    <target name="all">
    	<antcall target="clean" />
        <antcall target="generate-service-plugin"/>
        <antcall target="release-plugin"/>
    </target>

    <!-- init-->
    <target name="init">
        <mkdir dir="${output}"></mkdir>
        <mkdir dir="${service.output.dir}"></mkdir>
    </target>


  <!-- Service Archiver Project -->

          <!--  Generete the Service Project that can be imported as a readymade eclipse project in to workspace -->
            <target name="generate-service-project" depends="init">
                <!-- delete the existing files -->
                <delete file="plugin.xml" />
                <delete file="build.properties" />
                <delete file=".project" />
		<delete file=".classpath" />
                <delete dir="icons" />
                <delete dir="help" />
                <delete dir="lib" />
                <!-- Copy with the filtering on-->
                <copy todir="." filtering="on" >
                    <fileset dir="${service.resource.dir}">
                        <include name="plugin.xml" />
                        <include name="build.properties" />
                        <include name="${plugin.classpath.file.name}" />
                    </fileset>
                </copy>

                <!-- copy the libs -->
                <mkdir dir="${lib.dir.name}" />
                <copy todir="${lib.dir.name}">
                        <fileset refid="service.libs" />
                </copy>
                <!-- copy the  icons-->
                <mkdir dir="${icons.dir.name}" />
                <copy todir="${icons.dir.name}">
                        <fileset dir="${service.resource.dir}/${icons.dir.name}" />
                </copy>
                <!-- copy the other project files-->
                <copy todir=".">
                        <fileset file="${service.resource.dir}/${plugin.project.file.name}" />
                        <fileset file="${service.resource.dir}/${plugin.help.file.name}" />
                </copy>

            </target>

	<!-- generate the service archiver project -->
	<target name="create-service-project" depends="init">
	        <!-- copy the source -->
	        <copy todir="${service.output.dir}/${source.dir.name}">
	            <fileset dir="${service.src.dir}/" excludes="**/codegen/**/*.java"/>
	        </copy>
			<!-- Copy the other stuff -->
	        <copy todir="${service.output.dir}" filtering="on">
	            <fileset dir="${service.resource.dir}" excludes="**/*.gif"></fileset>
	        </copy>
		    <!-- Copy the icons folder -->
            <copy todir="${service.output.dir}">
                 <fileset dir="${service.resource.dir}" includes="**/*.gif" ></fileset>
            </copy>
		    <!-- create bin directory -->
		    <mkdir dir="${service.output.dir}/${bin.dir.name}"></mkdir>
		    <!-- create the help directory -->
	        	<mkdir dir="${service.output.dir}/${help.dir.name}"></mkdir>
		    <!-- copy the help directory -->
	        <copy todir="${service.output.dir}/${help.dir.name}">
	            <fileset file="${service.help.resource.file}"></fileset>
	        </copy>
	        <!-- copy the libraries to the plugin-->
	        <copy todir="${service.output.dir}/${lib.dir.name}">
	            <fileset refid="service.libs" />
	        </copy>
		<available property="images.dir" file="${service.help.images.dir}" type="dir" value="${service.help.images.dir}"/>
	         <copy todir="${service.output.dir}/${help.dir.name}/images">
	          <fileset dir="${images.dir}"/>
	         </copy> 

	    </target>

    <!--Generate the service plugin -->	
    <target name="generate-service-plugin" depends="init,create-service-project">
        <mkdir dir="${service.plugin.output.dir}"></mkdir>
        <!-- copy the plugin.xml,build.properties and help_toc.xml -->
        <copy todir="${service.plugin.output.dir}">
            <fileset dir="${service.output.dir}" >
		<include name="plugin.xml" />
		<include name="help_toc.xml" />
		<include name="build.properties" />
 		<include name="**/ServiceResources.properties" />
	    </fileset>
        </copy>
        <!-- copy the help directory-->
        <copy todir="${service.plugin.output.dir}/help">
            <fileset dir="${service.output.dir}/help" />
        </copy>
        <!-- copy the icons directory-->
        <copy todir="${service.plugin.output.dir}/icons">
            <fileset dir="${service.output.dir}/icons" />
        </copy>
        <!-- copy the libraries to the plugin-->
        <copy todir="${service.plugin.output.dir}/${lib.dir.name}">
            <fileset refid="service.libs" />
        </copy>
        <!-- copy the sources to the plugin-->
        <copy todir="${service.plugin.output.dir}/${source.dir.name}">
	    <fileset dir="${service.output.dir}/${source.dir.name}">
		<include name="org/**" />
	    </fileset>
        </copy>

	<!-- compile the plugin java files -->
	<delete dir="${service.plugin.output.dir}/class"></delete>
 	<mkdir dir="${service.plugin.output.dir}/class"></mkdir>
	<javac srcdir="${service.output.dir}/${source.dir.name}" 
               destdir="${service.plugin.output.dir}/class" 
               includes="org/apache/axis2/**">
		<classpath>
     			<fileset dir="${service.plugin.output.dir}/lib">
        			<include name="**/*.jar" />
     			</fileset>
       			 <fileset dir="${eclipse.home}/plugins/">
				<include name="**/*.jar" />
     			</fileset>
    		</classpath>	
	</javac>
	
	<!--Make available the resources for the plugin -->
          <copy todir="${service.plugin.output.dir}/class">
            <fileset dir="${service.output.dir}/${source.dir.name}" >
                <include name="**/ServiceResources.properties" />
		<exclude name="**/*.class" />
            </fileset>
          </copy>

          <!-- create the Axis2_Service_Archiver.jar -->
	  <jar destfile="${service.plugin.output.dir}/Axis_Service_Archiver.jar" 
	       basedir="${service.plugin.output.dir}/class"
           includes="org/apache/**"
          />
	<delete dir="${service.plugin.output.dir}/src"></delete>
	<delete dir="${service.plugin.output.dir}/class"></delete>
    </target>

    <!--Install the service plugin -->
    <target name="install-service-plugin" depends="init,generate-service-project,generate-service-plugin">
        <delete dir="${eclipse.home}/plugins/${service.plugin.version}"></delete>
          <copy todir="${eclipse.home}/plugins">
                <fileset dir="${plugin.output.dir}"/>
          </copy>
    </target>

    <!--Relese the plugins (this will install the plugins and build the zip version)-->
    <target name="release-plugin">
    	<mkdir dir="${output.target}" />
    	<mkdir dir="${output.target}/service/${service.plugin.version}" />
    	
        <antcall target="generate-service-plugin"/>
    	
        <copy todir="${output.target}/service/${service.plugin.version}">
              <fileset dir="${plugin.output.dir}/${service.plugin.version}"/>
        </copy>
    	
    	<!--Zip the eclipse plugins to eclipse_plugins/target -->
    	<zip destfile="${output.target}/${service.plugin.zip.name}"
    	       basedir="${output.target}/service"
    	       update="true"
    	/>
    	<delete dir="${output.target}/service" />
    </target>


    <!-- Clean the directory -->
    <target name="clean">
        <delete dir="${service.output.dir}"></delete>
        <delete dir="${plugin.output.dir}/${service.plugin.version}"></delete>
        <delete file="${output.target}/${service.file.zip.name}"></delete>
    </target>

	<!-- help, list of targets -->
    <target name="help">
	    <echo message="****************************************************************************" />
	    <echo message="**              Eclipse Service Archiver Plugin Build                     **" />
	    <echo message="**  pre-requisit            : env.ECLIPSE_HOME                            **" />
	    <echo message="**                                                                        **" />
	    <echo message="**                                                                        **" />
	    <echo message="**  build eclipse project   : generate-service-project                    **" />
	    <echo message="**                                                                        **" />
	    <echo message="**  build eclipse plugin    : generate-service-plugin                     **" />
	    <echo message="**                                                                        **" />
	    <echo message="**  install plugin          : install-service-plugin                      **" />
	    <echo message="**                                                                        **" />
	    <echo message="**  release eclipse plugin  : release-plugin                              **" />
	    <echo message="**                                                                        **" />
	    <echo message="**                                                                        **" />
	    <echo message="****************************************************************************" />

    </target>
	
	
</project>



