package com.github.dreamhead.moco.resource.reader;
import com.github.dreamhead.moco.HttpRequest;
import com.github.dreamhead.moco.Request;
import com.github.dreamhead.moco.model.MessageContent;
import com.github.dreamhead.moco.resource.Resource;
import com.github.dreamhead.moco.util.FileContentType;
import com.google.common.base.Optional;
import com.google.common.net.MediaType;
import java.nio.charset.Charset;
import static com.github.dreamhead.moco.model.MessageContent.content;
import static com.google.common.base.Optional.of;
public abstract class AbstractFileResourceReader implements ContentResourceReader {
protected abstract byte[] doReadFor(final Optional<? extends Request> request);
private final Resource filename;
private final Optional<Charset> charset;
protected AbstractFileResourceReader(final Resource filename, final Optional<Charset> charset) {
this.charset = charset;
this.filename = filename;
}
@Override
public final MessageContent readFor(final Optional<? extends Request> request) {
return asMessageContent(doReadFor(request));
}
private MessageContent asMessageContent(final byte[] content) {
MessageContent.Builder builder = content().withContent(content);
if (charset.isPresent()) {
builder.withCharset(charset.get());
}
return builder.build();
}
@Override
public final MediaType getContentType(final HttpRequest request) {
String targetFilename = this.filename(of(request));
return new FileContentType(targetFilename, charset).getContentType();
}
protected final String filename(final Optional<? extends Request> request) {
MessageContent messageContent = this.filename.readFor(request);
return messageContent.toString();
}
}