XOBVSYSI ;; ld,mjk/alb - VistaLink Interface Implementation ; [7/20/06 10:51am]
;;1.5;VistALink;**1**;Sep 09, 2005;Build 3
;;Foundations Toolbox Release v1.5 [Build: 1.5.1.001]
;
CALLBACK(CB) ; -- init callbacks implementation
SET CB("STARTELEMENT")="ELEST^XOBVSYSI"
QUIT
;
; ------------------------------------------------------------------------
; RPC Server: Request Message XML SAX Parser Callbacks
; ------------------------------------------------------------------------
ELEST(ELE,ATR) ; -- element start event handler
IF ELE="VistaLink" DO QUIT
. SET XOBDATA("MODE")=$GET(ATR("mode"),"single call")
;
IF ELE="Request" DO QUIT
. SET XOBDATA("XOB SYSTEM","TYPE")=$GET(ATR("type"),"unknown")
. SET XOBDATA("XOB SYSTEM","ENV")=$$LOW^XLFSTR($GET(ATR("environment"),"j2se"))
;
QUIT
;
READER(XOBUF,XOBDATA) ; -- proprietary format reader implementation
QUIT
;
REQHDLR(XOBDATA) ; -- request handler implementation
NEW TYPE
SET TYPE=$GET(XOBDATA("XOB SYSTEM","TYPE"),"unknown")
;
; -- initialize socket partition request
IF TYPE="initializeSocket" DO INIT(.TYPE) GOTO REQHDLRQ
;
; -- set stop flag to close socket request
IF TYPE="closeSocket" DO CLOSE(.TYPE) GOTO REQHDLRQ
;
; -- cleanup partition request
IF TYPE="cleanupPartition" DO CLEANUP(.TYPE) GOTO REQHDLRQ
;
; -- heartbeat request
IF TYPE="heartbeat" DO HB(.TYPE) GOTO REQHDLRQ
;
; -- system info request
IF TYPE="systemInfo" DO SYSINFO(.TYPE) GOTO REQHDLRQ
;
; -- failue if processing get here
DO RESPONSE(.TYPE,"failure")
;
REQHDLRQ ;
QUIT
;
ENV ; -- set env variable
SET XOBSYS("ENV")=$GET(XOBDATA("XOB SYSTEM","ENV"))
QUIT
;
PSTANUM ; -- set primary station number
SET XOBSYS("PRIMARY STATION#")=+$$STA^XUAF4($$KSP^XUPARAM("INST"))
QUIT
;
INIT(TYPE) ; -- handle initialize request
KILL XOBSYS
DO ENV
DO PSTANUM
;
IF "^j2se^j2ee^.net^"[(U_XOBSYS("ENV")_U) DO
. DO RESPONSE(.TYPE,"success",$$RATE()_$$JOB()_$$RASTO())
ELSE DO
. DO RESPONSE(.TYPE,"failure")
QUIT
;
CLOSE(TYPE) ; -- handle close socket request
SET XOBSTOP=1
DO RESPONSE(.TYPE,"success")
QUIT
;
CLEANUP(TYPE) ; -- handle cleanup partition request
; -- unlock any pending locks
LOCK
;
; -- clean ^TMP, ^UTILITY, ^XUTL
DO XUTL^XUSCLEAN
;
; -- restore DUZ to connector user
KILL DUZ
MERGE DUZ=XOBSYS("DUZ")
;
; -- clean symbol table
DO KILL^XOBVLL
;
DO RESPONSE(.TYPE,"success")
QUIT
;
DUZSV(DUZ) ; -- save initial DUZ info for session
IF $GET(XOBSYS("ENV"))="j2ee" DO
. KILL XOBSYS("DUZ")
. MERGE XOBSYS("DUZ")=DUZ
QUIT
;
HB(TYPE) ; -- handle heartbeat request
DO ENV
DO RESPONSE(.TYPE,"success",$$RATE())
QUIT
;
RATE() ; -- set up rate attribute for response
NEW XOBRATE
; -- get J2EE timeout value for app serv environment
IF $GET(XOBSYS("ENV"))="j2ee" DO
. SET XOBRATE=$$GETASTO^XOBVLIB()
ELSE DO
. SET XOBRATE=$$GETRATE^XOBVLIB()
QUIT " rate="""_XOBRATE_""""
;
JOB() ; -- set up $JOB attribute for response
QUIT " mJob="""_$JOB_""""
;
RASTO() ; -- set up ReAuthenticated Session TimeOut
QUIT " reAuthSessionTimeout="""_$$GETRASTO^XOBVLIB()_""""
;
RESPONSE(TYPE,STATUS,ATTRS) ; -- build xml response
; -- initialize
DO PRE^XOBVSKT
DO WRITE^XOBVSKT($$VLHDR^XOBVLIB(4))
DO WRITE^XOBVSKT("")
DO WRITE^XOBVSKT($$ENVFTR^XOBVLIB())
; -- send eot and flush buffer
DO POST^XOBVSKT
QUIT
;
SYSINFO(TYPE) ; -- build system info response
NEW XOBINFO,XOBELE,XOBDEFLT,XOBINTRO,XOBI
;
; -- set up default value
SET XOBDEFLT="unknown"
;
; -- get system info array
DO GETSINFO(.XOBINFO)
;
; -- build element
SET XOBELE=""
;
SET XOBINTRO=$GET(XOBINFO("introductoryText"))
;
; -- build and send complate message
DO PRE^XOBVSKT
DO WRITE^XOBVSKT($$VLHDR^XOBVLIB(4))
DO WRITE^XOBVSKT("")
DO WRITE^XOBVSKT(XOBELE)
FOR XOBI=1:1 QUIT:'$DATA(XOBINFO("introductoryText",XOBI)) DO
. DO WRITE^XOBVSKT(XOBINFO("introductoryText",XOBI))
DO WRITE^XOBVSKT("")
DO WRITE^XOBVSKT($$ENVFTR^XOBVLIB())
DO POST^XOBVSKT
;
QUIT
;
GETSINFO(XOBINFO) ; -- gather system info into array
NEW X,Y
;
; -- get version
SET XOBINFO("version")=$PIECE($TEXT(XOBVSYSI+1),";",3)
;
; -- get build number
SET XOBINFO("build")=$PIECE($PIECE($TEXT(XOBVSYSI+2),"Build: ",2),"]")
;
; -- get application server connection timeout
SET XOBINFO("appServerTimeout")=$$GETASTO^XOBVLIB()
;
; -- get reauthentication session timeout
SET XOBINFO("reAuthSessionTimeout")=$$GETRASTO^XOBVLIB()
;
; -- get basic M environment information
SET Y=""
DO GETENV^%ZOSV
;
; -- get uci
SET XOBINFO("uci")=$PIECE(Y,U,1)
;
; -- get vol
SET XOBINFO("vol")=$PIECE(Y,U,2)
;
; -- get box volume
SET XOBINFO("boxVolume")=$PIECE(Y,U,4)
;
; -- get M version (full name)
SET XOBINFO("mVersion")=$$SYMENC^MXMLUTL($$VERSION^%ZOSV(1))
;
; -- get operating system
SET XOBINFO("operatingSystem")=$$SYMENC^MXMLUTL($$SYSOS^XOBVLIB(XOBOS))
;
; -- get domain name
SET XOBINFO("domainName")=$$SYMENC^MXMLUTL($$KSP^XUPARAM("WHERE"))
;
; -- production or test
SET XOBINFO("vistaProduction")=$S($$PROD^XUPROD(0):"true",1:"false")
;
; -- default institution
SET XOBINFO("defaultInstitution")=$$SYMENC^MXMLUTL($$STA^XUAF4($$KSP^XUPARAM("INST"))_"/"_$$NAME^XUAF4($$KSP^XUPARAM("INST")))
;
; -- get intro text
D GETINTRO^XOBSCAV2("XOBINFO(""introductoryText"")",1)
;
; -- get c/p username
SET XOBINFO("cpName")=$$NAME^XUSER(DUZ)
;
QUIT
;
RPC(XOBY) ;
NEW XOBX,XOBLINE,XOBARR
D GETSINFO(.XOBARR)
SET XOBLINE=0
S XOBX="" F S XOBX=$O(XOBARR(XOBX)) Q:XOBX']"" D
. SET XOBLINE=XOBLINE+1
. SET XOBY(XOBLINE)=XOBX_"~"_XOBARR(XOBX)
QUIT
;