package com.github.dreamhead.moco.resource.reader;
import com.github.dreamhead.moco.MocoConfig;
import com.github.dreamhead.moco.MocoException;
import com.github.dreamhead.moco.Request;
import com.github.dreamhead.moco.resource.Resource;
import com.google.common.base.Optional;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import static com.google.common.io.Files.toByteArray;
import static java.lang.String.format;
public class FileResourceReader extends AbstractFileResourceReader {
private final Optional<MocoConfig> config;
public FileResourceReader(final Resource file, final Optional<Charset> charset) {
this(file, charset, Optional.<MocoConfig>absent());
}
public FileResourceReader(final Resource file, final Optional<Charset> charset, final Optional<MocoConfig> config) {
super(file, charset);
this.config = config;
}
@Override
protected byte[] doReadFor(final Optional<? extends Request> request) {
File file = new File(targetFileName(request));
if (!file.exists()) {
throw new IllegalArgumentException(format("%s does not exist", file.getPath()));
}
try {
return toByteArray(file);
} catch (IOException e) {
throw new MocoException(e);
}
}
@SuppressWarnings("unchecked")
private String targetFileName(final Optional<? extends Request> request) {
String filename = this.filename(request);
if (config.isPresent()) {
return (String) config.get().apply(filename);
}
return filename;
}
}