-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCustomerRegistrationValidatorSet.java
More file actions
57 lines (43 loc) · 1.78 KB
/
CustomerRegistrationValidatorSet.java
File metadata and controls
57 lines (43 loc) · 1.78 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
package combinatorpattern;
import java.time.LocalDate;
import java.time.Period;
import java.util.EnumSet;
import java.util.function.Function;
import combinatorpattern.CustomerRegistrationValidatorSet.ValidationResultPossible;
public interface CustomerRegistrationValidatorSet extends Function<Customer, EnumSet<ValidationResultPossible>>{
static final EnumSet<ValidationResultPossible> SUCCESS_ONLY= EnumSet.of(ValidationResultPossible.SUCCESS);
static CustomerRegistrationValidatorSet isEmailValidSet() {
return customer -> customer.getEmail().contains("@")
? SUCCESS_ONLY
: EnumSet.of(ValidationResultPossible.EMAIL_NOT_VALID);
}
static CustomerRegistrationValidatorSet isPhoneNumberValidSet() {
return customer -> customer.getPhoneNumber().startsWith("+0")
? SUCCESS_ONLY
: EnumSet.of(ValidationResultPossible.PHONE_NUMBER_NOT_VALID);
}
static CustomerRegistrationValidatorSet isAnAdultSet() {
return customer -> Period.between(customer.getDateOfBirth(), LocalDate.now()).getYears() > 18
? SUCCESS_ONLY
: EnumSet.of(ValidationResultPossible.IS_NOT_AN_ADULT);
}
default CustomerRegistrationValidatorSet and(CustomerRegistrationValidatorSet other) {
return customer ->{
EnumSet<ValidationResultPossible> thisResult=this.apply(customer);
EnumSet<ValidationResultPossible> otherResult= other.apply(customer);
if(thisResult.equals(SUCCESS_ONLY))
return otherResult;
if(otherResult.equals(SUCCESS_ONLY))
return thisResult;
EnumSet<ValidationResultPossible> combinedResult=EnumSet.copyOf(thisResult);
combinedResult.addAll(otherResult);
return combinedResult;
};
}
enum ValidationResultPossible {
SUCCESS,
PHONE_NUMBER_NOT_VALID,
EMAIL_NOT_VALID,
IS_NOT_AN_ADULT
}
}