package org.jboss.resteasy.test.resource.basic.resource;
import org.jboss.logging.Logger;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyWriter;
import javax.ws.rs.ext.Provider;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
@Provider
@Produces("*/*")
public class GenericEntityDoubleWriter implements MessageBodyWriter<List<Double>> {
private static Logger logger = Logger.getLogger(GenericEntityDoubleWriter.class);
public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
logger.info("DoubleWriter type: " + type.getName());
if (!List.class.isAssignableFrom(type)) {
return false;
}
logger.info("DoubleWriter: " + genericType);
if (!(genericType instanceof ParameterizedType)) {
return false;
}
logger.info("DoubleWriter");
ParameterizedType pt = (ParameterizedType) genericType;
boolean result = pt.getActualTypeArguments()[0].equals(Double.class);
logger.info("Doublewriter result!!!: " + result);
return result;
}
public long getSize(List<Double> doubles, Class<?> type, Type genericType, Annotation[] annotations,
MediaType mediaType) {
return -1;
}
public void writeTo(List<Double> floats, Class<?> type, Type genericType, Annotation[] annotations,
MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream)
throws IOException, WebApplicationException {
StringBuffer buf = new StringBuffer();
for (Double f : floats) {
buf.append(f.toString()).append("D ");
}
entityStream.write(buf.toString().getBytes());
}
}