import java.io.*;
import java.lang.*;
+import java.lang.reflect.*;
import java.util.*;
import freemarker.template.*;
import mir.misc.*;
+import mir.media.*;
import mir.storage.*;
import mir.module.*;
import mir.entity.*;
public class ProducerStartPage extends Producer {
- private static String startPageTemplate = Configuration.getProperty("Producer.StartPage.Template");
- private static int itemsPerPage = Integer.parseInt(Configuration.getProperty("Producer.StartPage.Items"));
- private static int newsPerPage = Integer.parseInt(Configuration.getProperty("Producer.StartPage.Newswire"));
-
- public static void main(String argv[]){
- try {
- Configuration.initConfig(argv[0]);
- new ProducerStartPage().handle(new PrintWriter(System.out), null);
- } catch(Exception e) {
- System.err.println(e.toString());
- }
- }
-
- public void handle(PrintWriter htmlout, EntityUsers user, boolean force,boolean sync)
- throws StorageObjectException, ModuleException
- {
- printHTML(htmlout, "Producer.StartPage: started");
-
- String extLinkName = Configuration.getProperty("Producer.ExtLinkName");
- String intLinkName = Configuration.getProperty("Producer.IntLinkName");
- String mailLinkName = Configuration.getProperty("Producer.MailLinkName");
- String imageRoot = Configuration.getProperty("Producer.ImageRoot");
-
- long sessionConnectTime = 0;
- long startTime = (new java.util.Date()).getTime();
- String nowWebdbDate = StringUtil.date2webdbDate(new GregorianCalendar());
- String whereClause;
- String orderBy;
- FileWriter outputFile;
- String htmlFileName;
- EntityContent currentContent;
- EntityList entityList;
- SimpleHash startPageModel;
- SimpleList contentList;
- String currentMediaId;
- SimpleHash imageHash = new SimpleHash();
-
- // get the topiclist
- entityList = topicsModule.getByWhereClause("","title",-1);
- SimpleList topicList = HTMLTemplateProcessor.makeSimpleList(entityList);
-
- // get the newswire
- whereClause="is_published=true AND to_article_type >= 1";
- entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,newsPerPage);
- SimpleList newsWireList = HTMLTemplateProcessor.makeSimpleList(entityList);
-
- // get the startarticle and the related images
- whereClause="is_published=true AND to_article_type=4";
- entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
- //if no startspecial exists
- if (entityList==null || entityList.size()==0){
- whereClause="is_published=true AND to_article_type=3";
- entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
- }
- SimpleList startItemList = HTMLTemplateProcessor.makeSimpleList(entityList);
- for (int i=0; i < entityList.size();i++) {
- currentContent = (EntityContent)entityList.elementAt(i);
- currentMediaId = currentContent.getValue("to_media");
- if (currentMediaId!=null && !currentMediaId.equals("")) {
- imageHash.put(currentMediaId, HTMLTemplateProcessor.makeSimpleHash(imageModule.getById(currentMediaId)));
- }
- }
-
- // get the breaking news
- // only the first 5
- ModuleBreaking breakingModule = new ModuleBreaking(DatabaseBreaking.getInstance());
- entityList = breakingModule.getByWhereClause(null,"webdb_create desc",0,5);
- SimpleList breakingList = HTMLTemplateProcessor.makeSimpleList(entityList);
-
- // get the articles
- whereClause="is_published=true AND to_article_type=2";
- orderBy="date desc, webdb_create desc";
- entityList = contentModule.getContent(whereClause, orderBy, 0, itemsPerPage);
- for (int i=0; i < entityList.size();i++) {
- currentContent = (EntityContent)entityList.elementAt(i);
- /**
- if (currentContent.get("is_html").equals("0")) {
- currentContent.put("content_data",StringUtil.createHTML((String)currentContent.get("content_data"),imageRoot,mailLinkName,extLinkName,intLinkName));
- currentContent.put("description",StringUtil.createHTML((String)currentContent.get("description"),imageRoot,mailLinkName,extLinkName,intLinkName));
- }
- */
- currentMediaId = currentContent.getValue("to_media");
- if (currentMediaId!=null && !currentMediaId.equals("")) {
- imageHash.put(currentMediaId, HTMLTemplateProcessor.makeSimpleHash(imageModule.getById(currentMediaId)));
- }
- }
- SimpleList itemList = HTMLTemplateProcessor.makeSimpleList(entityList);
-
- // Zusaetzlich Informationen
- startPageModel = new SimpleHash();
- startPageModel.put("breaking", breakingList);
- startPageModel.put("topics", topicList);
- startPageModel.put("newswire", newsWireList);
- startPageModel.put("start", startItemList);
- startPageModel.put("items", itemList);
- startPageModel.put("images", imageHash);
-
- htmlFileName = producerDocRoot + "/index.shtml";
-
- produce(startPageTemplate, htmlFileName, startPageModel, new LineFilterWriter(htmlout));
-
- // Finish
- sessionConnectTime = new java.util.Date().getTime() - startTime;
- logHTML(htmlout, "Producer.Startseite finished: " + sessionConnectTime + " ms.");
- if(sync==true){
- Helper.rsync();
- logHTML(htmlout, "Producer.Startseite: rsync done");
- }
- }
+ private static String startPageTemplate = MirConfig.getProp("Producer.StartPage.Template");
+ private static int itemsPerPage = Integer.parseInt(MirConfig.getProp("Producer.StartPage.Items"));
+ private static int newsPerPage = Integer.parseInt(MirConfig.getProp("Producer.StartPage.Newswire"));
+ Entity mediaType;
+ Entity upMedia;
+ SimpleHash upMediaSimpleHash;
+ Class mediaHandlerClass;
+ Class mediaStorageClass;
+ String mediaStorageName;
+
+
+
+ public static void main(String argv[]){
+ try {
+ // Why are we reloading the configuration here?
+ // is there something I'm missing?
+ // mh. <heckmann@hbe.ca>
+ // Configuration.initConfig(argv[0]);
+ new ProducerStartPage().handle(new PrintWriter(System.out), null);
+ } catch(Exception e) {
+ System.err.println(e.toString());
+ }
+ }
+
+ public void handle(PrintWriter htmlout, EntityUsers user, boolean force,boolean sync)
+ throws StorageObjectException, ModuleException
+ {
+ printHTML(htmlout, "Producer.StartPage: started");
+
+ String extLinkName = MirConfig.getProp("Producer.ExtLinkName");
+ String intLinkName = MirConfig.getProp("Producer.IntLinkName");
+ String mailLinkName = MirConfig.getProp("Producer.MailLinkName");
+ String imageRoot = MirConfig.getProp("Producer.ImageRoot");
+
+ long sessionConnectTime = 0;
+ long startTime = (new java.util.Date()).getTime();
+ String nowWebdbDate = StringUtil.date2webdbDate(new GregorianCalendar());
+ String whereClause;
+ String orderBy;
+ FileWriter outputFile;
+ String htmlFileName;
+ EntityContent currentContent;
+ EntityList entityList;
+ SimpleHash startPageModel;
+ SimpleList contentList;
+ String currentMediaId;
+ EntityList upMediaEntityList;
+ EntityList imageEntityList;
+ EntityList currentMediaList;
+ Entity mediaType;
+ EntityMedia uploadedMedia;
+ Class mediaHandlerClass=null;
+ MirMedia mediaHandler=null;
+ String mediaHandlerName=null;
+ Database mediaStorage=null;
+ String tinyIcon;
+ String iconAlt;
+ Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("Producer.Logfile"));
+
+ SimpleList mediaList;
+ SimpleHash contentHash;
+
+ // get the topiclist
+ entityList = topicsModule.getByWhereClause("","title",-1);
+ SimpleList topicList = HTMLTemplateProcessor.makeSimpleList(entityList);
+
+ // get the imclinks
+ entityList = linksImcsModule.getByWhereClause("", "sortpriority, title", -1);
+ SimpleList imcList = HTMLTemplateProcessor.makeSimpleList(entityList);
+
+ EntityList theParentList = linksImcsModule.getByWhereClause("to_parent_id=NULL", "sortpriority, title", -1);
+ SimpleList parentList = HTMLTemplateProcessor.makeSimpleList(theParentList);
+
+ // get the newswire
+ whereClause="is_published=true AND to_article_type = 1";
+ entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,newsPerPage);
+ SimpleList newsWireList = HTMLTemplateProcessor.makeSimpleList(entityList);
+ for (int i=0; i < entityList.size();i++) {
+ currentContent = (EntityContent)entityList.elementAt(i);
+ //fetching/setting the images
+ upMediaEntityList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
+ if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) {
+ tinyIcon = null;
+ iconAlt = null;
+ mediaHandler = null;
+ mediaHandlerName = null;
+ for (int n=0; n < upMediaEntityList.size();n++) {
+ uploadedMedia = (EntityMedia)upMediaEntityList.elementAt(n);
+ mediaType = uploadedMedia.getMediaType();
+
+ //must of had a non-existant to_media_type entry..
+ //let's save our ass.
+ if (mediaType != null) {
+ /*
+ * grrr. why doesn't getId return an int! if It
+ * did I could just compare the value of getId and
+ * pick the biggest one. or is there
+ * another way around this that I am missing?
+ * can we make getIdasInt() or can we just have
+ * another getId() that returns an Int and the VM
+ * will handle it transparantly? -mh
+ */
+ try {
+ mediaHandlerName = mediaType.getValue("classname");
+ mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
+ mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
+ } catch (Exception e) {
+ theLog.printError("ProducerStartpage:problem in reflection: "+mediaHandlerName);
+ }
+
+ //the "best" media type to show
+ if (mediaHandler.isVideo()) {
+ tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo");
+ iconAlt = "Video";
+ break;
+ } else if (mediaHandler.isAudio()) {
+ tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
+ iconAlt = "Audio";
+ } else if (tinyIcon == null && !mediaHandler.isImage()) {
+ tinyIcon = mediaHandler.getTinyIcon();
+ iconAlt = mediaHandler.getIconAlt();
+ }
+ }
+ }
+ //it only has image(s)
+ if (tinyIcon == null) {
+ tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage");
+ iconAlt = "Image";
+ }
+
+ // uploadedMedia Entity list is empty.
+ // we only have text
+ } else {
+ tinyIcon = MirConfig.getProp("Producer.Icon.TinyText");
+ iconAlt = "Text";
+ }
+
+ try{
+ //mediaList = HTMLTemplateProcessor.makeSimpleList(upMediaEntityList);
+ contentHash = (SimpleHash)newsWireList.get(i);
+ contentHash.put("tiny_icon", imageRoot+"/"+tinyIcon);
+ contentHash.put("icon_alt", iconAlt);
+ } catch (Exception e){}
+ }
+
+ // get the startarticle and the related images
+ whereClause="is_published=true AND to_article_type=4";
+ entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
+ //if no startspecial exists
+ if (entityList==null || entityList.size()==0){
+ whereClause="is_published=true AND to_article_type=3";
+ entityList = contentModule.getContent(whereClause,"date desc, webdb_create desc",0,1);
+ }
+ SimpleList startItemList = HTMLTemplateProcessor.makeSimpleList(entityList);
+ for (int k=0; k < entityList.size();k++) {
+ currentContent = (EntityContent)entityList.elementAt(k);
+ //media to content
+ currentMediaList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
+ if (currentMediaList!=null && currentMediaList.getCount()>=1) {
+ SimpleList mediaListAudio = new SimpleList();
+ SimpleList mediaListImages = new SimpleList();
+ SimpleList mediaListVideo = new SimpleList();
+ SimpleList mediaListOther = new SimpleList();
+ for (int n=0; n < currentMediaList.size();n++) {
+ upMedia = currentMediaList.elementAt(n);
+ upMediaSimpleHash = HTMLTemplateProcessor.makeSimpleHash(upMedia);
+ mediaType = ((EntityMedia)upMedia).getMediaType();
+ //must be a non-existant to_media_type entry..
+ if (mediaType != null) {
+ try {
+ mediaHandlerName = mediaType.getValue("classname");
+ mediaStorageName = mediaType.getValue("tablename");
+ mediaStorageClass = Class.forName("mircoders.storage.Database"+mediaStorageName);
+ mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
+ mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
+ Method m = mediaStorageClass.getMethod("getInstance", null);
+ mediaStorage = (Database)m.invoke(null, null);
+ //we most likely need further info
+ upMedia = mediaStorage.selectById(upMedia.getId());
+ } catch (Exception e) {
+ theLog.printError("ProducerList: problem in reflection: "+mediaHandlerName);
+ } //end catch
+ upMediaSimpleHash.put("url", mediaHandler.getListView(upMedia, mediaType));
+ if (upMedia.getValue("is_published") == "1") {
+ if (mediaHandler.isImage()) {
+ mediaListImages.add(upMediaSimpleHash);
+ } else if (mediaHandler.isAudio()) {
+ mediaListAudio.add(upMediaSimpleHash);
+ } else if (mediaHandler.isVideo()) {
+ mediaListVideo.add(upMediaSimpleHash);
+ } else {
+ mediaListOther.add(upMediaSimpleHash);
+ }
+ } //end if is_published
+ } //end if media_type != null
+ } //end for
+ try{
+ contentHash = (SimpleHash)startItemList.get(k);
+ contentHash.put("to_media_audio", mediaListAudio);
+ contentHash.put("to_media_images", mediaListImages);
+ contentHash.put("to_media_video", mediaListVideo);
+ contentHash.put("to_media_other", mediaListOther);
+ } catch (Exception e){}
+ } //end if currentMediaList != null
+ } //enf for featurueList.size..
+
+ // get the breaking news
+ // only the first 5
+ // todo: the number of breaking_news items have to be configurable
+ ModuleBreaking breakingModule = new ModuleBreaking(DatabaseBreaking.getInstance());
+ entityList = breakingModule.getByWhereClause(null,"webdb_create desc",0,5);
+ SimpleList breakingList = HTMLTemplateProcessor.makeSimpleList(entityList);
+
+ // get the articles
+ whereClause="is_published=true AND to_article_type=2";
+ orderBy="date desc, webdb_create desc";
+ entityList = contentModule.getContent(whereClause, orderBy, 0, itemsPerPage);
+ SimpleList featureList = HTMLTemplateProcessor.makeSimpleList(entityList);
+ for (int k=0; k < entityList.size();k++) {
+ currentContent = (EntityContent)entityList.elementAt(k);
+ //media to content
+ currentMediaList = DatabaseContentToMedia.getInstance().getUploadedMedia(currentContent);
+ if (currentMediaList!=null && currentMediaList.getCount()>=1) {
+ SimpleList mediaListAudio = new SimpleList();
+ SimpleList mediaListImages = new SimpleList();
+ SimpleList mediaListVideo = new SimpleList();
+ SimpleList mediaListOther = new SimpleList();
+ for (int n=0; n < currentMediaList.size();n++) {
+ upMedia = currentMediaList.elementAt(n);
+ upMediaSimpleHash = HTMLTemplateProcessor.makeSimpleHash(upMedia);
+ mediaType = ((EntityMedia)upMedia).getMediaType();
+ //must be a non-existant to_media_type entry..
+ if (mediaType != null) {
+ try {
+ mediaHandlerName = mediaType.getValue("classname");
+ mediaStorageName = mediaType.getValue("tablename");
+ mediaStorageClass = Class.forName("mircoders.storage.Database"+mediaStorageName);
+ mediaHandlerClass = Class.forName("mir.media.MediaHandler"+mediaHandlerName);
+ mediaHandler = (MirMedia)mediaHandlerClass.newInstance();
+ Method m = mediaStorageClass.getMethod("getInstance", null);
+ mediaStorage = (Database)m.invoke(null, null);
+ //we most likely need further info
+ upMedia = mediaStorage.selectById(upMedia.getId());
+ } catch (Exception e) {
+ theLog.printError("ProducerList: problem in reflection: "+mediaHandlerName);
+ } //end catch
+ upMediaSimpleHash.put("url", mediaHandler.getListView(upMedia, mediaType));
+ if (upMedia.getValue("is_published") == "1") {
+ if (mediaHandler.isImage()) {
+ mediaListImages.add(upMediaSimpleHash);
+ } else if (mediaHandler.isAudio()) {
+ mediaListAudio.add(upMediaSimpleHash);
+ } else if (mediaHandler.isVideo()) {
+ mediaListVideo.add(upMediaSimpleHash);
+ } else {
+ mediaListOther.add(upMediaSimpleHash);
+ }
+ } //end if is_published
+ } //end if media_type != null
+ } //end for
+ try{
+ contentHash = (SimpleHash)featureList.get(k);
+ contentHash.put("to_media_audio", mediaListAudio);
+ contentHash.put("to_media_images", mediaListImages);
+ contentHash.put("to_media_video", mediaListVideo);
+ contentHash.put("to_media_other", mediaListOther);
+ } catch (Exception e){}
+ } //end if currentMediaList != null
+ } //enf for featurueList.size..
+
+ // Zusaetzlich Informationen
+ startPageModel = new SimpleHash();
+ startPageModel.put("breakingnews", breakingList);
+ startPageModel.put("topics", topicList);
+ startPageModel.put("imclist", imcList);
+ startPageModel.put("parentlist", parentList);
+ startPageModel.put("newswire", newsWireList);
+ startPageModel.put("startspecial", startItemList);
+ startPageModel.put("features", featureList);
+
+ htmlFileName = producerDocRoot + "/index.shtml";
+
+ produce(startPageTemplate, htmlFileName, startPageModel, htmlout);
+
+ // Finish
+ sessionConnectTime = new java.util.Date().getTime() - startTime;
+ logHTML(htmlout, "Producer.Startseite finished: " + sessionConnectTime + " ms.");
+ if(sync==true){
+ Helper.rsync();
+ logHTML(htmlout, "Producer.Startseite: rsync done");
+ }
+ }
}