1.1 restoration
[mir.git] / source / mircoders / pdf / PDFGenerator.java
index 9487e0c..4cc74c2 100755 (executable)
  */
 package mircoders.pdf;
 
+import gnu.regexp.RE;
+import gnu.regexp.REException;
+import gnu.regexp.REMatch;
+import gnu.regexp.REMatchEnumeration;
+
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.net.MalformedURLException;
+import java.util.Iterator;
+import java.util.Vector;
+
+import mir.config.MirPropertiesConfiguration;
+import mir.entity.EntityBrowser;
+import mir.log.LoggerWrapper;
+import mir.misc.StringUtil;
+import mir.util.DateTimeFunctions;
+import mircoders.entity.EntityContent;
+import mircoders.entity.EntityImages;
+import mircoders.storage.DatabaseImages;
 
 import com.lowagie.text.BadElementException;
 import com.lowagie.text.Document;
@@ -47,19 +63,6 @@ import com.lowagie.text.pdf.ColumnText;
 import com.lowagie.text.pdf.PdfContentByte;
 import com.lowagie.text.pdf.PdfTemplate;
 import com.lowagie.text.pdf.PdfWriter;
-import gnu.regexp.RE;
-import gnu.regexp.REException;
-import gnu.regexp.REMatch;
-import gnu.regexp.REMatchEnumeration;
-
-import mir.config.MirPropertiesConfiguration;
-import mir.entity.EntityList;
-import mir.log.LoggerWrapper;
-import mir.misc.StringUtil;
-import mir.util.DateTimeFunctions;
-import mircoders.entity.EntityContent;
-import mircoders.entity.EntityImages;
-import mircoders.storage.DatabaseContentToMedia;
 
 public class PDFGenerator{
 
@@ -115,12 +118,7 @@ public class PDFGenerator{
 
   public PDFGenerator(ByteArrayOutputStream out){
     logger = new LoggerWrapper("PDFGenerator");
-    try {
-      configuration = MirPropertiesConfiguration.instance();
-    }
-    catch (MirPropertiesConfiguration.PropertiesConfigExc e) {
-      throw new RuntimeException("Can't get configuration: " + e.getMessage());
-    }
+    configuration = MirPropertiesConfiguration.instance();
     localImageDir=configuration.getString("Producer.Image.Path");
 
     try {
@@ -257,8 +255,8 @@ public class PDFGenerator{
     try {
 
       ColumnText ict = new ColumnText(cb);
-      String theTitle = entityContent.getValue("title");
-      String theCreator = entityContent.getValue("creator");
+      String theTitle = entityContent.getFieldValue("title");
+      String theCreator = entityContent.getFieldValue("creator");
       Phrase titleP=new Phrase(" - " +  theTitle,new Font(indexFontFamily,indexFontSize,Font.BOLD));
       Phrase creatorP=new Phrase( " :: " + theCreator,new Font(indexFontFamily,indexFontSize));
       float toYPosition = currentYPosition - indexLineHeight;
@@ -417,7 +415,7 @@ public class PDFGenerator{
       logger.error("runaway description...try increasing the line height or decreasing the font size");
   }
 
-  public void addArticleContent(ColumnText ct,String theContent,EntityList images){
+  public void addArticleContent(ColumnText ct,String theContent,Iterator images){
     //let's go ahead and add in all the body text
     Paragraph contentP=new Paragraph(theContent,new Font(contentFontFamily,contentFontSize));
     ct.addText(contentP);
@@ -437,8 +435,8 @@ public class PDFGenerator{
     while (images.hasNext()){
 
       EntityImages currentImage=(EntityImages) images.next();
-      float img_width=(new Float(currentImage.getValue("img_width"))).floatValue();
-      float img_height=(new Float(currentImage.getValue("img_height"))).floatValue();
+      float img_width=(new Float(currentImage.getFieldValue("img_width"))).floatValue();
+      float img_height=(new Float(currentImage.getFieldValue("img_height"))).floatValue();
       if (img_height>maxImageHeight){
   img_width=(new Float((new Float(img_width*(maxImageHeight/img_height))).intValue())).floatValue();
   img_height=maxImageHeight;
@@ -448,8 +446,8 @@ public class PDFGenerator{
   img_width=maxImageWidth;
       }
 
-      String img_title=currentImage.getValue("title");
-      String img_path=currentImage.getValue("publish_path");
+      String img_title=currentImage.getFieldValue("title");
+      String img_path=currentImage.getFieldValue("publish_path");
 
       if ((status & ColumnText.NO_MORE_TEXT) == 0){
   // there is still text, so add an image which will have text wrapped around it, then add the text which
@@ -635,19 +633,25 @@ public class PDFGenerator{
      * source
     */
 
-    EntityList images=DatabaseContentToMedia.getInstance().getImages(entityContent);
-    String isHTML  = entityContent.getValue("is_html");
-    String theTitle = entityContent.getValue("title");
-    String theCreator = entityContent.getValue("creator");
+    Vector extraTables = new Vector();
+    extraTables.add("content_x_media cxm");
+    Iterator images = new EntityBrowser(
+      DatabaseImages.getInstance(), "i", extraTables,
+        "cxm.content_id="+entityContent.getId()+"and cxm.media_id=i.id",
+        "i.id desc", 30, -1, 0);
+
+    String isHTML  = entityContent.getFieldValue("is_html");
+    String theTitle = entityContent.getFieldValue("title");
+    String theCreator = entityContent.getFieldValue("creator");
     String theDate = DateTimeFunctions.advancedDateFormat(
         configuration.getString("RDF.Meta.DateFormat"),
-        StringUtil.convertMirInternalDateToDate(entityContent.getValue("webdb_create")),
+        StringUtil.convertMirInternalDateToDate(entityContent.getFieldValue("webdb_create")),
         configuration.getString("Mir.DefaultTimezone"));
 
 
-    String theDescriptionRaw = entityContent.getValue("description");
-    String theContentRaw = entityContent.getValue("content_data");
-    String theSource =  configuration.getString("Producer.ProductionHost") + "/" + configuration.getString("StandardLanguage") + entityContent.getValue("publish_path") + entityContent.getValue("id") + ".shtml";
+    String theDescriptionRaw = entityContent.getFieldValue("description");
+    String theContentRaw = entityContent.getFieldValue("content_data");
+    String theSource =  configuration.getString("Producer.PublicationHost") + "/" + configuration.getString("StandardLanguage") + entityContent.getFieldValue("publish_path") + entityContent.getFieldValue("id") + ".shtml";
 
 
 
@@ -661,27 +665,35 @@ public class PDFGenerator{
       try {
   RE nobackslashr = new RE("\r");
   theContent= nobackslashr.substituteAll(theContentRaw,"");
+  theDescription= nobackslashr.substituteAll(theDescriptionRaw,"");
 
   RE HxTag = new RE("</?h[1-6][^>]*>",RE.REG_ICASE);
   theContent = HxTag.substituteAll(theContent,"\n\n");
+  theDescription = HxTag.substituteAll(theDescription,"\n\n");
 
   RE ListItemTag = new RE("<li[^>]*>",RE.REG_ICASE);
   theContent = ListItemTag.substituteAll(theContent,"\n * ");
+  theDescription = ListItemTag.substituteAll(theDescription,"\n * ");
 
   RE ListTag = new RE("<(u|o)l[^>]*>",RE.REG_ICASE);
   theContent = ListTag.substituteAll(theContent,"\n");
+  theDescription = ListTag.substituteAll(theDescription,"\n");
 
   RE DivTag = new RE("</?div[^>]*>",RE.REG_ICASE);
   theContent= DivTag.substituteAll(theContent,"\n");
+  theDescription= DivTag.substituteAll(theDescription,"\n");
 
   RE PTag = new RE("<(p|P)([:space:]+[^>]*)?>");
   theContent= PTag.substituteAll(theContent,"\n    ");
+  theDescription= PTag.substituteAll(theDescription,"\n    ");
 
   RE PTagClose = new RE("</(p|P)([:space:]+[^>]*)?>");
   theContent= PTagClose.substituteAll(theContent,"\n");
+  theDescription= PTagClose.substituteAll(theDescription,"\n");
 
   RE BRTag = new RE("<(br|BR)([:space:]+[^>]*)?>");
   theContent= BRTag.substituteAll(theContent,"\n");
+  theDescription= BRTag.substituteAll(theDescription,"\n");
 
   RE ATagAll = new RE("<a[^>]*href=(?:\"|\')([^#\"\'][^\'\"]+)(?:\"|\')[^>]*>(.*?)</a>",RE.REG_ICASE);
   REMatchEnumeration atags= ATagAll.getMatchEnumeration(theContent);
@@ -696,13 +708,28 @@ public class PDFGenerator{
   }
   theContent=theContentCopy;
 
+  REMatchEnumeration atags2= ATagAll.getMatchEnumeration(theDescription);
+  String theDescriptionCopy=theDescription;
+  while (atags2.hasMoreMatches()){
+    REMatch atag = atags2.nextMatch();
+    String atagString=atag.toString();
+    String atagStringHref=atag.toString(1);
+    String atagStringText=atag.toString(2);
+    int begin=theDescriptionCopy.indexOf(atagString);
+    theDescriptionCopy=theDescriptionCopy.substring(0,begin) + atagStringText + " ["+ atagStringHref + "] " + theDescriptionCopy.substring(begin+atagString.length());
+  }
+  theDescription=theDescriptionCopy;
+
+
   RE noTags = new RE("<[^>]*>");
   theContent= noTags.substituteAll(theContent," ");
+  theDescription= noTags.substituteAll(theDescription," ");
 
   theContent=mir.util.Translate.decode(theContent);
+  theDescription=mir.util.Translate.decode(theDescription);
 
   RE re1 = new RE("\r?\n\r?\n");
-  String theDescription1 = re1.substituteAll(theDescriptionRaw,"BREAKHERE");
+  String theDescription1 = re1.substituteAll(theDescription,"BREAKHERE");
 
   RE re2 = new RE("\r?\n");
   String theDescription2 = re2.substituteAll(theDescription1," ");