#!/usr/bin/python

import sys, httplib, xml, cStringIO
from xml.sax import saxutils
from xml.sax import make_parser, SAXException
from xml.sax.handler import ContentHandler

SERVER_ADDR = "131.188.48.20"
SERVER_PORT = 8090

BODY_TEMPLATE = """<soapenv:Envelope
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:ns1="http://server.ws/">
  <soapenv:Body>
    <ns1:analyzeToString>
     <arg0>%s</arg0>
    </ns1:analyzeToString>
  </soapenv:Body>
</soapenv:Envelope>
"""

class MorphResultHandler(ContentHandler):
    def __init__(self,result):
        self.document = result
        self.buffer = ''
        self.isResult = None
    def startElement(self,name,attrs):
        if name == 'return':
            self.isResult = 1
#            print "return tag found"
    def endElement(self,name):
        if name == 'return':
#            print "return tag closed"
            self.analysis = self.buffer.strip()
            self.buffer = ''
            print self.analysis
    def characters(self,chars):
        if self.isResult:
            self.buffer += chars
    
def parseResult(result):
    stream = cStringIO.StringIO(result)
    handler = MorphResultHandler(result)
    parser = make_parser()
#    print result
    parser.setContentHandler(handler)
    try:
        parser.parse(stream)
        stream.close()
    except SAXException:
        return handler.analysis
    return None




def GetAnalysis(word):
#    print "getting result..."
    body = BODY_TEMPLATE%(word)
    blen = len(body)
    requestor = httplib.HTTPConnection(SERVER_ADDR, SERVER_PORT)
    requestor.putrequest("POST", "/Morphology")
    requestor.putheader("Host", SERVER_ADDR)
    requestor.putheader("Content-Type", "text/xml; charset=\"utf-8\"")
    requestor.putheader("Content-Length", str(blen))
    requestor.putheader("SOAPAction", "\"\"")
    requestor.putheader("User-Agent", "Java/1.6.0")
    requestor.endheaders()
    requestor.send(body)
#    (status_code, message, reply_headers) = requestor.getresponse()
#    reply_body = requestor.getfile().read()
#    reply_body = requestor.read(1000)

#    print "status code:", status_code
#    print "status message:", message
#    print "HTTP reply body:\n", reply_body
    response = requestor.getresponse().read()
    parseResult(response)
#    print response

if __name__ == "__main__":
    name = ' '.join(sys.argv[1:])
    GetAnalysis(name)


#POST /Morphology HTTP/1.1
#Content-Length: 286
#SOAPAction: ""
#Accept: text/xml, application/xop+xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
#Content-Type: text/xml; charset=utf-8
#User-Agent: Java/1.6.0
#Host: 131.188.48.51:8090
#Connection: keep-alive

