producerContent debugging / pageCount inserted
[mir.git] / source / mircoders / entity / EntityContent.java
index 80cc7c6..958f697 100755 (executable)
@@ -4,11 +4,13 @@ import java.lang.*;
 import java.io.*;
 import java.util.*;
 import java.sql.*;
+import java.lang.reflect.*;
 
 import freemarker.template.*;
 
 import mir.entity.*;
 import mir.misc.*;
+import mir.media.*;
 import mir.storage.*;
 
 import mircoders.storage.*;
@@ -25,6 +27,11 @@ import mircoders.storage.*;
 public class EntityContent extends Entity
 {
 
+  String mirconf_extLinkName  = MirConfig.getProp("Producer.ExtLinkName");
+  String mirconf_intLinkName  = MirConfig.getProp("Producer.IntLinkName");
+  String mirconf_mailLinkName = MirConfig.getProp("Producer.MailLinkName");
+  String mirconf_imageRoot    = MirConfig.getProp("Producer.ImageRoot");
+
        // constructors
 
        public EntityContent()
@@ -49,9 +56,11 @@ public class EntityContent extends Entity
 
        public void setProduced(boolean yesno) throws StorageObjectException
        {
-               Connection con=null;Statement stmt=null;
                String value = (yesno) ? "1":"0";
-               String sql = "update content set is_produced='" + value + "' where id='" + getId()+"'";
+               if (value.equals( getValue("is_produced") )) return;
+
+    Connection con=null;Statement stmt=null;
+    String sql = "update content set is_produced='" + value + "' where id='" + getId()+"'";
                try {
                        con = theStorageObject.getPooledCon();
                        /** @todo should be preparedStatement: faster!! */
@@ -143,9 +152,84 @@ public class EntityContent extends Entity
         return super.getValue(field);
     }
     return returnField;
+       }
+
+  public TemplateModel get(java.lang.String key) throws TemplateModelException
+  {
+    if (key!=null) {
+      if (key.equals("to_comments")) {
+        try {
+          return getComments();
+        }
+        catch (Exception ex) {
+          theLog.printWarning("-- getComments: could not fetch data " + ex.toString());
+          throw new TemplateModelException(ex.toString());
+        }
+      }
+      if (key.equals("to_media_images")) {
+        try {
+          return getImagesForContent();
+        }
+        catch (Exception ex) {
+          theLog.printWarning("-- getImagesForContent: could not fetch data " + ex.toString());
+          throw new TemplateModelException(ex.toString());
+        }
+      }
+      if (key.equals("to_media_audio")) {
+        try {
+          return getAudioForContent();
+        }
+        catch (Exception ex) {
+          theLog.printWarning("-- getAudioForContent: could not fetch data " + ex.toString());
+          throw new TemplateModelException(ex.toString());
+        }
+      }
+      if (key.equals("to_media_video")) {
+        try {
+          return getVideoForContent();
+        }
+        catch (Exception ex) {
+          theLog.printWarning("-- getVideoForContent: could not fetch data " + ex.toString());
+          throw new TemplateModelException(ex.toString());
+        }
+      }
+      if (key.equals("to_media_other")) {
+        try {
+          return getOtherMediaForContent();
+        }
+        catch (Exception ex) {
+          theLog.printWarning("-- getOtherMediaForContent: could not fetch data " + ex.toString());
+          throw new TemplateModelException(ex.toString());
+        }
+      }
+      else if (key.equals("to_media_icon")) {
+        try {
+          return getUploadedMediaForNewswire();
+        }
+        catch (Exception ex) {
+          theLog.printWarning("-- getUploadedMediaForNewswire: could not fetch data " + ex.toString());
+          throw new TemplateModelException(ex.toString());
+        }
+      }
+      else if (key.equals("to_topics")) {
+        try {
+          DatabaseContentToTopics.getInstance().getTopics(this);
+        }
+        catch (Exception ex) {
+          theLog.printWarning("-- getTopics: could not fetch data " + ex.toString());
+          throw new TemplateModelException(ex.toString());
+        }
+      }
+      else {
+        return new SimpleScalar(getValue(key));
+      }
+
+    }
+    return null;
+  }
+
 
 
-       }
 
        /**
         * overridden method setValues to patch creator_main_url
@@ -170,12 +254,9 @@ public class EntityContent extends Entity
       returnField=StringUtil.deleteForbiddenTags(returnField);
       //create http-links and email-links
       if (getValue("is_html").equals("0")) {
-        /** @todo the config stuff should be moved to StringUtil */
-        String extLinkName = MirConfig.getProp("Producer.ExtLinkName");
-        String intLinkName = MirConfig.getProp("Producer.IntLinkName");
-        String mailLinkName = MirConfig.getProp("Producer.MailLinkName");
-        String imageRoot = MirConfig.getProp("Producer.ImageRoot");
-        returnField = StringUtil.createHTML(returnField,imageRoot,mailLinkName,extLinkName,intLinkName);
+        returnField = StringUtil.createHTML(returnField,mirconf_imageRoot,
+                                            mirconf_mailLinkName,mirconf_extLinkName,
+                                            mirconf_intLinkName);
       }
       returnField = StringUtil.decodeHTMLinTags(returnField);
     }
@@ -188,12 +269,9 @@ public class EntityContent extends Entity
     if (returnField != null && returnField.length()>0) {
       returnField = StringUtil.deleteForbiddenTags(returnField);
       if (getValue("is_html").equals("0")) {
-        /** @todo the config stuff should be moved to StringUtil */
-        String extLinkName = MirConfig.getProp("Producer.ExtLinkName");
-        String intLinkName = MirConfig.getProp("Producer.IntLinkName");
-        String mailLinkName = MirConfig.getProp("Producer.MailLinkName");
-        String imageRoot = MirConfig.getProp("Producer.ImageRoot");
-        returnField = StringUtil.createHTML(returnField,imageRoot,mailLinkName,extLinkName,intLinkName);
+        returnField = StringUtil.createHTML(returnField,mirconf_imageRoot,
+                                            mirconf_mailLinkName,mirconf_extLinkName,
+                                            mirconf_intLinkName);
       }
       returnField = StringUtil.decodeHTMLinTags(returnField);
     }
@@ -205,9 +283,87 @@ public class EntityContent extends Entity
         *
         * @return freemarker.template.SimpleList
         */
-       public SimpleList getComments() throws StorageObjectException {
+       private SimpleList getComments() throws StorageObjectException {
                return ((DatabaseContent)theStorageObject).getComments(this);
        }
 
+  // @todo this needs to optimized. expensive SQL
+  private SimpleHash getUploadedMediaForNewswire()
+    throws StorageObjectException, TemplateModelException
+  {
+    // fetching/setting the images
+    // return to_media_icons
+    String        tinyIcon = null, iconAlt = null;
+    MirMedia      mediaHandler = null;
+    EntityUploadedMedia uploadedMedia;
+    Entity        mediaType;
+    SimpleHash    returnHash = new SimpleHash();
+
+    EntityList upMediaEntityList =
+                    DatabaseContentToMedia.getInstance().getUploadedMedia(this);
+    if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) {
+
+      for (int n=0; n < upMediaEntityList.size();n++) {
+        uploadedMedia = (EntityUploadedMedia)upMediaEntityList.elementAt(n);
+        mediaType = uploadedMedia.getMediaType();
+        try {
+          mediaHandler = MediaHelper.getHandler( mediaType );
+        } catch (MirMediaException ex) {
+          throw new TemplateModelException(ex.toString());
+        }
+        //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";
+    }
+    returnHash.put("tiny_icon", mirconf_imageRoot+"/"+tinyIcon);
+    returnHash.put("icon_alt", iconAlt);
+    return returnHash;
+  }
+
+  //######## @todo all of the following getBlahForContent should have
+  // and optimized version where LIMIT=1 sql for list view.
+  private EntityList getImagesForContent()
+    throws StorageObjectException, TemplateModelException
+  {
+    return DatabaseContentToMedia.getInstance().getImages(this);
+  }
+
+  private EntityList getAudioForContent()
+    throws StorageObjectException, TemplateModelException
+  {
+    return DatabaseContentToMedia.getInstance().getAudio(this) ;
+  }
+
+  private EntityList getVideoForContent()
+    throws StorageObjectException, TemplateModelException
+  {
+    return DatabaseContentToMedia.getInstance().getVideo(this) ;
+  }
+
+  private EntityList getOtherMediaForContent()
+    throws StorageObjectException, TemplateModelException
+  {
+    return DatabaseContentToMedia.getInstance().getOther(this);
+  }
 
 }