package de.linwave.junit;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.logging.Logger;
import java.util.zip.GZIPInputStream;
import org.odbms.ObjectContainer;
import de.linwave.gtm.GTM;
import freedb.Disc;
/**
*
* @author ljoeckel
*
*/
public class SetupFreeDB
{
private static Logger logger = Logger.getLogger(SetupFreeDB.class.getName());
static ObjectContainer db = GTM.getInstance();
public SetupFreeDB() {
}
/**
*
* @return
*/
public static int loadDB()
{
String tgzFile = "freedb_blues.tgz";
int cnt = new SetupFreeDB().loadFreeDBDataFromTGZ(tgzFile);
logger.info("Loaded " + cnt + " discs from " + tgzFile);
return cnt;
}
/**
*
* @param tgzName
* @return
*/
private int loadFreeDBDataFromTGZ(String tgzName)
{
db.deleteClass(Disc.class);
int cnt = 0;
try {
GZIPInputStream gzipInputStream = new GZIPInputStream(new FileInputStream(tgzName));
LineNumberReader rd = new LineNumberReader(new InputStreamReader(gzipInputStream));
StringBuilder disc = new StringBuilder();
String line = null;
File freedbFile = null;
String discId = null;
while ((line = rd.readLine()) != null) {
if (rd.getLineNumber() == 1)
continue;
if (line.charAt(0) == 0) {
try {
FileWriter fw = new FileWriter(discId);
fw.write(disc.toString());
fw.close();
freedbFile = new File(discId);
db.store(new Disc(freedbFile));
} catch (Exception ex) {
logger.severe(ex.getMessage());
}
deleteFile(freedbFile);
cnt++;
disc = new StringBuilder();
continue;
}
if (line.startsWith("DISCID=")) {
discId = line.substring("DISCID=".length());
}
disc.append(line).append("\n");
}
} catch (Exception ex) {
ex.printStackTrace();
}
return cnt;
}
private void deleteFile(File file)
{
if (!file.delete()) {
logger.severe("Could not remove " + file);
}
}
}