1 package mircoders.producer;
5 import java.lang.reflect.*;
8 import freemarker.template.*;
16 import mircoders.module.*;
17 import mircoders.storage.*;
18 import mircoders.entity.*;
21 public class ProducerStartPage extends Producer {
23 private static String startPageTemplate = MirConfig.getProp("Producer.StartPage.Template");
24 private static int itemsPerPage = Integer.parseInt(MirConfig.getProp("Producer.StartPage.Items"));
25 private static int newsPerPage = Integer.parseInt(MirConfig.getProp("Producer.StartPage.Newswire"));
28 SimpleHash upMediaSimpleHash;
29 Class mediaHandlerClass;
30 Class mediaStorageClass;
31 String mediaStorageName;
35 public static void main(String argv[]){
37 // Why are we reloading the configuration here?
38 // is there something I'm missing?
39 // mh. <heckmann@hbe.ca>
40 // Configuration.initConfig(argv[0]);
41 new ProducerStartPage().handle(new PrintWriter(System.out), null);
42 } catch(Exception e) {
43 System.err.println(e.toString());
47 public void handle(PrintWriter htmlout, EntityUsers user, boolean force,boolean sync)
48 throws StorageObjectException, ModuleException
50 printHTML(htmlout, "Producer.StartPage: started");
52 String extLinkName = MirConfig.getProp("Producer.ExtLinkName");
53 String intLinkName = MirConfig.getProp("Producer.IntLinkName");
54 String mailLinkName = MirConfig.getProp("Producer.MailLinkName");
55 String imageRoot = MirConfig.getProp("Producer.ImageRoot");
57 long sessionConnectTime = 0;
58 long startTime = (new java.util.Date()).getTime();
59 String nowWebdbDate = StringUtil.date2webdbDate(new GregorianCalendar());
62 FileWriter outputFile;
64 EntityContent currentContent;
65 EntityList entityList;
66 SimpleHash startPageModel;
67 SimpleList contentList;
68 String currentMediaId;
69 EntityList upMediaEntityList;
70 EntityList imageEntityList;
71 EntityList currentMediaList;
73 EntityMedia uploadedMedia;
74 Class mediaHandlerClass=null;
75 MirMedia mediaHandler=null;
76 String mediaHandlerName=null;
77 Database mediaStorage=null;
80 Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home") + "/" +MirConfig.getProp("Producer.Logfile"));
83 SimpleHash contentHash;
86 entityList = topicsModule.getByWhereClause("","title",-1);
87 SimpleList topicList = HTMLTemplateProcessor.makeSimpleList(entityList);
90 entityList = linksImcsModule.getByWhereClause("", "sortpriority, title", -1);
91 SimpleList imcList = HTMLTemplateProcessor.makeSimpleList(entityList);
93 EntityList theParentList = linksImcsModule.getByWhereClause("to_parent_id=NULL", "sortpriority, title", -1);
94 SimpleList parentList = HTMLTemplateProcessor.makeSimpleList(theParentList);
97 whereClause="is_published=true AND to_article_type = 1";
98 entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,newsPerPage);
99 SimpleList newsWireList = HTMLTemplateProcessor.makeSimpleList(entityList);
100 for (int i=0; i < entityList.size();i++) {
101 currentContent = (EntityContent)entityList.elementAt(i);
103 //fetching/setting the images
104 theLog.printDebugInfo("############### getting medialist");
105 upMediaEntityList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
106 theLog.printDebugInfo("############### got medialist");
107 if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) {
111 mediaHandlerName = null;
112 for (int n=0; n < upMediaEntityList.size();n++) {
113 uploadedMedia = (EntityMedia)upMediaEntityList.elementAt(n);
114 mediaType = uploadedMedia.getMediaType();
116 //must of had a non-existant to_media_type entry..
117 //let's save our ass.
118 if (mediaType != null) {
119 mediaHandlerName = mediaType.getValue("classname");
120 mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
121 mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
123 //the "best" media type to show
124 if (mediaHandler.isVideo()) {
125 tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo");
128 } else if (mediaHandler.isAudio()) {
129 tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
131 } else if (tinyIcon == null && !mediaHandler.isImage()) {
132 tinyIcon = mediaHandler.getTinyIcon();
133 iconAlt = mediaHandler.getIconAlt();
137 //it only has image(s)
138 if (tinyIcon == null) {
139 tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage");
143 // uploadedMedia Entity list is empty.
146 tinyIcon = MirConfig.getProp("Producer.Icon.TinyText");
150 //mediaList = HTMLTemplateProcessor.makeSimpleList(upMediaEntityList);
151 contentHash = (SimpleHash)newsWireList.get(i);
152 contentHash.put("tiny_icon", imageRoot+"/"+tinyIcon);
153 contentHash.put("icon_alt", iconAlt);
154 } catch (Exception e) {
155 logHTML(htmlout, "Producer.StartPage error id: " + currentContent.getId() + ", skipping");
156 theLog.printError("Producer.StartPage error id: " + currentContent.getId() + ", skipping"+e.toString());
160 // get the startarticle and the related images
161 whereClause="is_published=true AND to_article_type=4";
162 entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
163 //if no startspecial exists
164 if (entityList==null || entityList.size()==0){
165 whereClause="is_published=true AND to_article_type=3";
166 entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
168 SimpleList startItemList = HTMLTemplateProcessor.makeSimpleList(entityList);
169 for (int k=0; k < entityList.size();k++) {
170 currentContent = (EntityContent)entityList.elementAt(k);
173 currentMediaList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
174 contentHash = (SimpleHash)startItemList.get(k);
175 if (currentMediaList!=null && currentMediaList.getCount()>=1) {
176 SimpleList mediaListAudio = new SimpleList();
177 SimpleList mediaListImages = new SimpleList();
178 SimpleList mediaListVideo = new SimpleList();
179 SimpleList mediaListOther = new SimpleList();
180 for (int n=0; n < currentMediaList.size();n++) {
181 upMedia = currentMediaList.elementAt(n);
182 upMediaSimpleHash = HTMLTemplateProcessor.makeSimpleHash(upMedia);
183 mediaType = ((EntityMedia)upMedia).getMediaType();
184 //must be a non-existant to_media_type entry..
185 if (mediaType != null) {
186 mediaHandlerName = mediaType.getValue("classname");
187 mediaStorageName = mediaType.getValue("tablename");
188 mediaStorageClass = Class.forName("mircoders.storage.Database"+mediaStorageName);
189 mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
190 mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
191 Method m = mediaStorageClass.getMethod("getInstance", null);
192 mediaStorage = (Database)m.invoke(null, null);
193 //we most likely need further info
194 upMedia = mediaStorage.selectById(upMedia.getId());
195 upMediaSimpleHash.put("url", mediaHandler.getListView(upMedia, mediaType));
196 if (upMedia.getValue("is_published") == "1") {
197 if (mediaHandler.isImage()) {
198 mediaListImages.add(upMediaSimpleHash);
199 } else if (mediaHandler.isAudio()) {
200 mediaListAudio.add(upMediaSimpleHash);
201 } else if (mediaHandler.isVideo()) {
202 mediaListVideo.add(upMediaSimpleHash);
204 mediaListOther.add(upMediaSimpleHash);
206 } //end if is_published
207 } //end if media_type != null
209 contentHash.put("to_media_audio", mediaListAudio);
210 contentHash.put("to_media_images", mediaListImages);
211 contentHash.put("to_media_video", mediaListVideo);
212 contentHash.put("to_media_other", mediaListOther);
213 } //end if currentMediaList != null
215 if ( ((SimpleScalar)contentHash.get("is_html")).getAsString().equals("0") ) {
216 SimpleScalar tempScalar = (SimpleScalar)contentHash.get("description");
217 String temp = StringUtil.createHTML(tempScalar.getAsString(),imageRoot,mailLinkName,extLinkName,intLinkName);
218 temp = StringUtil.decodeHTMLinTags(temp);
219 contentHash.put("description",temp);
222 } catch (Exception e) {
223 logHTML(htmlout, "Producer.StartPage error id: " + currentContent.getId() + ", skipping");
224 theLog.printError("Producer.StartPage error id: " + currentContent.getId() + ", skipping"+e.toString());
226 } //enf for featurueList.size..
228 // get the breaking news
230 // todo: the number of breaking_news items have to be configurable
231 ModuleBreaking breakingModule = new ModuleBreaking(DatabaseBreaking.getInstance());
232 entityList = breakingModule.getByWhereClause(null,"webdb_create desc",0,5);
233 SimpleList breakingList = HTMLTemplateProcessor.makeSimpleList(entityList);
236 whereClause="is_published=true AND to_article_type=2";
237 orderBy="date desc, webdb_create desc";
238 entityList = contentModule.getContent(whereClause, orderBy, 0, itemsPerPage);
239 SimpleList featureList = HTMLTemplateProcessor.makeSimpleList(entityList);
240 for (int k=0; k < entityList.size();k++) {
241 currentContent = (EntityContent)entityList.elementAt(k);
244 currentMediaList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
245 contentHash = (SimpleHash)featureList.get(k);
246 if (currentMediaList!=null && currentMediaList.getCount()>=1) {
247 SimpleList mediaListAudio = new SimpleList();
248 SimpleList mediaListImages = new SimpleList();
249 SimpleList mediaListVideo = new SimpleList();
250 SimpleList mediaListOther = new SimpleList();
251 for (int n=0; n < currentMediaList.size();n++) {
252 upMedia = currentMediaList.elementAt(n);
253 upMediaSimpleHash = HTMLTemplateProcessor.makeSimpleHash(upMedia);
254 mediaType = ((EntityMedia)upMedia).getMediaType();
255 //must be a non-existant to_media_type entry..
256 if (mediaType != null) {
257 mediaHandlerName = mediaType.getValue("classname");
258 mediaStorageName = mediaType.getValue("tablename");
259 mediaStorageClass = Class.forName("mircoders.storage.Database"+mediaStorageName);
260 mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
261 mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
262 Method m = mediaStorageClass.getMethod("getInstance", null);
263 mediaStorage = (Database)m.invoke(null, null);
264 //we most likely need further info
265 upMedia = mediaStorage.selectById(upMedia.getId());
266 upMediaSimpleHash.put("url", mediaHandler.getListView(upMedia, mediaType));
267 if (upMedia.getValue("is_published") == "1") {
268 if (mediaHandler.isImage()) {
269 mediaListImages.add(upMediaSimpleHash);
270 } else if (mediaHandler.isAudio()) {
271 mediaListAudio.add(upMediaSimpleHash);
272 } else if (mediaHandler.isVideo()) {
273 mediaListVideo.add(upMediaSimpleHash);
275 mediaListOther.add(upMediaSimpleHash);
277 } //end if is_published
278 } //end if media_type != null
280 contentHash.put("to_media_audio", mediaListAudio);
281 contentHash.put("to_media_images", mediaListImages);
282 contentHash.put("to_media_video", mediaListVideo);
283 contentHash.put("to_media_other", mediaListOther);
284 } //end if currentMediaList != null
287 if ( ((SimpleScalar)contentHash.get("is_html")).getAsString().equals("0") ) {
288 SimpleScalar tempScalar = (SimpleScalar)contentHash.get("description");
289 String temp = StringUtil.createHTML(tempScalar.getAsString(),imageRoot,mailLinkName,extLinkName,intLinkName);
290 temp = StringUtil.decodeHTMLinTags(temp);
291 contentHash.put("description",temp);
294 } catch (Exception e) {
295 logHTML(htmlout, "Producer.StartPage error id: " + currentContent.getId() + ", skipping");
296 theLog.printError("Producer.StartPage error id: " + currentContent.getId() + ", skipping"+e.toString());
298 } //enf for featurueList.size..
300 // Zusaetzlich Informationen
301 startPageModel = new SimpleHash();
302 startPageModel.put("breakingnews", breakingList);
303 startPageModel.put("topics", topicList);
304 startPageModel.put("imclist", imcList);
305 startPageModel.put("parentlist", parentList);
306 startPageModel.put("newswire", newsWireList);
307 startPageModel.put("startspecial", startItemList);
308 startPageModel.put("features", featureList);
310 htmlFileName = producerDocRoot + "/index.shtml";
312 produce(startPageTemplate, htmlFileName, startPageModel, htmlout);
315 sessionConnectTime = new java.util.Date().getTime() - startTime;
316 logHTML(htmlout, "Producer.Startseite finished: " + sessionConnectTime + " ms.");
319 logHTML(htmlout, "Producer.Startseite: rsync done");