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