ECOBUF ;BP/CMF - Factory Object
 ;;2.0;EVENT CAPTURE;**100,107**;8 May 96;Build 14
 ;@author  - Chris Flegel
 ;@date    - 17 May 2009
 ;@version - 1.0
 ;;
 
Q
 
;; private methods
 ;;
FACTORY0()  "^TMP($J,""ECOBUF"")"
 ;;
FACTORY1() "^TMP($J,""ECOBUF"",1)"
 ;;
FACTORY2()  ;
 
^XTMP("ECOBUF",0)=$G(DT)+1_"^"_$G(DT)
 
"^XTMP(""ECOBUF"","_$S($G(DUZ)'="":DUZ,$G(DT)'="":DT,1:1)_")"
 ;;
VALUE(VALUE) ;;  parse "." out of Parameter values
 
Q $S(VALUE="":"",1:$P(VALUE,".")_U_$P(VALUE,".",2,3))
 
;;
 ;; published methods
FACTORY(RESULT,ARGUMENT) ; wrapper for factory methods - RPC "EC OBU FACTORY"
 
FACTORY,HANDLE,CREATE,DESTROY,CLASS,NAME,TARGET
 
ARG1,ARG2,ARG3
 
RESULT="-1^Invalid Factory Parameters",RESULT(0)=RESULT
 
ARGUMENT=$G(ARGUMENT)
 
Q:ARGUMENT=""
 
ARG1=$P(ARGUMENT,".",1)
 
ARG2=$P(ARGUMENT,".",2)
 
ARG3=$P(ARGUMENT,".",3)
 
ARG3=$S(ARG3'="":ARG3,ARG1="Constructor"&(ARG3=""):$$FACTORY2(),1:"")
 
Q:ARG1="Constructor"&(ARG3="")
 
ARG1="Constructor" D  Q
 
.CLASS=ARG2
 
.NAME=ARG3
 
.CREATE=$$GET^XPAR("PKG","ECOB CONSTRUCTOR",CLASS,"E")
 .
CREATE="" RESULT(0)="-1^Invalid Class Name" RESULT=RESULT(0) Q
 
.CREATE="S RESULT=$$"_$$VALUE(CREATE)
 .
CREATE
 
.RESULT(0)=RESULT
 
.Q
 I 
ARG1="Destructor" D  Q
 
.TARGET=ARG2
 
.ARG3'="" CLASS=ARG3
 
.E  D METHOD(.CLASS,TARGET_".of.Get_class")
 .
DESTROY=$$GET^XPAR("PKG","ECOB DESTRUCTOR",CLASS,"E")
 .
DESTROY="" RESULT(0)="-1^Invalid Class Name" RESULT=RESULT(0) Q
 
.DESTROY="S RESULT=$$"_$$VALUE(DESTROY)
 .
HANDLE=TARGET
 
.DESTROY
 
.RESULT(0)=RESULT
 
.Q
 I 
ARG1="Method" D  Q
 
.METHOD(.RESULT,$P(ARGUMENT,".",2,99))
 .
RESULT(0)=RESULT
 
.Q
 Q
 
;;
METHOD(RESULT,ARGUMENT)  ;
 ; call parent last
 
METHOD^ECOBU(.RESULT,ARGUMENT)  ; parent method
 
RESULT(0)=RESULT
 
Q
METHODS(RESULT,ARGUMENT)  ;
 ; call parent last
 
METHOD^ECOBU(.RESULT,ARGUMENT)  ; parent method
 
Q
OUT(ARGUMENT) ;method call as function
 
RESULT
 
METHOD(.RESULT,ARGUMENT)
 
RESULT