<?xml version="1.0"?>
<!--
  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="." name="skins">
<!-- public targets -->
  <target name="available-skins"
          depends="init-props, skin-unavailable, fetch-skins-descriptors"
          description="What skins are available?">
    <for param="skin-descriptor-file">
      <path>
        <fileset dir="${forrest.skins-dir}" includes="skins-*.xml"/>
      </path>
      <sequential>
        <xslt in="@{skin-descriptor-file}" 
          out="${project.temp-dir}/skinlist2echobuild.xml"
          style="${forrest.core}/var/skinlist2echo.xsl"/>
        <ant antfile="${project.temp-dir}/skinlist2echobuild.xml"/>
      </sequential>
    </for>
  </target>
  <target name="package-skin" description="Make a package of an existing skin" depends="init-props">
    <input message="Which skin do you want to package?"
           addproperty="skin-name"/>
    <zip destfile="${forrest.skins-dir}/${skin-name}-${forrest.version}.zip"
       basedir="${forrest.skins-dir}/"
       includes="${skin-name}/**"/>
  </target>
  <target name="install-skin" 
          depends = "init-skins"
          description="Install the needed skin from the remote repository"/>
<!-- private -->
  <target name="init-skins" depends="init-props, check-skin, fetch-skin, unpack-skins"/>
  <target name="skin-unavailable">
    <property name="skin.unavailable" value="true"/>
  </target>
  <target name="check-skin">
    <condition property="skin.unavailable">
      <and>
        <not>
          <available type="dir" file="${forrest.skins-dir}/${project.skin}"/>
        </not>
        <not>
          <available type="file" file="${forrest.skins-dir}/${project.skin}.zip"/>
        </not>
        <not>
          <available type="dir" file="${skins-dir}/${project.skin}"/>
        </not>
      </and>
    </condition>
  </target>
  <target name="unpack-skins"
          depends="init-props">
    <unzip dest="${forrest.skins-dir}/">
      <fileset dir="${forrest.skins-dir}/">
        <include name="*.zip"/>
      </fileset>
    </unzip>
    <delete>
      <fileset dir="${forrest.skins-dir}/">
        <include name="*.zip"/>
      </fileset>
    </delete>
  </target>
  <target name="fetch-skins-descriptors" if="skin.unavailable" depends="init-proxy">
    <delete>
      <fileset dir="${forrest.skins-dir}" includes="skins-*.xml"/>
    </delete>
    <var name="skin-counter" value="1"/>
    <for list="${forrest.skins.descriptors}" param="url">
      <sequential>
        <echo>fetching descriptor: @{url}</echo>
        <get src="@{url}" 
           dest="${forrest.skins-dir}/skins-${skin-counter}.xml"
           verbose="true" usetimestamp="true" ignoreerrors="true"/>
        <if>
          <not>
            <available file="${forrest.skins-dir}/skins-${skin-counter}.xml"/>
          </not>
          <then>
            <fail>Stopped...
ERROR
=====
       
Unable to retrieve the skins descriptors at @{url}.
There may be more information about the reason for this in ouput
above. The usual cause is that Forrest has been unable to download
the file. If you are behind a firewall then set the proxy.host 
and proxy.port values in the forrest.properties file.
       </fail>
          </then>
        </if>
        <math result="skin-counter" operand1="${skin-counter}" operation="+" operand2="1" datatype="int"/>
      </sequential>
    </for>
  </target>
  <target name="fetch-skin" 
          if = "skin.unavailable"
          depends="init-props, fetch-skins-descriptors">
    <for param="skin-descriptor-file">
      <path>
        <fileset dir="${forrest.skins-dir}" includes="skins-*.xml"/>
      </path>
      <sequential>
        <xslt in="@{skin-descriptor-file}" 
          out="${project.temp-dir}/skinlist2fetchbuild.xml"
          style="${forrest.core}/var/skinlist2fetch.xsl"
          force="true">
          <param name="skin-name" expression="${project.skin}"/>
          <param name="forrest-version" expression="${forrest.version}"/>
        </xslt>
        <ant antfile="${project.temp-dir}/skinlist2fetchbuild.xml"/>
      </sequential>
    </for>
  </target>
</project>
