package io.fathom.auto.template;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.net.URL;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Charsets;
import com.google.common.io.Files;
import com.google.common.io.Resources;
public abstract class TemplateBase<T> {
private static final Logger log = LoggerFactory.getLogger(TemplateBase.class);
protected Writer writer;
protected int indent;
protected static String loadTemplate(Class<?> contextClass, String resourceName) {
URL url = Resources.getResource(contextClass, resourceName);
try {
String s = Resources.toString(url, Charsets.UTF_8);
return s;
} catch (IOException e) {
throw new IllegalStateException("Error reading resource: " + resourceName, e);
}
}
public abstract void write(Writer writer, T data) throws IOException;
protected void println(String fmt, Object... args) throws IOException {
String s = String.format(fmt, args);
println(s);
}
protected void init(Writer writer) {
this.writer = writer;
this.indent = 0;
}
protected void println(String s) throws IOException {
for (int i = 0; i < indent; i++) {
writer.write('\t');
}
if (s != null) {
writer.write(s);
}
writer.write('\n');
}
public void write(File dest, T data) throws IOException {
StringWriter writer = new StringWriter();
write(writer, data);
log.info("Installing new file {}", dest);
Files.write(writer.toString(), dest, Charsets.UTF_8);
}
}