org.betaconceptframework.astroboa.console.jsf.BinaryChannelLoader.java Source code

Java tutorial

Introduction

Here is the source code for org.betaconceptframework.astroboa.console.jsf.BinaryChannelLoader.java

Source

/*
 * Copyright (C) 2005-2012 BetaCONCEPT Limited
 *
 * This file is part of Astroboa.
 *
 * Astroboa is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Astroboa is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with Astroboa.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.betaconceptframework.astroboa.console.jsf;

import java.io.IOException;
import java.io.InputStream;

import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.betaconceptframework.astroboa.api.model.BinaryChannel;
import org.betaconceptframework.astroboa.api.model.exception.CmsException;
import org.betaconceptframework.astroboa.api.service.ContentService;
import org.betaconceptframework.ui.jsf.AbstractUIBean;
import org.betaconceptframework.ui.jsf.utility.JSFUtilities;

/**
 * @author Gregory Chomatas (gchomatas@betaconcept.com)
 * @author Savvas Triantafyllou (striantafyllou@betaconcept.com)
 * 
 */
public class BinaryChannelLoader extends AbstractUIBean {

    private ContentService contentService;

    public ContentService getContentService() {
        return contentService;
    }

    public void setContentService(ContentService contentService) {
        this.contentService = contentService;
    }

    public void downloadBinaryChannel() {

        FacesContext facesContext = FacesContext.getCurrentInstance();
        if (!facesContext.getResponseComplete()) {

            String selectedBinaryChannelId = JSFUtilities.getRequestParameter("binaryChannelId");

            BinaryChannel binaryChannel;
            //Retrieve the binary data of the Primary Binary Channel selected Content Object. Remember that for efficiency the binary data of binary channels are not retreived when a content object is retreived
            try {
                binaryChannel = getContentService().getBinaryChannelById(selectedBinaryChannelId);
            } catch (CmsException e) {
                throw new RuntimeException(e);
            }

            HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();

            response.setCharacterEncoding("UTF-8");
            response.setContentType(binaryChannel.getMimeType());
            response.setHeader("Content-Disposition", "attachment;filename=" + binaryChannel.getSourceFilename());

            InputStream contentAsStream = binaryChannel.getContentAsStream();

            response.setContentLength((int) binaryChannel.getSize());

            try {

                if (contentAsStream != null) {
                    ServletOutputStream servletOutputStream = response.getOutputStream();

                    IOUtils.copy(contentAsStream, servletOutputStream);

                    servletOutputStream.flush();

                    facesContext.responseComplete();

                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            } finally {
                binaryChannel = null;

                //Close Stream
                if (contentAsStream != null)
                    try {
                        contentAsStream.close();
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
            }

        }

    }
}