1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.batch.sample.domain.order.internal.valang;
18
19 import java.math.BigDecimal;
20 import java.util.List;
21
22 import org.springframework.batch.sample.domain.order.LineItem;
23 import org.springmodules.validation.valang.functions.AbstractFunction;
24 import org.springmodules.validation.valang.functions.Function;
25
26
27
28
29
30
31 public class ValidateDiscountsFunction extends AbstractFunction {
32 private static final BigDecimal BD_0 = new BigDecimal(0.0);
33 private static final BigDecimal BD_PERC_MAX = new BigDecimal(100.0);
34
35 public ValidateDiscountsFunction(Function[] arguments, int line, int column) {
36 super(arguments, line, column);
37 definedExactNumberOfArguments(1);
38 }
39
40
41
42
43 @SuppressWarnings("unchecked")
44 protected Object doGetResult(Object target) throws Exception {
45 List<LineItem> lineItems = (List<LineItem>) getArguments()[0].getResult(target);
46
47 for (LineItem item : lineItems) {
48
49 if (BD_0.compareTo(item.getDiscountPerc()) != 0) {
50
51 if ((BD_0.compareTo(item.getDiscountPerc()) > 0)
52 || (BD_PERC_MAX.compareTo(item.getDiscountPerc()) < 0)
53 || (BD_0.compareTo(item.getDiscountAmount()) != 0)) {
54
55 return Boolean.FALSE;
56 }
57 } else {
58
59 if ((BD_0.compareTo(item.getDiscountAmount()) > 0)
60 || (item.getPrice().compareTo(item.getDiscountAmount()) < 0)) {
61 return Boolean.FALSE;
62 }
63 }
64 }
65
66 return Boolean.TRUE;
67 }
68 }