View Javadoc
1 // $Id: TemplateManager.java,v 1.1 2004/02/12 22:38:15 powerpete Exp $
2 // [JMP, 09.02.2004] Created this file.
3 package org.jface.stepmt.demoapp.templates;
4
5 import java.awt.print.Pageable;
6 import java.io.BufferedInputStream;
7 import java.io.File;
8 import java.io.FileFilter;
9 import java.io.FileInputStream;
10 import java.io.IOException;
11 import java.io.InputStream;
12 import java.util.Collection;
13 import java.util.TreeSet;
14
15 import org.apache.commons.logging.Log;
16 import org.apache.commons.logging.LogFactory;
17 import org.jface.stepmt.demoapp.frames.EditorFrame;
18 import org.jface.stepmt.demoapp.frames.PreviewFrame;
19 import org.jface.stepmt.demoapp.menus.ExportMenu;
20 import org.jface.stepmt.transform.PrinterPipeline;
21 import org.jface.stepmt.transform.config.PipelineTemplate;
22 import org.xml.sax.SAXException;
23
24 /***
25 * @author <a href="mailto:powerpete@users.sf.net">M. Petersen</a>
26 * @version $Id: TemplateManager.java,v 1.1 2004/02/12 22:38:15 powerpete Exp $
27 */
28 public class TemplateManager
29 {
30 private static final Log LOG = LogFactory.getLog(TemplateManager.class);
31 private static TemplateManager instance;
32 private Collection templates = new TreeSet();
33 private static PipelineTemplate currentTemplate;
34 private static EditorFrame editorFrame;
35 private static PreviewFrame previewFrame;
36 private static Updater updater;
37 private String filename;
38 private ExportMenu exportMenu;
39
40 private TemplateManager()
41 {
42 File[] directories = new File("templates/").listFiles(new FileFilter()
43 {
44 public boolean accept(File file)
45 {
46 if (file.isDirectory())
47 {
48 String name = createTemplateXmlFilename(file);
49 return new File(name).exists();
50 }
51 return false;
52 }
53 });
54 for (int i = 0; i < directories.length; i++)
55 {
56 loadTemplate(directories[i]);
57 }
58 }
59
60 private static String createTemplateXmlFilename(File directory)
61 {
62 return directory.getPath() + "/template.xml";
63 }
64
65 private void loadTemplate(File dir)
66 {
67 InputStream in = null;
68 try
69 {
70 String filename = createTemplateXmlFilename(dir);
71 in = new BufferedInputStream(new FileInputStream(filename));
72 PipelineTemplate template = new PipelineTemplate(in);
73 if (currentTemplate == null)
74 {
75 setCurrentTemplate(template);
76 }
77 templates.add(template);
78 }
79 catch (Exception e)
80 {
81 LOG.fatal("Error while loading template " + dir + ".", e);
82 }
83 finally
84 {
85 try
86 {
87 in.close();
88 }
89 catch (IOException e)
90 {}
91 }
92 }
93
94 public static TemplateManager getInstance()
95 {
96 if (instance == null)
97 {
98 instance = new TemplateManager();
99 }
100 return instance;
101 }
102
103 public Collection getTemplates()
104 {
105 return templates;
106 }
107
108 public void setCurrentTemplate(PipelineTemplate template)
109 {
110 TemplateManager.currentTemplate = template;
111 if (exportMenu != null)
112 {
113 exportMenu.setTemplate(template);
114 }
115 updatePreview();
116 }
117
118 public void setEditor(EditorFrame editorFrame)
119 {
120 TemplateManager.editorFrame = editorFrame;
121 }
122
123 public void insertExampleText()
124 {
125 setEditorText(currentTemplate.getExample());
126 }
127
128 public void setPreview(PreviewFrame previewFrame)
129 {
130 TemplateManager.previewFrame = previewFrame;
131 }
132
133 public void updatePreview()
134 {
135 if (updater == null)
136 {
137 updater = new Updater();
138 updater.start();
139 }
140 else
141 {
142 updater.refresh();
143 }
144 }
145
146 private static class Updater extends Thread
147 {
148 private boolean isRunning;
149 private long stopMillis;
150
151 public Updater()
152 {
153 refresh();
154 }
155
156 public void run()
157 {
158 while (System.currentTimeMillis() < stopMillis)
159 {
160 try
161 {
162 Thread.sleep(100);
163 }
164 catch (InterruptedException e)
165 {
166 LOG.fatal("Error while waiting for update.", e);
167 }
168 }
169 // TODO Move the transformation and "printing" code into another
170 // class.
171 PrinterPipeline printerPipeline =
172 currentTemplate.getPrinterPipeline();
173 try
174 {
175 if (printerPipeline != null
176 && currentTemplate != null
177 && editorFrame != null)
178 {
179 printerPipeline.generate(
180 currentTemplate.getRegion(),
181 editorFrame.getText());
182 }
183 }
184 catch (SAXException e)
185 {
186 LOG.fatal("Error while updating preview.", e);
187 }
188 Pageable pageable = printerPipeline.getPageable();
189 if (previewFrame != null && pageable != null)
190 {
191 previewFrame.setPageable(pageable);
192 }
193 updater = null;
194 }
195
196 public void refresh()
197 {
198 stopMillis = System.currentTimeMillis() + 1000;
199 }
200 }
201
202 public String getFilename()
203 {
204 return filename;
205 }
206
207 public void clearEditor()
208 {
209 setEditorText("");
210 filename = null;
211 }
212
213 public void setEditorText(String text, String filename)
214 {
215 if (text != null)
216 {
217 this.filename = filename;
218 }
219 setEditorText(text);
220 }
221
222 public void setEditorText(String text)
223 {
224 if (text != null)
225 {
226 editorFrame.setText(text);
227 updatePreview();
228 }
229 }
230
231 public String getText()
232 {
233 return editorFrame.getText();
234 }
235
236 public void setFilename(String filename)
237 {
238 this.filename = filename;
239 }
240
241 public PipelineTemplate getCurrentTemplate()
242 {
243 return currentTemplate;
244 }
245
246 public void templateHasChanged()
247 {
248 exportMenu.setTemplate(currentTemplate);
249 }
250
251 public void setExportMenu(ExportMenu exportMenu)
252 {
253 this.exportMenu = exportMenu;
254 exportMenu.setTemplate(currentTemplate);
255 }
256 }
This page was automatically generated by Maven