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 package net.objectlab.kit.datecalc.joda;
34
35 import static net.objectlab.kit.datecalc.common.HolidayHandlerType.BACKWARD;
36 import static net.objectlab.kit.datecalc.common.HolidayHandlerType.FORWARD;
37 import static net.objectlab.kit.datecalc.common.HolidayHandlerType.FORWARD_UNLESS_MOVING_BACK;
38 import static net.objectlab.kit.datecalc.common.HolidayHandlerType.MODIFIED_FOLLOWING;
39 import static net.objectlab.kit.datecalc.common.HolidayHandlerType.MODIFIED_PRECEDING;
40 import net.objectlab.kit.datecalc.common.AbstractKitCalculatorsFactory;
41 import net.objectlab.kit.datecalc.common.DateCalculator;
42 import net.objectlab.kit.datecalc.common.HolidayHandlerType;
43 import net.objectlab.kit.datecalc.common.IMMDateCalculator;
44 import net.objectlab.kit.datecalc.common.KitCalculatorsFactory;
45 import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
46
47 import org.joda.time.YearMonthDay;
48
49
50
51
52
53
54
55
56 public class YearMonthDayKitCalculatorsFactory extends AbstractKitCalculatorsFactory<YearMonthDay> {
57
58 private static final YearMonthDayKitCalculatorsFactory DEFAULT = new YearMonthDayKitCalculatorsFactory();
59
60 private static final PeriodCountCalculator<YearMonthDay> PCC = new YearMonthDayPeriodCountCalculator();
61
62 private static final IMMDateCalculator<YearMonthDay> IMMDC = new YearMonthDayIMMDateCalculator();
63
64 public static YearMonthDayKitCalculatorsFactory getDefaultInstance() {
65 return DEFAULT;
66 }
67
68 public static YearMonthDayDateCalculator forwardCalculator(final String name) {
69 return DEFAULT.getDateCalculator(name, HolidayHandlerType.FORWARD);
70 }
71
72 public static YearMonthDayDateCalculator backwardCalculator(final String name) {
73 return DEFAULT.getDateCalculator(name, HolidayHandlerType.BACKWARD);
74 }
75
76 public static YearMonthDayDateCalculator forwardUnlessMovingBackCalculator(final String name) {
77 return DEFAULT.getDateCalculator(name, HolidayHandlerType.FORWARD_UNLESS_MOVING_BACK);
78 }
79
80 public static YearMonthDayDateCalculator modifiedFollowingCalculator(final String name) {
81 return DEFAULT.getDateCalculator(name, HolidayHandlerType.MODIFIED_FOLLOWING);
82 }
83
84 public static YearMonthDayDateCalculator modifiedPrecedingCalculator(final String name) {
85 return DEFAULT.getDateCalculator(name, HolidayHandlerType.MODIFIED_PRECEDING);
86 }
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 public YearMonthDayDateCalculator getDateCalculator(final String name, final String holidayHandlerType) {
109 if (name == null) {
110 throw new IllegalArgumentException("name cannot be null, use anything.");
111 }
112 final YearMonthDayDateCalculator cal = new YearMonthDayDateCalculator();
113 cal.setName(name);
114 setHolidays(name, cal);
115
116 if (FORWARD.equals(holidayHandlerType)) {
117 cal.setHolidayHandler(new YearMonthDayForwardHandler());
118 } else if (BACKWARD.equals(holidayHandlerType)) {
119 cal.setHolidayHandler(new YearMonthDayBackwardHandler());
120 } else if (MODIFIED_FOLLOWING.equals(holidayHandlerType)) {
121 cal.setHolidayHandler(new YearMonthDayModifiedFollowingHandler());
122 } else if (MODIFIED_PRECEDING.equals(holidayHandlerType)) {
123 cal.setHolidayHandler(new YearMonthDayModifiedPrecedingHandler());
124 } else if (FORWARD_UNLESS_MOVING_BACK.equals(holidayHandlerType)) {
125 cal.setHolidayHandler(new YearMonthDayForwardUnlessNegativeHandler());
126 } else if (holidayHandlerType != null) {
127 throw new IllegalArgumentException("Unsupported HolidayHandler: " + holidayHandlerType);
128 }
129 return cal;
130 }
131
132 public PeriodCountCalculator<YearMonthDay> getPeriodCountCalculator() {
133 return PCC;
134 }
135
136 public IMMDateCalculator<YearMonthDay> getIMMDateCalculator() {
137 return IMMDC;
138 }
139 }
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156