/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package project.latex.balloon.writer;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import project.latex.balloon.DataFolderResource;
import project.latex.balloon.TransmittedDataKeysResource;
/**
*
* @author dgorst
*/
public class FileDataWriter implements DataWriter {
private final Logger logger;
private final DataModelConverter converter;
final static String fileName = "dataModel.csv";
private final List<String> dataKeys;
private FileAppender fileAppender;
public FileDataWriter(List<String> dataKeys, DataModelConverter converter, Logger logger, FileAppender fileAppender) {
this.logger = logger;
this.fileAppender = fileAppender;
this.logger.addAppender(this.fileAppender);
this.converter = converter;
this.dataKeys = dataKeys;
writeHeaders();
}
public FileDataWriter(DataFolderResource dataFolderResource, TransmittedDataKeysResource transmittedDataKeysResource, DataModelConverter converter) {
this(transmittedDataKeysResource.getTransmittedDataKeys(), converter, Logger.getLogger(FileDataWriter.class),
createFileAppender(dataFolderResource.getDataFolder()));
}
private static FileAppender createFileAppender(File dataFolder) {
String filePath = fileName;
if (dataFolder != null) {
filePath = dataFolder.getPath() + File.separator + fileName;
}
FileAppender fileAppender = new FileAppender();
fileAppender.setName("FileLogger");
fileAppender.setFile(filePath);
fileAppender.setLayout(new PatternLayout("%m%n"));
fileAppender.setThreshold(Level.INFO);
fileAppender.setAppend(true);
fileAppender.activateOptions();
return fileAppender;
}
private void writeHeaders() {
logger.info(this.converter.convertDataKeysToCsvString(this.dataKeys));
}
@Override
public void writeData(Map<String, Object> data) {
logger.info(this.converter.convertDataToCsvString(this.dataKeys, data));
}
public void closeAndDeleteFile() throws IOException {
String filePath = fileAppender.getFile();
fileAppender.close();
File file = new File(filePath);
if (!file.delete()) {
throw new IOException("Unable to delete file: " + filePath);
}
}
}