package org.robolectric.res;
import javax.annotation.Nonnull;
public abstract class DocumentLoader {
private static final FsFile.Filter ENDS_WITH_XML = new FsFile.Filter() {
@Override public boolean accept(@Nonnull FsFile fsFile) {
return fsFile.getName().endsWith(".xml");
}
};
protected final String packageName;
private final FsFile resourceBase;
public DocumentLoader(String packageName, FsFile resourceBase) {
this.packageName = packageName;
this.resourceBase = resourceBase;
}
public void load(String folderBaseName) {
FsFile[] files = resourceBase.listFiles(new StartsWithFilter(folderBaseName));
if (files == null) {
throw new RuntimeException(resourceBase.join(folderBaseName) + " is not a directory");
}
for (FsFile dir : files) {
loadFile(dir);
}
}
private void loadFile(FsFile dir) {
if (!dir.exists()) {
throw new RuntimeException("no such directory " + dir);
}
for (FsFile file : dir.listFiles(ENDS_WITH_XML)) {
loadResourceXmlFile(new XmlContext(packageName, file));
}
}
protected abstract void loadResourceXmlFile(XmlContext xmlContext);
}