View Javadoc

1   // $Id: JPlogGenerator.java,v 1.2 2004/06/20 17:41:48 powerpete Exp $
2   // [JMP, 16.06.2004] created this file.
3   package org.jface.jplog;
4   
5   import java.awt.image.BufferedImage;
6   import java.io.BufferedInputStream;
7   import java.io.BufferedOutputStream;
8   import java.io.File;
9   import java.io.FileInputStream;
10  import java.io.FileOutputStream;
11  import java.io.IOException;
12  import java.io.InputStream;
13  import java.io.OutputStream;
14  import java.util.Collection;
15  import java.util.Iterator;
16  import java.util.SortedSet;
17  import java.util.TreeSet;
18  
19  import javax.imageio.ImageIO;
20  import javax.xml.transform.TransformerException;
21  
22  import jface.util.factory.FactoryException;
23  import jface.util.factory.XmlObjectFactory;
24  import jface.util.factory.XmlObjectWriter;
25  
26  import org.jface.jplog.ftp.FtpUtils;
27  import org.jface.jplog.util.FileUtils;
28  import org.jface.jplog.util.ImageUtils;
29  import org.jface.jplog.xsl.HtmlGenerator;
30  
31  /***
32   * @author <a href="mailto:powerpete@users.sf.net">Moritz Petersen </a>
33   * @version $Id: JPlogGenerator.java,v 1.2 2004/06/20 17:41:48 powerpete Exp $
34   */
35  public class JPlogGenerator
36  {
37      private String workdir;
38      private BufferedImage image;
39      private SortedSet dataSet = new TreeSet();
40  
41      public void setImage(BufferedImage image)
42      {
43          this.image = image;
44      }
45  
46      public void setWorkdir(String workdir)
47      {
48          this.workdir = FileUtils.ensureDirectoryFormat(workdir);
49          new File(this.workdir).mkdirs();
50      }
51  
52      public void setData(JPlogData data)
53      {
54          dataSet.add(data);
55      }
56  
57      public void publish() throws IOException, FactoryException,
58          TransformerException
59      {
60          String dataFileName = workdir + "jplog-data.xml";
61          File dataFile = new File(dataFileName);
62          if (dataFile.exists())
63          {
64              InputStream in = new BufferedInputStream(new FileInputStream(
65                  dataFile));
66              XmlObjectFactory factory = new XmlObjectFactory();
67              factory.read(in);
68              Collection allData = factory.getAll("data");
69              if (allData != null)
70              {
71                  dataSet.addAll(allData);
72              }
73              in.close();
74          }
75          OutputStream out = new BufferedOutputStream(new FileOutputStream(
76              dataFile));
77          XmlObjectWriter writer = new XmlObjectWriter(out, "jplog");
78          writer.write("data", dataSet);
79          writer.close();
80  
81          HtmlGenerator generator = new HtmlGenerator();
82          int id = ((JPlogData) dataSet.first()).getId();
83          ImageIO.write(image, "JPG", new File(workdir + "image_" + id + ".jpg"));
84          generator.generate("index.xsl", dataFileName, workdir + "index.html");
85          for (Iterator it = dataSet.iterator(); it.hasNext();)
86          {
87              JPlogData data = (JPlogData) it.next();
88              generate(generator, data, dataFileName);
89          }
90          FtpUtils.sync(
91              ConnectionProperties.value("host"),
92              ConnectionProperties.value("user"),
93              ConnectionProperties.value("pass"),
94              ConnectionProperties.value("dir"),
95              workdir);
96      }
97  
98      private void generate(
99          HtmlGenerator generator,
100         JPlogData data,
101         String dataFileName) throws IOException, TransformerException
102     {
103         int id = data.getId();
104         File imageFile = new File(workdir + "image_" + id + ".jpg");
105         File detailFile = new File(workdir + "detail_" + id + ".html");
106         File thumbnailFile = new File(workdir + "thumbnail_" + id + ".jpg");
107         if (imageFile.exists())
108         {
109             if (!thumbnailFile.exists())
110             {
111                 BufferedImage image = ImageIO.read(imageFile);
112                 BufferedImage thumbnail = ImageUtils.createThumbnail(image, 85);
113                 ImageIO.write(thumbnail, "JPG", thumbnailFile);
114             }
115             if (!detailFile.exists())
116             {
117                 generator.setParameter("id", String.valueOf(id));
118                 generator.generate(
119                     "detail.xsl",
120                     dataFileName,
121                     detailFile.getPath());
122             }
123         }
124         else
125         {
126             detailFile.delete();
127             thumbnailFile.delete();
128         }
129     }
130 }