more media handling stuff.
[mir.git] / source / mircoders / producer / ProducerStartPage.java
1 package mircoders.producer;
2
3 import java.io.*;
4 import java.lang.*;
5 import java.util.*;
6
7 import freemarker.template.*;
8
9 import mir.misc.*;
10 import mir.media.*;
11 import mir.storage.*;
12 import mir.module.*;
13 import mir.entity.*;
14
15 import mircoders.module.*;
16 import mircoders.storage.*;
17 import mircoders.entity.*;
18
19
20 public class ProducerStartPage extends Producer {
21
22   private static String startPageTemplate = MirConfig.getProp("Producer.StartPage.Template");
23   private static int itemsPerPage = Integer.parseInt(MirConfig.getProp("Producer.StartPage.Items"));
24   private static int newsPerPage = Integer.parseInt(MirConfig.getProp("Producer.StartPage.Newswire"));
25
26   public static void main(String argv[]){
27     try {
28       // Why are we reloading the configuration here?
29       // is there something I'm missing?
30       // mh. <heckmann@hbe.ca>
31       // Configuration.initConfig(argv[0]);
32       new ProducerStartPage().handle(new PrintWriter(System.out), null);
33     } catch(Exception e) {
34       System.err.println(e.toString());
35     }
36   }
37
38   public void handle(PrintWriter htmlout, EntityUsers user, boolean force,boolean sync)
39     throws StorageObjectException, ModuleException
40   {
41     printHTML(htmlout, "Producer.StartPage: started");
42
43     String extLinkName = MirConfig.getProp("Producer.ExtLinkName");
44     String intLinkName = MirConfig.getProp("Producer.IntLinkName");
45     String mailLinkName = MirConfig.getProp("Producer.MailLinkName");
46     String imageRoot = MirConfig.getProp("Producer.ImageRoot");
47
48     long                sessionConnectTime = 0;
49     long                startTime = (new java.util.Date()).getTime();
50     String              nowWebdbDate = StringUtil.date2webdbDate(new GregorianCalendar());
51     String              whereClause;
52     String              orderBy;
53     FileWriter          outputFile;
54     String              htmlFileName;
55     EntityContent       currentContent;
56     EntityList          entityList;
57     SimpleHash          startPageModel;
58     SimpleList          contentList;
59     String              currentMediaId;
60     EntityList          upMediaEntityList;
61     EntityList          imageEntityList;
62     Entity              mediaType;
63     EntityUploadedMedia uploadedMedia;
64     Class               mediaHandlerClass;
65     MirMedia            mediaHandler;
66     String              mediaHandlerName;
67     String              tinyIcon;
68     String              iconAlt;
69     Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("Producer.Logfile"));
70
71     SimpleList mediaList;
72     SimpleHash contentHash;
73
74     // get the topiclist
75     entityList = topicsModule.getByWhereClause("","title",-1);
76     SimpleList topicList = HTMLTemplateProcessor.makeSimpleList(entityList);
77
78     // get the newswire
79     whereClause="is_published=true AND to_article_type >= 1";
80     entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,newsPerPage);
81     SimpleList newsWireList = HTMLTemplateProcessor.makeSimpleList(entityList);
82     for (int i=0; i < entityList.size();i++) {
83       currentContent = (EntityContent)entityList.elementAt(i);
84       //fetching/setting the images
85       upMediaEntityList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
86       if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) {
87         tinyIcon = null;
88         iconAlt = null;
89         mediaHandler = null;
90         mediaHandlerName = null;
91         for (int n=0; n < upMediaEntityList.size();n++) {
92           uploadedMedia = (EntityUploadedMedia)upMediaEntityList.elementAt(n);
93           mediaType = uploadedMedia.getMediaType();
94
95           //must of had a non-existant to_media_type entry..
96           //let's save our ass.
97           if (mediaType != null) {
98               /*
99                * grrr. why doesn't getId return an int! if It
100                * did I could just compare the value of getId and
101                * pick the biggest one. or is there
102                * another way around this that I am missing?
103                * can we make getIdasInt() or can we just have
104                * another getId() that returns an Int and the VM 
105                * will handle it transparantly? -mh
106                */
107               try {
108                 mediaHandlerName = mediaType.getValue("classname");
109                 mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
110                 mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
111               } catch (Exception e) {
112                 theLog.printError("ProducerStartpage:problem in reflection: "+mediaHandlerName);
113               }
114
115               //the best media type
116               if (mediaHandler.isVideo()) {
117                 tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo");
118                 iconAlt = "Video";
119                 break;
120               } else if (mediaHandler.isAudio()) {
121                 tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
122                 iconAlt = "Audio";
123               } else if (tinyIcon == null && !mediaHandler.isImage()) {
124                 tinyIcon = mediaHandler.getTinyIcon();
125                 iconAlt = mediaHandler.getIconAlt();
126               }
127           }
128         }
129         //it only has image(s)
130         if (tinyIcon == null) {
131           tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage");
132           iconAlt = "Image";
133         }
134
135       // uploadedMedia Entity list is empty.
136       // we only have text
137       } else {
138         tinyIcon = MirConfig.getProp("Producer.Icon.TinyText");
139         iconAlt = "Text";
140       }
141         
142       try{
143         //mediaList = HTMLTemplateProcessor.makeSimpleList(upMediaEntityList);
144         contentHash = (SimpleHash)newsWireList.get(i);
145         contentHash.put("tiny_icon", imageRoot+"/"+tinyIcon);
146         contentHash.put("icon_alt", iconAlt);
147       } catch (Exception e){}
148     }
149
150     // get the startarticle and the related images
151     whereClause="is_published=true AND to_article_type=4";
152     entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
153     //if no startspecial exists
154     if (entityList==null || entityList.size()==0){
155       whereClause="is_published=true AND to_article_type=3";
156       entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
157     }
158     SimpleList startItemList = HTMLTemplateProcessor.makeSimpleList(entityList);
159     for (int i=0; i < entityList.size();i++) {
160       currentContent = (EntityContent)entityList.elementAt(i);
161       //fetching/setting the images
162       imageEntityList = DatabaseContentToMedia.getInstance().getImages(currentContent);
163       if (imageEntityList!=null && imageEntityList.getCount()>=1) {
164         try{
165           mediaList = HTMLTemplateProcessor.makeSimpleList(imageEntityList);
166           contentHash = (SimpleHash)startItemList.get(i);
167           contentHash.put("to_media", mediaList);
168         } catch (Exception e){}
169       }
170     }
171
172     // get the breaking news
173     // only the first 5
174     // todo: the number of breaking_news items have to be configurable
175     ModuleBreaking breakingModule = new ModuleBreaking(DatabaseBreaking.getInstance());
176     entityList = breakingModule.getByWhereClause(null,"webdb_create desc",0,5);
177     SimpleList breakingList = HTMLTemplateProcessor.makeSimpleList(entityList);
178
179     // get the articles
180     whereClause="is_published=true AND to_article_type=2";
181     orderBy="date desc, webdb_create desc";
182     entityList = contentModule.getContent(whereClause, orderBy, 0, itemsPerPage);
183     SimpleList featureList = HTMLTemplateProcessor.makeSimpleList(entityList);
184     for (int i=0; i < entityList.size();i++) {
185       currentContent = (EntityContent)entityList.elementAt(i);
186       //fetching/setting the images
187       imageEntityList = DatabaseContentToMedia.getInstance().getImages(currentContent);
188       if (imageEntityList!=null && imageEntityList.getCount()>=1) {
189         try{
190           mediaList = HTMLTemplateProcessor.makeSimpleList(imageEntityList);
191           contentHash = (SimpleHash)featureList.get(i);
192           contentHash.put("to_media", mediaList);
193         } catch (Exception e){}
194       }
195     }
196
197     // Zusaetzlich Informationen
198     startPageModel = new SimpleHash();
199     startPageModel.put("breakingnews", breakingList);
200     startPageModel.put("topics", topicList);
201     startPageModel.put("newswire", newsWireList);
202     startPageModel.put("startspecial", startItemList);
203     startPageModel.put("features", featureList);
204
205     htmlFileName = producerDocRoot + "/index.shtml";
206     
207     produce(startPageTemplate, htmlFileName, startPageModel, htmlout);
208
209     // Finish
210     sessionConnectTime = new java.util.Date().getTime() - startTime;
211     logHTML(htmlout, "Producer.Startseite finished: " + sessionConnectTime + " ms.");
212     if(sync==true){
213       Helper.rsync();
214       logHTML(htmlout, "Producer.Startseite: rsync done");
215     }
216   }
217 }
218