// Path: src/java/main/br/ufpe/cin/groundhog/codehistory/UnsupportedForgeException.java
// public class UnsupportedForgeException extends GroundhogException {
// 	private static final long serialVersionUID = 1L;
// 
// 	public UnsupportedForgeException(String msg) {
// 		super(msg);
// 	}
// }
// 
// Path: src/java/main/br/ufpe/cin/groundhog/parser/java/formater/CSVFormater.java
// public class CSVFormater extends Formater {
// 
// 	@Override
// 	public String format(HashMap<String, HashMap<String, MutableInt>> object) {
// 		StringWriter result = new StringWriter();
// 		try {
// 			CSVWriter writer = new CSVWriter(result, ';');
// 			writer.writeNext(new String[] { "Metric", "Entry", "Value" });
// 			for (String metric : object.keySet()) {
// 				HashMap<String, MutableInt> counter = object.get(metric);
// 				for (Entry<String, MutableInt> entry : counter.entrySet()) {
// 					writer.writeNext(new String[] { metric, entry.getKey(), entry.getValue().toString() });
// 				}
// 			}
// 			writer.flush();
// 			writer.close();
// 			return result.toString();
// 		} catch (IOException e) {
// 			e.printStackTrace();
// 			throw new ParserException();
// 		}
// 	}
// }
// 
// Path: src/java/main/br/ufpe/cin/groundhog/parser/java/formater/Formater.java
// public abstract class Formater {
// 
// 	/**
// 	 * Formats the metric object into a file representation. It could be
// 	 * CSV or JSON
// 	 * 
// 	 * @param object
// 	 * @return
// 	 */
// 	public abstract String format(HashMap<String, HashMap<String, MutableInt>> object);
// 
// 	public String toString() {
// 		return getClass().getSimpleName().toLowerCase().replaceAll("formater", "");
// 	}
// }
// 
// Path: src/java/main/br/ufpe/cin/groundhog/parser/java/formater/FormaterFactory.java
// public class FormaterFactory {
// 
// 	/**
// 	 * Factory method to create a {@link Formater} object
// 	 * @param formater
// 	 * @return
// 	 */
// 	public static Formater get(Class<? extends Formater> formater) {
// 		try {
// 			return formater.newInstance();
// 		} catch (Exception e) {
// 			String msg = String.format("I did not reconginze this output format (%s) :( I can only format in CSV or JSON", formater.getSimpleName());
// 			throw new GroundhogException(msg, e);
// 		}
// 	}
// }
// 
// Path: src/java/main/br/ufpe/cin/groundhog/parser/java/formater/JSONFormater.java
// public class JSONFormater extends Formater {
// 
// 	@Override
// 	public String format(HashMap<String, HashMap<String, MutableInt>> object) {
// 		Gson gson = new GsonBuilder().serializeNulls().create();
// 		return gson.toJson(object);
// 	}
// }
// 
// Path: src/java/main/br/ufpe/cin/groundhog/util/Dates.java
// public class Dates {
// 
// 	private SimpleDateFormat simpleDateFormat;
// 
// 	public Dates() {
// 		simpleDateFormat = new SimpleDateFormat();
// 	}
// 
// 	public Dates(String pattern) {
// 		simpleDateFormat = new SimpleDateFormat(pattern);
// 	}
// 
// 	public String format(Date date) {
// 		return simpleDateFormat.format(date);
// 	}
// 
// 	public Date format(String date) {
// 		try {
// 			return simpleDateFormat.parse(date);
// 		} catch (ParseException e) {
// 			e.printStackTrace();
// 			return null;
// 		}
// 	}
// }


import java.io.File;
import java.util.Date;
import java.util.List;
import br.ufpe.cin.groundhog.codehistory.UnsupportedForgeException;
import br.ufpe.cin.groundhog.parser.java.formater.CSVFormater;
import br.ufpe.cin.groundhog.parser.java.formater.Formater;
import br.ufpe.cin.groundhog.parser.java.formater.FormaterFactory;
import br.ufpe.cin.groundhog.parser.java.formater.JSONFormater;
import br.ufpe.cin.groundhog.util.Dates;
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
		if (forge.toLowerCase().equals("github")) {
			return SupportedForge.GITHUB;
		} else if (forge.equals("googlecode")) {
			return SupportedForge.GOOGLECODE;
		} else if (forge.equals("googlecode")) {
			return SupportedForge.SOURCEFORGE;			
		}
		throw new UnsupportedForgeException("Sorry, currently Groundhog only supports Github, Sourceforge and GoogleCode. We do not support: " + forge);
	}

	public File getDest() {
		return new File(this.dest);
	}

	public File getOut() { 
		return new File(this.out);
	}

	public Date getDatetime() {
		return new Dates("yyyy-MM-dd HH:mm").format(this.datetime);
	}

	public int getNprojects() {
		return Integer.parseInt(this.nprojects);
	}

	public Formater getOutputformat() {
		if(this.outputformat.equals("json")) {
			return FormaterFactory.get(JSONFormater.class);
		} 
// Path: src/java/main/br/ufpe/cin/groundhog/codehistory/UnsupportedForgeException.java
// public class UnsupportedForgeException extends GroundhogException {
// 	private static final long serialVersionUID = 1L;
// 
// 	public UnsupportedForgeException(String msg) {
// 		super(msg);
// 	}
// }
// 
// Path: src/java/main/br/ufpe/cin/groundhog/parser/java/formater/CSVFormater.java
// public class CSVFormater extends Formater {
// 
// 	@Override
// 	public String format(HashMap<String, HashMap<String, MutableInt>> object) {
// 		StringWriter result = new StringWriter();
// 		try {
// 			CSVWriter writer = new CSVWriter(result, ';');
// 			writer.writeNext(new String[] { "Metric", "Entry", "Value" });
// 			for (String metric : object.keySet()) {
// 				HashMap<String, MutableInt> counter = object.get(metric);
// 				for (Entry<String, MutableInt> entry : counter.entrySet()) {
// 					writer.writeNext(new String[] { metric, entry.getKey(), entry.getValue().toString() });
// 				}
// 			}
// 			writer.flush();
// 			writer.close();
// 			return result.toString();
// 		} catch (IOException e) {
// 			e.printStackTrace();
// 			throw new ParserException();
// 		}
// 	}
// }
// 
// Path: src/java/main/br/ufpe/cin/groundhog/parser/java/formater/Formater.java
// public abstract class Formater {
// 
// 	/**
// 	 * Formats the metric object into a file representation. It could be
// 	 * CSV or JSON
// 	 * 
// 	 * @param object
// 	 * @return
// 	 */
// 	public abstract String format(HashMap<String, HashMap<String, MutableInt>> object);
// 
// 	public String toString() {
// 		return getClass().getSimpleName().toLowerCase().replaceAll("formater", "");
// 	}
// }
// 
// Path: src/java/main/br/ufpe/cin/groundhog/parser/java/formater/FormaterFactory.java
// public class FormaterFactory {
// 
// 	/**
// 	 * Factory method to create a {@link Formater} object
// 	 * @param formater
// 	 * @return
// 	 */
// 	public static Formater get(Class<? extends Formater> formater) {
// 		try {
// 			return formater.newInstance();
// 		} catch (Exception e) {
// 			String msg = String.format("I did not reconginze this output format (%s) :( I can only format in CSV or JSON", formater.getSimpleName());
// 			throw new GroundhogException(msg, e);
// 		}
// 	}
// }
// 
// Path: src/java/main/br/ufpe/cin/groundhog/parser/java/formater/JSONFormater.java
// public class JSONFormater extends Formater {
// 
// 	@Override
// 	public String format(HashMap<String, HashMap<String, MutableInt>> object) {
// 		Gson gson = new GsonBuilder().serializeNulls().create();
// 		return gson.toJson(object);
// 	}
// }
// 
// Path: src/java/main/br/ufpe/cin/groundhog/util/Dates.java
// public class Dates {
// 
// 	private SimpleDateFormat simpleDateFormat;
// 
// 	public Dates() {
// 		simpleDateFormat = new SimpleDateFormat();
// 	}
// 
// 	public Dates(String pattern) {
// 		simpleDateFormat = new SimpleDateFormat(pattern);
// 	}
// 
// 	public String format(Date date) {
// 		return simpleDateFormat.format(date);
// 	}
// 
// 	public Date format(String date) {
// 		try {
// 			return simpleDateFormat.parse(date);
// 		} catch (ParseException e) {
// 			e.printStackTrace();
// 			return null;
// 		}
// 	}
// }


// Path: src/java/main/br/ufpe/cin/groundhog/main/JsonInputFile.java
import java.io.File;
import java.util.Date;
import java.util.List;
import br.ufpe.cin.groundhog.codehistory.UnsupportedForgeException;
import br.ufpe.cin.groundhog.parser.java.formater.CSVFormater;
import br.ufpe.cin.groundhog.parser.java.formater.Formater;
import br.ufpe.cin.groundhog.parser.java.formater.FormaterFactory;
import br.ufpe.cin.groundhog.parser.java.formater.JSONFormater;
import br.ufpe.cin.groundhog.util.Dates;
import com.google.common.base.Objects;
import com.google.common.collect.Lists;

		if (forge.toLowerCase().equals("github")) {
			return SupportedForge.GITHUB;
		} else if (forge.equals("googlecode")) {
			return SupportedForge.GOOGLECODE;
		} else if (forge.equals("googlecode")) {
			return SupportedForge.SOURCEFORGE;			
		}
		throw new UnsupportedForgeException("Sorry, currently Groundhog only supports Github, Sourceforge and GoogleCode. We do not support: " + forge);
	}

	public File getDest() {
		return new File(this.dest);
	}

	public File getOut() { 
		return new File(this.out);
	}

	public Date getDatetime() {
		return new Dates("yyyy-MM-dd HH:mm").format(this.datetime);
	}

	public int getNprojects() {
		return Integer.parseInt(this.nprojects);
	}

	public Formater getOutputformat() {
		if(this.outputformat.equals("json")) {
			return FormaterFactory.get(JSONFormater.class);
		} 
		return FormaterFactory.get(CSVFormater.class);