001 /* */
002 /* Module Broadcasting 1.0, 05-2007 */
003 /* +++++++++++++++++++++++++++++++++++++ */
004 /* */
005 /* Andreas Trappe - concept, devel. in misc. */
006 /* */
007 /* */
008 /* */
009
010 package org.mycore.services.broadcasting;
011
012 import java.io.IOException;
013 import java.util.HashMap;
014 import java.util.Map;
015
016 import javax.servlet.ServletException;
017 import javax.servlet.http.HttpServletRequest;
018 import javax.servlet.http.HttpServletResponse;
019
020 import org.jdom.Document;
021 import org.jdom.Element;
022 import org.jdom.JDOMException;
023
024 import org.mycore.access.MCRAccessManager;
025 import org.mycore.common.MCRConfigurationException;
026 import org.mycore.common.MCRSession;
027 import org.mycore.common.MCRSessionMgr;
028 import org.mycore.frontend.servlets.MCRServlet;
029 import org.mycore.frontend.servlets.MCRServletJob;
030
031 public class MCRBroadcastingServlet extends MCRServlet {
032
033 private static final long serialVersionUID = 1L;
034
035 final static Map<String, Element> bcRecList = new HashMap<String, Element>();
036
037 public void init() throws MCRConfigurationException, ServletException {
038 super.init();
039 }
040
041 public void doGetPost(MCRServletJob job) throws IOException, ServletException, JDOMException {
042
043 HttpServletRequest request = job.getRequest();
044 HttpServletResponse response = job.getResponse();
045 MCRSession session = MCRSessionMgr.getCurrentSession();
046
047 // get mode and process
048 Element answer = null;
049 boolean transformByXSL = false;
050 if (request.getParameter("mode").equals("hasReceived")) {
051 String hasReceived = Boolean.toString(hasReceived(session, request));
052 answer = new Element("hasReceived").setText(hasReceived);
053 } else if (request.getParameter("mode").equals("addReceiver")) {
054 addReceiver(session, request);
055 answer = new Element("addReceiver").setText("done");
056 } else if (request.getParameter("mode").equals("clearReceiverList") && access()) {
057 clearReceiverList();
058 answer = getReceiverListAsXML(session);
059 transformByXSL = true;
060 } else if (request.getParameter("mode").equals("getReceiverList") && access()) {
061 answer = getReceiverListAsXML(session);
062 transformByXSL = true;
063 } else {
064 transformByXSL = true;
065 answer = new Element("nothingDone");
066 }
067
068 // render xml
069 forwardJDOM(request, response, answer, transformByXSL);
070 }
071
072 private static boolean access() {
073 return MCRAccessManager.checkPermission("broadcasting") || MCRAccessManager.checkPermission("module-broadcasting", "manage");
074 }
075
076 private Element getReceiverListAsXML(MCRSession session) {
077
078 Element recListRoot = new Element("receiverList").setAttribute("access", "true");
079 for (Map.Entry<String, Element> entry : bcRecList.entrySet()) {
080 Element key = new Element("key").setText(entry.getKey());
081 Element recValue = entry.getValue();
082 recListRoot.addContent(new Element("receiver").addContent(key).addContent(recValue.detach()));
083 }
084 if (bcRecList.isEmpty()) {
085 recListRoot.addContent(new Element("empty"));
086 }
087 return recListRoot;
088 }
089
090 private void clearReceiverList() {
091 bcRecList.clear();
092 }
093
094 private void addReceiver(MCRSession session, HttpServletRequest request) {
095 Element value = getReceiverDetails(session);
096
097 // if user==gast put sessionID, otherwise put username+sessionID
098 if (session.getCurrentUserID().equals("gast"))
099 bcRecList.put(session.getID(), value);
100 else {
101 String key = getKey(request, session);
102 bcRecList.put(key, value);
103 }
104 }
105
106 private final Element getReceiverDetails(MCRSession session) {
107 Element details = new Element("details").addContent(new Element("login").setText(session.getCurrentUserID())).addContent(
108 new Element("ip").setText(session.getCurrentIP())).addContent(new Element("session-id").setText(session.getID()));
109 return details;
110 }
111
112 private boolean hasReceived(MCRSession session, HttpServletRequest request) {
113 // if (!cache.isEmpty() && cache.get("bcRecList") != null) {
114 String key = getKey(request, session);
115 if ((session.getCurrentUserID().equals("gast") && bcRecList.get(session.getID()) != null)
116 || (!session.getCurrentUserID().equals("gast") && bcRecList.get(key) != null))
117 return true;
118 return false;
119 }
120
121 private final static String getKey(HttpServletRequest request, MCRSession session) {
122 if (request.getParameter("sessionSensitive").equals("true"))
123 return session.getCurrentUserID().trim() + session.getID().trim();
124 else
125 return session.getCurrentUserID().trim();
126 }
127
128 public void forwardJDOM(HttpServletRequest request, HttpServletResponse response, Element elem, boolean xslTransformation) throws IOException {
129
130 Element root = null;
131 if (xslTransformation)
132 root = new Element("mcr-module-broadcasting-admin");
133 else
134 root = new Element("mcr-module-broadcasting");
135
136 root.addContent(elem);
137 Document jdom = new Document(root);
138
139 if (xslTransformation)
140 getLayoutService().doLayout(request, response, jdom);
141 else
142 getLayoutService().sendXML(request, response, jdom);
143 }
144 }