1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.hr.time.clocklog.validation;
17
18 import java.util.regex.Matcher;
19 import java.util.regex.Pattern;
20
21 import org.apache.log4j.Logger;
22 import org.kuali.hr.time.clock.location.validation.ClockLocationRuleRule;
23 import org.kuali.hr.time.clocklog.ClockLog;
24 import org.kuali.hr.time.service.base.TkServiceLocator;
25 import org.kuali.rice.kns.document.MaintenanceDocument;
26 import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase;
27 import org.kuali.rice.krad.bo.PersistableBusinessObject;
28 import org.kuali.rice.krad.util.GlobalVariables;
29
30 public class ClockLogRule extends MaintenanceDocumentRuleBase {
31
32 private static final String WILDCARD_CHARACTER = "%";
33 private static final String REGEX_IP_ADDRESS_STRING = "(?:(?:"
34 + WILDCARD_CHARACTER
35 + "|25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:"
36 + WILDCARD_CHARACTER + "|25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
37 private static final Pattern REGEX_IP_ADDRESS_PATTERN = Pattern
38 .compile(REGEX_IP_ADDRESS_STRING);
39
40 private static Logger LOG = Logger.getLogger(ClockLocationRuleRule.class);
41
42 protected boolean validateIpAddress(String ip) {
43 boolean valid = false;
44
45 LOG.debug("Validating IP address: " + ip);
46 Matcher matcher = REGEX_IP_ADDRESS_PATTERN.matcher(ip);
47 valid = matcher.matches();
48 if (!valid) {
49 this.putFieldError("ipAddress", "ipaddress.invalid.format", ip);
50 }
51
52 return valid;
53 }
54
55
56 protected boolean validateWorkArea(ClockLog clockLog ) {
57 boolean valid = false;
58 LOG.debug("Validating workarea: " + clockLog.getWorkArea());
59 int count = TkServiceLocator.getWorkAreaService().getWorkAreaCount(null, clockLog.getWorkArea());
60 if (count >0 ) {
61 valid = true;
62 LOG.debug("found workarea.");
63 } else {
64 this.putFieldError("workArea", "error.existence", "Workarea '"
65 + clockLog.getWorkArea()+ "'");
66 }
67 return valid;
68 }
69
70 protected boolean validateTask(ClockLog clockLog ) {
71 boolean valid = false;
72 LOG.debug("Validating task: " + clockLog.getTask());
73 int count = TkServiceLocator.getTaskService().getTaskCount(clockLog.getTask());
74 if (count >0 ) {
75 valid = true;
76 LOG.debug("found task.");
77 } else {
78 this.putFieldError("task", "error.existence", "Task '"
79 + clockLog.getTask()+ "'");
80 }
81 return valid;
82 }
83
84
85
86
87
88
89 @Override
90 protected boolean processCustomRouteDocumentBusinessRules(
91 MaintenanceDocument document) {
92 boolean valid = false;
93
94 LOG.debug("entering custom validation for ClockLog");
95 PersistableBusinessObject pbo = (PersistableBusinessObject) this.getNewBo();
96 if (pbo instanceof ClockLog) {
97 ClockLog clockLog = (ClockLog) pbo;
98 clockLog.setUserPrincipalId(GlobalVariables.getUserSession().getPrincipalId());
99 if (clockLog != null) {
100 valid = true;
101 valid &= this.validateIpAddress(clockLog.getIpAddress());
102 valid &= this.validateWorkArea(clockLog);
103 valid &= this.validateTask(clockLog);
104 }
105 }
106
107 return valid;
108 }
109
110 }