Initial revision
[mir.git] / source / mircoders / producer / ProducerList.java
diff --git a/source/mircoders/producer/ProducerList.java b/source/mircoders/producer/ProducerList.java
new file mode 100755 (executable)
index 0000000..ff8aa70
--- /dev/null
@@ -0,0 +1,160 @@
+package mircoders.producer;
+
+import java.io.*;
+import java.lang.*;
+import java.util.*;
+import java.sql.*;
+
+import freemarker.template.*;
+
+import webdb.misc.*;
+import webdb.storage.*;
+import webdb.module.*;
+import webdb.entity.*;
+
+import mir.module.*;
+import mir.entity.*;
+import mir.storage.*;
+
+
+
+abstract public class ProducerList extends Producer {
+
+       public String listTemplate;
+       public String whereClause;
+       public String orderBy;
+       public String fileDesc;
+       protected HashMap additional = new HashMap();
+
+       public void handle(PrintWriter htmlout, EntityUsers user, boolean sync, boolean force)
+               throws StorageObjectException, ModuleException {
+               handleIt(htmlout,user,force);
+       }
+
+       public void handleIt(PrintWriter htmlout, EntityUsers user, boolean force)
+               throws StorageObjectException, ModuleException {
+
+               logHTML(htmlout, "Producer.List: started");
+    int newsPerPage = Integer.parseInt(Configuration.getProperty("Producer.StartPage.Newswire"));
+               long                sessionConnectTime = 0;
+               long                startTime = (new java.util.Date()).getTime();
+               String              htmlFileName = "";
+               String              currentMediaId;
+               EntityContent       currentContent;
+               EntityList          list;
+               EntityGruppen       userEntity=null;
+               SimpleHash          imageHash = new SimpleHash();
+               int size = 0;
+               int listSize = 0;
+
+               int maxItemsOnPage = Integer.parseInt(Configuration.getProperty("Lists.Max.Items"));
+
+               try {
+                       listSize = contentModule.getSize(whereClause);
+               } catch (Exception e) {
+                       logHTML(htmlout,e.toString());
+               }
+
+               int modRest = listSize % maxItemsOnPage;
+               int numberOfPages = (listSize - modRest) / maxItemsOnPage;
+               boolean first=true;
+               for (int i = 0;i < numberOfPages+1;i ++) {
+                       //break the loop, if only athe actuell pages should be produced
+                       if (force == false && i==3) {
+                               break;
+                       }
+                       //break, if only the first page has to be produced
+                       if (force == false && modRest != 0 && first==false){
+                               break;
+                       }
+
+
+                       if (first==true) {
+                               //get the data for the first page
+                               size=maxItemsOnPage + modRest;
+                               list = contentModule.getContent(whereClause, orderBy, 0, size, userEntity);
+                               first=false;
+                       } else {
+                               //get the data for the other pages
+                               list = contentModule.getContent(whereClause, orderBy, size, maxItemsOnPage, userEntity);
+                               size = size + maxItemsOnPage;
+                       }
+
+                       //now produce the pages
+                       if (list!=null || force==true) {
+                               SimpleHash mergeData = HTMLTemplateProcessor.makeSimpleHashWithEntitylistInfos(list);
+                               //first we try to get the images
+                               SimpleList itemList = HTMLTemplateProcessor.makeSimpleList(list);
+                               if(list!=null){
+                                       for (int k=0; k < list.size();k++) {
+                                               currentContent = (EntityContent)list.elementAt(k);
+            //images to content
+                                               currentMediaId = currentContent.getValue("to_media");
+                                               if (currentMediaId!=null && !currentMediaId.equals("")) {
+                                                       imageHash.put(currentMediaId, HTMLTemplateProcessor.makeSimpleHash(imageModule.getById(currentMediaId)));
+                                               }
+            //content to html
+            if(currentContent.getValue("is_html").equals("0")){
+              String temp = (String)currentContent.getValue("description");
+              if(temp!=null && temp.length()>0){
+                temp = StringUtil.createHTML(temp);
+                temp = StringUtil.decodeHTMLinTags(temp);
+                currentContent.setValueForProperty("description",temp);
+              }
+            } else {
+              String temp = (String)currentContent.getValue("description");
+              if(temp!=null && temp.length()>0){
+                temp = StringUtil.decodeHTMLinTags(temp);
+                currentContent.setValueForProperty("description",temp);
+              }
+            }
+                                       }
+                                       mergeData.put("images", imageHash);
+                               }
+
+                               //process hashmap additional and add to mergedata
+                               if (additional != null) {
+                                       Set set = additional.keySet();
+                                       for (Iterator it = set.iterator();it.hasNext();) {
+                                               String key = (String)it.next();
+                                               mergeData.put(key,(TemplateModel)additional.get(key));
+                                       }
+                               }
+
+                               if (i==0){
+                                       htmlFileName = producerDocRoot + "/" + fileDesc + ".shtml";
+                                       mergeData.put("filename",fileDesc + ".shtml");
+                                       mergeData.put("previousPage","");
+                                       if(numberOfPages<=1){
+                                               mergeData.put("nextPage","");
+                                       } else {
+                                               mergeData.put("nextPage",fileDesc + (numberOfPages-1) + ".shtml");
+                                       }
+                               } else {
+                                       if (i==1 && numberOfPages > 2){
+                                               mergeData.put("previousPage",fileDesc + ".shtml");
+                                               mergeData.put("nextPage",fileDesc + (numberOfPages-2) + ".shtml");
+                                       } else {
+                                               if (i==(numberOfPages-1)){
+                                                       mergeData.put("previousPage",fileDesc + (numberOfPages-i+1) + ".shtml");
+                                                       mergeData.put("nextPage","");
+                                               } else {
+                                                       mergeData.put("previousPage",fileDesc + (numberOfPages-(i-1)) + ".shtml");
+                                                       mergeData.put("nextPage",fileDesc + (numberOfPages-(i+1)) + ".shtml");
+                                               }
+                                       }
+                                       htmlFileName = producerDocRoot + "/" + fileDesc + (numberOfPages-i) + ".shtml";
+                                       mergeData.put("filename",fileDesc + (numberOfPages-i) + ".shtml");
+                               }
+
+                               //producing the html-files
+                               boolean retVal = produce(listTemplate, htmlFileName, mergeData, htmlout);
+                       } //end if
+               }//end for
+
+               sessionConnectTime = new java.util.Date().getTime() - startTime;
+               logHTML(htmlout, "Producer.List finished: " + sessionConnectTime + " ms.");
+       } //end handle
+
+       abstract public void setAdditional(String key, TemplateModel value);
+}
\ No newline at end of file