package restx.entity;
import com.google.common.base.Optional;
import restx.RestxContext;
import restx.RestxRequest;
import restx.RestxResponse;
import restx.factory.Module;
import restx.factory.Provides;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;
/**
* Date: 27/10/13
* Time: 15:05
*/
@Module
public class TextContentTypeModule {
private static final Collection TEXT_TYPES = Arrays.asList(
String.class, StringBuilder.class, StringBuffer.class
);
@Provides
public EntityDefaultContentTypeProvider textEntityDefaultContentTypeProvider() {
return new EntityDefaultContentTypeProvider() {
@Override
public Optional<String> mayProvideDefaultContentType(Type type) {
if (TEXT_TYPES.contains(type)) {
return Optional.of("text/plain");
} else {
return Optional.absent();
}
}
};
}
@Provides
public EntityResponseWriterFactory textEntityResponseWriterFactory() {
return new EntityResponseWriterFactory() {
@Override
public <T> Optional<? extends EntityResponseWriter<T>> mayBuildFor(Type valueType, String contentType) {
if (!contentType.toLowerCase(Locale.ENGLISH).startsWith("text/plain")) {
return Optional.absent();
}
return Optional.of(new AbstractEntityResponseWriter<T>(valueType, "text/plain") {
@Override
protected void write(T value, RestxRequest req, RestxResponse resp, RestxContext ctx) throws IOException {
resp.getWriter().append(value.toString());
}
});
}
};
}
}