KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > openedit > archive > generators > OriginalDocumentGenerator


1 package com.openedit.archive.generators;
2
3 import java.io.File JavaDoc;
4 import java.io.FileInputStream JavaDoc;
5 import java.io.IOException JavaDoc;
6
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9
10 import com.openedit.OpenEditException;
11 import com.openedit.WebPageRequest;
12 import com.openedit.archive.Archive;
13 import com.openedit.generators.BaseGenerator;
14 import com.openedit.generators.Output;
15 import com.openedit.modules.archive.ArchiveModule;
16 import com.openedit.page.Page;
17 import com.openedit.store.Product;
18 import com.openedit.util.OutputFiller;
19 import com.openedit.util.PathUtilities;
20
21 /**
22  * This generator generates original product documents from an archive based on
23  * paths of the form <tt>.../<var>productid</var>/<var>filename.ext</var></tt>.
24  *
25  * @author Eric Galluzzo
26  */

27 public class OriginalDocumentGenerator extends BaseGenerator
28 {
29     private static final Log log = LogFactory.getLog(OriginalDocumentGenerator.class);
30     
31     public void generate( WebPageRequest inReq, Page inPage, Output inOut )
32         throws OpenEditException
33     {
34         // FIXME: Get the archive in a more elegant fashion (how?).
35
Archive archive = (Archive) inReq.getPageValue("archive");
36         String JavaDoc productId = PathUtilities.extractFileName(
37             PathUtilities.extractDirectoryPath( inPage.getPath() ) );
38         Product product = archive.getProduct( productId );
39         if ( product == null )
40         {
41             throw new OpenEditException( "No product with ID " + productId );
42         }
43         
44         File JavaDoc originalDocumentFile = archive.getOriginalDocument( product );
45         if ( originalDocumentFile == null )
46         {
47             log.error( "Could not determine original document filename for " + product.getName() );
48             inReq.redirect( archive.getCatalogHome() + "/missingfile.html" );
49             return;
50         }
51         if ( !originalDocumentFile.exists() )
52         {
53             log.error( "Original document not found:" + originalDocumentFile );
54             inReq.redirect(archive.getCatalogHome() + "/missingfile.html");
55             return;
56         }
57         
58         try
59         {
60             FileInputStream JavaDoc fis = new FileInputStream JavaDoc( originalDocumentFile );
61             try
62             {
63                 new OutputFiller().fill( fis, inOut.getStream() );
64             }
65             finally
66             {
67                 fis.close();
68             }
69         }
70         catch ( IOException JavaDoc ioe )
71         {
72             throw new OpenEditException( ioe );
73         }
74     }
75     
76     public boolean canGenerate(WebPageRequest inReq)
77     {
78         return inReq.getPage().isBinary();
79     }
80
81 }
82
Popular Tags