package com.doesthatevencompile.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;


public class ASCIIFile {

	private File file;
	private StringBuilder builder;

	public ASCIIFile(String path) throws IOException{
		file = new File(path);
		openFile();
	}
	public ASCIIFile(File file) throws IOException{
		this.file = file;
		openFile();
	}
	public void setNewFileName(String fileName){
		file = new File(file.getAbsolutePath(), fileName);
	}
	public void setNewFilePath(String filePath){
		file = new File(filePath, file.getName());
	}
	private void openFile() throws IOException{
		if(!file.exists()) file.createNewFile();
		BufferedReader read = new BufferedReader(new FileReader(file));
		String line = read.readLine();
		builder = new StringBuilder();
		while(line != null){
			builder.append(line);
			builder.append("\n");
			line = read.readLine();
		}
		read.close();
	}

	public String getContents(){
		return builder.toString();
	}
	public StringBuilder getStringBuilder(){
		return builder;
	}
	public void setStringBuilder(StringBuilder b) throws IOException{
		setContents(b.toString());
	}

	public void setContents(String contents) throws IOException{
		FileWriter writer = new FileWriter(file);
		writer.write(contents);
		writer.flush();
		writer.close();
		builder = new StringBuilder(contents);
	}
	public static File[] getAllFilesUnderDir(String fullpath, boolean recursive) {
		ArrayList queue = new ArrayList(10);
		ArrayList matched = new ArrayList();
		File root = new File(fullpath);
		File[] files = root.listFiles();
		if (files == null || files.length == 0) {
			return new File[] {};
		}
		queue.addAll(Arrays.asList(files));
		for (int j = 0; j < queue.size(); j++) {
			File child = (File) queue.get(j);
			if (child.isDirectory() && recursive) {
				files = child.listFiles();
				if (files != null) {
					queue.addAll(Arrays.asList(files));
				}
			} else { // child is file
				matched.add(child);
			}
		}
		return (matched.size() > 0)?((File[]) matched.toArray(new File[] {})):(new File[] {});
	}

}