All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.invation.code.toval.file.LineBasedFileTransformer Maven / Gradle / Ivy

package de.invation.code.toval.file;

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import de.invation.code.toval.validate.ParameterException;
import de.invation.code.toval.validate.Validate;


public class LineBasedFileTransformer {
	
	protected Charset inputCharset = Charset.forName("UTF-8");
	protected Charset outputCharset = Charset.forName("UTF-8");

	protected boolean omitFirstLine = false;

	protected FileReader input = null;
	protected FileWriter output = null;
	
	private String fileExtension = null;
	
	private int inputLines = 0;
	private int outputLines = 0;
	
	
	//------- Constructors -------------------------------------------------------------------
	
	public LineBasedFileTransformer(){}
	
	public LineBasedFileTransformer(Charset charset) throws ParameterException{
		this(charset, charset);
	}
	
	public LineBasedFileTransformer(Charset inputCharset, Charset outputCharset) throws ParameterException{
		Validate.notNull(inputCharset);
		Validate.notNull(outputCharset);
		this.inputCharset = inputCharset;
		this.outputCharset = outputCharset;
	}
	
	
	//------- Getters and Setters ------------------------------------------------------------
	
	public String getInputCharset(){
		return inputCharset.toString();
	}
	
	public String getOutputCharset(){
		return inputCharset.toString();
	}
	
	public boolean omitsFirstLine(){
		return omitFirstLine;
	}
	
	public void setOmitFirstLine(boolean omitFirstLine){
		this.omitFirstLine = omitFirstLine;
	}
	
	public String getFileExtension(){
		return fileExtension;
	}
	
	public void setFileExtension(String extension){
		this.fileExtension = extension;
	}
	
	protected String getHeaderLine() {
		return null;
	}
	
	public int getInputLines() {
		return inputLines;
	}

	public int getOutputLines() {
		return outputLines;
	}
	
	//------- Methods for setting up the parser ----------------------------------------------

	protected synchronized void initialize(String fileName) throws IOException, ParameterException {
		Validate.notNull(fileName, "File Name must not be null");
		input = new FileReader(fileName, inputCharset);
		String inputName = input.getFile().getAbsolutePath();
		String outputFileName = inputName.substring(0, inputName.indexOf('.'))+"_output";
		output = new FileWriter(outputFileName, outputCharset);
		if(fileExtension != null){
			output.setFileExtension(getFileExtension());
		}
	}
		
	
	public void parseFile(String fileName) throws IOException, ParameterException{
		initialize(fileName);
		
		String headerLine = getHeaderLine();
		if(headerLine != null)
			output.writeLine(headerLine);
		
		String line = null;
		int lineCount = 0;
		while ((line = input.readLine()) != null) {
			if(lineCount == 0 && omitFirstLine){
				lineCount++;
				continue;
			} else {
				writeOutputLine(line);
				lineCount++;
			}
			if(!continueParsing(lineCount))
				break;
		}
		inputLines = lineCount;
		input.closeFile();
		output.closeFile();
	}

	protected boolean continueParsing(int lineCount){
		return true;
	}
	
	private synchronized void writeOutputLine(String outputLine) throws IOException{
		Set lines = transformLine(outputLine);
		if(lines == null || lines.isEmpty())
			return;
		for(String line: lines){
			output.writeLine(line);
			outputLines++;
		}
		
	}
	
	protected synchronized Set transformLine(String line){
		return new HashSet(Arrays.asList(line));
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy