예제 #1
0
    def OnSendClick(self):


        ## xml creation
        E = ElementMaker()
        orderData = E.orderData
        REASON = E.reason
        SEVERITY = E.severity
        if not self.type.get():
            self.typeVariable.set("NOT SET")

        my_doc = orderData(
            E.header(
                E.comment(self.headerComment),
                E.context(self.headerContext),
                E.organization(self.headerOrganization),
                E.revision(self.headerRevision),
                E.source(self.headerSource),
                E.userid(self.headerUserID),
                E.verb("create"),
                E.noun("service order")
            ),
            E.iloc(
                E.buildingName(self.bldgNameVariable.get()),
                E.buildingNumber(self.bldgNumVariable.get()),
                E.floor(self.bldgFloorVariable.get()),
                E.roomNumber(self.bldgRoomVariable.get())
            ),
            E.address(
                E.general(self.genAddrVariable.get()),
                E.city(self.townCodeVariable.get()),
                E.state(self.stateVariable.get()),
                E.code(self.zipcodeVariable.get())
            ),
            E.reason(self.reasonVariable.get()),
            E.severity(self.severityVariable.get()),
            E.type(self.type.get()),
            E.taskSubject('new task'),
            E.taskKind(self.taskKind.get()),
            E.taskStatus(self.taskStatus.get()),
            E.imageFile(self.imageVariable.get()),
            E.assetID(self.assetMRIDVariable.get()),
            E.assetUTC(self.assetUTCVariable.get())
        )

        self.top2 = tk.Toplevel()

        text = tk.Text(self.top2,height=8,width=50)
        text.pack(fill=tk.BOTH,expand=True)
        text.insert(tk.END,"Sending...")

        b1 = tk.Button(self.top2,text=u"OK", command=self.top2.destroy)
        b1.pack(fill=tk.X)

        self.top2.geometry("300x200")

        print etree.tostring(my_doc,pretty_print=True)

        # We're gonna call the java program and then
        # do a non-blocking read on it
        print "calling : " + self.url + "ServiceOrderCreate"
        print "sending : " + etree.tostring(my_doc)
        self.send = subprocess.Popen(["java",
                "-jar",
                "createServiceOrder.jar",
                self.url + "ServiceOrderCreate",
                etree.tostring(my_doc)],
                stdout=subprocess.PIPE)
        flags = fcntl(self.send.stdout, F_GETFL)
        fcntl(self.send.stdout, F_SETFL, flags | O_NONBLOCK)
        def callback():
            try:
                data = read(self.send.stdout.fileno(), 20)
                dataOut = data
                text.insert(tk.END,'\n')
                while True:
                    if data == '':
                        outputResult(dataOut)
                        break
                    data = read(self.send.stdout.fileno(), 1024)
                    dataOut += data
            except OSError:     
                    text.insert(tk.END,'.')
                    self.after(1000, callback)

        root.after(1000,callback)


        def outputResult(xmlString):
            try:
                rxml = etree.fromstring(xmlString)
                resultCode = rxml.xpath("//orders/Result")[0].text
                if resultCode == 'Error':
                    text.insert(tk.END,"Operation Failed:")
                    msg = rxml.xpath("//orders/Reason")[0].text
                    text.insert(tk.END,"\n\n" + msg)
                else:
                    text.insert(tk.END,"Result : " + rxml.xpath("//orders/Result")[0].text)
                    text.insert(tk.END,"\n\n" + rxml.xpath("//orders/ID")[0].text)
                    print tk.END,"\n\n" + rxml.xpath("//orders/ID")[0].text
            except: # catch all
                text.insert(tk.END,"Operation Failed:\n\n" + xmlString);