2 * Copyright (C) 2001, 2002 The Mir-coders group
\r
4 * This file is part of Mir.
\r
6 * Mir is free software; you can redistribute it and/or modify
\r
7 * it under the terms of the GNU General Public License as published by
\r
8 * the Free Software Foundation; either version 2 of the License, or
\r
9 * (at your option) any later version.
\r
11 * Mir is distributed in the hope that it will be useful,
\r
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
14 * GNU General Public License for more details.
\r
16 * You should have received a copy of the GNU General Public License
\r
17 * along with Mir; if not, write to the Free Software
\r
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
\r
20 * In addition, as a special exception, The Mir-coders gives permission to link
\r
21 * the code of this program with any library licensed under the Apache Software License,
\r
22 * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
\r
23 * (or with modified versions of the above that use the same license as the above),
\r
24 * and distribute linked combinations including the two. You must obey the
\r
25 * GNU General Public License in all respects for all of the code used other than
\r
26 * the above mentioned libraries. If you modify this file, you may extend this
\r
27 * exception to your version of the file, but you are not obligated to do so.
\r
28 * If you do not wish to do so, delete this exception statement from your version.
\r
30 package mircoders.servlet;
\r
32 import java.io.PrintWriter;
\r
33 import java.util.HashMap;
\r
34 import java.util.Iterator;
\r
35 import java.util.List;
\r
36 import java.util.Locale;
\r
37 import java.util.Map;
\r
38 import java.util.Vector;
\r
39 import javax.servlet.http.HttpServletRequest;
\r
40 import javax.servlet.http.HttpServletResponse;
\r
42 import org.apache.struts.util.MessageResources;
\r
44 import mir.generator.Generator;
\r
45 import mir.log.LoggerWrapper;
\r
46 import mir.producer.ProducerFactory;
\r
47 import mir.servlet.ServletModule;
\r
48 import mir.servlet.ServletModuleFailure;
\r
49 import mir.util.HTTPRequestParser;
\r
50 import mir.util.ResourceBundleGeneratorFunction;
\r
51 import mircoders.global.MirGlobal;
\r
53 public class ServletModuleProducer extends ServletModule
\r
55 private static ServletModuleProducer instance = new ServletModuleProducer();
\r
56 public static ServletModule getInstance() { return instance; }
\r
60 Generator generator;
\r
61 int totalNrComments;
\r
64 void generateResponse(String aGeneratorIdentifier, PrintWriter aWriter, Map aResponseData, Locale aLocale) {
\r
66 generator = MirGlobal.localizer().generators().makeAdminGeneratorLibrary().makeGenerator(aGeneratorIdentifier);
\r
67 MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(aResponseData);
\r
68 aResponseData.put( "lang", new ResourceBundleGeneratorFunction( aLocale, MessageResources.getMessageResources("bundles.admin")));
\r
69 generator.generate(aWriter, aResponseData, logger);
\r
71 catch (Throwable t) {
\r
72 throw new ServletModuleFailure(t);
\r
76 private ServletModuleProducer() {
\r
78 logger = new LoggerWrapper("ServletModule.Producer");
\r
79 defaultAction="showProducerQueueStatus";
\r
82 public void showMessage(HttpServletRequest aRequest, HttpServletResponse aResponse, String aMessage, String anArgument1, String anArgument2) {
\r
85 responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
\r
86 responseData.put("message", aMessage);
\r
87 responseData.put("argument1", anArgument1);
\r
88 responseData.put("argument2", anArgument2);
\r
90 ServletHelper.generateResponse(aResponse.getWriter(), responseData, "infomessage.template");
\r
92 catch (Throwable t) {
\r
93 throw new ServletModuleFailure(t);
\r
97 public void showProducerQueueStatus(HttpServletRequest aRequest, HttpServletResponse aResponse) {
\r
100 Generator generator;
\r
101 int totalNrComments;
\r
102 List producersData;
\r
105 generator = MirGlobal.localizer().generators().makeAdminGeneratorLibrary().makeGenerator("producerqueue.template");
\r
107 generationData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
\r
108 generationData.put( "thisurl", "module=Producer&do=showProducerQueueStatus");
\r
110 producersData = new Vector();
\r
111 Iterator i = MirGlobal.localizer().producers().factories().iterator();
\r
112 while (i.hasNext()) {
\r
113 ProducerFactory factory = (ProducerFactory) i.next();
\r
115 List producerVerbs = new Vector();
\r
116 Iterator j = factory.verbs();
\r
117 while (j.hasNext()) {
\r
118 Map verbData = new HashMap();
\r
119 ProducerFactory.ProducerVerb verb = (ProducerFactory.ProducerVerb) j.next();
\r
120 verbData.put("name", verb.getName());
\r
121 verbData.put("description", verb.getDescription());
\r
123 producerVerbs.add(verbData);
\r
126 Map producerData = new HashMap();
\r
127 producerData.put("name", factory.getName());
\r
128 producerData.put("verbs", producerVerbs);
\r
130 producersData.add(producerData);
\r
132 generationData.put("producers", producersData);
\r
134 generationData.put("queue", MirGlobal.producerEngine().getQueueStatus());
\r
135 generator.generate(aResponse.getWriter(), generationData, logger);
\r
137 catch (Throwable t) {
\r
138 throw new ServletModuleFailure(t);
\r
142 public void produce(HttpServletRequest aRequest, HttpServletResponse aResponse) {
\r
144 * This method will only be called by external scripts (e.g. from cron jobs).
\r
145 * The output therefore is very simple.
\r
149 PrintWriter out = aResponse.getWriter();
\r
151 if (aRequest.getParameter("producer")!=null) {
\r
152 String producerParam = aRequest.getParameter("producer");
\r
153 String verbParam = aRequest.getParameter("verb");
\r
155 MirGlobal.producerEngine().addJob(producerParam, verbParam);
\r
156 out.println("job added");
\r
159 catch (Throwable t) {
\r
160 throw new ServletModuleFailure(t);
\r
164 public void producerecipe(HttpServletRequest aRequest, HttpServletResponse aResponse) {
\r
166 String recipe = aRequest.getParameter("recipe");
\r
167 MirGlobal.localizer().producers().produceRecipe(recipe);
\r
168 showMessage(aRequest, aResponse, "recipeAddedToQueue", recipe, "");
\r
170 catch (Throwable t) {
\r
171 throw new ServletModuleFailure(t);
\r
175 public void enqueue(HttpServletRequest aRequest, HttpServletResponse aResponse) {
\r
177 if (aRequest.getParameter("producer")!=null) {
\r
178 String producerParam = aRequest.getParameter("producer");
\r
179 String verbParam = aRequest.getParameter("verb");
\r
181 MirGlobal.producerEngine().addJob(producerParam, verbParam);
\r
183 ServletHelper.redirect(aResponse, "Producer", "showProducerQueueStatus");
\r
186 catch (Throwable t) {
\r
187 throw new ServletModuleFailure(t);
\r
191 public void cancel(HttpServletRequest aRequest, HttpServletResponse aResponse) {
\r
193 HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
\r
195 if (requestParser.getParameter("cancelall") != null) {
\r
196 MirGlobal.producerEngine().cancelAllJobs();
\r
199 List jobs = new Vector(requestParser.getParameterList("jobid"));
\r
201 MirGlobal.producerEngine().cancelJobs(jobs);
\r
203 ServletHelper.redirect(aResponse, "Producer", "showProducerQueueStatus");
\r
205 catch (Throwable t) {
\r
206 throw new ServletModuleFailure(t);
\r