#!/usr/bin/env python
#
# 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.
#

import sys

try:
  from qpid_messaging import *
except:
  from qpid.messaging import *

broker =  "localhost:5672"
connection = Connection(broker)

try:
  connection.open()
  session = connection.session()

# Set up the receiver
  query = """
   let $w := ./weather
   return $w/station = 'Raleigh-Durham International Airport (KRDU)'
      and $w/temperature_f > 50
      and $w/temperature_f - $w/dewpoint > 5
      and $w/wind_speed_mph > 7
      and $w/wind_speed_mph < 20   """

#  query="./weather"

  address = """
    xml; {
       create: always,
       node:{ type: queue },
       link: {
         x-bindings: [{ exchange: xml, key: weather, arguments: { xquery: %r} }] 
       }
    }
    """ % query

  receiver = session.receiver(address)

# Send an observation

  observations = """
      <weather>
         <station>Raleigh-Durham International Airport (KRDU)</station>
         <wind_speed_mph>16</wind_speed_mph>
         <temperature_f>70</temperature_f>
         <dewpoint>35</dewpoint>
      </weather>  """

  message = Message(subject="weather", content=observations)
  sender = session.sender("xml")
  sender.send(message)

# Retrieve matching message from the receiver and print it

  message = receiver.fetch(timeout=1)
  print message.content
  session.acknowledge()

except MessagingError,m:
  print m

connection.close()
