5b478b737832e2c3590730fc1f419e1ba3587b5c
[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.storage.*;
11 import mir.module.*;
12 import mir.entity.*;
13
14 import mircoders.module.*;
15 import mircoders.storage.*;
16 import mircoders.entity.*;
17
18
19 public class ProducerStartPage extends Producer {
20
21   private static String startPageTemplate = MirConfig.getProp("Producer.StartPage.Template");
22   private static int itemsPerPage = Integer.parseInt(MirConfig.getProp("Producer.StartPage.Items"));
23   private static int newsPerPage = Integer.parseInt(MirConfig.getProp("Producer.StartPage.Newswire"));
24
25   public static void main(String argv[]){
26     try {
27       // Why are we reloading the configuration here?
28       // is there something I'm missing?
29       // mh. <heckmann@hbe.ca>
30       // Configuration.initConfig(argv[0]);
31       new ProducerStartPage().handle(new PrintWriter(System.out), null);
32     } catch(Exception e) {
33       System.err.println(e.toString());
34     }
35   }
36
37   public void handle(PrintWriter htmlout, EntityUsers user, boolean force,boolean sync)
38     throws StorageObjectException, ModuleException
39   {
40     printHTML(htmlout, "Producer.StartPage: started");
41
42     String extLinkName = MirConfig.getProp("Producer.ExtLinkName");
43     String intLinkName = MirConfig.getProp("Producer.IntLinkName");
44     String mailLinkName = MirConfig.getProp("Producer.MailLinkName");
45     String imageRoot = MirConfig.getProp("Producer.ImageRoot");
46
47     long                sessionConnectTime = 0;
48     long                startTime = (new java.util.Date()).getTime();
49     String              nowWebdbDate = StringUtil.date2webdbDate(new GregorianCalendar());
50     String              whereClause;
51     String              orderBy;
52     FileWriter          outputFile;
53     String              htmlFileName;
54     EntityContent       currentContent;
55     EntityList          entityList;
56     SimpleHash          startPageModel;
57     SimpleList          contentList;
58     String              currentMediaId;
59     EntityList          imageEntityList;
60     SimpleList mediaList;
61     SimpleHash contentHash;
62
63     // get the topiclist
64     entityList = topicsModule.getByWhereClause("","title",-1);
65     SimpleList topicList = HTMLTemplateProcessor.makeSimpleList(entityList);
66
67     // get the newswire
68     whereClause="is_published=true AND to_article_type >= 1";
69     entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,newsPerPage);
70     SimpleList newsWireList = HTMLTemplateProcessor.makeSimpleList(entityList);
71
72     // get the startarticle and the related images
73     whereClause="is_published=true AND to_article_type=4";
74     entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
75     //if no startspecial exists
76     if (entityList==null || entityList.size()==0){
77       whereClause="is_published=true AND to_article_type=3";
78       entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
79     }
80     SimpleList startItemList = HTMLTemplateProcessor.makeSimpleList(entityList);
81     for (int i=0; i < entityList.size();i++) {
82       currentContent = (EntityContent)entityList.elementAt(i);
83       //fetching/setting the images
84       imageEntityList = DatabaseContentToMedia.getInstance().getImages(currentContent);
85       if (imageEntityList!=null && imageEntityList.getCount()>=1) {
86         try{
87           mediaList = HTMLTemplateProcessor.makeSimpleList(imageEntityList);
88           contentHash = (SimpleHash)startItemList.get(i);
89           contentHash.put("to_media", mediaList);
90         } catch (Exception e){}
91       }
92     }
93
94     // get the breaking news
95     // only the first 5
96     // todo: the number of breaking_news items have to be configurable
97     ModuleBreaking breakingModule = new ModuleBreaking(DatabaseBreaking.getInstance());
98     entityList = breakingModule.getByWhereClause(null,"webdb_create desc",0,5);
99     SimpleList breakingList = HTMLTemplateProcessor.makeSimpleList(entityList);
100
101     // get the articles
102     whereClause="is_published=true AND to_article_type=2";
103     orderBy="date desc, webdb_create desc";
104     entityList = contentModule.getContent(whereClause, orderBy, 0, itemsPerPage);
105     SimpleList featureList = HTMLTemplateProcessor.makeSimpleList(entityList);
106     for (int i=0; i < entityList.size();i++) {
107       currentContent = (EntityContent)entityList.elementAt(i);
108       //fetching/setting the images
109       imageEntityList = DatabaseContentToMedia.getInstance().getImages(currentContent);
110       if (imageEntityList!=null && imageEntityList.getCount()>=1) {
111         try{
112           mediaList = HTMLTemplateProcessor.makeSimpleList(imageEntityList);
113           contentHash = (SimpleHash)featureList.get(i);
114           contentHash.put("to_media", mediaList);
115         } catch (Exception e){}
116       }
117     }
118
119     // Zusaetzlich Informationen
120     startPageModel = new SimpleHash();
121     startPageModel.put("breakingnews", breakingList);
122     startPageModel.put("topics", topicList);
123     startPageModel.put("newswire", newsWireList);
124     startPageModel.put("startspecial", startItemList);
125     startPageModel.put("features", featureList);
126
127     htmlFileName = producerDocRoot + "/index.shtml";
128     
129     produce(startPageTemplate, htmlFileName, startPageModel, htmlout);
130
131     // Finish
132     sessionConnectTime = new java.util.Date().getTime() - startTime;
133     logHTML(htmlout, "Producer.Startseite finished: " + sessionConnectTime + " ms.");
134     if(sync==true){
135       Helper.rsync();
136       logHTML(htmlout, "Producer.Startseite: rsync done");
137     }
138   }
139 }
140