/*
** 2012 June 7
**
** The author disclaims copyright to this source code. In place of
** a legal notice, here is a blessing:
** May you do good and not evil.
** May you find forgiveness for yourself and forgive others.
** May you share freely, never taking more than you give.
*/
package info.ata4.bspinfo.gui;
import info.ata4.bsplib.BspFile;
import info.ata4.bsplib.lump.GameLump;
import info.ata4.bsplib.lump.Lump;
import info.ata4.bsplib.lump.LumpType;
import info.ata4.log.LogUtils;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.FileUtils;
/**
*
* @author Nico Bergemann <barracuda415 at yahoo.de>
*/
public class BspFileUtils {
private static final Logger L = LogUtils.getLogger();
private BspFileUtils() {
}
static void extractLump(BspFile bspFile, File destDir, LumpType type) throws IOException {
FileUtils.forceMkdir(destDir);
List<Lump> lumps = bspFile.getLumps();
for (Lump lump : lumps) {
if (type != null && lump.getType() != type) {
continue;
}
String fileName = String.format("%02d_%s.bin", lump.getIndex(),
lump.getName());
File lumpFile = new File(destDir, fileName);
L.log(Level.INFO, "Extracting {0}", lump);
try {
InputStream is = lump.getInputStream();
FileUtils.copyInputStreamToFile(is, lumpFile);
} catch (IOException ex) {
throw new BspFileException("Can't extract lump", ex);
}
}
}
public static void extractLumps(BspFile bspFile, File destDir) throws IOException {
extractLump(bspFile, destDir, null);
}
static void extractGameLump(BspFile bspFile, File destDir, String type) throws IOException {
FileUtils.forceMkdir(destDir);
List<GameLump> gameLumps = bspFile.getGameLumps();
for (GameLump gameLump : gameLumps) {
if (type != null && !gameLump.getName().equalsIgnoreCase(type)) {
continue;
}
String fileName = String.format("%s_v%d.bin", gameLump.getName(), gameLump.getVersion());
File lumpFile = new File(destDir, fileName);
L.log(Level.INFO, "Extracting {0}", gameLump);
try {
InputStream is = gameLump.getInputStream();
FileUtils.copyInputStreamToFile(is, lumpFile);
} catch (IOException ex) {
throw new BspFileException("Can't extract lump", ex);
}
}
}
public static void extractGameLumps(BspFile bspFile, File destDir) throws IOException {
extractGameLump(bspFile, destDir, null);
}
}