package com.idega.block.pdf; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.rmi.RemoteException; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServletRequest; import org.apache.commons.httpclient.HttpException; import org.apache.webdav.lib.WebdavResource; import com.idega.business.IBOLookup; import com.idega.business.IBOLookupException; import com.idega.io.DownloadWriter; import com.idega.presentation.IWContext; import com.idega.slide.business.IWSlideService; import com.idega.util.FileUtil; import com.idega.util.StringUtil; public class PDFWriter extends DownloadWriter{ public static final String PDF_URL_PARAMETER = "pdf_url_parameter"; private static final Logger logger = Logger.getLogger(PDFWriter.class.getName()); private WebdavResource pdfDoc; @Override public void init(HttpServletRequest req, IWContext iwc) { String pathToPdf = iwc.getParameter(PDF_URL_PARAMETER); if (StringUtil.isEmpty(pathToPdf)) { logger.log(Level.SEVERE, "PDF from XForm was not generated!"); return; } IWSlideService slide = null; try { slide = IBOLookup.getServiceInstance(iwc, IWSlideService.class); } catch (IBOLookupException e) { logger.log(Level.SEVERE, "Error getting IWSlideService!", e); } if (slide == null) { return; } try{ pdfDoc = slide.getWebdavResourceAuthenticatedAsRoot(pathToPdf); } catch (HttpException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } if (pdfDoc == null || !pdfDoc.exists()) { return; } Long length = Long.valueOf(pdfDoc.getGetContentLength()); setAsDownload(iwc, pdfDoc.getDisplayName(), length.intValue()); } @Override public void writeTo(OutputStream streamOut) throws IOException { if (pdfDoc == null) { logger.log(Level.SEVERE, "Unable to get XForm"); return; } InputStream streamIn = pdfDoc.getMethodData(); FileUtil.streamToOutputStream(streamIn, streamOut); streamOut.flush(); streamOut.close(); streamIn.close(); } }