package com.robonobo.wang.server.utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.BasicConfigurator;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
import com.robonobo.wang.client.LucreFacade;
import com.robonobo.wang.server.dao.DenominationDao;
public class CreateDenoms {
private static final int KEY_LENGTH = 512;
private static void usage() {
System.err.println("Usage: CreateDenoms [list of denoms]");
System.exit(1);
}
public static void main(String[] args) throws Exception {
if (args.length == 0)
usage();
// Parse args into denominations
final int[] denoms = new int[args.length];
try {
for (int i = 0; i < args.length; i++) {
denoms[i] = Integer.parseInt(args[i]);
}
} catch (NumberFormatException e) {
usage();
}
// Bring up log4j so we can see what we're doing
BasicConfigurator.configure();
final Log log = LogFactory.getLog(CreateDenoms.class);
// Initialize spring and get our beans
ApplicationContext appContext = new FileSystemXmlApplicationContext("appContext.xml");
PlatformTransactionManager ptm = (PlatformTransactionManager) appContext.getBean("transactionManager");
TransactionTemplate transTemplate = new TransactionTemplate(ptm);
final DenominationDao denomDao = (DenominationDao) appContext.getBean("denominationDao");
final LucreFacade lucre = new LucreFacade();
// Do everything inside a transaction
transTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus ts) {
try {
log.info("Deleting all denoms");
denomDao.deleteAllDenoms();
for (int i = 0; i < denoms.length; i++) {
log.info("Creating denom " + denoms[i]);
denomDao.putDenom(lucre.createDenomination(denoms[i], KEY_LENGTH));
}
log.info("Done.");
} catch (Exception e) {
// By default, the transactiontemplate only rolls back for RuntimeExceptions, and I can't figure out
// how to change this...
throw new RuntimeException(e);
}
}
});
}
}