/**
*
*/
package com.hsbc.team.fantasy8.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author 34028450
*
*/
public final class BalanceString {
private final static long DAY_IN_MILLISEC = 86400000;
private final static char LEFT_BRACKET = '[';
private final static char RIGHT_BRACKET = ']';
private final static char COMMA = ',';
private static SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
private BalanceString() {
}
public static String getBalanceString(String startDateString, String endDateString, Double startDateBalance, Map maturityAmountMap) throws ParseException {
double accumulateBalance = startDateBalance.doubleValue();
StringBuffer sb = new StringBuffer();
sb.append(LEFT_BRACKET);
// Convert dates
Date startDate = sdf.parse(startDateString);
long startDateTime = startDate.getTime();
sb.append(LEFT_BRACKET);
sb.append(startDateTime);
sb.append(COMMA);
sb.append(startDateBalance);
sb.append(RIGHT_BRACKET);
sb.append(COMMA);
Date endDate = sdf.parse(endDateString);
long endDateTime =endDate.getTime();
// Loop the dates from start date to end date, and accumulate the balance
for (long i = startDateTime + DAY_IN_MILLISEC; i <= endDateTime; i = i + DAY_IN_MILLISEC) {
Date tmpDate = new Date(i);
String tmpDateString = sdf.format(tmpDate);
if (maturityAmountMap.containsKey(tmpDateString)) {
Double matureAmount = maturityAmountMap.get(tmpDateString);
accumulateBalance = accumulateBalance + matureAmount;
}
// Construct the String
sb.append(LEFT_BRACKET);
sb.append(tmpDate.getTime());
sb.append(COMMA);
sb.append(accumulateBalance);
sb.append(RIGHT_BRACKET);
if (i != endDateTime) {
sb.append(COMMA);
}
}
sb.append(RIGHT_BRACKET);
return sb.toString();
}
/**
* @param args
*/
public static void main(String[] args) {
String startDateString = "08/01/2012";
String endDateString = "9/08/2012";
Double startDateBalance = new Double("160.3423324324325");
// Dummy data
java.util.Random randomGen = new java.util.Random();
Map maturityAmountMap = new HashMap(1000);
Date dummyDate = null;
try {
dummyDate = sdf.parse("08/01/2010");
} catch (ParseException e1) {
e1.printStackTrace();
}
long dummyDateTime = dummyDate.getTime();
for (long i = dummyDateTime + DAY_IN_MILLISEC; i <= dummyDateTime + 1000 * DAY_IN_MILLISEC; i = i + DAY_IN_MILLISEC) {
Date tmpDate = new Date(i);
String dateString = sdf.format(tmpDate);
Double amountTmp = new Double(randomGen.nextDouble()*1000);
maturityAmountMap.put(dateString, amountTmp);
System.out.println(tmpDate + " : " + amountTmp);
}
try {
String s = getBalanceString(startDateString, endDateString, startDateBalance, maturityAmountMap);
System.out.println(s);
} catch (ParseException e) {
e.printStackTrace();
}
}
}