package info.freelibrary.djatoka.view; import info.freelibrary.djatoka.Constants; import info.freelibrary.util.FileUtils; import info.freelibrary.util.RegexFileFilter; import java.io.File; import java.io.FileOutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import nu.xom.Attribute; import nu.xom.Document; import nu.xom.Element; import nu.xom.Serializer; public class StatsCompilation implements Constants { private static final Logger LOGGER = LoggerFactory .getLogger(StatsCompilation.class); private String myJP2sSize; private String myJP2sCount; private String myTIFsSize; private String myTIFsCount; public StatsCompilation(File aTIFDir, File aJP2Dir) { RegexFileFilter jp2Pattern = new RegexFileFilter(JP2_FILE_PATTERN); RegexFileFilter tifPattern = new RegexFileFilter(TIFF_FILE_PATTERN); long jp2CountLong = 0; long tifCountLong = 0; if (!aJP2Dir.exists() && !aJP2Dir.mkdirs() && LOGGER.isWarnEnabled()) { LOGGER.warn("Couldn't create requested JP2 directory: {}", aJP2Dir); } try { File[] jp2Files = FileUtils.listFiles(aJP2Dir, jp2Pattern, true); File[] tifFiles = FileUtils.listFiles(aTIFDir, tifPattern, true); // These two just count the size of the files, not directories for (File file : jp2Files) { jp2CountLong += file.length(); } for (File file : tifFiles) { tifCountLong += file.length(); } myJP2sSize = FileUtils.sizeFromBytes(jp2CountLong, true); myTIFsSize = FileUtils.sizeFromBytes(tifCountLong, true); myJP2sCount = Integer.toString(jp2Files.length); myTIFsCount = Integer.toString(tifFiles.length); if (LOGGER.isDebugEnabled()) { String[] tifStats = new String[] { myTIFsCount, myTIFsSize }; String[] jp2Stats = new String[] { myJP2sCount, myJP2sSize }; LOGGER.debug("TIF file count (size): {} ({})", tifStats); LOGGER.debug("JP2 file count (size): {} ({})", jp2Stats); } } catch (Exception details) { if (LOGGER.isErrorEnabled()) { LOGGER.error(details.getMessage(), details); } } } public void save(File aStatsFile) { try { FileOutputStream outStream = new FileOutputStream(aStatsFile); Serializer serializer = new Serializer(outStream); Element root = new Element("djatoka"); Element jp2Elem = new Element("jp2s"); Element tifElem = new Element("tifs"); jp2Elem.addAttribute(new Attribute(JP2_SIZE_ATTR, myJP2sSize)); jp2Elem.addAttribute(new Attribute(JP2_COUNT_ATTR, myJP2sCount)); tifElem.addAttribute(new Attribute(TIF_SIZE_ATTR, myTIFsSize)); tifElem.addAttribute(new Attribute(TIF_COUNT_ATTR, myTIFsCount)); root.appendChild(jp2Elem); root.appendChild(tifElem); serializer.write(new Document(root)); } catch (Exception details) { if (LOGGER.isErrorEnabled()) { LOGGER.error(details.getMessage(), details); } } } public String getJP2sSize() { return myJP2sSize; } public String getJP2sCount() { return myJP2sCount; } public String getTIFsSize() { return myTIFsSize; } public String getTIFsCount() { return myTIFsCount; } }