package org.basex.server; import java.io.*; import org.basex.io.*; import org.basex.io.in.*; import org.basex.util.list.*; /** * Log file instance. * * @author BaseX Team 2005-17, BSD License * @author Christian Gruen */ public final class LogFile { /** File reference. */ final IOFile file; /** Output stream. */ FileOutputStream fos; /** * Creates a new writable log file for the specified date. * @param name name of log file * @param dir log directory * @return log file * @throws IOException I/O exception */ public static LogFile create(final String name, final IOFile dir) throws IOException { final LogFile lf = new LogFile(name, dir); dir.md(); lf.fos = new FileOutputStream(lf.file.file(), true); return lf; } /** * Constructor. * @param name name of log file * @param dir log directory */ LogFile(final String name, final IOFile dir) { file = new IOFile(dir, name + IO.LOGSUFFIX); } /** * Indicates if this is the current log file. * @return result of check */ public boolean current() { return fos != null; } /** * Returns the entries of the specified log file. * @return log entries * @throws IOException I/O exception */ public StringList read() throws IOException { synchronized(file) { final StringList list = new StringList(); try(NewlineInput nli = new NewlineInput(file)) { for(String line; (line = nli.readLine()) != null;) list.add(line); } return list; } } /** * Deletes the specified log file. * @return result of check */ public boolean delete() { synchronized(file) { return file.delete(); } } /** * Checks if the specified log file exists. * @return result of check */ boolean exists() { synchronized(file) { return file.exists(); } } /** * Writes new line to the log file. * @param line line to be written * @throws IOException I/O exception */ void write(final byte[] line) throws IOException { synchronized(file) { fos.write(line); fos.flush(); } } /** * Closes the current log file. * @throws IOException I/O exception */ void close() throws IOException { synchronized(file) { if(fos != null) { fos.close(); fos = null; } } } /** * Checks if the log file is still valid. * @param name name of log file * @return result of check */ boolean sameAs(final String name) { return file.name().equals(name + IO.LOGSUFFIX); } }