-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFormValidator.cls
More file actions
182 lines (157 loc) · 6.26 KB
/
FormValidator.cls
File metadata and controls
182 lines (157 loc) · 6.26 KB
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/*------------------------------------------------------------------------
File : BaseValidator
Purpose :
Syntax :
Description :
Author(s) : dkurapkis
Created : Mon Jan 09 20:04:08 EET 2017
Notes :
----------------------------------------------------------------------*/
USING Progress.Lang.*.
USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
BLOCK-LEVEL ON ERROR UNDO, THROW.
CLASS FormValidator:
DEFINE PRIVATE PROPERTY cErrorCodeBegining AS CHARACTER INITIAL "error.field." NO-UNDO GET. SET.
DEFINE PRIVATE PROPERTY RULES_LIST AS CHARACTER INITIAL "required,integer,double,date" NO-UNDO GET. SET.
DEFINE PRIVATE PROPERTY oFieldRulesObject AS JsonObject NO-UNDO GET. SET.
DEFINE PRIVATE PROPERTY oErrorObject AS JsonArray NO-UNDO GET. SET.
DEFINE PRIVATE PROPERTY cCurrentField AS CHARACTER NO-UNDO GET. SET.
DEFINE PRIVATE PROPERTY oParameters AS BaseParameter NO-UNDO GET. SET.
DEFINE PUBLIC PROPERTY hasErrors AS LOGICAL INITIAL FALSE NO-UNDO GET. SET.
/**
@constructor
**/
CONSTRUCTOR PUBLIC FormValidator():
THIS-OBJECT:oErrorObject = NEW JsonArray().
THIS-OBJECT:oFieldRulesObject = NEW JsonObject().
END CONSTRUCTOR.
/**
@purpose - sets error beggining
@return void
@input CHARACTER
**/
METHOD PUBLIC VOID setErrorCodeBegining(cErrorCodeBegining AS CHARACTER):
THIS-OBJECT:cErrorCodeBegining = cErrorCodeBegining.
END METHOD.
/**
@purpose - iterates throuth fields and calls to validate them
@input
@return VOID
**/
METHOD PUBLIC VOID processValidation():
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DEFINE VARIABLE cValidatableFields AS CHARACTER EXTENT NO-UNDO.
cValidatableFields = THIS-OBJECT:oFieldRulesObject:GetNames().
DO i=1 TO EXTENT (cValidatableFields):
THIS-OBJECT:validateRules(cValidatableFields[i], THIS-OBJECT:oFieldRulesObject:GetJsonArray(cValidatableFields[i])).
END.
END METHOD.
/**
@purpose - process field validation by provided rules array
@input CHARACTER,JsonArray
@return VOID
**/
METHOD PRIVATE VOID validateRules(cFieldName AS CHARACTER, oRulesArray AS JsonArray):
DEFINE VARIABLE cRuleName AS CHARACTER NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DEFINE VARIABLE cFieldValue AS CHARACTER NO-UNDO.
cFieldValue = DYNAMIC-PROPERTY(THIS-OBJECT:oParameters, cFieldName).
DO i=1 TO oRulesArray:LENGTH:
CASE oRulesArray:GetCharacter(i):
WHEN "required" THEN DO:
THIS-OBJECT:validateRequired(cFieldName, cFieldValue).
END.
WHEN "integer" THEN DO:
END.
OTHERWISE
UNDO, THROW NEW AppError("Failed to find rule").
END CASE.
END.
END METHOD.
/**
@purpose - sets validation field name into object
@input CHARACTER
@return FormValidator
**/
METHOD FINAL PUBLIC FormValidator setField(cFieldName AS CHARACTER):
DEFINE VARIABLE oRulesArray AS JsonArray NO-UNDO.
THIS-OBJECT:cCurrentField = cFieldName.
IF NOT THIS-OBJECT:oFieldRulesObject:Has(cFieldName) THEN DO:
oRulesArray = NEW JsonArray().
THIS-OBJECT:oFieldRulesObject:add(cFieldName, oRulesArray).
END.
RETURN THIS-OBJECT.
END METHOD.
/**
@purpose - sets field with validation rules
@input CHARACTER,JsonArray
@return VOID
**/
METHOD PUBLIC VOID setFieldAndRulesArray(cFieldName AS CHARACTER, oRulesArray AS JsonArray):
THIS-OBJECT:cCurrentField = cFieldName.
IF NOT THIS-OBJECT:oFieldRulesObject:Has(cFieldName) THEN
DO:
THIS-OBJECT:oFieldRulesObject:add(cFieldName, oRulesArray).
END.
END METHOD.
/**
@purpose - sets field validation rules
@input CHARACTER
@return FormValidator
**/
METHOD FINAL PUBLIC FormValidator setFieldRules(cRule AS CHARACTER):
DEFINE VARIABLE oRulesArray AS JsonArray NO-UNDO.
THIS-OBJECT:isExistRule(cRule).
IF THIS-OBJECT:oFieldRulesObject:Has(THIS-OBJECT:cCurrentField) THEN DO:
oRulesArray = THIS-OBJECT:oFieldRulesObject:GetJsonArray(THIS-OBJECT:cCurrentField).
oRulesArray:Add(cRule).
END.
RETURN THIS-OBJECT.
END METHOD.
/**
@purpose - gets error list
@input
@return JsonArray
**/
METHOD PUBLIC JsonArray getErrorList():
RETURN THIS-OBJECT:oErrorObject.
END METHOD.
/**
@purpose - sets object where exist our validating properties
@input BaseParameter
@return VOID
**/
METHOD PUBLIC VOID setParameterObject(oParameters AS BaseParameter):
THIS-OBJECT:oParameters = oParameters.
END METHOD.
/**
@purpose - check if user selected rule exists
@input CHARACTER
@return VOID
**/
METHOD PRIVATE VOID isExistRule(cRule AS CHARACTER):
IF INDEX(THIS-OBJECT:RULES_LIST, cRule) = 0 THEN DO:
UNDO, THROW NEW AppError("Failed to find rule").
END.
END METHOD.
/**
@purpose - checks if validating field is not empty
@input CHARACTER,CHARACTER
@return VOID
**/
METHOD PRIVATE VOID validateRequired(cFieldName AS CHARACTER, cFieldValue AS CHARACTER):
IF cFieldValue = "" OR cFieldValue = ? THEN DO:
THIS-OBJECT:setError(SUBSTITUTE("&1&2&3", THIS-OBJECT:cErrorCodeBegining, cFieldName, ".required")).
END.
END METHOD.
/**
@purpose - to sett error message to error array and set flag to true
@input CHARACTER
@return VOID
**/
METHOD PRIVATE VOID setError(cErrorMessage AS CHARACTER):
THIS-OBJECT:oErrorObject:add(cErrorMessage).
THIS-OBJECT:hasErrors = TRUE.
END METHOD.
END CLASS.