/****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * For the text or an alternative of this public license, you may reach us * * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * * or via info@compiere.org or http://www.compiere.org/license.html * *****************************************************************************/ package org.compiere.print; import java.awt.print.Pageable; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.logging.Level; import org.adempiere.pdf.Document; import org.compiere.model.MArchive; import org.compiere.model.MClient; import org.compiere.model.PrintInfo; import org.compiere.print.layout.LayoutEngine; import org.compiere.util.CLogger; import org.compiere.util.Env; import org.jfree.io.IOUtils; /** * Archive Engine.
* Based on Settings on Client Level. *
 *  Keys set for
 *  - Menu Reports - AD_Report_ID
 *  - Win Report - AD_Table_ID
 *  - Documents - AD_Table_ID and Record_ID and C_Customer_ID 
 *	
* @author Jorg Janke * @version $Id: ArchiveEngine.java,v 1.3 2006/07/30 00:53:02 jjanke Exp $ */ public class ArchiveEngine { /** * Get/Create Archive. * @param layout layout * @param info print info * @return existing document or newly created if Client enabled archiving. * Will return NULL if archiving not enabled */ public byte[] archive (LayoutEngine layout, PrintInfo info) { // Do we need to Archive ? MClient client = MClient.get(layout.getCtx()); String aaClient = client.getAutoArchive(); String aa = aaClient; if (aa == null) aa = MClient.AUTOARCHIVE_None; // Nothing to Archive if (aa.equals(MClient.AUTOARCHIVE_None)) return null; // Archive External only if (aa.equals(MClient.AUTOARCHIVE_ExternalDocuments)) { if (info.isReport()) return null; } // Archive Documents only if (aa.equals(MClient.AUTOARCHIVE_Documents)) { if (info.isReport()) return null; } // Create Printable byte[] data = Document.getPDFAsArray(layout.getPageable(false)); // No Copy if (data == null) return null; // TODO to be done async MArchive archive = new MArchive (layout.getCtx(),info, null); archive.setBinaryData(data); archive.saveEx(); return data; } // archive /** * Create Archive. * @param pdfFile * @param info print info */ public void archive (File pdfFile, PrintInfo info) { // Do we need to Archive ? MClient client = MClient.get(Env.getCtx()); String aaClient = client.getAutoArchive(); String aa = aaClient; if (aa == null) aa = MClient.AUTOARCHIVE_None; // Nothing to Archive if (aa.equals(MClient.AUTOARCHIVE_None)) return; // Archive External only if (aa.equals(MClient.AUTOARCHIVE_ExternalDocuments)) { if (info.isReport()) return; } // Archive Documents only if (aa.equals(MClient.AUTOARCHIVE_Documents)) { if (info.isReport()) return; } ByteArrayOutputStream bas = new ByteArrayOutputStream(); FileInputStream fis = null; try { fis = new FileInputStream(pdfFile); BufferedInputStream bis = new BufferedInputStream(fis); IOUtils.getInstance().copyStreams(bis, bas); } catch (FileNotFoundException e) { log.log(Level.SEVERE, e.getLocalizedMessage(), e); } catch (IOException e) { log.log(Level.SEVERE, e.getLocalizedMessage(), e); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) {} } } byte[] data = bas.toByteArray(); // TODO to be done async MArchive archive = new MArchive (Env.getCtx(),info, null); archive.setBinaryData(data); archive.saveEx(); } // archive /** * Can we archive the document? * @param layout layout * @return true if can be archived */ public static boolean isValid (LayoutEngine layout) { return (layout != null && Document.isValid((Pageable)layout) && layout.getNumberOfPages() > 0); } // isValid /** * Get Archive Engine * @return engine */ public static ArchiveEngine get() { if (s_engine == null) s_engine = new ArchiveEngine(); return s_engine; } // get // Create Archiver static { s_engine = new ArchiveEngine(); } /** Logger */ private static CLogger log = CLogger.getCLogger(ArchiveEngine.class); /** Singleton */ private volatile static ArchiveEngine s_engine = null; /** * ArchiveEngine */ private ArchiveEngine () { super (); if (s_engine == null) s_engine = this; } // ArchiveEngine } // ArchiveEngine