-
Notifications
You must be signed in to change notification settings - Fork 8
/
zModelFactory.prw
113 lines (75 loc) · 3.7 KB
/
zModelFactory.prw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/* -------------------------------------------------------------------------------------------
Copyright 2015-2019 Júlio Wittwer ( siga0984@gmail.com | http://siga0984.wordpress.com/ )
É permitido, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software
e dos arquivos de documentação associados (o "Software"), para negociar o Software
sem restrições, incluindo, sem limitação, os direitos de uso, cópia, modificação, fusão,
publicação, distribuição, sublicenciamento e/ou venda de cópias do Software,
SEM RESTRIÇÕES OU LIMITAÇÕES.
O SOFTWARE É FORNECIDO "TAL COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA,
INCLUINDO MAS NÃO SE LIMITANDO A GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UMA FINALIDADE
ESPECÍFICA E NÃO INFRACÇÃO. EM NENHUM CASO OS AUTORES OU TITULARES DE DIREITOS AUTORAIS
SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA
EM AÇÃO DE CONTRATO OU QUALQUER OUTRA FORMA, PROVENIENTE, FORA OU RELACIONADO AO SOFTWARE.
*** USE A VONTADE, POR SUA CONTA E RISCO ***
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom
the Software is furnished to do so, WITHOUT RESTRICTIONS OR LIMITATIONS.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE.
***USE AS YOU WISH , AT YOUR OWN RISK ***
------------------------------------------------------------------------------------------- */
#include 'protheus.ch'
#include 'zlib.ch'
/* ======================================================
Factory de Modelos
Criado e armazenado como um objeto do ZENV()
====================================================== */
CLASS ZMODELFACTORY FROM LONGNAMECLASS
DATA oLogger // Objeto de log
DATA aObjects
METHOD NEW()
METHOD GetNewModel()
METHOD Done()
ENDCLASS
// ------------------------------------------------------
//
METHOD NEW() CLASS ZMODELFACTORY
::oLogger := ZLOGGER():New("ZMODELFACTORY")
::oLogger:Write("NEW","Create Definition Factory")
// Array de controle de instancias
::aObjects := {}
Return self
// ------------------------------------------------------
// Retorna um objeto com a instancia montada do Modelo
METHOD GetNewModel(oDefObj,p1,p2,p3,p4,p5) CLASS ZMODELFACTORY
Local oRet
Local bBlock
Local cBlock
::oLogger:Write("GetNewModel","Create Model based on Definition ["+GetClassName(oDefObj)+"]")
// Monta codeblock para criar instancia dinamicamente
cBlock := "{|oDef,p1,p2,p3,p4,p5| ZMVCMODEL():New(oDef,p1,p2,p3,p4,p5) }"
bBlock := &(cBlock)
oRet := Eval(bBlock,oDefObj, p1,p2,p3,p4,p5)
// Limpa codeblock para quebrar referencias
bBlock := NIL
// Guarda a referencia deste objeto
aadd(::aObjects,oRet)
Return oRet
// ------------------------------------------------------
METHOD Done() CLASS ZMODELFACTORY
Local nI, oObj
::oLogger:Write("Done")
For nI := 1 to len(::aObjects)
oObj := ::aObjects[nI]
If oObj != NIL \
oObj:Done()
FreeObj(oObj)
Endif
Next
aSize(::aObjects,0)
Return .T.