93b4ff610e706d713d44d0e0ae767a0780f765d5
[mir.git] / source / mircoders / producer / ProducerStartPage.java
1 package mircoders.producer;
2
3 import java.io.*;
4 import java.lang.*;
5 import java.lang.reflect.*;
6 import java.util.*;
7
8 import freemarker.template.*;
9
10 import mir.misc.*;
11 import mir.media.*;
12 import mir.storage.*;
13 import mir.module.*;
14 import mir.entity.*;
15
16 import mircoders.module.*;
17 import mircoders.storage.*;
18 import mircoders.entity.*;
19
20
21 public class ProducerStartPage extends Producer {
22
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"));
26   Entity              mediaType;
27   Entity              upMedia;
28   SimpleHash          upMediaSimpleHash;
29   Class               mediaHandlerClass;
30   Class               mediaStorageClass;
31   String              mediaStorageName;
32
33
34
35   public static void main(String argv[]){
36     try {
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());
44     }
45   }
46
47   public void handle(PrintWriter htmlout, EntityUsers user, boolean force,boolean sync)
48     throws StorageObjectException, ModuleException
49   {
50     printHTML(htmlout, "Producer.StartPage: started");
51
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");
56
57     long                sessionConnectTime = 0;
58     long                startTime = (new java.util.Date()).getTime();
59     String              nowWebdbDate = StringUtil.date2webdbDate(new GregorianCalendar());
60     String              whereClause;
61     String              orderBy;
62     FileWriter          outputFile;
63     String              htmlFileName;
64     EntityContent       currentContent;
65     EntityList          entityList;
66     SimpleHash          startPageModel;
67     SimpleList          contentList;
68     String              currentMediaId;
69     EntityList          upMediaEntityList;
70     EntityList          imageEntityList;
71     EntityList          currentMediaList;
72     Entity              mediaType;
73     EntityMedia         uploadedMedia;
74     Class               mediaHandlerClass=null;
75     MirMedia            mediaHandler=null;
76     String              mediaHandlerName=null;
77     Database            mediaStorage=null;
78     String              tinyIcon;
79     String              iconAlt;
80     Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home") + "/" +MirConfig.getProp("Producer.Logfile"));
81
82     SimpleList mediaList;
83     SimpleHash contentHash;
84
85     // get the topiclist
86     entityList = topicsModule.getByWhereClause("","title",-1);
87     SimpleList topicList = HTMLTemplateProcessor.makeSimpleList(entityList);
88
89     // get the imclinks
90     entityList = linksImcsModule.getByWhereClause("", "sortpriority, title", -1);
91     SimpleList imcList = HTMLTemplateProcessor.makeSimpleList(entityList);
92
93     EntityList theParentList = linksImcsModule.getByWhereClause("to_parent_id=NULL", "sortpriority, title", -1);
94     SimpleList parentList = HTMLTemplateProcessor.makeSimpleList(theParentList);
95
96     // get the newswire
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);
102       try {
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) {
108             tinyIcon = null;
109             iconAlt = null;
110             mediaHandler = null;
111             mediaHandlerName = null;
112             for (int n=0; n < upMediaEntityList.size();n++) {
113               uploadedMedia = (EntityMedia)upMediaEntityList.elementAt(n);
114               mediaType = uploadedMedia.getMediaType();
115
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();
122
123                   //the "best" media type to show
124                   if (mediaHandler.isVideo()) {
125                     tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo");
126                     iconAlt = "Video";
127                     break;
128                   } else if (mediaHandler.isAudio()) {
129                     tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
130                     iconAlt = "Audio";
131                   } else if (tinyIcon == null && !mediaHandler.isImage()) {
132                     tinyIcon = mediaHandler.getTinyIcon();
133                     iconAlt = mediaHandler.getIconAlt();
134                   }
135               }
136             }
137             //it only has image(s)
138             if (tinyIcon == null) {
139               tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage");
140               iconAlt = "Image";
141             }
142
143           // uploadedMedia Entity list is empty.
144           // we only have text
145           } else {
146             tinyIcon = MirConfig.getProp("Producer.Icon.TinyText");
147             iconAlt = "Text";
148           }
149
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());
157       }
158     }
159
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);
167     }
168     SimpleList startItemList = HTMLTemplateProcessor.makeSimpleList(entityList);
169     for (int k=0; k < entityList.size();k++) {
170       currentContent = (EntityContent)entityList.elementAt(k);
171       try {
172           //media to content
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);
203                   } else {
204                     mediaListOther.add(upMediaSimpleHash);
205                   }
206                 } //end if is_published
207               } //end if media_type != null
208             } //end for
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
214                                         //convert to html
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);
220                                         }
221
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());
225       }
226     } //enf for featurueList.size..
227
228     // get the breaking news
229     // only the first 5
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);
234
235     // get the articles
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);
242       try {
243           //media to content
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);
274                   } else {
275                     mediaListOther.add(upMediaSimpleHash);
276                   }
277                 } //end if is_published
278               } //end if media_type != null
279             } //end for
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
285
286                                         //convert to html
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);
292                                         }
293
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());
297       }
298     } //enf for featurueList.size..
299
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);
309
310     htmlFileName = producerDocRoot + "/index.shtml";
311
312     produce(startPageTemplate, htmlFileName, startPageModel, htmlout);
313
314     // Finish
315     sessionConnectTime = new java.util.Date().getTime() - startTime;
316     logHTML(htmlout, "Producer.Startseite finished: " + sessionConnectTime + " ms.");
317     if(sync==true){
318       Helper.rsync();
319       logHTML(htmlout, "Producer.Startseite: rsync done");
320     }
321   }
322 }
323