Thursday, July 21, 2011

Ant: create a property from a list of the part of property name

I tried to create a property from a list. Input properties are:
<property name "servers"="aaa,bbb,ccc"/>
<property name "aaa.ip"="10.0.0.1"/>
<property name "bbb.ip"="10.0.0.2"/>
<property name "ccc.ip"="10.0.0.3"/>
From above properties, I want to create a property whose value is "10.0.0.1,10.0.0.2,10.0.0.3".

I first tried propertyregex:
<propertyregex property="server.list"
    input="${servers}"
    regexp="([^,]+)"
    replace="${\1.ip}"
    global="true" />
<echo message="${server.list}"/>

But it does not work. The "server.list" becomes "${aaa.ip},${bbb.ip},${ccc.ip}"

Next I tried var and for:
<var name="server.list" value=""/>
<for list="${servers}" param="server">
    <sequential>
        <if>
            <equals arg1="${server.list}" arg2=""/>
            <then>
                <var name="server.list" value="${@{server}.ip}"/>
            </then>
            <else>
                <var name="server.list" value="${server.list},${@{server}.ip}"/>
            </else>
        </if>
    </sequential>
</for>

Yes, this works. Now I get what I want.