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 EntityUploadedMedia 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);
102 //fetching/setting the images
103 upMediaEntityList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
104 if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) {
108 mediaHandlerName = null;
109 for (int n=0; n < upMediaEntityList.size();n++) {
110 uploadedMedia = (EntityUploadedMedia)upMediaEntityList.elementAt(n);
111 mediaType = uploadedMedia.getMediaType();
113 //must of had a non-existant to_media_type entry..
114 //let's save our ass.
115 if (mediaType != null) {
117 * grrr. why doesn't getId return an int! if It
118 * did I could just compare the value of getId and
119 * pick the biggest one. or is there
120 * another way around this that I am missing?
121 * can we make getIdasInt() or can we just have
122 * another getId() that returns an Int and the VM
123 * will handle it transparantly? -mh
126 mediaHandlerName = mediaType.getValue("classname");
127 mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
128 mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
129 } catch (Exception e) {
130 theLog.printError("ProducerStartpage:problem in reflection: "+mediaHandlerName);
133 //the best media type
134 if (mediaHandler.isVideo()) {
135 tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo");
138 } else if (mediaHandler.isAudio()) {
139 tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
141 } else if (tinyIcon == null && !mediaHandler.isImage()) {
142 tinyIcon = mediaHandler.getTinyIcon();
143 iconAlt = mediaHandler.getIconAlt();
147 //it only has image(s)
148 if (tinyIcon == null) {
149 tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage");
153 // uploadedMedia Entity list is empty.
156 tinyIcon = MirConfig.getProp("Producer.Icon.TinyText");
161 //mediaList = HTMLTemplateProcessor.makeSimpleList(upMediaEntityList);
162 contentHash = (SimpleHash)newsWireList.get(i);
163 contentHash.put("tiny_icon", imageRoot+"/"+tinyIcon);
164 contentHash.put("icon_alt", iconAlt);
165 } catch (Exception e){}
168 // get the startarticle and the related images
169 whereClause="is_published=true AND to_article_type=4";
170 entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
171 //if no startspecial exists
172 if (entityList==null || entityList.size()==0){
173 whereClause="is_published=true AND to_article_type=3";
174 entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
176 SimpleList startItemList = HTMLTemplateProcessor.makeSimpleList(entityList);
177 for (int k=0; k < entityList.size();k++) {
178 currentContent = (EntityContent)entityList.elementAt(k);
180 currentMediaList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
181 if (currentMediaList!=null && currentMediaList.getCount()>=1) {
182 SimpleList mediaListAudio = new SimpleList();
183 SimpleList mediaListImages = new SimpleList();
184 SimpleList mediaListVideo = new SimpleList();
185 SimpleList mediaListOther = new SimpleList();
186 //SimpleHash allMediaSimpleHash = new SimpleHash();
187 for (int n=0; n < currentMediaList.size();n++) {
188 upMedia = currentMediaList.elementAt(n);
189 upMediaSimpleHash = HTMLTemplateProcessor.makeSimpleHash(upMedia);
190 mediaType = ((EntityUploadedMedia)upMedia).getMediaType();
191 //must be a non-existant to_media_type entry..
192 if (mediaType != null) {
194 mediaHandlerName = mediaType.getValue("classname");
195 mediaStorageName = mediaType.getValue("tablename");
196 mediaStorageClass = Class.forName("mircoders.storage.Database"+mediaStorageName);
197 mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
198 mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
199 if(!mediaStorageName.equals(new String("UploadedMedia"))) {
200 Method m = mediaStorageClass.getMethod("getInstance", null);
201 mediaStorage = (Database)m.invoke(null, null);
202 //we most likely need further info
203 upMedia = mediaStorage.selectById(upMedia.getId());
205 } catch (Exception e) {
206 theLog.printError("ProducerList: problem in reflection: "+mediaHandlerName);
208 upMediaSimpleHash.put("url", mediaHandler.getListView(upMedia, mediaType));
209 if (upMedia.getValue("is_published") == "1") {
210 if (mediaHandler.isImage()) {
211 mediaListImages.add(upMediaSimpleHash);
212 } else if (mediaHandler.isAudio()) {
213 mediaListAudio.add(upMediaSimpleHash);
214 } else if (mediaHandler.isVideo()) {
215 mediaListVideo.add(upMediaSimpleHash);
217 mediaListOther.add(upMediaSimpleHash);
219 } //end if is_published
220 } //end if media_type != null
223 //SimpleList contentList = (SimpleList)mergeData.get("contentlist");
224 contentHash = (SimpleHash)startItemList.get(k);
225 contentHash.put("to_media_audio", mediaListAudio);
226 contentHash.put("to_media_images", mediaListImages);
227 contentHash.put("to_media_video", mediaListVideo);
228 contentHash.put("to_media_other", mediaListOther);
229 } catch (Exception e){}
230 } //end if currentMediaList != null
231 } //enf for featurueList.size..
235 /*for (int i=0; i < entityList.size();i++) {
236 currentContent = (EntityContent)entityList.elementAt(i);
237 //fetching/setting the images
238 imageEntityList = DatabaseContentToMedia.getInstance().getImages(currentContent);
239 if (imageEntityList!=null && imageEntityList.getCount()>=1) {
241 mediaList = HTMLTemplateProcessor.makeSimpleList(imageEntityList);
242 contentHash = (SimpleHash)startItemList.get(i);
243 contentHash.put("to_media", mediaList);
244 } catch (Exception e){}
248 // get the breaking news
250 // todo: the number of breaking_news items have to be configurable
251 ModuleBreaking breakingModule = new ModuleBreaking(DatabaseBreaking.getInstance());
252 entityList = breakingModule.getByWhereClause(null,"webdb_create desc",0,5);
253 SimpleList breakingList = HTMLTemplateProcessor.makeSimpleList(entityList);
256 whereClause="is_published=true AND to_article_type=2";
257 orderBy="date desc, webdb_create desc";
258 entityList = contentModule.getContent(whereClause, orderBy, 0, itemsPerPage);
259 SimpleList featureList = HTMLTemplateProcessor.makeSimpleList(entityList);
260 for (int k=0; k < entityList.size();k++) {
261 currentContent = (EntityContent)entityList.elementAt(k);
263 currentMediaList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
264 if (currentMediaList!=null && currentMediaList.getCount()>=1) {
265 SimpleList mediaListAudio = new SimpleList();
266 SimpleList mediaListImages = new SimpleList();
267 SimpleList mediaListVideo = new SimpleList();
268 SimpleList mediaListOther = new SimpleList();
269 //SimpleHash allMediaSimpleHash = new SimpleHash();
270 for (int n=0; n < currentMediaList.size();n++) {
271 upMedia = currentMediaList.elementAt(n);
272 upMediaSimpleHash = HTMLTemplateProcessor.makeSimpleHash(upMedia);
273 mediaType = ((EntityUploadedMedia)upMedia).getMediaType();
274 //must be a non-existant to_media_type entry..
275 if (mediaType != null) {
277 mediaHandlerName = mediaType.getValue("classname");
278 mediaStorageName = mediaType.getValue("tablename");
279 mediaStorageClass = Class.forName("mircoders.storage.Database"+mediaStorageName);
280 mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
281 mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
282 if(!mediaStorageName.equals(new String("UploadedMedia"))) {
283 Method m = mediaStorageClass.getMethod("getInstance", null);
284 mediaStorage = (Database)m.invoke(null, null);
285 //we most likely need further info
286 upMedia = mediaStorage.selectById(upMedia.getId());
288 } catch (Exception e) {
289 theLog.printError("ProducerList: problem in reflection: "+mediaHandlerName);
291 upMediaSimpleHash.put("url", mediaHandler.getListView(upMedia, mediaType));
292 if (upMedia.getValue("is_published") == "1") {
293 if (mediaHandler.isImage()) {
294 mediaListImages.add(upMediaSimpleHash);
295 } else if (mediaHandler.isAudio()) {
296 mediaListAudio.add(upMediaSimpleHash);
297 } else if (mediaHandler.isVideo()) {
298 mediaListVideo.add(upMediaSimpleHash);
300 mediaListOther.add(upMediaSimpleHash);
302 } //end if is_published
303 } //end if media_type != null
306 //SimpleList contentList = (SimpleList)mergeData.get("contentlist");
307 contentHash = (SimpleHash)featureList.get(k);
308 contentHash.put("to_media_audio", mediaListAudio);
309 contentHash.put("to_media_images", mediaListImages);
310 contentHash.put("to_media_video", mediaListVideo);
311 contentHash.put("to_media_other", mediaListOther);
312 } catch (Exception e){}
313 } //end if currentMediaList != null
314 } //enf for featurueList.size..
318 /*for (int i=0; i < entityList.size();i++) {
319 currentContent = (EntityContent)entityList.elementAt(i);
320 //fetching/setting the images
321 imageEntityList = DatabaseContentToMedia.getInstance().getImages(currentContent);
322 if (imageEntityList!=null && imageEntityList.getCount()>=1) {
324 mediaList = HTMLTemplateProcessor.makeSimpleList(imageEntityList);
325 contentHash = (SimpleHash)featureList.get(i);
326 contentHash.put("to_media", mediaList);
327 } catch (Exception e){}
331 // Zusaetzlich Informationen
332 startPageModel = new SimpleHash();
333 startPageModel.put("breakingnews", breakingList);
334 startPageModel.put("topics", topicList);
335 startPageModel.put("imclist", imcList);
336 startPageModel.put("parentlist", parentList);
337 startPageModel.put("newswire", newsWireList);
338 startPageModel.put("startspecial", startItemList);
339 startPageModel.put("features", featureList);
341 htmlFileName = producerDocRoot + "/index.shtml";
343 produce(startPageTemplate, htmlFileName, startPageModel, htmlout);
346 sessionConnectTime = new java.util.Date().getTime() - startTime;
347 logHTML(htmlout, "Producer.Startseite finished: " + sessionConnectTime + " ms.");
350 logHTML(htmlout, "Producer.Startseite: rsync done");