Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: ECOBC

ECOBC.m

Go to the documentation of this file.
  1. ECOBC ;BP/CMF - Criteria Object
  1. ;;2.0;EVENT CAPTURE;**100**;8 May 96;Build 21
  1. ;@author - Chris Flegel
  1. ;@date - 17 May 2009
  1. ;@version - 1.0
  1. ;;
  1. Q
  1. ;; private methods
  1. CLEAR(RESULT,HANDLE,PARAMS) ; restore criteria to default values
  1. D METHOD(.RESULT,HANDLE_".SetLastItem.0")
  1. D METHOD(.RESULT,HANDLE_".SetLastValue.")
  1. K @HANDLE@("CriteriaItem")
  1. K @HANDLE@("CriteriaValue")
  1. Q
  1. ;;
  1. FIND(RESULT,HANDLE,PARAMS) ; return list that matches params
  1. ;be certain to set 'last' property to last found result
  1. ;RESULT.Count = # of matching items found
  1. ;RESULT.Search = actual string searched for
  1. ;RESULT.Pattern = the piece pattern used for result.item
  1. ;RESULT.Item.1 = 1st item found
  1. ;RESULT.Item.2 = 2nd item found...
  1. N EQUALS,ITEM,ITEMS,VALUE,NAME,OUT,RETURN,X ;,CONTAINS,BEGINS
  1. ;;;D PARSE("Handle",HANDLE)
  1. S VALUE=$S($G(PARAMS)'="":PARAMS,1:"~nil~")
  1. D METHOD(.NAME,HANDLE_".Get_namespace")
  1. S OUT=$$CREATE^ECOBL(NAME)
  1. S RESULT=OUT
  1. D PROPERTY^ECOBL(OUT,"Pu","Search",VALUE)
  1. D PROPERTY^ECOBL(OUT,"Pu","Result","0^No items found.")
  1. D METHOD(.EQUALS,HANDLE_".GetEquals")
  1. D:EQUALS="true" Q
  1. .Q:'$D(@HANDLE@("CriteriaValue",VALUE))
  1. .S ITEM=0
  1. .S ITEMS=0
  1. .F S ITEM=$O(@HANDLE@("CriteriaValue",VALUE,ITEM)) Q:ITEM="" D
  1. ..S ITEMS=ITEMS+1
  1. ..S RETURN=$$ONRETURN(ITEM,VALUE)
  1. ..D METHOD^ECOBL(.X,OUT_".Add."_RETURN)
  1. ..D METHOD(.X,HANDLE_".SetLastItem."_ITEM)
  1. ..D METHOD(.X,HANDLE_".SetLastValue."_VALUE)
  1. ..Q
  1. .D METHOD(.X,OUT_".SetResult."_ITEMS_"^Item(s) found")
  1. .S RESULT=OUT
  1. .Q
  1. .;;
  1. ;;D METHOD(.CONTAINS,HANDLE_".GetContains")
  1. ;;D:CONTAINS="true"
  1. ;;.Q
  1. ;;.;;
  1. ;;D METHOD(.BEGINS,HANDLE_".GetBeginsWith")
  1. ;;D:BEGINS="true"
  1. ;;.Q
  1. ;;.;;
  1. S RESULT="-1^'Find' method not fully implemented yet"
  1. Q
  1. ;;
  1. FIND1(RESULT,HANDLE,PARAMS) ; return first value that matches params
  1. N ITEM,VALUE
  1. S RESULT=""
  1. S VALUE=$G(PARAMS)
  1. Q:VALUE=""
  1. Q:'$D(@HANDLE@("CriteriaValue",VALUE))
  1. S ITEM=$O(@HANDLE@("CriteriaValue",VALUE,""))
  1. S RESULT=$$ONRETURN(ITEM,VALUE)
  1. Q
  1. ;;
  1. FIRST(RESULT,HANDLE,PARAMS) ; return first item in sequence
  1. N X
  1. D METHOD(.X,HANDLE_".SetLastItem.0")
  1. D METHOD(.X,HANDLE_".SetLastValue.")
  1. D NEXT(.RESULT,HANDLE,PARAMS)
  1. Q
  1. ;;
  1. INDEX(RESULT,HANDLE,PARAMS) ; params are item of parent collector
  1. N PARENT,ITEM,VALUE,NAME,COUNT,ARGUMENT,INDEXOF,CHILD
  1. ;;;D PARSE("Handle",HANDLE)
  1. D GET^ECOBL(.PARENT,HANDLE,"Pr","_collector")
  1. S ITEM=+PARAMS
  1. I ITEM<1 S RESULT="-1^Invalid item "_ITEM_" for index" Q
  1. ;kill old indices
  1. D
  1. .Q:'$D(@HANDLE@("CriteriaItem",ITEM))
  1. .S VALUE=$O(@HANDLE@("CriteriaItem",ITEM,""))
  1. .S VALUE=$S(VALUE="":"~nil~",1:VALUE)
  1. .K @HANDLE@("CriteriaItem",ITEM)
  1. .K @HANDLE@("CriteriaValue",VALUE,ITEM)
  1. ;set new indices
  1. D METHOD(.INDEXOF,HANDLE_".GetIndexOf")
  1. I INDEXOF="list" D
  1. .D GETITEM^ECOBL(.VALUE,PARENT,ITEM)
  1. .S VALUE=$S(VALUE="":"~nil~",1:VALUE)
  1. .Q
  1. E D
  1. .D METHOD(.ARGUMENT,HANDLE_".GetArgument")
  1. .D GETITEM^ECOBL(.CHILD,PARENT,ITEM)
  1. .D METHOD^ECOB(.VALUE,CHILD_"."_ARGUMENT) ;generic call
  1. .S VALUE=$S(VALUE="":"~nil~",1:VALUE)
  1. .Q
  1. S @HANDLE@("CriteriaItem",ITEM,VALUE)=""
  1. S @HANDLE@("CriteriaValue",VALUE,ITEM)=""
  1. Q
  1. ;;
  1. INFO(RESULT,HANDLE,PARAMS) ;
  1. D INFO^ECOB2(.RESULT,HANDLE,PARAMS)
  1. Q
  1. ;;
  1. LAST(RESULT,HANDLE,PARAMS) ; return last referenced item
  1. ;to do: implement .object argument method calls
  1. N LASTITEM,LASTVALU,ONRETURN
  1. D METHOD(.LASTITEM,HANDLE_".GetLastItem")
  1. D METHOD(.LASTVALU,HANDLE_".GetLastValue")
  1. S RESULT=$$ONRETURN(LASTITEM,LASTVALU) ;NEXT_"^"_VALUE
  1. Q
  1. ;;
  1. NEXT(RESULT,HANDLE,PARAMS) ; return next item^value in sequence
  1. ;be certain to set 'last' property to result
  1. N ARGUMENT,INDEXOF,LASTITEM,LASTVALU
  1. N NAME,COUNT,NEXT,VALUE,X
  1. D METHOD(.ARGUMENT,HANDLE_".GetArgument")
  1. D METHOD(.INDEXOF,HANDLE_".GetIndexOf")
  1. D METHOD(.LASTITEM,HANDLE_".GetLastItem")
  1. D METHOD(.LASTVALU,HANDLE_".GetLastValue")
  1. ;D METHOD(.LVALITEM,HANDLE_".GetLastValueItem")
  1. ;;;D PARSE("Handle",HANDLE)
  1. I INDEXOF="list" D Q
  1. .S NEXT=$O(@HANDLE@("CriteriaItem",LASTITEM))
  1. .I NEXT="" S RESULT="-1^End of list" Q
  1. .S VALUE=$O(@HANDLE@("CriteriaItem",NEXT,""))
  1. .S RESULT=$$ONRETURN(NEXT,VALUE) ;NEXT_"^"_VALUE
  1. .D METHOD(.X,HANDLE_".SetLastItem."_NEXT)
  1. .D METHOD(.X,HANDLE_".SetLastValue."_VALUE)
  1. .;D METHOD(.X,HANDLE_".SetLastValueItem.")
  1. ;;
  1. I INDEXOF="value" D Q
  1. .S VALUE=$O(@HANDLE@("CriteriaValue",LASTVALU))
  1. .;S VALUE=$O(@HANDLE@("CriteriaValue",LASTVALU,LVALITEM))
  1. .I VALUE="" S RESULT="-1^End of list" Q
  1. .S NEXT=$O(@HANDLE@("CriteriaValue",VALUE,""))
  1. .;S NEXT=$O(@HANDLE@("CriteriaValue",VALUE,LVALITEM))
  1. .S RESULT=$$ONRETURN(NEXT,VALUE) ;NEXT_"^"_VALUE
  1. .D METHOD(.X,HANDLE_".SetLastItem."_NEXT)
  1. .D METHOD(.X,HANDLE_".SetLastValue."_VALUE)
  1. .;D METHOD(.X,HANDLE_".SetLastValueItem."_LVALITEM)
  1. .Q
  1. ;;
  1. I INDEXOF="object" D
  1. .;to do: Get object handle (use _collector),
  1. .; then call method represented by PARAMS
  1. .Q
  1. S RESULT="-1^'Next' method not fully implemented"
  1. Q
  1. ;;
  1. ONRETURN(ITEM,VALUE) ;
  1. N ONRETURN,RESULT,PARENT
  1. S RESULT=ITEM_"^"_VALUE
  1. D METHOD(.ONRETURN,HANDLE_".GetOnReturn")
  1. I ONRETURN="value" Q VALUE
  1. I ONRETURN="item" Q ITEM
  1. I ONRETURN="handle" D Q RESULT
  1. .D GET^ECOBL(.PARENT,HANDLE,"Pr","_collector")
  1. .D METHOD^ECOBL(.RESULT,PARENT_".GetItem."_ITEM)
  1. .Q
  1. ;;
  1. PARSE(PARSE,VALUE) ;
  1. D PARSE^ECOBL(PARSE,VALUE)
  1. Q
  1. ;;
  1. PROPERTY(HANDLE,SCOPE,PROPERTY,VALUE) ;
  1. D PROPERTY^ECOBL(HANDLE,SCOPE,PROPERTY,VALUE)
  1. Q
  1. ;;
  1. REINDEX(RESULT,HANDLE) ; Reindex collection
  1. N PARENT,ITEM
  1. D GET^ECOBL(.PARENT,HANDLE,"Pr","_collector")
  1. ;;;D PARSE("Handle",PARENT)
  1. S ITEM=0
  1. F S ITEM=$O(@HANDLE@("Pr","list",ITEM)) Q:+ITEM=0 D
  1. .D INDEX(.RESULT,HANDLE,ITEM)
  1. .Q
  1. Q
  1. ;;
  1. SETARG(RESULT,HANDLE,PARAMS) ;set argument
  1. N VALUE,INDEXOF
  1. S VALUE=$G(PARAMS)
  1. S INDEXOF=$S(VALUE="":"list",1:"value")
  1. D SET^ECOBL(.RESULT,HANDLE,"Pu","Argument",VALUE)
  1. D SET^ECOBL(.RESULT,HANDLE,"Pu","IndexOf",INDEXOF)
  1. D REINDEX(.RESULT,HANDLE)
  1. Q
  1. ;;
  1. SETIND(RESULT,HANDLE,PARAMS) ;set indexOf
  1. N VALUE,ARGUMENT
  1. S VALUE=$G(PARAMS)
  1. S VALUE=$S(VALUE="value":VALUE,1:"list")
  1. D SET^ECOBL(.RESULT,HANDLE,"Pu","IndexOf",VALUE)
  1. I VALUE="list" D SET^ECOBL(.RESULT,HANDLE,"Pu","Argument","~nil~")
  1. D REINDEX(.RESULT,HANDLE)
  1. Q
  1. ;;
  1. SETRET(RESULT,HANDLE,PARAMS) ;set OnReturn
  1. N VALUE
  1. S VALUE=$G(PARAMS)
  1. S VALUE=$S(VALUE="value":VALUE,VALUE="handle":VALUE,1:"item")
  1. D SET^ECOBL(.RESULT,HANDLE,"Pu","OnReturn",VALUE)
  1. Q
  1. ;; protected methods
  1. CREATE(NAME) ;
  1. ; call parent first
  1. N HANDLE,X
  1. S HANDLE=$$CREATE^ECOB(NAME)
  1. ;;
  1. D SELF^ECOB(.X,HANDLE,"ECOBC","Criteria","METHOD^ECOBC(.RESULT,ARGUMENT)","ECOBC")
  1. ;;
  1. D PROPERTY(HANDLE,"Pr","_collector","")
  1. D PROPERTY(HANDLE,"Pu","Argument","~nil~")
  1. D PROPERTY(HANDLE,"Pu","BeginsWith","false")
  1. D PROPERTY(HANDLE,"Pu","Contains","false")
  1. D PROPERTY(HANDLE,"Pu","Equals","true")
  1. D PROPERTY(HANDLE,"Pu","IndexOf","list")
  1. D PROPERTY(HANDLE,"Pu","LastItem",0)
  1. D PROPERTY(HANDLE,"Pu","LastValue","")
  1. D PROPERTY(HANDLE,"Pu","LastValueItem","")
  1. D PROPERTY(HANDLE,"Pu","OnReturn","value")
  1. D PROPERTY(HANDLE,"Pu","Unique","false")
  1. ; complex properties last
  1. Q HANDLE
  1. ;;
  1. DESTROY(HANDLE) ;
  1. ; call parent last
  1. Q $$DESTROY^ECOB(HANDLE)
  1. ;;
  1. METHOD(RESULT,ARGUMENT) ;
  1. N HANDLE,METHOD,PARAMS
  1. D PARSE("Handle",ARGUMENT)
  1. D PARSE("Method",ARGUMENT)
  1. D PARSE("Params",ARGUMENT)
  1. I METHOD="Clear" D CLEAR(.RESULT,HANDLE,PARAMS) Q
  1. I METHOD="Find" D FIND(.RESULT,HANDLE,PARAMS) Q
  1. I METHOD="Find1" D FIND1(.RESULT,HANDLE,PARAMS) Q
  1. I METHOD="First" D FIRST(.RESULT,HANDLE,PARAMS) Q
  1. I METHOD="Index" D INDEX(.RESULT,HANDLE,PARAMS) Q
  1. I METHOD="Last" D LAST(.RESULT,HANDLE,PARAMS) Q
  1. I METHOD="Next" D NEXT(.RESULT,HANDLE,PARAMS) Q
  1. I METHOD="SetOnReturn" D SETRET(.RESULT,HANDLE,PARAMS) Q
  1. I METHOD="SetArgument" D SETARG(.RESULT,HANDLE,PARAMS) Q
  1. I METHOD="SetIndexOf" D SETIND(.RESULT,HANDLE,PARAMS) Q
  1. D METHOD^ECOB2(.RESULT,ARGUMENT)
  1. Q
  1. ;;