package com.prezi.haxe.gradle;
import com.google.common.collect.Maps;
import com.prezi.haxe.gradle.incubating.DefaultResourceSet;
import com.prezi.haxe.gradle.incubating.FunctionalSourceSet;
import org.gradle.api.internal.file.DefaultSourceDirectorySet;
import org.gradle.api.internal.file.FileResolver;
import java.io.File;
import java.util.Map;
import org.gradle.api.internal.file.collections.DefaultDirectoryFileTreeFactory;
public class DefaultHaxeResourceSet extends DefaultResourceSet implements HaxeResourceSet {
private final Map<String, File> embeddedResources = Maps.newLinkedHashMap();
private final FileResolver fileResolver;
public DefaultHaxeResourceSet(String name, FunctionalSourceSet parent, FileResolver fileResolver) {
super(name, new DefaultSourceDirectorySet("resource", fileResolver, new DefaultDirectoryFileTreeFactory()), parent);
this.fileResolver = fileResolver;
}
@Override
public Map<String, File> getEmbeddedResources() {
return embeddedResources;
}
@Override
public void embed(String name, Object file) {
embedInternal(name, fileResolver.resolve(file));
}
@Override
public void embed(Object file) {
File resolvedFile = fileResolver.resolve(file);
embedInternal(resolvedFile.getName(), resolvedFile);
}
public void embedInternal(String name, File file) {
if (!file.exists()) {
throw new IllegalArgumentException("File not found: " + file);
}
if (!file.isFile()) {
throw new IllegalArgumentException("Not a file: " + file);
}
embeddedResources.put(name, file);
}
@Override
public void embedAll(Object directory) {
File resolvedDir = fileResolver.resolve(directory);
if (!resolvedDir.exists()) {
throw new IllegalArgumentException("Directory to embed does not exist: " + directory);
}
if (!resolvedDir.isDirectory()) {
throw new IllegalArgumentException("Requires a directory to embed all files from, but it was not: " + directory);
}
File[] files = resolvedDir.listFiles();
if (files != null) {
for (File it : files) {
if (it.isFile()) {
embed(it);
}
}
}
}
}