diff --git a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/FileRendererImpl.java b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/FileRendererImpl.java index fe92e6d..854a41c 100644 --- a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/FileRendererImpl.java +++ b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/FileRendererImpl.java @@ -69,13 +69,15 @@ public class FileRendererImpl implements FileRenderer { private FacesContext context; @Override - public void render(final byte[] byteArray, final ContentType contentType, final String fileName) { + public void render(final byte[] byteArray, final ContentType contentType, final String fileName, boolean forceDownload) { logger.debug("Renderizando para o arquivo " + fileName + "."); try { response.setContentType(contentType.getContentType()); response.setContentLength(byteArray.length); - response.setHeader("Content-Disposition", "filename=\"" + fileName + "\""); + + String forceDownloadCommand = forceDownload ? "attachment; " : ""; + response.setHeader("Content-Disposition", forceDownloadCommand + "filename=\"" + fileName + "\""); logger.debug("Escrevendo o arquivo " + fileName + " no response."); response.getOutputStream().write(byteArray, 0, byteArray.length); @@ -87,23 +89,38 @@ public class FileRendererImpl implements FileRenderer { } context.responseComplete(); } + + @Override + public void render(final byte[] byteArray, final ContentType contentType, final String fileName) { + render(byteArray, contentType, fileName, false); + } @Override - public void render(final InputStream stream, final ContentType contentType, final String fileName) { + public void render(final InputStream stream, final ContentType contentType, final String fileName, boolean forceDownload) { logger.debug("Renderizando o arquivo " + fileName + "."); - render(getBytes(stream), contentType, fileName); + render(getBytes(stream), contentType, fileName, forceDownload); + } + + @Override + public void render(final InputStream stream, final ContentType contentType, final String fileName) { + render(stream, contentType, fileName, false); } @Override - public void render(File file, ContentType contentType, String fileName) { + public void render(File file, ContentType contentType, String fileName, boolean forceDownload) { logger.debug("Renderizando para o arquivo " + fileName + "."); try { - render(new FileInputStream(file), contentType, fileName); + render(new FileInputStream(file), contentType, fileName, forceDownload); } catch (FileNotFoundException e) { logger.info("Erro na geração do relatório. Incluíndo a exceção de erro em um FacesMessage", e); Faces.addMessage(e); } } + + @Override + public void render(File file, ContentType contentType, String fileName) { + render(file, contentType, fileName, false); + } private byte[] getBytes(InputStream stream) { byte[] byteArray = null; diff --git a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/util/FileRenderer.java b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/util/FileRenderer.java index 5a9771f..b26d65f 100644 --- a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/util/FileRenderer.java +++ b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/util/FileRenderer.java @@ -53,6 +53,17 @@ public interface FileRenderer extends Serializable { * @param byteArray Byte Array to be rendered. * @param contentType * @param fileName + * @param forceDownload If true, will force a download from the browser, otherwise the browser is free to determine what will happen with the rendered content. + */ + void render(final byte[] byteArray, final ContentType contentType, final String fileName, boolean forceDownload); + + /** + * Renders a byteArray for display to the user. + * + * @param byteArray Byte Array to be rendered. + * @param contentType + * @param fileName + * */ void render(final byte[] byteArray, final ContentType contentType, final String fileName); @@ -64,6 +75,16 @@ public interface FileRenderer extends Serializable { * @param fileName */ void render(final InputStream stream, final ContentType contentType, final String fileName); + + /** + * Renders an inputStream for display to the user. + * + * @param stream + * @param contentType + * @param fileName + * @param forceDownload If true, will force a download from the browser, otherwise the browser is free to determine what will happen with the rendered content. + */ + void render(final InputStream stream, final ContentType contentType, final String fileName, boolean forceDownload); /** * Renders a file for display to the user. @@ -73,6 +94,16 @@ public interface FileRenderer extends Serializable { * @param fileName */ void render(final File file, final ContentType contentType, final String fileName); + + /** + * Renders a file for display to the user. + * + * @param file + * @param contentType + * @param fileName + * @param forceDownload If true, will force a download from the browser, otherwise the browser is free to determine what will happen with the rendered content. + */ + void render(final File file, final ContentType contentType, final String fileName, boolean forceDownload); /** * File content type. -- libgit2 0.21.2