1 /**************************************************************************
2 Copyright 2005 Webstersmalley
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15 *************************************************************************/
16
17
18 package com.webstersmalley.picweb.offline;
19
20 import java.io.File;
21 import java.io.FileNotFoundException;
22 import java.util.Iterator;
23 import java.util.List;
24
25 import org.apache.commons.logging.Log;
26 import org.apache.commons.logging.LogFactory;
27
28 import com.webstersmalley.picweb.offline.config.ConfigurationModel;
29 import com.webstersmalley.picweb.utils.FolderContents;
30 import com.webstersmalley.picweb.utils.IOUtils;
31 import com.webstersmalley.picweb.utils.StringMapper;
32
33 /***
34 * @author Matthew Smalley
35 */
36 public class HomepageGenerator
37 {
38 /*** Logger for the class. */
39 private static Log log = LogFactory.getLog(HomepageGenerator.class);
40
41 private ConfigurationModel model;
42 private StringMapper mapper;
43 private TemplateModel template;
44 private FolderContents folder;
45 private int folderId = 0;
46
47 /***
48 * @param model
49 * @param mapper
50 * @param template
51 * @param pictures
52 */
53 public HomepageGenerator(ConfigurationModel model, StringMapper mapper, TemplateModel template, FolderContents folder)
54 {
55 this.model = model;
56 this.mapper = mapper;
57 this.template = template;
58 this.folder = folder;
59 }
60
61 public void generate() throws FileNotFoundException
62 {
63 writeFramesetPage();
64 writeHeaderPage();
65 writeFooterPage();
66 writeMainPage();
67 writeContentsPage();
68 }
69
70 private void writeFramesetPage() throws FileNotFoundException
71 {
72 IOUtils.writeFile(model.getOutputFolder() + File.separator + "index.html", mapper.map(template.getFramesetPage()));
73 }
74
75 private void writeHeaderPage() throws FileNotFoundException
76 {
77 IOUtils.writeFile(model.getOutputFolder() + File.separator + "header.html", mapper.map(template.getHeaderPage()));
78 }
79
80 private void writeFooterPage() throws FileNotFoundException
81 {
82 IOUtils.writeFile(model.getOutputFolder() + File.separator + "footer.html", mapper.map(template.getFooterPage()));
83 }
84
85 private void writeMainPage() throws FileNotFoundException
86 {
87 IOUtils.writeFile(model.getOutputFolder() + File.separator + "main.html", mapper.map(template.getMainPage()));
88 }
89
90 private void writeContentsPage() throws FileNotFoundException
91 {
92 StringBuffer contents = new StringBuffer();
93 contents.append(mapper.map(template.getContentsPageHeader()));
94 contents.append(getFolderString(folder));
95 contents.append(mapper.map(template.getContentsPageFooter()));
96 IOUtils.writeFile(model.getOutputFolder() + File.separator + "contents.html", contents.toString());
97 }
98
99 private String getFolderString(FolderContents folder)
100 {
101 folderId++;
102 String folderIdString = new Integer(folderId).toString();
103 String childrenString = "";
104 List children = folder.getChildren();
105 Iterator it = children.iterator();
106 while (it.hasNext())
107 {
108 FolderContents child = (FolderContents)it.next();
109 childrenString += getFolderString(child);
110 }
111 mapper.addMapping("children", childrenString);
112 mapper.addMapping("folder-id", folderIdString);
113 mapper.addMapping("folder-path", folder.getRelativePath().replaceAll("////", "/").replaceAll("'", ""));
114 if (folder.hasChildren())
115 {
116 mapper.addMapping("folder-expansion-image", mapper.map(template.getContentsPageImageChildren()));
117 }
118 else
119 {
120 mapper.addMapping("folder-expansion-image", mapper.map(template.getContentsPageImageNoChildren()));
121 }
122 mapper.addMapping("folder-name", folder.getDisplayName());
123 return mapper.map(template.getContentsPageFolder());
124 }
125
126 }