package net.objectlab.kit.datecalc.gist; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import net.objectlab.kit.datecalc.common.IMMDateCalculator; import net.objectlab.kit.datecalc.common.Tenor; import net.objectlab.kit.datecalc.common.TenorCode; import net.objectlab.kit.datecalc.joda.LocalDateCalculator; import net.objectlab.kit.datecalc.joda.LocalDateKitCalculatorsFactory; import org.joda.time.LocalDate; public class GistIMMCalculatorExample { private final LocalDateCalculator dateCalculator = LocalDateKitCalculatorsFactory.forwardCalculator("hi"); private final IMMDateCalculator<LocalDate> immDateCalculator = LocalDateKitCalculatorsFactory.getDefaultInstance().getIMMDateCalculator(); public static void main(final String[] args) { GistIMMCalculatorExample ex = new GistIMMCalculatorExample(); ex.getIMMDates(); ex.getNewIMMDates(); } /** * Using new method which returns the next N IMM Dates * @return */ private Map<String, LocalDate> getNewIMMDates() { final LocalDate tradeDate = new LocalDate(2014, 9, 12); dateCalculator.setStartDate(tradeDate); final LocalDate startDate = dateCalculator.moveByBusinessDays(3).getCurrentBusinessDate(); final List<LocalDate> immDates = immDateCalculator.getNextIMMDates(startDate, 8); final LinkedHashMap<String, LocalDate> map = new LinkedHashMap<String, LocalDate>(); int ctr = 1; for (final LocalDate immDate : immDates) { final StringBuilder immKey = new StringBuilder("IMM").append(ctr++); map.put(immKey.toString(), immDate); } System.out.println("getNewIMMDates " + map); return map; } private Map<String, LocalDate> getIMMDates() { final LocalDate tradeDate = new LocalDate(2014, 9, 12); dateCalculator.setStartDate(tradeDate); final LocalDate startDate = dateCalculator.moveByBusinessDays(3).getCurrentBusinessDate(); final LocalDate fwdDate = dateCalculator.moveByTenor(new Tenor(27, TenorCode.MONTH), 0).getCurrentBusinessDate(); System.out.println("Start:" + startDate.toString("E dd-MMM-yyyy") + " End:" + fwdDate.toString("E dd-MMM-yyyy")); final List<LocalDate> immDates = immDateCalculator.getIMMDates(startDate, fwdDate); final LinkedHashMap<String, LocalDate> map = new LinkedHashMap<String, LocalDate>(); int ctr = 1; for (final LocalDate immDate : immDates) { final StringBuilder immKey = new StringBuilder("IMM").append(ctr++); map.put(immKey.toString(), immDate); if (ctr >= 9) { // Only want IMM1 thru to IMM8 being published break; } } System.out.println("getIMMDates " + map); return map; } }