Mir goes GPL
[mir.git] / source / mircoders / producer / ProducerTopics.java
1 /*
2  * Copyright (C) 2001, 2002  The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with the com.oreilly.servlet library, any library
22  * licensed under the Apache Software License, The Sun (tm) Java Advanced
23  * Imaging library (JAI), The Sun JIMI library (or with modified versions of
24  * the above that use the same license as the above), and distribute linked
25  * combinations including the two.  You must obey the GNU General Public
26  * License in all respects for all of the code used other than the above
27  * mentioned libraries.  If you modify this file, you may extend this exception
28  * to your version of the file, but you are not obligated to do so.  If you do
29  * not wish to do so, delete this exception statement from your version.
30  */
31
32 package mircoders.producer;
33
34 import java.io.*;
35 import java.lang.*;
36 import java.lang.reflect.*;
37 import java.util.*;
38 import java.sql.*;
39
40 import freemarker.template.*;
41
42 import mir.misc.*;
43 import mir.media.*;
44 import mir.storage.*;
45 import mir.module.*;
46 import mir.entity.*;
47
48 import mircoders.entity.*;
49 import mircoders.storage.*;
50
51
52
53 public class ProducerTopics extends ProducerList {
54
55   public String where;
56   String              currentMediaId;
57   EntityList          upMediaEntityList;
58   EntityList          imageEntityList;
59   EntityList          currentMediaList;
60   Entity              mediaType;
61   EntityMedia         uploadedMedia;
62   Class               mediaHandlerClass=null;
63   MirMedia            mediaHandler=null;
64   String              mediaHandlerName=null;
65   Database            mediaStorage=null;
66   String              tinyIcon;
67   String              iconAlt;
68
69   public void handle(PrintWriter htmlout, EntityUsers user, boolean force, boolean sync, String id)
70     throws StorageObjectException, ModuleException {
71     where=id;
72     handle(htmlout,user,force,sync);
73   }
74
75   public void handle(PrintWriter htmlout, EntityUsers user, boolean force, boolean sync)
76     throws StorageObjectException, ModuleException
77   {
78     long startTime = System.currentTimeMillis();
79     int pageCount =0;
80     logHTML(htmlout, "Producer.Topics: started");
81
82     /** @todo should be done in static */
83     listTemplate = MirConfig.getProp("Producer.TopicList.Template");
84
85     orderBy="date desc, webdb_create desc";
86     EntityList topicsEntityList;
87     if(where==null){
88       topicsEntityList = topicsModule.getByWhereClause("","title", -1);
89     } else {
90       topicsEntityList = topicsModule.getByWhereClause(where,"title", -1);
91     }
92
93     for(int i=0; i < topicsEntityList.size(); i++){
94
95       EntityTopics currentTopic = (EntityTopics)topicsEntityList.elementAt(i);
96
97       try {
98       EntityList contentEntityList = DatabaseContentToTopics.getInstance().getContent(currentTopic);
99       String whereClauseSpecial=null;
100
101       if (contentEntityList!=null || force==true) {
102         if (contentEntityList!=null){
103           boolean first=true;
104           whereClause="is_published='1' AND to_article_type >= 0 AND to_article_type <=2 AND id IN (";
105           whereClauseSpecial="is_published='1' AND to_article_type=3 AND id IN (";
106           for(int j=0; j < contentEntityList.size(); j++){
107             if(first==false) {
108               whereClause += ",";
109               whereClauseSpecial += ",";
110             }
111             EntityContent currentContent = (EntityContent)contentEntityList.elementAt(j);
112             whereClause += currentContent.getId();
113             whereClauseSpecial += currentContent.getId();
114
115             setAdditional("topic",currentTopic);
116
117             first = false;
118           }
119           whereClause += ")";
120           whereClauseSpecial += ")";
121         }
122
123         if(contentEntityList==null && force==true){
124           //hihi, das ist eigentlich boese
125           whereClause="is_published='1' AND to_article_type>=0 AND id IN (0)";
126         }
127
128         fileDesc = currentTopic.getValue("filename");
129
130         // get the startarticle
131         EntityList entityList = contentModule.getContent(whereClauseSpecial,"date desc, webdb_create desc",0,1);
132         String currentMediaId = null;
133         SimpleHash imageHash = new SimpleHash();
134         EntityContent currentContent;
135         if(entityList != null && entityList.size()==1){
136           currentContent = (EntityContent)entityList.elementAt(0);
137           try {
138               setAdditional("special",currentContent);
139           } catch (Exception e) {
140             theLog.printError("ProducerTopics: problem with start special media: "+currentContent.getId()+" "+e.toString()+" <font color=\"red\">skipping</font>");
141             logHTML(htmlout,"ProducerTopics: problem with start special media: "+currentContent.getId()+" "+e.toString());
142           }
143         }
144
145         //set the list of topics
146         setAdditional("topicslist",topicsEntityList);
147
148         handleIt(htmlout,user,force);
149         pageCount++;
150       }
151       } catch (Exception e) {
152         theLog.printError("ProducerTopics: problem with start special media: "
153         +e.toString()+" <font color=\"red\">skipping</font>");
154         logHTML(htmlout,"ProducerTopics: problem with topic id: "
155         +currentTopic.getId()+ "<font color=\"red\">skipping</font>");
156       }
157     }
158     logHTMLFinish(htmlout, "Topics", pageCount, startTime, System.currentTimeMillis());
159   }
160
161   public static void main(String argv[]){
162     try {
163       new ProducerOpenPosting().handle(new PrintWriter(System.out), null,false, false);
164     } catch(Exception e) {
165       System.err.println(e.toString());
166     }
167   }
168 }