1 package mircoders.producer;
7 import freemarker.template.*;
15 import mircoders.module.*;
16 import mircoders.storage.*;
17 import mircoders.entity.*;
20 public class ProducerStartPage extends Producer {
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"));
26 public static void main(String argv[]){
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());
38 public void handle(PrintWriter htmlout, EntityUsers user, boolean force,boolean sync)
39 throws StorageObjectException, ModuleException
41 printHTML(htmlout, "Producer.StartPage: started");
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");
48 long sessionConnectTime = 0;
49 long startTime = (new java.util.Date()).getTime();
50 String nowWebdbDate = StringUtil.date2webdbDate(new GregorianCalendar());
53 FileWriter outputFile;
55 EntityContent currentContent;
56 EntityList entityList;
57 SimpleHash startPageModel;
58 SimpleList contentList;
59 String currentMediaId;
60 EntityList upMediaEntityList;
61 EntityList imageEntityList;
63 EntityUploadedMedia uploadedMedia;
64 Class mediaHandlerClass;
65 MirMedia mediaHandler;
66 String mediaHandlerName;
69 Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("Producer.Logfile"));
72 SimpleHash contentHash;
75 entityList = topicsModule.getByWhereClause("","title",-1);
76 SimpleList topicList = HTMLTemplateProcessor.makeSimpleList(entityList);
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) {
90 mediaHandlerName = null;
91 for (int n=0; n < upMediaEntityList.size();n++) {
92 uploadedMedia = (EntityUploadedMedia)upMediaEntityList.elementAt(n);
93 mediaType = uploadedMedia.getMediaType();
95 //must of had a non-existant to_media_type entry..
97 if (mediaType != null) {
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
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);
115 //the best media type
116 if (mediaHandler.isVideo()) {
117 tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo");
120 } else if (mediaHandler.isAudio()) {
121 tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
123 } else if (tinyIcon == null && !mediaHandler.isImage()) {
124 tinyIcon = mediaHandler.getTinyIcon();
125 iconAlt = mediaHandler.getIconAlt();
129 //it only has image(s)
130 if (tinyIcon == null) {
131 tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage");
135 // uploadedMedia Entity list is empty.
138 tinyIcon = MirConfig.getProp("Producer.Icon.TinyText");
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){}
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);
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) {
165 mediaList = HTMLTemplateProcessor.makeSimpleList(imageEntityList);
166 contentHash = (SimpleHash)startItemList.get(i);
167 contentHash.put("to_media", mediaList);
168 } catch (Exception e){}
172 // get the breaking news
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);
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) {
190 mediaList = HTMLTemplateProcessor.makeSimpleList(imageEntityList);
191 contentHash = (SimpleHash)featureList.get(i);
192 contentHash.put("to_media", mediaList);
193 } catch (Exception e){}
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);
205 htmlFileName = producerDocRoot + "/index.shtml";
207 produce(startPageTemplate, htmlFileName, startPageModel, htmlout);
210 sessionConnectTime = new java.util.Date().getTime() - startTime;
211 logHTML(htmlout, "Producer.Startseite finished: " + sessionConnectTime + " ms.");
214 logHTML(htmlout, "Producer.Startseite: rsync done");