extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/pdf/PdfToBaseFileCombiner.java

Code
Comments
Other
Rev Date Author Line
4028 26 Jul 16 nicklas 1 package net.sf.basedb.reggie.pdf;
4028 26 Jul 16 nicklas 2
4028 26 Jul 16 nicklas 3 import java.io.IOException;
4028 26 Jul 16 nicklas 4 import java.io.InputStream;
4028 26 Jul 16 nicklas 5 import java.io.OutputStream;
4028 26 Jul 16 nicklas 6
4028 26 Jul 16 nicklas 7 import net.sf.basedb.core.DbControl;
4028 26 Jul 16 nicklas 8 import net.sf.basedb.core.Directory;
4028 26 Jul 16 nicklas 9 import net.sf.basedb.core.File;
4028 26 Jul 16 nicklas 10 import net.sf.basedb.util.FileUtil;
4028 26 Jul 16 nicklas 11
4028 26 Jul 16 nicklas 12 /**
4028 26 Jul 16 nicklas 13   Combiner implementation that makes a copy of the original
4028 26 Jul 16 nicklas 14   PDF file and save it to another location in the BASE file
4028 26 Jul 16 nicklas 15   system. A root directory is specified when an instance is 
4028 26 Jul 16 nicklas 16   created and a new file is created based on the pdf file 
4028 26 Jul 16 nicklas 17   name.
4028 26 Jul 16 nicklas 18   
4028 26 Jul 16 nicklas 19   Subclasses may override the {@link #createOrGetFile(DbControl, String)}
4028 26 Jul 16 nicklas 20   method to create files in other places than the default.
4028 26 Jul 16 nicklas 21   
4028 26 Jul 16 nicklas 22   @since 4.6
4028 26 Jul 16 nicklas 23 */
4028 26 Jul 16 nicklas 24 public class PdfToBaseFileCombiner 
4028 26 Jul 16 nicklas 25   extends PdfCombiner
4028 26 Jul 16 nicklas 26 {
4028 26 Jul 16 nicklas 27   
4028 26 Jul 16 nicklas 28   private final DbControl dc;
4028 26 Jul 16 nicklas 29   private final Directory rootDir;
4028 26 Jul 16 nicklas 30   
4028 26 Jul 16 nicklas 31   /**
4028 26 Jul 16 nicklas 32     Create a new combiner instance.
4028 26 Jul 16 nicklas 33     @param pdfOut The PDF file to write the output to
4028 26 Jul 16 nicklas 34   */
4028 26 Jul 16 nicklas 35   public PdfToBaseFileCombiner(DbControl dc, Directory rootDir) 
4028 26 Jul 16 nicklas 36   {
4028 26 Jul 16 nicklas 37     super("application/pdf", ".pdf");
4028 26 Jul 16 nicklas 38     this.dc = dc;
4028 26 Jul 16 nicklas 39     this.rootDir = rootDir;
4028 26 Jul 16 nicklas 40   }
4028 26 Jul 16 nicklas 41
4028 26 Jul 16 nicklas 42   @Override
4028 26 Jul 16 nicklas 43   public void close() 
4028 26 Jul 16 nicklas 44     throws IOException
4028 26 Jul 16 nicklas 45   {}
4028 26 Jul 16 nicklas 46   
4028 26 Jul 16 nicklas 47   @Override
4028 26 Jul 16 nicklas 48   public boolean addFile(InputStream pdfIn, String pdfName) 
4028 26 Jul 16 nicklas 49     throws IOException
4028 26 Jul 16 nicklas 50   {
4028 26 Jul 16 nicklas 51     File f = createOrGetFile(dc, pdfName);
4028 26 Jul 16 nicklas 52     if (!f.isInDatabase())
4028 26 Jul 16 nicklas 53     {
4028 26 Jul 16 nicklas 54       dc.saveItem(f);
4028 26 Jul 16 nicklas 55     }
4028 26 Jul 16 nicklas 56     f.setMimeType("application/pdf");
4028 26 Jul 16 nicklas 57     f.setWriteProtected(false);
4028 26 Jul 16 nicklas 58     
4028 26 Jul 16 nicklas 59     OutputStream upload = null;
4028 26 Jul 16 nicklas 60     try
4028 26 Jul 16 nicklas 61     {
4028 26 Jul 16 nicklas 62       upload = f.getUploadStream(false);
4028 26 Jul 16 nicklas 63       FileUtil.copy(pdfIn, upload);
4028 26 Jul 16 nicklas 64     }
4028 26 Jul 16 nicklas 65     finally
4028 26 Jul 16 nicklas 66     {
4028 26 Jul 16 nicklas 67       FileUtil.close(upload);
4028 26 Jul 16 nicklas 68     }
4028 26 Jul 16 nicklas 69     
4028 26 Jul 16 nicklas 70     // TODO - activate write protection before release
4028 26 Jul 16 nicklas 71     //f.setWriteProtected(true);
4028 26 Jul 16 nicklas 72     
4028 26 Jul 16 nicklas 73     return true;
4028 26 Jul 16 nicklas 74   }
4028 26 Jul 16 nicklas 75   
4028 26 Jul 16 nicklas 76   public Directory getRootDir()
4028 26 Jul 16 nicklas 77   {
4028 26 Jul 16 nicklas 78     return rootDir;
4028 26 Jul 16 nicklas 79   }
4028 26 Jul 16 nicklas 80   
4028 26 Jul 16 nicklas 81   /**
4028 26 Jul 16 nicklas 82     The default implementation creates the file in the
4028 26 Jul 16 nicklas 83     root directory.
4028 26 Jul 16 nicklas 84   */
4028 26 Jul 16 nicklas 85   protected File createOrGetFile(DbControl dc, String pdfName)
4028 26 Jul 16 nicklas 86   {
4028 26 Jul 16 nicklas 87     File f = File.getFile(dc, rootDir, pdfName, true);
4028 26 Jul 16 nicklas 88     return f;
4028 26 Jul 16 nicklas 89   }
4028 26 Jul 16 nicklas 90   
4028 26 Jul 16 nicklas 91 }