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 EntityMedia 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 /** @todo same with newswire, should be fetched via moduleContent.getNewswire() */
87 whereClause="is_published=true AND to_article_type = 1";
88 entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,newsPerPage);
89 SimpleList newsWireList = HTMLTemplateProcessor.makeSimpleList(entityList);
90 for (int i=0; i < entityList.size();i++) {
91 currentContent = (EntityContent)entityList.elementAt(i);
93 /** @todo all this should be done inside EntityContent and on demand */
94 //fetching/setting the images
95 upMediaEntityList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
96 if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) {
100 mediaHandlerName = null;
101 for (int n=0; n < upMediaEntityList.size();n++) {
102 uploadedMedia = (EntityMedia)upMediaEntityList.elementAt(n);
103 mediaType = uploadedMedia.getMediaType();
105 //must of had a non-existant to_media_type entry..
106 //let's save our ass.
107 if (mediaType != null) {
108 mediaHandlerName = mediaType.getValue("classname");
109 mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
110 mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
112 //the "best" media type to show
113 if (mediaHandler.isVideo()) {
114 tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo");
117 } else if (mediaHandler.isAudio()) {
118 tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
120 } else if (tinyIcon == null && !mediaHandler.isImage()) {
121 tinyIcon = mediaHandler.getTinyIcon();
122 iconAlt = mediaHandler.getIconAlt();
126 //it only has image(s)
127 if (tinyIcon == null) {
128 tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage");
132 // uploadedMedia Entity list is empty.
135 tinyIcon = MirConfig.getProp("Producer.Icon.TinyText");
139 //mediaList = HTMLTemplateProcessor.makeSimpleList(upMediaEntityList);
140 contentHash = (SimpleHash)newsWireList.get(i);
141 contentHash.put("tiny_icon", imageRoot+"/"+tinyIcon);
142 contentHash.put("icon_alt", iconAlt);
143 } catch (Exception e) {
144 logHTML(htmlout, "Producer.StartPage error id: " + currentContent.getId() + ", skipping");
145 theLog.printError("Producer.StartPage error id: " + currentContent.getId() + ", skipping"+e.toString());
148 theLog.printDebugInfo("############### got newswire");
150 // get the startarticle and the related images
151 /** @todo this should move to moduleContent.getStartArticle */
152 whereClause="is_published=true AND to_article_type=4";
153 entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
154 //if no startspecial exists
155 if (entityList==null || entityList.size()==0){
156 whereClause="is_published=true AND to_article_type=3";
157 entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
159 SimpleList startItemList = HTMLTemplateProcessor.makeSimpleList(entityList);
160 for (int k=0; k < entityList.size();k++) {
161 currentContent = (EntityContent)entityList.elementAt(k);
164 currentMediaList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
165 contentHash = (SimpleHash)startItemList.get(k);
166 /** @todo this should move to Entity */
167 if (currentMediaList!=null && currentMediaList.getCount()>=1) {
168 SimpleList mediaListAudio = new SimpleList();
169 SimpleList mediaListImages = new SimpleList();
170 SimpleList mediaListVideo = new SimpleList();
171 SimpleList mediaListOther = new SimpleList();
172 for (int n=0; n < currentMediaList.size();n++) {
173 upMedia = currentMediaList.elementAt(n);
174 upMediaSimpleHash = HTMLTemplateProcessor.makeSimpleHash(upMedia);
175 mediaType = ((EntityMedia)upMedia).getMediaType();
176 //must be a non-existant to_media_type entry..
177 if (mediaType != null) {
178 mediaHandlerName = mediaType.getValue("classname");
179 mediaStorageName = mediaType.getValue("tablename");
180 mediaStorageClass = Class.forName("mircoders.storage.Database"+mediaStorageName);
181 mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
182 mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
183 Method m = mediaStorageClass.getMethod("getInstance", null);
184 mediaStorage = (Database)m.invoke(null, null);
185 //we most likely need further info
186 upMedia = mediaStorage.selectById(upMedia.getId());
187 upMediaSimpleHash.put("url", mediaHandler.getListView(upMedia, mediaType));
188 if (upMedia.getValue("is_published").equals("1")) {
189 if (mediaHandler.isImage()) {
190 mediaListImages.add(upMediaSimpleHash);
191 } else if (mediaHandler.isAudio()) {
192 mediaListAudio.add(upMediaSimpleHash);
193 } else if (mediaHandler.isVideo()) {
194 mediaListVideo.add(upMediaSimpleHash);
196 mediaListOther.add(upMediaSimpleHash);
198 } //end if is_published
199 } //end if media_type != null
201 contentHash.put("to_media_audio", mediaListAudio);
202 contentHash.put("to_media_images", mediaListImages);
203 contentHash.put("to_media_video", mediaListVideo);
204 contentHash.put("to_media_other", mediaListOther);
205 } //end if currentMediaList != null
207 } catch (Exception e) {
208 logHTML(htmlout, "Producer.StartPage error id: " + currentContent.getId() + ", skipping");
209 theLog.printError("Producer.StartPage error id: " + currentContent.getId() + ", skipping"+e.toString());
211 } //enf for featurueList.size..
213 theLog.printDebugInfo("############### got startitems");
218 /** @todo moduleContent.getArticles() */
219 whereClause="is_published=true AND to_article_type=2";
220 orderBy="date desc, webdb_create desc";
221 entityList = contentModule.getContent(whereClause, orderBy, 0, itemsPerPage);
222 SimpleList featureList = HTMLTemplateProcessor.makeSimpleList(entityList);
223 for (int k=0; k < entityList.size();k++) {
224 currentContent = (EntityContent)entityList.elementAt(k);
227 currentMediaList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
228 theLog.printDebugInfo("############### getting contenthash");
229 contentHash = (SimpleHash)featureList.get(k);
230 theLog.printDebugInfo("############### building media lists");
231 if (currentMediaList!=null && currentMediaList.getCount()>=1) {
232 SimpleList mediaListAudio = new SimpleList();
233 SimpleList mediaListImages = new SimpleList();
234 SimpleList mediaListVideo = new SimpleList();
235 SimpleList mediaListOther = new SimpleList();
236 for (int n=0; n < currentMediaList.size();n++) {
237 upMedia = currentMediaList.elementAt(n);
238 upMediaSimpleHash = HTMLTemplateProcessor.makeSimpleHash(upMedia);
239 mediaType = ((EntityMedia)upMedia).getMediaType();
240 //must be a non-existant to_media_type entry..
241 if (mediaType != null) {
242 mediaHandlerName = mediaType.getValue("classname");
243 mediaStorageName = mediaType.getValue("tablename");
244 mediaStorageClass = Class.forName("mircoders.storage.Database"+mediaStorageName);
245 mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
246 mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
247 Method m = mediaStorageClass.getMethod("getInstance", null);
248 mediaStorage = (Database)m.invoke(null, null);
249 //we most likely need further info
250 upMedia = mediaStorage.selectById(upMedia.getId());
251 upMediaSimpleHash.put("url", mediaHandler.getListView(upMedia, mediaType));
253 if (upMedia.getValue("is_published").equals("1")) {
254 if (mediaHandler.isImage()) {
255 mediaListImages.add(upMediaSimpleHash);
256 } else if (mediaHandler.isAudio()) {
257 mediaListAudio.add(upMediaSimpleHash);
258 } else if (mediaHandler.isVideo()) {
259 mediaListVideo.add(upMediaSimpleHash);
261 mediaListOther.add(upMediaSimpleHash);
263 } //end if is_published
264 } //end if media_type != null
266 contentHash.put("to_media_audio", mediaListAudio);
267 contentHash.put("to_media_images", mediaListImages);
268 contentHash.put("to_media_video", mediaListVideo);
269 contentHash.put("to_media_other", mediaListOther);
270 } //end if currentMediaList != null
272 } catch (Exception e) {
273 logHTML(htmlout, "Producer.StartPage error id: " + currentContent.getId() + ", skipping");
274 theLog.printError("Producer.StartPage error id: " + currentContent.getId() + ", skipping"+e.toString());
276 } //enf for featurueList.size..
277 theLog.printDebugInfo("############### got featurelist");
279 /** @todo the following should be the only thing left done here. a lot of redundancies are gone then,
280 * code is more readable, and caching stuff, mass changes, etc. can be done in one spot */
282 // Additional Information
283 startPageModel = new SimpleHash();
286 ModuleBreaking breakingModule = new ModuleBreaking(DatabaseBreaking.getInstance());
287 startPageModel.put("breakingnews", breakingModule.getBreakingNews());
289 startPageModel.put("topics", topicsModule.getTopicsList());
290 startPageModel.put("newswire", newsWireList);
291 startPageModel.put("startspecial", startItemList);
292 startPageModel.put("features", featureList);
294 htmlFileName = producerDocRoot + "/index.shtml";
296 produce(startPageTemplate, htmlFileName, startPageModel, htmlout);
299 sessionConnectTime = new java.util.Date().getTime() - startTime;
300 logHTML(htmlout, "Producer.Startseite finished: " + sessionConnectTime + " ms.");
303 logHTML(htmlout, "Producer.Startseite: rsync done");