/*
 */
package org.taverna.server.master.rest.handler;

import static org.apache.commons.io.IOUtils.copy;
import static org.taverna.server.master.api.ContentTypes.APPLICATION_ZIP_TYPE;

import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

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 org.taverna.server.master.interfaces.Directory.ZipStream;

/**
 * How to write a ZIP file as the result entity of a request.
 * 
 * @author Donal Fellows
 */
@Provider
@Produces("application/zip")
public class ZipStreamHandler implements MessageBodyWriter<ZipStream> {
	@Override
	public boolean isWriteable(Class<?> type, Type genericType,
			Annotation[] annotations, MediaType mediaType) {
		return ZipStream.class.isAssignableFrom(type)
				&& mediaType.equals(APPLICATION_ZIP_TYPE);
	}

	@Override
	public long getSize(ZipStream t, Class<?> type, Type genericType,
			Annotation[] annotations, MediaType mediaType) {
		return -1;
	}

	@Override
	public void writeTo(ZipStream zipStream, Class<?> type, Type genericType,
			Annotation[] annotations, MediaType mediaType,
			MultivaluedMap<String, Object> httpHeaders,
			OutputStream entityStream) throws IOException,
			WebApplicationException {
		copy(zipStream, entityStream);
	}
}
