KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.openedit.archive.generators;
2
3 import java.io.File JavaDoc;
4 import java.io.IOException JavaDoc;
5 import java.net.URL JavaDoc;
6 import java.net.URLEncoder JavaDoc;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10
11 import com.openedit.OpenEditException;
12 import com.openedit.WebPageRequest;
13 import com.openedit.archive.Archive;
14 import com.openedit.generators.FileGenerator;
15 import com.openedit.generators.Output;
16 import com.openedit.page.Page;
17 import com.openedit.store.Product;
18 import com.openedit.util.PathUtilities;
19 import com.openedit.util.URLUtilities;
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 ConvertGenerator extends TempFileGenerator
28 {
29     private static final Log log = LogFactory.getLog(ConvertGenerator.class);
30     
31     public void generate( WebPageRequest inReq, Page inPage, Output inOut ) throws OpenEditException
32     {
33         Archive archive = (Archive) inReq.getPageValue(Archive.ARCHIVE_PARAM );
34
35         //use the parent directory name
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         //Look in cache first
44
String JavaDoc dir = archive.getStore().getProductPathFinder().idToPath(product.getId());
45         String JavaDoc type = PathUtilities.extractPageType(inPage.getPath());
46         File JavaDoc convertFile = archive.makeCacheFile(product, "/convert/" + PathUtilities.extractPagePath(dir) + "." + type );
47         if ( convertFile.exists() && convertFile.length() > 0)
48         {
49             super.generate(inReq,convertFile,inOut);
50             return;
51         }
52         try
53         {
54             convertFile.getParentFile().mkdirs();
55             convertFile.createNewFile(); //keep two people from converting the same one (i.e. benchmarks)
56

57             //convert it
58
File JavaDoc originalDocumentFile = archive.getOriginalDocument( product );
59             if ( originalDocumentFile == null || !originalDocumentFile.exists() )
60             {
61                 log.error( "original document filename missing " + product.getName() );
62                 inReq.redirect(archive.getCatalogHome() + "/missingfile.html" );
63                 return;
64             }
65             
66             if ( !archive.convert(originalDocumentFile,convertFile) )
67             {
68                 throw new OpenEditException("Could not convert image to: " + inPage.getPath());
69             }
70             else
71             {
72                 super.generate(inReq,convertFile,inOut);
73                 //delete this now?
74
}
75         }
76         catch ( Exception JavaDoc ioe )
77         {
78             inReq.redirect(archive.getCatalogHome() + "/missingfile.html?error=" + URLEncoder.encode(ioe.toString()));
79         }
80         finally
81         {
82             if ( convertFile.length() == 0)
83             {
84                 convertFile.delete();
85                 //404?
86
}
87         }
88     }
89 }
90
Popular Tags