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.jdk;
34
35 import static net.objectlab.kit.datecalc.common.HolidayHandlerType.BACKWARD;
36 import static net.objectlab.kit.datecalc.common.HolidayHandlerType.FORWARD_UNLESS_MOVING_BACK;
37 import static net.objectlab.kit.datecalc.common.HolidayHandlerType.MODIFIED_FOLLOWING;
38 import static net.objectlab.kit.datecalc.common.HolidayHandlerType.MODIFIED_PRECEDING;
39
40 import java.util.Calendar;
41
42 import net.objectlab.kit.datecalc.common.AbstractKitCalculatorsFactory;
43 import net.objectlab.kit.datecalc.common.CurrencyDateCalculatorBuilder;
44 import net.objectlab.kit.datecalc.common.HolidayHandler;
45 import net.objectlab.kit.datecalc.common.HolidayHandlerType;
46 import net.objectlab.kit.datecalc.common.IMMDateCalculator;
47 import net.objectlab.kit.datecalc.common.PeriodCountCalculator;
48 import net.objectlab.kit.datecalc.common.SpotLag;
49
50
51
52
53
54
55
56
57 public class CalendarKitCalculatorsFactory extends AbstractKitCalculatorsFactory<Calendar> {
58
59 private static final CalendarKitCalculatorsFactory DEFAULT = new CalendarKitCalculatorsFactory();
60
61 private static final PeriodCountCalculator<Calendar> PCC = new CalendarPeriodCountCalculator();
62
63 private static final CalendarIMMDateCalculator IMMDC = new CalendarIMMDateCalculator();
64
65 public static CalendarKitCalculatorsFactory getDefaultInstance() {
66 return DEFAULT;
67 }
68
69
70
71
72
73
74
75
76 public CurrencyDateCalculatorBuilder<Calendar> getDefaultCurrencyDateCalculatorBuilder(final String ccy1, final String ccy2, final SpotLag spotLag) {
77 final CurrencyDateCalculatorBuilder<Calendar> builder = new CurrencyDateCalculatorBuilder<Calendar>().currencyPair(ccy1, ccy2, spotLag);
78
79 return configureCurrencyCalculatorBuilder(builder).tenorHolidayHandler(new CalendarModifiedFollowingHandler());
80 }
81
82 public static CurrencyDateCalculatorBuilder<Calendar> defaultCurrencyDateCalculatorBuilder(final String ccy1, final String ccy2,
83 final SpotLag spotLag) {
84 return DEFAULT.getDefaultCurrencyDateCalculatorBuilder(ccy1, ccy2, spotLag);
85 }
86
87 public CalendarCurrencyDateCalculator buildCurrencyDateCalculator(final CurrencyDateCalculatorBuilder<Calendar> builder) {
88 return new CalendarCurrencyDateCalculator(builder);
89 }
90
91 public static CalendarCurrencyDateCalculator forwardCurrencyDateCalculator(final String ccy1, final String ccy2, final SpotLag spotLag) {
92 return DEFAULT.getDefaultCurrencyDateCalculator(ccy1, ccy2, spotLag);
93 }
94
95 public CalendarCurrencyDateCalculator getDefaultCurrencyDateCalculator(final String ccy1, final String ccy2, final SpotLag spotLag) {
96 return new CalendarCurrencyDateCalculator(getDefaultCurrencyDateCalculatorBuilder(ccy1, ccy2, spotLag));
97 }
98
99 public static CalendarDateCalculator forwardCalculator(final String name) {
100 return DEFAULT.getDateCalculator(name, HolidayHandlerType.FORWARD);
101 }
102
103 public static CalendarDateCalculator backwardCalculator(final String name) {
104 return DEFAULT.getDateCalculator(name, HolidayHandlerType.BACKWARD);
105 }
106
107 public static CalendarDateCalculator forwardUnlessMovingBackCalculator(final String name) {
108 return DEFAULT.getDateCalculator(name, HolidayHandlerType.FORWARD_UNLESS_MOVING_BACK);
109 }
110
111 public static CalendarDateCalculator modifiedFollowingCalculator(final String name) {
112 return DEFAULT.getDateCalculator(name, HolidayHandlerType.MODIFIED_FOLLOWING);
113 }
114
115 public static CalendarDateCalculator modifiedPrecedingCalculator(final String name) {
116 return DEFAULT.getDateCalculator(name, HolidayHandlerType.MODIFIED_PRECEDING);
117 }
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132 public CalendarDateCalculator getDateCalculator(final String name, final String holidayHandlerType) {
133 final CalendarDateCalculator cal = new CalendarDateCalculator();
134 cal.setName(name);
135 setHolidays(name, cal);
136 if (holidayHandlerType != null) {
137 cal.setHolidayHandler(getHolidayHandler(holidayHandlerType));
138 }
139 return cal;
140 }
141
142 public HolidayHandler<Calendar> getHolidayHandler(final String holidayHandlerType) {
143 if (HolidayHandlerType.FORWARD.equals(holidayHandlerType)) {
144 return new CalendarForwardHandler();
145 } else if (BACKWARD.equals(holidayHandlerType)) {
146 return new CalendarBackwardHandler();
147 } else if (MODIFIED_FOLLOWING.equals(holidayHandlerType)) {
148 return new CalendarModifiedFollowingHandler();
149 } else if (MODIFIED_PRECEDING.equals(holidayHandlerType)) {
150 return new CalendarModifiedPrecedingHandler();
151 } else if (FORWARD_UNLESS_MOVING_BACK.equals(holidayHandlerType)) {
152 return new CalendarForwardUnlessNegativeHandler();
153 } else if (holidayHandlerType != null) {
154 throw new IllegalArgumentException("Unsupported HolidayHandler: " + holidayHandlerType);
155 }
156 return null;
157 }
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172 public PeriodCountCalculator<Calendar> getPeriodCountCalculator() {
173 return PCC;
174 }
175
176
177
178
179
180
181 public IMMDateCalculator<Calendar> getIMMDateCalculator() {
182 return IMMDC;
183 }
184 }
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201