7963a03c54afad7f91f77b9b24ef6145c04201b9
[mir.git] / source / mircoders / servlet / ServletHelper.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  any library licensed under the Apache Software License,
22  * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23  * (or with modified versions of the above that use the same license as the above),
24  * and distribute linked combinations including the two.  You must obey the
25  * GNU General Public License in all respects for all of the code used other than
26  * the above mentioned libraries.  If you modify this file, you may extend this
27  * exception to your version of the file, but you are not obligated to do so.
28  * If you do not wish to do so, delete this exception statement from your version.
29  */
30 package mircoders.servlet;
31
32 import java.io.IOException;
33 import java.io.PrintWriter;
34 import java.util.Locale;
35 import java.util.Map;
36
37 import javax.servlet.http.HttpServletRequest;
38 import javax.servlet.http.HttpServletResponse;
39
40 import mir.config.MirPropertiesConfiguration;
41 import mir.entity.adapter.EntityAdapter;
42 import mir.generator.Generator;
43 import mir.generator.GeneratorHelper;
44 import mir.log.LoggerWrapper;
45 import mir.servlet.ServletModuleExc;
46 import mir.servlet.ServletModuleFailure;
47 import mircoders.entity.EntityUsers;
48 import mircoders.global.MirGlobal;
49
50
51 public class ServletHelper {
52   private static LoggerWrapper logger = new LoggerWrapper("ServletModule.Helper");
53
54   public static Map makeGenerationData(HttpServletRequest aRequest, HttpServletResponse aResponse, Locale[] aLocales) throws ServletModuleExc {
55     return makeGenerationData(aRequest, aResponse, aLocales, "etc/bundles/adminlocal", "bundles/admin");
56   }
57
58   public static Map makeGenerationData(HttpServletRequest aRequest, HttpServletResponse aResponse, Locale[] aLocales, String aBundle) throws ServletModuleExc {
59     return makeGenerationData(aRequest, aResponse, aLocales, aBundle, aBundle);
60   }
61
62   public static Map makeGenerationData(HttpServletRequest aRequest, HttpServletResponse aResponse, Locale[] aLocales, String aBundle, String aDefaultBundle) throws ServletModuleExc {
63     try {
64       MirPropertiesConfiguration configuration = MirPropertiesConfiguration.instance();
65       Map result = GeneratorHelper.makeBasicGenerationData(aLocales, aBundle, aDefaultBundle);
66       if (configuration.getString("Mir.Admin.ShowLoggedinUsers").equals("1")) {
67         result.put("loggedinusers", MirGlobal.getLoggedInUsers());
68       }
69       else {
70         result.put("loggedinusers", null);
71       }
72       result.put("systemstatus", MirGlobal.getStatus());
73
74       // ML: hackish
75       ((Map) result.get("config")).put("actionRoot",
76              aResponse.encodeURL(MirGlobal.config().getString("RootUri") + "/servlet/Mir"));
77
78       result.put("returnurl", null);
79       result.put("login_user", getUserAdapter(aRequest));
80
81       return result;
82     }
83     catch (Throwable t) {
84       throw new ServletModuleFailure(t);
85     }
86   }
87
88   public static void generateResponse(PrintWriter aWriter, Map aGenerationData, String aGenerator) throws ServletModuleExc {
89     logger.debug("generator used: " + aGenerator);
90
91     Generator generator;
92
93     try {
94       generator = MirGlobal.localizer().generators().makeAdminGeneratorLibrary().makeGenerator(aGenerator);
95
96       generator.generate(aWriter, aGenerationData, logger);
97     }
98     catch (Throwable t) {
99       throw new ServletModuleFailure(t);
100     }
101   }
102
103   public static void generateOpenPostingResponse(PrintWriter aWriter, Map aGenerationData, String aGenerator) throws ServletModuleExc {
104     Generator generator;
105
106     try {
107       generator = MirGlobal.localizer().generators().makeOpenPostingGeneratorLibrary().makeGenerator(aGenerator);
108
109       generator.generate(aWriter, aGenerationData, logger);
110     }
111     catch (Throwable t) {
112       throw new ServletModuleFailure(t);
113     }
114   }
115
116   public static void generateInfoMessage(HttpServletRequest aRequest, HttpServletResponse aResponse,
117       Locale[] aLocales, String aBundle, String aDefaultBundle, String aMessage, String anArgument1, String anArgument2) throws ServletModuleExc {
118     Map responseData = makeGenerationData(aRequest, aResponse, aLocales, aBundle, aDefaultBundle);
119     responseData.put("message", aMessage);
120     responseData.put("argument1", anArgument1);
121     responseData.put("argument2", anArgument2);
122
123     try {
124       generateResponse(aResponse.getWriter(), responseData, "infomessage.template");
125     }
126     catch (IOException e) {
127       throw new ServletModuleFailure(e);
128     }
129   }
130
131   public static void redirect(HttpServletResponse aResponse, String aQuery) throws ServletModuleExc, ServletModuleFailure {
132     try {
133       aResponse.sendRedirect(aResponse.encodeRedirectURL(MirPropertiesConfiguration.instance().getString("RootUri") + "/servlet/Mir?"+aQuery));
134     }
135     catch (IOException t) {
136       throw new ServletModuleFailure("ServletModule.redirect: " +t.getMessage(), t);
137     }
138   }
139
140   public static void redirect(HttpServletResponse aResponse, String aModule, String aMethod) throws ServletModuleExc, ServletModuleFailure {
141     redirect(aResponse, "module="+aModule+"&do="+aMethod);
142   }
143
144   public static void setUser(HttpServletRequest aRequest, EntityUsers aUser) {
145     if (aUser!=null)
146       aRequest.getSession().setAttribute("login.uid", aUser);
147     else
148       aRequest.getSession().removeAttribute("login.uid");
149   }
150
151   public static EntityUsers getUser(HttpServletRequest aRequest) {
152     return (EntityUsers) aRequest.getSession().getAttribute("login.uid");
153   }
154
155   public static EntityAdapter getUserAdapter(HttpServletRequest aRequest) {
156     try {
157       return MirGlobal.localizer().dataModel().adapterModel().makeEntityAdapter( "user", (EntityUsers) aRequest.getSession().getAttribute("login.uid"));
158     }
159     catch (Throwable t) {
160       throw new ServletModuleFailure (t);
161     }
162   }
163
164   public static String getUserName(HttpServletRequest aRequest) {
165     EntityUsers user = getUser(aRequest);
166
167     if (user!=null)
168       return user.getFieldValue("login");
169                 return "nobody";
170   }
171 }