<?xml version="1.0"?>
<project name="gs3-webswing-ext" default="usage" basedir=".">

  <!-- ============ classpath =================== -->
  <path id="project.classpath">
    <fileset dir="../../lib/java">
      <include name="**/*.jar"/>
    </fileset>
  </path>
  
  <!-- ============ self defined tasks =================== -->
  <taskdef name="mysetproxy" classname="org.greenstone.anttasks.MySetProxy" classpathref="project.classpath"/>
  <taskdef name="getuserandpassword" classname="org.greenstone.anttasks.MyGetUserAndPassword" classpathref="project.classpath"/>
  <taskdef name="rsr" classname="org.greenstone.anttasks.RegexSearchReplace" classpathref="project.classpath"/>
  <taskdef name="if" classname="ise.antelope.tasks.IfTask" classpathref="project.classpath"/>
  <taskdef name="for" classname="net.sf.antcontrib.logic.ForTask" classpathref="project.classpath"/>
  <taskdef name="foreach" classname="net.sf.antcontrib.logic.ForEach" classpathref="project.classpath"/>
  <taskdef name="stringutil" classname="ise.antelope.tasks.StringUtilTask" classpathref="project.classpath"/>

  <!-- 
       Perhaps the following (and the above) should bo be moved into a sub-module/sub-projectc so it can be imported 
       (<import file="<filename>.xml")
  -->

  <property name="os.linux"   value="Linux"/> 
  <property name="os.mac"     value="Mac OS X"/>
  <property name="os.solaris" value="SunOS"/>
  <property name="os.unix" value="${os.linux},${os.mac},${os.solaris}"/>
  <property name="os.windows" value="Windows 95,Windows 98,Windows 2000,Windows 2003,Windows XP,Windows NT,Windows ME,Windows Vista,Windows 7,Windows Server 2008,Windows Server 2008 R2,Windows 8,Windows 10,Windows 11"/> <!-- check this!!!-->

  <!--
  <property environment="env"/>
  -->
  
  <!-- Directory Locations -->
  <!-- http://stackoverflow.com/questions/3136849/how-do-i-convert-a-relative-path-in-ant-to-an-absolute-path 
       http://stackoverflow.com/questions/8295860/pathconvert-with-relative-file-names -->

  <!-- greenstone3 paths -->
  <property name="gsdl3srchome"     location="${basedir}/../.."/>     <!-- location property creates an absolute path -->
  <pathconvert targetos="unix" property="gsdl3srchome.unix">
    <path path="${gsdl3srchome}"/>
  </pathconvert>
  
  <property name="gsdl3.writablebasedir" location="${basedir}/../.."/>     <!-- location property creates an absolute path -->
  <pathconvert targetos="unix" property="gsdl3.writablebasedir.unix">
    <path path="${gsdl3.writablebasedir}"/>
  </pathconvert>

  <!-- location property creates an absolute path, default if not set with -D argument -->
  <property name="web.home"         location="${gsdl3srchome}/web"/> 
  <pathconvert targetos="unix" property="web.home.unix">
    <path path="${web.home}"/>
  </pathconvert>

  <!-- location property creates an absolute path, default if not set with -D argument -->
  <property name="web.writablehome" location="${gsdl3.writablebasedir}/web"/> 
  <pathconvert targetos="unix" property="web.writablehome.unix">
    <path path="${web.writablehome}"/>
  </pathconvert>


  <property name="gsdl3.datadir" value="${gsdl3.writablebasedir}/data"/>
  <property name="webswing.datadir" value="${gsdl3.datadir}/ext/webswing"/> 
  <pathconvert targetos="unix" property="webswing.datadir.unix">
    <path path="${webswing.datadir}"/>
  </pathconvert>
  
  <!-- local ext paths -->
  <loadproperties prefix="gs3." srcFile="${gsdl3srchome}/build.properties"/> 
  <property name="src.home" value="${basedir}/src"/>
  <property name="dst.home" value="${basedir}/web"/>
  <available property="ext.web.exists" file="${basedir}/web" type="dir" />

  <property name="etc-config-files" value="catalina-opts-extra.args,webswing.config,webswing.properties"/>
  <property name="etc-config-dirs"  value="api,apps,fonts,ssl"/>
  
  <condition property="tomcat.dir" value="${gs3.tomcat.installed.path}" else="${gsdl3srchome}/packages/tomcat">
    <and>
      <isset property="gs3.tomcat.installed.path"/>
      <not>
        <equals arg1="${gs3.tomcat.installed.path}" arg2=""/>
      </not>
    </and>
  </condition>
  <property name="webswing.context.default" value="webswing-server"/>

  <condition property="webswing.context" value="${gs3.webswing.context}" else="${webswing.context.default}">
    <and>
      <isset property="gs3.webswing.context"/>
      <not>
        <equals arg1="${gs3.webswing.context}" arg2=""/>
      </not>
    </and>
  </condition>
  <!-- if not set by -D argument from top-level build.xml, then provide some
       useful/plausable backup-defaults for testing on a local machine -->
  <property name="gsdlos" value="linux"/>
  <property name="internal.websocket-baseurl" value="ws://localhost:8383"/>
  <property name="internal.servlet-url" value="http://localhost:8383/greenstone3/library"/>
  <property name="external.servlet-url" value="http://localhost:8383/greenstone3/library"/>
  <property name="external.webswing-url" value="http://localhost:8383/${webswing.context}"/>
  
  <property name="internal.ws-webswingserver" value="${internal.websocket-baseurl}/${webswing.context}/"/>	

  
  <!-- TARGETS -->
  <target name="usage" description="Print a help message">
    <echo message="  Execute 'ant -projecthelp' for a list of targets."/>
    <echo message="  Execute 'ant -help' for Ant help."/>
    <echo>To install the Webswing extension for Greenstone3, run 'ant add-extension'.
	To remove the files and folders installed by add-extension, run 'ant del-extension'.
    </echo>
  </target>			
  
  <target name="compile" description="Compile up the webswing java classes, war them up, and install webswing-server.war into Greenstone's Tomcats webapps dir">

    <exec os="${os.unix}" executable="bash"  dir="src" failonerror="true">
      <arg value="-c" />
      <arg value="./COMPILE.sh" />
    </exec>

    <echo>Copying src/webswing-20.2.5/webswing-server/webswing-server-war/target/webswing-server.war ${basedir}/web </echo>    
    <copy file="src/webswing-20.2.5/webswing-server/webswing-server-war/target/webswing-server.war" todir="${basedir}/web"/>
    <antcall target="install-webswing-for-tomcat"/>
  </target>

  <target name="clean" description="Delete the webswing compiled classes">
    <exec os="${os.unix}" executable="./CLEAN.sh"  dir="src" failonerror="true" />
    <exec os="${os.windows}" executable=".\\CLEAN.bat"  dir="src" failonerror="true" />
  </target>

  
  <target name="install-etc-files">
  	
    <if>
      <bool><not><available file="${webswing.datadir}" type="dir"/></not></bool>    
      <echo>Creating data extension directory: ${webswing.datadir}</echo>
      <mkdir dir="${webswing.datadir}"/>
    </if>
    <if>
      <bool><not><available file="${webswing.datadir.unix}/etc" type="dir"/></not></bool>        
      <echo>Creating extension directory: ${webswing.datadir.unix}/etc</echo>
      <mkdir dir="${webswing.datadir.unix}/etc"/>
    </if>

    <for param="configFile" list="${etc-config-files}">
      <sequential>
	<echo>Installing ${basedir}/web/etc/@{configFile}.in into ${webswing.datadir.unix}/etc</echo>
	<copy file="${basedir}/web/etc/@{configFile}.in" tofile="${webswing.datadir.unix}/etc/@{configFile}.in" overwrite="true" />
      </sequential>
    </for>
	
    <for param="configDir" list="${etc-config-dirs}">
      <sequential>		
	<echo/>
	<echo>Installing directory ${basedir}/web/@{configDir}/ into ${webswing.datadir} (excluding .svn)</echo>
	<copy todir="${webswing.datadir}">
	  <fileset dir="${basedir}/web">
	    <include name="@{configDir}/**"/>
	    <exclude name="**/.svn"/>
	  </fileset> 
	</copy>
      </sequential>
    </for>	
  </target>

  <target name="install-webswing-for-tomcat" description="Install webswing war file into Tomcat">
    <echo>Copying ${basedir}/web/webswing-server.war to ${tomcat.dir}/webapps/${webswing.context}.war</echo>
    <copy file="${basedir}/web/webswing-server.war" tofile="${tomcat.dir}/webapps/${webswing.context}.war" />
    <if>
      <bool><not><equals arg1="${webswing.context}" arg2="${webswing.context.default}"/></not></bool>
      <echo>Installed webswing-server.war with a non-standard name - do you need to delete other versions from the ${tomcat.dir}/webapps directory?</echo>
    </if>
  </target>  
  
  
  <target name="add-extension" depends="install-etc-files,install-webswing-for-tomcat"
	  description="Run this target to setup the Webswing extension for Greenstone3" />


  <target name="configure-extension"
          description="Re-configure the webswing extension for Greenstone">  	
    <for param="configFile" list="${etc-config-files}">
      <sequential>
	<echo message="Configuring ${webswing.datadir.unix}/etc/@{configFile}"/>  
	<copy file="${webswing.datadir.unix}/etc/@{configFile}.in" tofile="${webswing.datadir.unix}/etc/@{configFile}" filtering="true" overwrite="true">
	  <filterset>
	    <filter token="gsdl3srchome" value="${gsdl3srchome}"/>
	    <filter token="gsdl3srchomeunix" value="${gsdl3srchome.unix}"/>
            <filter token="gsdl3webhome" value="${web.home}"/>
            <filter token="gsdl3webhomeunix" value="${web.home.unix}"/>
            <filter token="webswingdatadir" value="${webswing.datadir.unix}"/>
	    <filter token="gsdl3webwritablehome" value="${web.writablehome}"/>
	    <filter token="gsdl3webwritablehomeunix" value="${web.writablehome.unix}"/>
            <filter token="gsdl3writablebasedir" value="${gsdl3.writablebasedir}"/>
            <filter token="gsdl3writablebasedirunix" value="${gsdl3.writablebasedir.unix}"/>
            <filter token="tomcathome" value="${tomcat.dir}"/>
            <filter token="webswingcontext" value="${gs3.webswing.context}"/>
	    <filter token="gsdlos" value="${gsdlos}"/>
	    <filter token="scriptorjavapath" value="${scriptorjavapath}"/>
	    <filter token="internal-ws-webswingserver" value="${internal.ws-webswingserver}"/>
	    <filter token="internal-servleturl" value="${internal.servlet-url}"/>
	    <filter token="external-servleturl" value="${external.servlet-url}"/>
	    <filter token="external-contexturl" value="${external.context-url}"/>
	    <filter token="external-webswingurl" value="${external.webswing-url}"/>
            <filter token="servlet-path" value="${default.servlet-path}"/>
	  </filterset>
	</copy>
      </sequential>
    </for>
    <antcall target="install-webswing-for-tomcat"/>
  </target>
    
  <target name="accept-del-extension" unless="delextension.accepted">
    <input addproperty="delextension.ok" validargs="y,n">This will recursively delete all the files in:
    ${webswing.datadir}
Do you want to continue [y/n]
    </input>
    <condition property="do.abort-delextension">
      <equals arg1="n" arg2="${delextension.ok}"/>
    </condition>
    <fail if="do.abort-delextension">... Exiting</fail>
  </target>

  <target name="del-etc-files" description="Helper-target to delete webswing installed files">
    <!-- failonerror is set to false in case some files don't exist 
	 and can't be deleted therefore -->
    <echo/>
    <echo>Removing directory  ${webswing.datadir}</echo>
    <echo>
       delete failonerror="false" includeEmptyDirs="true" dir="${webswing.datadir.unix}"
    </echo>
    <delete failonerror="false" includeEmptyDirs="true" dir="${webswing.datadir.unix}"/>
  </target>
  
  <target name="del-webswing-for-tomcat" description="Helper-target to remove files for getting webswing to work with tomcat">    
    <!-- Actually need to ensure tomcat is not running at this point
	 But if webswing-server.war is deleted first, it can't be re-deployed when deleting the webswing folder subsequently
    -->    
    <echo/>
    <echo>Removing webswing webapp installed to tomcat</echo>
    <delete failonerror="false" file="${tomcat.dir}/webapps/${webswing.context}.war"/>
    <delete failonerror="false" includeEmptyDirs="true" dir="${tomcat.dir}/webapps/${webswing.context}"/>
    <!-- just in case we have been using a non-standard context, lets make sure the 
         default context war file is not also there -->
    <delete failonerror="false" file="${tomcat.dir}/webapps/${webswing.context.default}.war"/>
    <delete failonerror="false" includeEmptyDirs="true" dir="${tomcat.dir}/webapps/${webswing.context.default}"/>
  </target>
  
  <target name="del-extension" depends="accept-del-extension,deactivate"
	  description="Run this target to remove the Webswing extension for Greenstone3" />

  <!-- Called by DEACTIVATE.SH, no user prompt -->
  <target name="deactivate" depends="del-etc-files,del-webswing-for-tomcat"
	  description="Run this target to QUIETLY remove the Webswing extension for Greenstone3" />

</project>
