producer abort + timezone support
[mir.git] / source / mircoders / servlet / ServletModuleProducer.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.PrintWriter;
33 import java.util.HashMap;
34 import java.util.Iterator;
35 import java.util.List;
36 import java.util.Locale;
37 import java.util.Map;
38 import java.util.Vector;
39 import javax.servlet.http.HttpServletRequest;
40 import javax.servlet.http.HttpServletResponse;
41
42 import org.apache.struts.util.MessageResources;
43
44 import mir.generator.Generator;
45 import mir.log.LoggerWrapper;
46 import mir.producer.ProducerFactory;
47 import mir.servlet.ServletModule;
48 import mir.servlet.ServletModuleFailure;
49 import mir.util.HTTPRequestParser;
50 import mir.util.ResourceBundleGeneratorFunction;
51 import mircoders.global.MirGlobal;
52
53 public class ServletModuleProducer extends ServletModule
54 {
55   private static ServletModuleProducer instance = new ServletModuleProducer();
56   public static ServletModule getInstance() { return instance; }
57
58   Object comments;
59   Map generationData;
60   Generator generator;
61   int totalNrComments;
62   List producersData;
63
64   void generateResponse(String aGeneratorIdentifier, PrintWriter aWriter, Map aResponseData, Locale aLocale) {
65     try {
66       generator = MirGlobal.localizer().generators().makeAdminGeneratorLibrary().makeGenerator(aGeneratorIdentifier);
67       MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(aResponseData);
68       aResponseData.put( "lang", new ResourceBundleGeneratorFunction( aLocale, MessageResources.getMessageResources("bundles.admin")));
69       generator.generate(aWriter, aResponseData, logger);
70     }
71     catch (Throwable t) {
72       throw new ServletModuleFailure(t);
73     }
74   }
75
76   private ServletModuleProducer() {
77     super();
78     logger = new LoggerWrapper("ServletModule.Producer");
79     defaultAction="showProducerQueueStatus";
80   }
81
82   public void showMessage(HttpServletRequest aRequest, HttpServletResponse aResponse, String aMessage, String anArgument1, String anArgument2) {
83     Map responseData;
84     try {
85       responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
86       responseData.put("message", aMessage);
87       responseData.put("argument1", anArgument1);
88       responseData.put("argument2", anArgument2);
89
90       ServletHelper.generateResponse(aResponse.getWriter(), responseData, "infomessage.template");
91     }
92     catch (Throwable t) {
93       throw new ServletModuleFailure(t);
94     }
95   }
96
97
98   public void showProducerQueueStatus(HttpServletRequest aRequest, HttpServletResponse aResponse) {
99     Object comments;
100     Map generationData;
101     Generator generator;
102     int totalNrComments;
103     List producersData;
104
105     try {
106       generator = MirGlobal.localizer().generators().makeAdminGeneratorLibrary().makeGenerator("producerqueue.template");
107
108       generationData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
109       generationData.put( "thisurl", "module=Producer&do=showProducerQueueStatus");
110
111       producersData = new Vector();
112       Iterator i = MirGlobal.localizer().producers().factories().iterator();
113       while (i.hasNext()) {
114         ProducerFactory factory = (ProducerFactory) i.next();
115
116         List producerVerbs = new Vector();
117         Iterator j = factory.verbs();
118         while (j.hasNext()) {
119           Map verbData = new HashMap();
120           ProducerFactory.ProducerVerb verb = (ProducerFactory.ProducerVerb) j.next();
121           verbData.put("name", verb.getName());
122           verbData.put("description", verb.getDescription());
123
124           producerVerbs.add(verbData);
125         }
126
127         Map producerData = new HashMap();
128         producerData.put("name", factory.getName());
129         producerData.put("verbs", producerVerbs);
130
131         producersData.add(producerData);
132       }
133       generationData.put("producers", producersData);
134
135       generationData.put("queue", MirGlobal.producerEngine().getQueueStatus());
136       generator.generate(aResponse.getWriter(), generationData, logger);
137     }
138     catch (Throwable t) {
139       throw new ServletModuleFailure(t);
140     }
141   }
142
143   public void produce(HttpServletRequest aRequest, HttpServletResponse aResponse) {
144     /*
145      * This method will only be called by external scripts (e.g. from cron jobs).
146      * The output therefore is very simple.
147      *
148      */
149
150     try {
151       PrintWriter out = aResponse.getWriter();
152
153       if (aRequest.getParameter("producer")!=null) {
154         String producerParam = aRequest.getParameter("producer");
155         String verbParam = aRequest.getParameter("verb");
156
157         MirGlobal.producerEngine().addJob(producerParam, verbParam);
158         out.println("job added");
159       }
160     }
161     catch (Throwable t) {
162       throw new ServletModuleFailure(t);
163     }
164   }
165
166   public void produceAllNew(HttpServletRequest aRequest, HttpServletResponse aResponse) {
167     try {
168       MirGlobal.localizer().producers().produceAllNew();
169       showMessage(aRequest, aResponse, "produceAllNewAddedToQueue", "", "");
170     }
171     catch (Throwable t) {
172       throw new ServletModuleFailure(t);
173     }
174   }
175
176   public void enqueue(HttpServletRequest aRequest, HttpServletResponse aResponse) {
177     try {
178       if (aRequest.getParameter("producer")!=null) {
179         String producerParam = aRequest.getParameter("producer");
180         String verbParam = aRequest.getParameter("verb");
181
182         MirGlobal.producerEngine().addJob(producerParam, verbParam);
183
184         ServletHelper.redirect(aResponse, "Producer", "showProducerQueueStatus");
185       }
186     }
187     catch (Throwable t) {
188       throw new ServletModuleFailure(t);
189     }
190   }
191
192   public void cancel(HttpServletRequest aRequest, HttpServletResponse aResponse)  {
193     try {
194       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
195       List jobs = new Vector(requestParser.getParameterList("jobid"));
196
197       MirGlobal.producerEngine().cancelJobs(jobs);
198       ServletHelper.redirect(aResponse, "Producer", "showProducerQueueStatus");
199     }
200     catch (Throwable t) {
201       throw new ServletModuleFailure(t);
202     }
203   }
204 }