<!--
 -
 - 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 name="qpid-jca-example-properties" basedir="." default="">

    <property name="src.dir" location="${basedir}/src/main/java"/>
    <property name="lib.dir" location="${basedir}/lib"/>
    <property name="conf.dir" location="${basedir}/conf"/>
    <property name="build.dir" location="${basedir}/build"/>
    <property name="build.classes.dir" location="${build.dir}/classes"/>
    <property name="gen.dir" location="${build.dir}/gen"/>
    <property name="log.dir" location="${build.dir}/log"/>
    <property name="qpid.jca.dir" location="${env.QPID_JCA_HOME}"/>

    <property name="ejb.name" value="qpid-jcaex-ejb.jar"/>
    <property name="war.name" value="qpid-jcaex-web.war"/>
    <property name="ear.name" value="qpid-jcaex.ear"/>

    <property name="rar.ver" value="${qpid.ver}"/>
    <property name="rar.name" value="qpid-ra-${rar.ver}.rar"/>

    <property name="broker.url" value="amqp://anonymous:passwd@client/test?brokerlist='tcp://${broker.address}?sasl_mechs='PLAIN''"/>

    <property name="qpid.hello.topic.dest.address.ADDR" value="amq.topic/hello.Topic"/>
    <property name="qpid.goodbye.topic.dest.address.ADDR" value="amq.topic/goodbye.Topic"/>
    <property name="qpid.hellogoodbye.topic.dest.address.ADDR" value="amq.topic/goodbye.Topic"/>
    <property name="qpid.hello.queue.dest.address.ADDR"
         value="hello.Queue;{create:always, node:{type:queue, x-declare:{auto-delete:true}}}"/>
    <property name="qpid.goodbye.queue.dest.address.ADDR"
         value="goodbye.Queue;{create:always, node:{type:queue, x-declare:{auto-delete:true}}}"/>
    <property name="qpid.request.queue.dest.address.ADDR"
         value="request.Queue;{create:always, node:{type:queue, x-declare:{auto-delete:true}}}"/>
    <property name="qpid.response.queue.dest.address.ADDR"
         value="response.Queue;{create:always, node:{type:queue, x-declare:{auto-delete:false}}}"/>

    <property name="qpid.hello.topic.dest.address.BURL"
            value="BURL:topic://amq.topic//hello.jcaTopic?routingKey='hello.jcaTopic',autodelete='true'"/>
    <property name="qpid.goodbye.topic.dest.address.BURL"
            value="BURL:topic://amq.topic//goodbye.jcaTopic?routingKey='goodbye.jcaTopic',autodelete='true'"/>
    <property name="qpid.hellogoodbye.topic.dest.address.BURL"
           value="BURL:topic://amq.topic//#.jcaTopic"/>
    <property name="qpid.hello.queue.dest.address.BURL"
           value="BURL:direct://amq.direct//hello.Queue?routingkey='hello.Queue'"/>
    <property name="qpid.goodbye.queue.dest.address.BURL"
           value="BURL:direct://amq.direct//goodbye.Queue?routingkey='goodbye.Queue'"/>
    <property name="qpid.request.queue.dest.address.BURL"
           value="BURL:direct://amq.direct//request.Queue?routingkey='request.Queue'"/>
    <property name="qpid.response.queue.dest.address.BURL"
           value="BURL:direct://amq.direct//response.Queue?routingkey='response.Queue'"/>

    <!-- This macro allows us to construct a property name which contains a property expansion -->
    <macrodef name="set-address-property">
        <attribute name="name"/>
        <attribute name="syntax"/>
        <sequential>
            <property name="@{name}" value="${@{name}.@{syntax}}"/>
        </sequential>
    </macrodef>

    <set-address-property name="qpid.hello.topic.dest.address" syntax="${qpid.dest_syntax}"/>
    <set-address-property name="qpid.goodbye.topic.dest.address" syntax="${qpid.dest_syntax}"/>
    <set-address-property name="qpid.hellogoodbye.topic.dest.address" syntax="${qpid.dest_syntax}"/>
    <set-address-property name="qpid.hello.queue.dest.address" syntax="${qpid.dest_syntax}"/>
    <set-address-property name="qpid.goodbye.queue.dest.address" syntax="${qpid.dest_syntax}"/>
    <set-address-property name="qpid.request.queue.dest.address" syntax="${qpid.dest_syntax}"/>
    <set-address-property name="qpid.response.queue.dest.address" syntax="${qpid.dest_syntax}"/>
</project>
