comment order fix
[mir.git] / source / mircoders / servlet / ServletModuleProducer.java
1 /*\r
2  * Copyright (C) 2001, 2002 The Mir-coders group\r
3  *\r
4  * This file is part of Mir.\r
5  *\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
10  *\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
15  *\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
19  *\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
29  */\r
30 package mircoders.servlet;\r
31 \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
41 \r
42 import org.apache.struts.util.MessageResources;\r
43 \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
52 \r
53 public class ServletModuleProducer extends ServletModule\r
54 {\r
55   private static ServletModuleProducer instance = new ServletModuleProducer();\r
56   public static ServletModule getInstance() { return instance; }\r
57 \r
58   Object comments;\r
59   Map generationData;\r
60   Generator generator;\r
61   int totalNrComments;\r
62   List producersData;\r
63 \r
64   void generateResponse(String aGeneratorIdentifier, PrintWriter aWriter, Map aResponseData, Locale aLocale) {\r
65     try {\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
70     }\r
71     catch (Throwable t) {\r
72       throw new ServletModuleFailure(t);\r
73     }\r
74   }\r
75 \r
76   private ServletModuleProducer() {\r
77     super();\r
78     logger = new LoggerWrapper("ServletModule.Producer");\r
79     defaultAction="showProducerQueueStatus";\r
80   }\r
81 \r
82   public void showMessage(HttpServletRequest aRequest, HttpServletResponse aResponse, String aMessage, String anArgument1, String anArgument2) {\r
83     Map responseData;\r
84     try {\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
89 \r
90       ServletHelper.generateResponse(aResponse.getWriter(), responseData, "infomessage.template");\r
91     }\r
92     catch (Throwable t) {\r
93       throw new ServletModuleFailure(t);\r
94     }\r
95   }\r
96 \r
97   public void showProducerQueueStatus(HttpServletRequest aRequest, HttpServletResponse aResponse) {\r
98     Object comments;\r
99     Map generationData;\r
100     Generator generator;\r
101     int totalNrComments;\r
102     List producersData;\r
103 \r
104     try {\r
105       generator = MirGlobal.localizer().generators().makeAdminGeneratorLibrary().makeGenerator("producerqueue.template");\r
106 \r
107       generationData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});\r
108       generationData.put( "thisurl", "module=Producer&do=showProducerQueueStatus");\r
109 \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
114 \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
122 \r
123           producerVerbs.add(verbData);\r
124         }\r
125 \r
126         Map producerData = new HashMap();\r
127         producerData.put("name", factory.getName());\r
128         producerData.put("verbs", producerVerbs);\r
129 \r
130         producersData.add(producerData);\r
131       }\r
132       generationData.put("producers", producersData);\r
133 \r
134       generationData.put("queue", MirGlobal.producerEngine().getQueueStatus());\r
135       generator.generate(aResponse.getWriter(), generationData, logger);\r
136     }\r
137     catch (Throwable t) {\r
138       throw new ServletModuleFailure(t);\r
139     }\r
140   }\r
141 \r
142   public void produce(HttpServletRequest aRequest, HttpServletResponse aResponse) {\r
143     /*\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
146      */\r
147 \r
148     try {\r
149       PrintWriter out = aResponse.getWriter();\r
150 \r
151       if (aRequest.getParameter("producer")!=null) {\r
152         String producerParam = aRequest.getParameter("producer");\r
153         String verbParam = aRequest.getParameter("verb");\r
154 \r
155         MirGlobal.producerEngine().addJob(producerParam, verbParam);\r
156         out.println("job added");\r
157       }\r
158     }\r
159     catch (Throwable t) {\r
160       throw new ServletModuleFailure(t);\r
161     }\r
162   }\r
163 \r
164   public void producerecipe(HttpServletRequest aRequest, HttpServletResponse aResponse) {\r
165     try {\r
166       String recipe = aRequest.getParameter("recipe");\r
167       MirGlobal.localizer().producers().produceRecipe(recipe);\r
168       showMessage(aRequest, aResponse, "recipeAddedToQueue", recipe, "");\r
169     }\r
170     catch (Throwable t) {\r
171       throw new ServletModuleFailure(t);\r
172     }\r
173   }\r
174 \r
175   public void enqueue(HttpServletRequest aRequest, HttpServletResponse aResponse) {\r
176     try {\r
177       if (aRequest.getParameter("producer")!=null) {\r
178         String producerParam = aRequest.getParameter("producer");\r
179         String verbParam = aRequest.getParameter("verb");\r
180 \r
181         MirGlobal.producerEngine().addJob(producerParam, verbParam);\r
182 \r
183         ServletHelper.redirect(aResponse, "Producer", "showProducerQueueStatus");\r
184       }\r
185     }\r
186     catch (Throwable t) {\r
187       throw new ServletModuleFailure(t);\r
188     }\r
189   }\r
190 \r
191   public void cancel(HttpServletRequest aRequest, HttpServletResponse aResponse)  {\r
192     try {\r
193       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);\r
194 \r
195       if (requestParser.getParameter("cancelall") != null) {\r
196         MirGlobal.producerEngine().cancelAllJobs();\r
197       }\r
198       else {\r
199         List jobs = new Vector(requestParser.getParameterList("jobid"));\r
200 \r
201         MirGlobal.producerEngine().cancelJobs(jobs);\r
202       }\r
203       ServletHelper.redirect(aResponse, "Producer", "showProducerQueueStatus");\r
204     }\r
205     catch (Throwable t) {\r
206       throw new ServletModuleFailure(t);\r
207     }\r
208   }\r
209 }\r