blob: 7a0ead3029fa8a600b7a78f8acb4710a411c8a49 [file] [log] [blame]
<?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.
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:param name="plugin-name" />
<xsl:param name="plugin-version" />
<xsl:param name="plugin-dir"/>
<xsl:param name="plugin-src-dir"/>
<xsl:param name="forrest-version" />
<xsl:template match="plugins">
<xsl:choose>
<xsl:when test="plugin[@name=$plugin-name]">
<project default="fetchplugin">
<target name="fetchplugin">
<xsl:attribute name="depends">
<xsl:if test="$plugin-version">
<xsl:text>fetch-local-versioned-plugin, fetch-remote-versioned-plugin-version-forrest,</xsl:text>
</xsl:if>
<xsl:text>fetch-local-unversioned-plugin, fetch-remote-unversioned-plugin-version-forrest,</xsl:text>
<xsl:text>fetch-remote-unversioned-plugin-unversion-forrest, final-check</xsl:text>
</xsl:attribute>
</target>
<target name="fetch-local-versioned-plugin">
<echo level="info">Searching for local versioned plugin ...</echo>
<antcallback target="get-local" return="plugin-found">
<param name="local-plugin-version">
<xsl:attribute name="value">-<xsl:value-of select="$plugin-version" />
</xsl:attribute>
</param>
<param name="local-plugin-name">
<xsl:attribute name="value">
<xsl:value-of select="$plugin-name" />
</xsl:attribute>
</param>
</antcallback>
</target>
<target name="fetch-remote-versioned-plugin-version-forrest" unless="plugin-found">
<echo level="info">Searching for remote versioned plugin for a specific version of Forrest ...</echo>
<antcallback target="download" return="plugin-found,desired.plugin.zip.present">
<param name="download-plugin-version">
<xsl:attribute name="value">-<xsl:value-of select="$plugin-version" />
</xsl:attribute>
</param>
<param name="download-plugin-name">
<xsl:attribute name="value">
<xsl:value-of select="$plugin-name" />
</xsl:attribute>
</param>
<param name="download-forrest-version">
<xsl:attribute name="value">
<xsl:value-of select="$forrest-version" />/</xsl:attribute>
</param>
</antcallback>
</target>
<target name="fetch-local-unversioned-plugin" unless="plugin-found">
<echo level="info">Searching for local unversioned plugin ...</echo>
<antcallback target="get-local" return="plugin-found">
<param name="local-plugin-version" value=""/>
<param name="local-plugin-name">
<xsl:attribute name="value">
<xsl:value-of select="$plugin-name" />
</xsl:attribute>
</param>
</antcallback>
</target>
<target name="fetch-remote-unversioned-plugin-version-forrest" unless="plugin-found">
<echo level="info">Searching for remote unversioned plugin for a specific version of Forrest ...</echo>
<antcallback target="download" return="plugin-found,desired.plugin.zip.present">
<param name="download-plugin-version" value=""/>
<param name="download-plugin-name">
<xsl:attribute name="value">
<xsl:value-of select="$plugin-name" />
</xsl:attribute>
</param>
<param name="download-forrest-version">
<xsl:attribute name="value">
<xsl:value-of select="$forrest-version" />/</xsl:attribute>
</param>
</antcallback>
</target>
<target name="fetch-remote-unversioned-plugin-unversion-forrest" unless="plugin-found">
<echo level="info">Searching for remote unversioned plugin in the unversioned Forrest ...</echo>
<antcallback target="download" return="plugin-found,desired.plugin.zip.present">
<param name="download-plugin-version" value=""/>
<param name="download-plugin-name">
<xsl:attribute name="value">
<xsl:value-of select="$plugin-name" />
</xsl:attribute>
</param>
<param name="download-forrest-version" value=""/>
</antcallback>
</target>
<target name="get-local">
<echo level="info">Trying to locally get ${local-plugin-name}${local-plugin-version}</echo>
<trycatch property="plugin-found">
<try>
<for param="plugin-src-dir">
<xsl:attribute name="list">
<xsl:value-of select="$plugin-src-dir" />
</xsl:attribute>
<sequential>
<echo level="info">Looking in local @{plugin-src-dir}</echo>
<if>
<available property="plugin.src.present" type="dir">
<xsl:attribute name="file">@{plugin-src-dir}/${local-plugin-name}${local-plugin-version}</xsl:attribute>
</available>
<then>
<echo level="info" message="Found !"/>
<ant target="local-deploy">
<xsl:attribute name="antfile">@{plugin-src-dir}/${local-plugin-name}${local-plugin-version}/build.xml</xsl:attribute>
<xsl:attribute name="dir">@{plugin-src-dir}/${local-plugin-name}${local-plugin-version}</xsl:attribute>
<property name="no.echo.init" value="true"/>
</ant>
<fail/>
</then>
</if>
</sequential>
</for>
</try>
<catch>
<echo level="info">Plugin ${local-plugin-name}${local-plugin-version} deployed ! Ready to configure</echo>
</catch>
</trycatch>
</target>
<target name="download" depends="keep-original-zip,get-from-remote-site,is-downloaded,remove-original-zip"/>
<target name="keep-original-zip" depends="available-original-zip" if="original.zip.exists">
<copy preservelastmodified="true">
<xsl:attribute name="file">
<xsl:value-of select="$plugin-dir"/>${download-plugin-name}.zip</xsl:attribute>
<xsl:attribute name="tofile">
<xsl:value-of select="$plugin-dir"/>${download-plugin-name}.zip.orig</xsl:attribute>
</copy>
</target>
<target name="available-original-zip">
<available property="original.zip.exists">
<xsl:attribute name="file">
<xsl:value-of select="$plugin-dir"/>${download-plugin-name}.zip</xsl:attribute>
</available>
</target>
<target name="get-from-remote-site">
<echo level="info">Tying to download ${download-plugin-name}${download-plugin-version} from the distribution site ...</echo>
<!-- FIXME the following test does not work... -->
<if>
<not>
<equals arg2="">
<xsl:attribute name="arg1">${download.forrest.version}</xsl:attribute>
</equals>
</not>
<then>
<echo level="info">Using Forrest version : ${download-forrest-version}</echo>
</then>
</if>
<!-- Get from the remote URL -->
<get verbose="true" usetimestamp="true" ignoreerrors="true">
<xsl:attribute name="src">
<xsl:value-of select="plugin[@name=$plugin-name]/@url" />/${download-forrest-version}${download-plugin-name}${download-plugin-version}.zip</xsl:attribute>
<xsl:attribute name="dest">
<xsl:value-of select="$plugin-dir"/>${download-plugin-name}.zip</xsl:attribute>
</get>
<!-- Check if a zip has been downloaded from this URL -->
<available property="desired.plugin.zip.present">
<xsl:attribute name="file">
<xsl:value-of select="$plugin-dir"/>${download-plugin-name}.zip</xsl:attribute>
</available>
<condition property="plugin-found">
<!-- or -->
<and>
<isset property="desired.plugin.zip.present"/>
<not>
<isset property="original.zip.exists"/>
</not>
</and>
</condition>
</target>
<target name="is-downloaded" if="original.zip.exists">
<!-- Check is the downloaded file is more recent than the original zip ... -->
<uptodate property="no-difference-found">
<xsl:attribute name="srcfile">
<xsl:value-of select="$plugin-dir"/>${download-plugin-name}.zip</xsl:attribute>
<xsl:attribute name="targetfile">
<xsl:value-of select="$plugin-dir"/>${download-plugin-name}.zip.orig</xsl:attribute>
</uptodate>
<!-- If there are differences, the plugin is found -->
<if>
<not>
<isset property="no-difference-found"/>
</not>
<then>
<property name="plugin-found" value="true"/>
</then>
</if>
</target>
<target name="remove-original-zip" if="original.zip.exists">
<!-- Now, we can delete the original -->
<delete>
<xsl:attribute name="file">
<xsl:value-of select="$plugin-dir"/>${download-plugin-name}.zip.orig</xsl:attribute>
</delete>
</target>
<target name="final-check" depends="has-been-downloaded,downloaded-message,uptodate-message,not-found-message"/>
<target name="has-been-downloaded" if="desired.plugin.zip.present">
<condition property="up-to-date">
<not>
<isset property="plugin-found"/>
</not>
</condition>
<condition property="downloaded">
<isset property="plugin-found"/>
</condition>
</target>
<target name="downloaded-message" if="downloaded">
<echo level="info">Plugin <xsl:value-of select="$plugin-name" /> downloaded ! Ready to install</echo>
</target>
<target name="uptodate-message" if="up-to-date">
<echo level="info">Plugin <xsl:value-of select="$plugin-name" /> was up-to-date ! Ready to configure</echo>
<property name="plugin-found" value="true"/>
</target>
<target name="not-found-message" unless="desired.plugin.zip.present">
<fail>
Unable to download the
"<xsl:value-of select="$plugin-name" />" plugin
<xsl:if test="$plugin-version">version <xsl:value-of select="$plugin-version"/>
</xsl:if>
or an equivalent unversioned plugin
from <xsl:value-of select="plugin[@name=$plugin-name]/@url" />
There are a number of possible causes for this:
One possible problem is that you do not have write access to
FORREST_HOME, in which case ask your system admin to install the
required Forrest plugin as described below.
A further possibility is that Forrest may be unable to connect to
the plugin distribution server. Again the solution is to manually
install the plugin.
To manually install a plugin, download the plugin zip file from
<xsl:value-of select="plugin[@name=$plugin-name]/@url"/> and
extract it into
<xsl:value-of select="$plugin-dir"/>
<xsl:value-of select="$plugin-name" />
</fail>
</target>
</project>
</xsl:when>
<xsl:otherwise>
<project default="findPlugin">
<target name="findPlugin"/>
</project>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="plugin"></xsl:template>
</xsl:stylesheet>