/*
* ResourceDir.java criado em 15/12/2013
*
* Propriedade de Objectos Fábrica de Software LTDA.
* Reprodução parcial ou total proibida.
*/
package br.com.objectos.way.etc;
import static com.google.common.collect.Sets.newLinkedHashSet;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.List;
import java.util.Set;
import com.github.mustachejava.DefaultMustacheFactory;
import com.github.mustachejava.Mustache;
import com.github.mustachejava.MustacheFactory;
import com.google.common.base.Charsets;
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.io.Resources;
/**
* @author marcio.endo@objectos.com.br (Marcio Endo)
*/
class ResourceSet {
private final Class<?> contextClass;
private final String dir;
private final MustacheFactory mustaches;
private final Set<String> resourceNames = newLinkedHashSet();
private final Set<String> evalNames = newLinkedHashSet();
private Object context;
private ResourceSet(Class<?> contextClass, String dir) {
this.contextClass = contextClass;
this.dir = dir;
this.mustaches = new DefaultMustacheFactory(dir);
}
public static ResourceSet at(String dir) {
return new ResourceSet(ResourceSet.class, dir);
}
public void add(String resourceName) {
resourceNames.add(resourceName);
}
public void addFromListAt(String listName) {
try {
URL listUrl;
listUrl = Resources.getResource(contextClass, listName);
List<String> lines;
lines = Resources.readLines(listUrl, Charsets.UTF_8);
Iterable<String> _valids;
_valids = Iterables.filter(lines, ValidLine.INSTANCE);
List<String> valids;
valids = ImmutableList.copyOf(_valids);
resourceNames.addAll(valids);
} catch (IOException e) {
throw Throwables.propagate(e);
}
}
public void evalWith(Object context) {
this.context = context;
}
public void only(String resourceName) {
this.evalNames.add(resourceName);
}
public void copyTo(File targetDir) {
CopyTo copyTo = new CopyTo(this, targetDir);
if (context != null) {
if (evalNames.isEmpty()) {
copyTo = new CopyToEval(this, targetDir);
} else {
copyTo = new CopyToEvalSelection(this, targetDir);
}
}
copyTo.execute();
}
Mustache compileMustache(InputStreamReader reader, String resourceName) {
return mustaches.compile(reader, resourceName);
}
Class<?> getContextClass() {
return contextClass;
}
String getDir() {
return dir;
}
Set<String> getEvalNames() {
return evalNames;
}
Set<String> getResourceNames() {
return resourceNames;
}
Object getContext() {
return context;
}
private enum ValidLine implements Predicate<String> {
INSTANCE;
@Override
public boolean apply(String input) {
return !Strings.isNullOrEmpty(input);
}
}
}