package se.unlogic.eagledns.utils;
import java.util.ArrayList;
import java.util.Collection;
import javax.sql.DataSource;
import org.xbill.DNS.Zone;
import se.unlogic.eagledns.zoneproviders.db.beans.DBRecord;
import se.unlogic.eagledns.zoneproviders.db.beans.DBZone;
import se.unlogic.eagledns.zoneproviders.file.FileZoneProvider;
import se.unlogic.standardutils.dao.AnnotatedDAO;
import se.unlogic.standardutils.dao.SimpleAnnotatedDAOFactory;
import se.unlogic.standardutils.dao.SimpleDataSource;
import se.unlogic.standardutils.dao.TransactionHandler;
public class PrimaryZones2DB {
public static void main(String[] args) throws Throwable{
if(args.length != 5){
System.out.println("Usage: PrimaryZones2DB zonedir driver url username password");
}else{
importZones(args[0], args[1], args[2], args[3], args[4]);
}
}
public static void importZones(String directory, String driver, String url, String username, String password) throws Throwable {
FileZoneProvider fileZoneProvider = new FileZoneProvider();
fileZoneProvider.setZoneFileDirectory(directory);
Collection<Zone> zones = fileZoneProvider.getPrimaryZones();
ArrayList<DBZone> dbZones = new ArrayList<DBZone>();
for(Zone zone : zones){
System.out.println("Converting zone " + zone.getSOA().getName().toString() + "...");
dbZones.add(new DBZone(zone,false));
}
DataSource dataSource = new SimpleDataSource(driver, url, username, password);
SimpleAnnotatedDAOFactory annotatedDAOFactory = new SimpleAnnotatedDAOFactory();
AnnotatedDAO<DBZone> zoneDAO = new AnnotatedDAO<DBZone>(dataSource,DBZone.class, annotatedDAOFactory);
AnnotatedDAO<DBRecord> recordDAO = new AnnotatedDAO<DBRecord>(dataSource,DBRecord.class, annotatedDAOFactory);
TransactionHandler transactionHandler = zoneDAO.createTransaction();
try{
for(DBZone zone : dbZones){
System.out.println("Storing zone " + zone + "...");
zoneDAO.add(zone, transactionHandler, null);
for(DBRecord dbRecord : zone.getRecords()){
System.out.println("Storing record " + dbRecord + "...");
dbRecord.setZone(zone);
recordDAO.add(dbRecord, transactionHandler, null);
}
}
transactionHandler.commit();
}catch(Throwable e){
transactionHandler.abort();
throw e;
}
}
}