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.Date;
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 public class DateKitCalculatorsFactory extends AbstractKitCalculatorsFactory<Date> {
57
58 private static final DateKitCalculatorsFactory DEFAULT = new DateKitCalculatorsFactory();
59
60 private static final PeriodCountCalculator<Date> PCC = new DatePeriodCountCalculator();
61
62 private static final DateIMMDateCalculator IMMDC = new DateIMMDateCalculator();
63
64 public static DateKitCalculatorsFactory getDefaultInstance() {
65 return DEFAULT;
66 }
67
68
69
70
71
72
73
74
75 public CurrencyDateCalculatorBuilder<Date> getDefaultCurrencyDateCalculatorBuilder(final String ccy1, final String ccy2, final SpotLag spotLag) {
76 final CurrencyDateCalculatorBuilder<Date> builder = new CurrencyDateCalculatorBuilder<Date>().currencyPair(ccy1, ccy2, spotLag);
77
78 return configureCurrencyCalculatorBuilder(builder).tenorHolidayHandler(new DateModifiedFollowingHandler());
79 }
80
81 public static CurrencyDateCalculatorBuilder<Date> defaultCurrencyDateCalculatorBuilder(final String ccy1, final String ccy2, final SpotLag spotLag) {
82 return DEFAULT.getDefaultCurrencyDateCalculatorBuilder(ccy1, ccy2, spotLag);
83 }
84
85 public DateCurrencyDateCalculator buildCurrencyDateCalculator(final CurrencyDateCalculatorBuilder<Date> builder) {
86 return new DateCurrencyDateCalculator(builder);
87 }
88
89 public static DateCurrencyDateCalculator forwardCurrencyDateCalculator(final String ccy1, final String ccy2, final SpotLag spotLag) {
90 return DEFAULT.getDefaultCurrencyDateCalculator(ccy1, ccy2, spotLag);
91 }
92
93 public DateCurrencyDateCalculator getDefaultCurrencyDateCalculator(final String ccy1, final String ccy2, final SpotLag spotLag) {
94 return new DateCurrencyDateCalculator(DEFAULT.getDefaultCurrencyDateCalculatorBuilder(ccy1, ccy2, spotLag));
95 }
96
97 public static DateDateCalculator forwardCalculator(final String name) {
98 return DEFAULT.getDateCalculator(name, HolidayHandlerType.FORWARD);
99 }
100
101 public static DateDateCalculator backwardCalculator(final String name) {
102 return DEFAULT.getDateCalculator(name, HolidayHandlerType.BACKWARD);
103 }
104
105 public static DateDateCalculator forwardUnlessMovingBackCalculator(final String name) {
106 return DEFAULT.getDateCalculator(name, HolidayHandlerType.FORWARD_UNLESS_MOVING_BACK);
107 }
108
109 public static DateDateCalculator modifiedFollowingCalculator(final String name) {
110 return DEFAULT.getDateCalculator(name, HolidayHandlerType.MODIFIED_FOLLOWING);
111 }
112
113 public static DateDateCalculator modifiedPrecedingCalculator(final String name) {
114 return DEFAULT.getDateCalculator(name, HolidayHandlerType.MODIFIED_PRECEDING);
115 }
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 public DateDateCalculator getDateCalculator(final String name, final String holidayHandlerType) {
132 final DateDateCalculator cal = new DateDateCalculator();
133 cal.setName(name);
134 setHolidays(name, cal);
135
136 cal.setHolidayHandler(getHolidayHandler(holidayHandlerType));
137
138 return cal;
139 }
140
141 public HolidayHandler<Date> getHolidayHandler(final String holidayHandlerType) {
142 if (HolidayHandlerType.FORWARD.equals(holidayHandlerType)) {
143 return new DateForwardHandler();
144 } else if (BACKWARD.equals(holidayHandlerType)) {
145 return new DateBackwardHandler();
146 } else if (MODIFIED_FOLLOWING.equals(holidayHandlerType)) {
147 return new DateModifiedFollowingHandler();
148 } else if (MODIFIED_PRECEDING.equals(holidayHandlerType)) {
149 return new DateModifiedPreceedingHandler();
150 } else if (FORWARD_UNLESS_MOVING_BACK.equals(holidayHandlerType)) {
151 return new DateForwardUnlessNegativeHandler();
152 } else if (holidayHandlerType != null) {
153 throw new IllegalArgumentException("Unsupported HolidayHandler: " + holidayHandlerType);
154 }
155 return null;
156 }
157
158
159
160
161
162
163 public PeriodCountCalculator<Date> getPeriodCountCalculator() {
164 return PCC;
165 }
166
167 public IMMDateCalculator<Date> getIMMDateCalculator() {
168 return IMMDC;
169 }
170 }
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187