changed the way we get content-type during file upload.
[mir.git] / source / mircoders / producer / ProducerStartPage.java
index 5c69f20..af3f9b5 100755 (executable)
@@ -2,11 +2,13 @@ package mircoders.producer;
 
 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.*;
@@ -18,114 +20,297 @@ import mircoders.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");
+    }
+  }
 }