ANT ANTForm XSL - Шпаргалка - PullRequest
       10

ANT ANTForm XSL - Шпаргалка

2 голосов
/ 02 сентября 2010

В другом вопросе - Получение списка каталогов из SVN для использования в раскрывающемся списке ANT

Я спросил о том, как я могу напрямую подключить SVN к моим сценариям ANT. Ответ, который я получил, был действительно хорош и следовал принципам экспорта списка каталогов из SVN в формате XML, а затем использования XSL для создания формы.

У меня нет опыта работы с XSL, поэтому мне было интересно, сможет ли кто-нибудь, кто может дать мне какие-либо указания? Точнее, с созданием форм в ANTForms через XSL. Их веб-сайт, похоже, ничего не говорит об использовании, и я не могу найти что-либо в Google.

Дополнительная информация ...

Вот небольшой пример XML, который я получаю от SVN.

<?xml version="1.0"?>
<lists>
<list path="https://example.com/svn/website/tags">
    <entry kind="dir">
        <name>archive</name>
        <commit revision="1337">
            <author>itncj</author>
            <date>2010-02-17T12:21:22.342500Z</date>
        </commit>
    </entry>
    <entry kind="dir">
        <name>milestone 1-0-0</name>
        <commit revision="1302">
            <author>jcb4337</author>
            <date>2010-02-12T10:15:00.282625Z</date>
        </commit>
    </entry>
    <entry kind="dir">
        <name>milestone 1-0-0b</name>
        <commit revision="1329">
            <author>itncj</author>
            <date>2010-02-17T12:08:56.248750Z</date>
        </commit>
    </entry>
</list>

Все, что мне нужно от этого - это имя узла, чтобы я мог построить форму следующей структуры -

  • НЕКОТОРЫЕ НАЗВАНИЯ ЭТИКЕТКИ
  • ЭТИКЕТКА | TextField
  • SVN CALL1 NAMES IN DROPDOWN
  • SVN CALL2 NAME IN DROPDOWN
  • SVN CALL3 NAME IN DROPDOWN
  • ДА / НЕТ <- Переключатель - для выпуска основных файлов инфраструктуры наших приложений </li>
  • SVN CALL4 NAMES IN DROPDOWN <- Какая версия ядра </li>
  • Test / Production /> <- Radio Button - среда, которую мы хотим выпустить в </li>
  • ПАРОЛЬ ТЕКСТФИЛД
  • DEPLOY КНОПКА
  • КНОПКА ОТМЕНЫ

Надеюсь, это имеет смысл, но мне нужно сделать x4 SVN-вызова, по одному для каждого репозитория, который содержит файлы наших проектов (основные файлы проекта, связанные компоненты, плагины и ядро) и заполнить эти раскрывающиеся списки с помощью selectionProperty для выбора ANTForm (http://antforms.sourceforge.net/usageaf.html).

Есть еще кое-что, что мне нужно сделать (например, добавить «Магистраль» к началу каждого раскрывающегося списка), но по одному шагу за раз.

1 Ответ

3 голосов
/ 19 сентября 2010

Одна стратегия, которую я использовал в прошлом, заключается в том, чтобы скрипт ANT генерировал другой файл сборки ANT, а затем выполнял этот динамически сгенерированный файл сборки ANT во время выполнения:

  1. вызов процесса (для получения информации SVN)
  2. вызов XSLT для динамического создания другого файла сборки ANT (с динамически созданной ANTForm)
  3. вызвать динамически сгенерированный файл сборки ANT (используя antcall, ant и т. Д.)

Таблицу стилей, подобную этой, можно использовать в качестве отправной точки для создания файла динамической сборки ANT, который вызывает динамически генерируемую форму ANT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>

    <xsl:template match="/">
        <project name="enhancedRSS" default="form" basedir=".">
            <taskdef name="antform" classname="com.sardak.antform.AntForm" 
                classpath="${antform.home}/lib/antform.jar"/>
            <target name="form">
                <xsl:call-template name="ANTFORM" />
            </target>
        </project>
    </xsl:template>

    <xsl:template name="ANTFORM">
        <antform title="Example ANTForm generated from XSLT">

            <label>Some title label</label>
            <textProperty label="LABEL" property="label1" required="true" focus="true"
                tooltip="This is the first label, which will assign the value entered to the ANT property label1" />

            <selectionProperty label="Values from SVN-CALL1:" property="svn-call1" separator=";">
                <xsl:attribute name="values">
                    <xsl:call-template name="SVN-CALL1" />
                </xsl:attribute>
            </selectionProperty>

            <selectionProperty label="Values from SVN-CALL2:" property="svn-call2" separator=";">
                <xsl:attribute name="values">
                    <xsl:call-template name="SVN-CALL2" />
                </xsl:attribute>
            </selectionProperty>

            <selectionProperty label="Values from SVN-CALL3:" property="svn-call3" separator=";">
                <xsl:attribute name="values">
                    <xsl:call-template name="SVN-CALL3" />
                </xsl:attribute>
            </selectionProperty>

            <radioSelectionProperty label="Release core files: " property="release" values="Yes;No" separator=";" />

            <selectionProperty label="Which verion of the core:">
                <xsl:attribute name="values">
                    <xsl:call-template name="SVN-CALL4" />
                </xsl:attribute>
            </selectionProperty>

            <radioSelectionProperty label="Environment: " property="environment" values="Test;Production" separator=";" />

            <textProperty label="Password" property="svn.password" required="true" password="true" />

            <controlbar>
                <button label="Cancel" type="cancel" />
                <button label="Deploy" target="deploy" />
            </controlbar>
        </antform>
    </xsl:template>

    <xsl:template name="SVN-CALL1">
       <xsl:text>Trunk</xsl:text> 
        <xsl:for-each select="/lists/list/entry/name">
            <xsl:text>;</xsl:text>
            <xsl:value-of select="."/>
        </xsl:for-each>
    </xsl:template>

    <xsl:template name="SVN-CALL2">
        <!--Similar logic as SVN-CALL1-->
    </xsl:template>
    <xsl:template name="SVN-CALL3">
        <!--Similar logic as SVN-CALL1-->
    </xsl:template>
    <xsl:template name="SVN-CALL4">
        <!--Similar logic as SVN-CALL1-->
    </xsl:template>
</xsl:stylesheet>

Он создает этот файл сборки ANT с большинством описанной вами формы ANT (должно быть достаточно для начала работы):

<?xml version="1.0" encoding="UTF-8"?>
<project name="enhancedRSS" default="form" basedir=".">
   <taskdef name="antform" classname="com.sardak.antform.AntForm"
            classpath="$/lib/antform.jar"/>
   <target name="form">
      <antform title="Example ANTForm generated from XSLT">
         <label>Some title label</label>
         <textProperty label="LABEL" property="label1" required="true" focus="true"
                       tooltip="This is the first label, which will assign the value entered to the ANT property label1"/>
         <selectionProperty label="Values from SVN-CALL1:" property="svn-call1" separator=";"
                            values="Trunk;archive;milestone 1-0-0;milestone 1-0-0b"/>
         <selectionProperty label="Values from SVN-CALL2:" property="svn-call2" separator=";" values=""/>
         <selectionProperty label="Values from SVN-CALL3:" property="svn-call3" separator=";" values=""/>
         <radioSelectionProperty label="Release core files: " property="release" values="Yes;No" separator=";"/>
         <selectionProperty label="Which verion of the core:" property="svn-call4" values=""/>
         <radioSelectionProperty label="Environment: " property="environment" values="Test;Production"
                                 separator=";"/>
         <textProperty label="Password" property="svn.password" required="true" password="true"/>
         <controlbar>
            <button label="Cancel" type="cancel"/>
            <button label="Deploy" target="deploy"/>
         </controlbar>
      </antform>
   </target>
</project>

При выполнении сгенерированный файл компоновки ANT и форма ANT выдают:

ANT Form

Этого должно быть достаточно, чтобы начать. Страница использования ANTForm сообщает вам, каков каждый из атрибутов для каждого из элементов ANTForm. Существует также много других возможностей, которые вы можете сделать для настройки (создать собственный CSS, собственные значки, сохранить свойства для предварительного заполнения формы при следующем запуске и т. Д.)

Если вы хотите, чтобы результаты ваших четырех вызовов SVN содержались в отдельных файлах XML, вам может потребоваться использовать функцию XSLT document(), чтобы выполнить то, что вам нужно, в одном XSLT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...