/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package render;
import java.io.IOException;
import java.io.InputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.util.Calendar;
import play.exceptions.UnexpectedException;
import play.mvc.Http.Request;
import play.mvc.Http.Response;
import play.mvc.results.Result;
import util.support.SupportPackageCreator;
/**
* Renders a support package ZIP file while it is being constructed.
*
* @author jonnymiller
*/
public class RenderSupportPackage extends Result {
private SupportPackageCreator supportPackage;
public static void renderSupportPackage(SupportPackageCreator supportPackage) {
throw new RenderSupportPackage(supportPackage);
}
public RenderSupportPackage(SupportPackageCreator supportPackage) {
this.supportPackage = supportPackage;
}
private String getFilename() {
String timestamp = SupportPackageCreator.formatTimestamp(Calendar.getInstance());
return String.format("logs-%s.zip", timestamp);
}
private String getContentType() {
return "application/zip";
}
private String getContentDisposition() {
return String.format("attachment; filename=%s", getFilename());
}
@Override
public void apply(Request request, Response response) {
try {
response.contentType = getContentType();
response.setHeader("Content-Disposition", getContentDisposition());
response.direct = getContent();
} catch (Exception e) {
throw new UnexpectedException(e);
}
}
private InputStream getContent() throws IOException {
PipedOutputStream out = new PipedOutputStream();
PipedInputStream in = new PipedInputStream(out);
supportPackage.createJob(out).now();
return in;
}
}