Initial revision
[mir.git] / source / mircoders / servlet / ServletModuleContent.java
diff --git a/source/mircoders/servlet/ServletModuleContent.java b/source/mircoders/servlet/ServletModuleContent.java
new file mode 100755 (executable)
index 0000000..b70c29c
--- /dev/null
@@ -0,0 +1,416 @@
+package mircoders.servlet;
+
+import java.io.*;
+import java.sql.*;
+import java.util.*;
+import java.net.*;
+import javax.servlet.*;
+import javax.servlet.http.*;
+
+
+import freemarker.template.*;
+
+import webdb.servlet.*;
+import webdb.module.*;
+import webdb.misc.*;
+import webdb.entity.*;
+import webdb.storage.*;
+
+import mir.entity.*;
+import mir.storage.*;
+import mir.module.*;
+
+/*
+ *  ServletModuleContent -
+ *  liefert HTML fuer Content
+ *
+ *
+ * @author RK
+ */
+
+public class ServletModuleContent extends ServletModule
+{
+
+       static ModuleTopics         themenModule;
+       static ModuleSchwerpunkt    schwerpunktModule;
+       static ModuleGruppen        gruppenModule;
+       static ModuleImages         imageModule;
+
+       static String templateOpString;
+
+       // Singelton / Kontruktor
+
+       private static ServletModuleContent instance = new ServletModuleContent();
+       public static ServletModule getInstance() { return instance; }
+
+       private ServletModuleContent() {
+               try {
+                       theLog = Logfile.getInstance(Configuration.getProperty("Home") + Configuration.getProperty("ServletModule.Content.Logfile"));
+                       templateListString = Configuration.getProperty("ServletModule.Content.ListTemplate");
+                       templateOpString = Configuration.getProperty("ServletModule.Content.OpTemplate");
+                       templateObjektString = Configuration.getProperty("ServletModule.Content.ObjektTemplate");
+                       templateConfirmString = Configuration.getProperty("ServletModule.Content.ConfirmTemplate");
+                       mainModule = new ModuleContent(DatabaseContent.getInstance());
+                       themenModule = new ModuleTopics(DatabaseTopics.getInstance());
+                       schwerpunktModule = new ModuleSchwerpunkt(DatabaseFeature.getInstance());
+                       gruppenModule = new ModuleGruppen(DatabaseGroups.getInstance());
+                       imageModule = new ModuleImages(DatabaseImages.getInstance());
+               }
+               catch (StorageObjectException e) {
+                               theLog.printDebugInfo("servletmodulecontent konnte nicht initialisiert werden");
+               }
+       }
+
+       // Methoden
+
+       public void list(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+       {
+               try {
+                       EntityUsers user = _getUser(req);
+                       EntityList   theList;
+                       String       offsetParam = req.getParameter("offset");
+                       int          offset =0;
+
+                       // hier offsetcode bearbeiteb
+                       if (offsetParam != null && !offsetParam.equals(""))
+                                       offset = Integer.parseInt(offsetParam);
+
+                       if (req.getParameter("next") != null)
+                                       offset=Integer.parseInt(req.getParameter("nextoffset"));
+                       else
+                                       if (req.getParameter("prev") != null)
+                                               offset = Integer.parseInt(req.getParameter("prevoffset"));
+
+                       String        whereParam = req.getParameter("where");
+                       String        orderParam = req.getParameter("order");
+
+                       theList = ((ModuleContent)mainModule).getContent(whereParam, orderParam, offset, user);
+                       _list(theList, req, res);
+               }       catch (ModuleException e) {
+                       throw new ServletModuleException(e.toString());
+               }
+       }
+
+       public void listop(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+       {
+               try {
+                       EntityUsers user = _getUser(req);
+                       EntityList   theList;
+                       String       offsetParam = req.getParameter("offset");
+                       int          offset =0;
+
+                       String whereParam = req.getParameter("where");
+
+                       if (whereParam==null) whereParam = "to_article_type='0'";
+
+                       // hier offsetcode bearbeiteb
+                       if (offsetParam != null && !offsetParam.equals(""))
+                                       offset = Integer.parseInt(offsetParam);
+
+                       if (req.getParameter("next") != null)
+                                       offset=Integer.parseInt(req.getParameter("nextoffset"));
+                       else
+                                       if (req.getParameter("prev") != null)
+                                               offset = Integer.parseInt(req.getParameter("prevoffset"));
+
+                       String orderParam = req.getParameter("order");
+
+                       theList = ((ModuleContent)mainModule).getContent(whereParam, orderParam, offset, user);
+                       _list(theList, req, res);
+               }       catch (ModuleException e) {
+                       throw new ServletModuleException(e.toString());
+               }
+       }
+
+
+       public void search(HttpServletRequest req, HttpServletResponse res)
+               throws ServletModuleException {
+               try {
+                       EntityUsers   user = _getUser(req);
+                       EntityList    theList;
+                       String        fieldParam = req.getParameter("field");
+                       String        fieldValueParam = req.getParameter("fieldvalue");
+                       String        orderParam = req.getParameter("order");
+
+                       theList = ((ModuleContent)mainModule).getContentByField(fieldParam, fieldValueParam, orderParam, 0, user);
+                       _list(theList, req, res);
+               } catch (ModuleException e) {
+                       throw new ServletModuleException(e.toString());
+               }
+       }
+
+       public void add(HttpServletRequest req, HttpServletResponse res)
+               throws ServletModuleException {
+
+               EntityUsers   user = _getUser(req);
+               SimpleHash mergeData = new SimpleHash();
+               mergeData.put("new", "1");
+               mergeData.put("is_published", "1");
+               String now = StringUtil.date2webdbDate(new GregorianCalendar());
+               mergeData.put("date", new SimpleScalar(now));
+               mergeData.put("themenPopupData", themenModule.getTopicsAsSimpleList());
+               mergeData.put("gruppenPopupData", gruppenModule.getGruppenAsSimpleList());
+               try {
+                       mergeData.put("articletypePopupData", DatabaseArticleType.getInstance().getPopupData());
+               } catch (Exception e) {theLog.printError("articletype could not be fetched.");}
+               //mergeData.put("gruppenHashData", gruppenModule.getHashData());
+               mergeData.put("schwerpunktPopupData", schwerpunktModule.getSchwerpunktAsSimpleList());
+               mergeData.put("login_user", HTMLTemplateProcessor.makeSimpleHash(user));
+               deliver(req, res, mergeData, templateObjektString);
+       }
+
+
+       public void insert(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+       {
+               //theLog.printDebugInfo(":: content :: trying to insert");
+               try {
+                       EntityUsers   user = _getUser(req);
+                       HashMap withValues = getIntersectingValues(req, DatabaseContent.getInstance());
+                       //theLog.printDebugInfo(":: content :: got intersecting values");
+                       String now = StringUtil.date2webdbDate(new GregorianCalendar());
+                       withValues.put("date", now);
+                       withValues.put("publish_path", StringUtil.webdbDate2path(now));
+                       withValues.put("to_publisher", user.getId());
+                       withValues.put("is_produced", "0");
+                       if (!withValues.containsKey("is_published"))
+                               withValues.put("is_published","0");
+                       if (!withValues.containsKey("is_html"))
+                               withValues.put("is_html","0");
+                       if (withValues.get("creator").toString().equals(""))
+                               withValues.put("creator","Anonym");
+                       String id = mainModule.add(withValues);
+                       DatabaseContentToTopics.getInstance().setTopics(id,req.getParameter("to_topic"));
+                       //theLog.printDebugInfo(":: content :: inserted");
+                       _showObject(id, req, res);
+               }
+               catch (StorageObjectException e) { throw new ServletModuleException(e.toString());}
+               catch (ModuleException e) { throw new ServletModuleException(e.toString());}
+       }
+
+       public void delete(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+       {
+
+               EntityUsers   user = _getUser(req);
+               // hier pruefen ob dem akt. user loeschen erlaubt ist...
+               String idParam = req.getParameter("id");
+               if (idParam == null) throw new ServletModuleException("Falscher Aufruf: (id) nicht angegeben");
+
+               String confirmParam = req.getParameter("confirm");
+               String cancelParam = req.getParameter("cancel");
+
+               if (confirmParam == null && cancelParam == null) {
+                       // HTML Ausgabe zum Confirmen!
+                       SimpleHash mergeData = new SimpleHash();
+                       mergeData.put("module", "Content");
+                       mergeData.put("infoString", "Content: " + idParam);
+                       mergeData.put("id", idParam);
+                       mergeData.put("where", req.getParameter("where"));
+                       mergeData.put("order", req.getParameter("order"));
+                       mergeData.put("offset", req.getParameter("offset"));
+                       deliver(req, res, mergeData, templateConfirmString);
+               }
+               else {
+                       if (confirmParam!= null && !confirmParam.equals("")) {
+                               try {
+                                       mainModule.deleteById(idParam);
+                                       //delete rows in the content_x_topic-table
+                                       DatabaseContentToTopics.getInstance().deleteByContentId(idParam);
+                                       //delete rows in the comment-table
+                                       DatabaseComment.getInstance().deleteByContentId(idParam);
+                               } catch (ModuleException e) {
+                                       throw new ServletModuleException(e.toString());
+                               } catch (StorageObjectException e) {
+                                       throw new ServletModuleException(e.toString());
+                               }
+                               list(req,res);
+                       }
+                       else {
+                               // Datensatz anzeigen
+                               _showObject(idParam, req, res);
+                       }
+               }
+       }
+
+       public void edit(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+       {
+               String        idParam = req.getParameter("id");
+               if (idParam == null) throw new ServletModuleException("Falscher Aufruf: (id) nicht angegeben");
+               _showObject(idParam, req, res);
+       }
+
+       // methods for attaching media file
+       public void attach(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+       {
+               String  mediaIdParam = req.getParameter("mid");
+               String  idParam = req.getParameter("cid");
+               if (idParam == null||mediaIdParam==null) throw new ServletModuleException("smod content :: attach :: cid/mid missing");
+               try {
+                       EntityContent entContent = (EntityContent)mainModule.getById(idParam);
+                       entContent.attach(mediaIdParam);
+               }
+               catch(ModuleException e) {
+                       theLog.printError("smod content :: attach :: could not get entityContent");
+               }
+               _showObject(idParam, req, res);
+       }
+
+       public void dettach(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+       {
+               String  idParam = req.getParameter("cid");
+               if (idParam == null) throw new ServletModuleException("smod content :: dettach :: cid missing");
+               try {
+                       EntityContent entContent = (EntityContent)mainModule.getById(idParam);
+                       entContent.dettach();
+               }
+               catch(ModuleException e) {
+                       theLog.printError("smod content :: dettach :: could not get entityContent");
+               }
+               _showObject(idParam, req, res);
+       }
+
+       public void newswire(HttpServletRequest req, HttpServletResponse res) throws ServletModuleException
+       {
+               String  idParam = req.getParameter("id");
+               if (idParam == null) throw new ServletModuleException("smod content :: newswire :: id missing");
+               try {
+                       EntityContent entContent = (EntityContent)mainModule.getById(idParam);
+                       entContent.newswire();
+               }
+               catch(ModuleException e) {
+                       theLog.printError("smod content :: newswire :: could not get entityContent");
+               }
+               list(req, res);
+       }
+
+
+       public void update(HttpServletRequest req, HttpServletResponse res)
+               throws ServletModuleException
+       {
+               try {
+
+                       EntityUsers   user = _getUser(req);
+                       if (user==null) theLog.printDebugInfo("user null!");
+                       String idParam = req.getParameter("id");
+                       if (idParam == null) throw new ServletModuleException("Falscher Aufruf: (id) nicht angegeben");
+
+                       HashMap withValues = getIntersectingValues(req, DatabaseContent.getInstance());
+                       String topic_id = req.getParameter("to_topic");
+                       String content_id = req.getParameter("id");
+                       // withValues.put("publish_path", StringUtil.webdbDate2path((String)withValues.get("date")));
+                       if(user != null) withValues.put("user_id", user.getId());
+                       withValues.put("is_produced", "0");
+                       if (!withValues.containsKey("is_published"))
+                               withValues.put("is_published","0");
+                       if (!withValues.containsKey("is_html"))
+                               withValues.put("is_html","0");
+                       if (withValues.get("creator").toString().equals(""))
+                               withValues.put("creator","Anonym");
+                       //theLog.printDebugInfo("updating. ");
+                       String id = mainModule.set(withValues);
+                       DatabaseContentToTopics.getInstance().setTopics(req.getParameter("id"),req.getParameter("to_topic"));
+                       //theLog.printDebugInfo("update done. ");
+                       String whereParam = req.getParameter("where");
+                       String orderParam = req.getParameter("order");
+                       if ((whereParam!=null && !whereParam.equals("")) || (orderParam!=null && !orderParam.equals(""))){
+                               //theLog.printDebugInfo("update to list");
+                               list(req,res);
+                       }
+                       else
+                               _showObject(idParam, req, res);
+               }
+               catch (StorageObjectException e) { throw new ServletModuleException(e.toString());}
+               catch (ModuleException e) { throw new ServletModuleException(e.toString());}
+       }
+
+       //
+       // Hilfsmethoden
+
+       private void _showObject(String id, HttpServletRequest req, HttpServletResponse res)
+               throws ServletModuleException {
+
+               try {
+                       EntityContent entContent=(EntityContent)mainModule.getById(id);
+                       SimpleHash mergeData =  HTMLTemplateProcessor.makeSimpleHash(entContent);
+                       EntityList topicToContent = DatabaseContentToTopics.getInstance().getTopics(entContent);
+                       if (topicToContent!=null && topicToContent.size()>0){
+                               Entity topics = (EntityTopics)topicToContent.elementAt(0);
+                               mergeData.put("to_topic",topics.getId());
+                       }
+                       //obsolete, because of psqgl 7.1.x
+      //mergeData.put("content_data", entContent.getContentData());
+                       mergeData.put("themenPopupData", themenModule.getTopicsAsSimpleList());
+                       mergeData.put("gruppenPopupData", gruppenModule.getGruppenAsSimpleList());
+                       try {
+                               mergeData.put("articletypePopupData", DatabaseArticleType.getInstance().getPopupData());
+                       } catch (Exception e) {theLog.printError("articletype could not be fetched.");}
+
+                       // get the images
+                       String currentMediaId = entContent.getValue("to_media");
+                       SimpleHash imageHash = new SimpleHash();
+                       if (currentMediaId!=null && !currentMediaId.equals("")) {
+                               imageHash.put(currentMediaId, HTMLTemplateProcessor.makeSimpleHash(imageModule.getById(currentMediaId)));
+                               mergeData.put("images", imageHash);
+                       }
+
+
+                       //mergeData.put("gruppenHashData", gruppenModule.getHashData());
+                       mergeData.put("schwerpunktPopupData", schwerpunktModule.getSchwerpunktAsSimpleList());
+                       // hier code um zur liste zurueckzukommen
+                       String offsetParam, whereParam, orderParam;
+                       if ((offsetParam = req.getParameter("offset"))!=null) mergeData.put("offset", offsetParam);
+                       if ((whereParam = req.getParameter("where"))!=null) mergeData.put("where", whereParam);
+                       if ((orderParam = req.getParameter("order"))!=null) mergeData.put("order", orderParam);
+                       mergeData.put("login_user", HTMLTemplateProcessor.makeSimpleHash(_getUser(req)));
+                       deliver(req, res, mergeData, templateObjektString);
+               }
+               catch (Exception e) { throw new ServletModuleException(e.toString());}
+       }
+
+
+       public void _list(EntityList theList, HttpServletRequest req, HttpServletResponse res)
+               throws ServletModuleException {
+
+               try {
+                       // hier dann htmlcode rausschreiben
+                       if (theList == null || theList.getCount() == 0 || theList.getCount()>1) {
+                               SimpleHash modelRoot = HTMLTemplateProcessor.makeSimpleHashWithEntitylistInfos(theList);
+                               modelRoot.put("themenHashData", themenModule.getHashData());
+                               modelRoot.put("schwerpunktHashData", schwerpunktModule.getHashData());
+                               modelRoot.put("gruppenHashData", gruppenModule.getHashData());
+                               modelRoot.put("articletypeHash", DatabaseArticleType.getInstance().getHashData());
+                               deliver(req, res, modelRoot, templateListString);
+                       } else  { // count = 1
+                               _showObject(theList.elementAt(0).getId(),req,res);
+                       }
+               } catch (StorageObjectException e) {
+                       throw new ServletModuleException(e.toString());
+               }
+       }
+
+       public void _listop(EntityList theList, HttpServletRequest req, HttpServletResponse res)
+               throws ServletModuleException {
+
+               try {
+                       // hier dann htmlcode rausschreiben
+                       if (theList == null || theList.getCount() == 0 || theList.getCount()>1) {
+                               SimpleHash modelRoot = HTMLTemplateProcessor.makeSimpleHashWithEntitylistInfos(theList);
+                               modelRoot.put("articletypeHash", DatabaseArticleType.getInstance().getHashData());
+                               modelRoot.put("gruppenHashData", gruppenModule.getHashData());
+                               deliver(req, res, modelRoot, templateListString);
+                       } else  { // count = 1
+                               _showObject(theList.elementAt(0).getId(), req, res);
+                       }
+               } catch (StorageObjectException e) {
+                       throw new ServletModuleException(e.toString());
+               }
+       }
+
+       private EntityUsers _getUser(HttpServletRequest req)
+       {
+               HttpSession session=req.getSession(false);
+               return (EntityUsers)session.getAttribute("login.uid");
+       }
+
+
+}
+