1
2
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 }