admin activity logger added
[mir.git] / source / mircoders / servlet / ServletModuleUploadedMedia.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 \r
31 package mircoders.servlet;\r
32 \r
33 import java.io.InputStream;\r
34 import java.util.HashMap;\r
35 import java.util.Iterator;\r
36 import java.util.List;\r
37 import java.util.Locale;\r
38 import java.util.Map;\r
39 import java.util.Vector;\r
40 import javax.servlet.ServletContext;\r
41 import javax.servlet.ServletOutputStream;\r
42 import javax.servlet.http.HttpServletRequest;\r
43 import javax.servlet.http.HttpServletResponse;\r
44 \r
45 import org.apache.commons.fileupload.FileItem;\r
46 import mir.config.MirPropertiesConfiguration;\r
47 import mir.entity.Entity;\r
48 import mir.entity.adapter.EntityAdapter;\r
49 import mir.entity.adapter.EntityAdapterModel;\r
50 import mir.entity.adapter.EntityIteratorAdapter;\r
51 import mir.log.LoggerWrapper;\r
52 import mir.media.MediaHelper;\r
53 import mir.media.MirMedia;\r
54 import mir.servlet.ServletModule;\r
55 import mir.servlet.ServletModuleExc;\r
56 import mir.servlet.ServletModuleFailure;\r
57 import mir.servlet.ServletModuleUserExc;\r
58 import mir.session.UploadedFile;\r
59 import mir.util.CachingRewindableIterator;\r
60 import mir.util.ExceptionFunctions;\r
61 import mir.util.HTTPParsedRequest;\r
62 import mir.util.HTTPRequestParser;\r
63 import mir.util.JDBCStringRoutines;\r
64 import mir.util.SQLQueryBuilder;\r
65 import mir.util.URLBuilder;\r
66 import mircoders.entity.EntityComment;\r
67 import mircoders.entity.EntityContent;\r
68 import mircoders.entity.EntityUploadedMedia;\r
69 import mircoders.global.MirGlobal;\r
70 import mircoders.media.MediaUploadProcessor;\r
71 import mircoders.module.ModuleMediaType;\r
72 import mircoders.storage.DatabaseComment;\r
73 import mircoders.storage.DatabaseContent;\r
74 \r
75 /**\r
76  *\r
77  * <p>Title: </p>\r
78  * <p>Description: </p>\r
79  * <p>Copyright: Copyright (c) 2003</p>\r
80  * <p>Company: </p>\r
81  * @author the mir coders\r
82  * @version 1.0\r
83  */\r
84 \r
85 public abstract class ServletModuleUploadedMedia extends ServletModule {\r
86   protected String moduleName = "UploadedMedia";\r
87 \r
88   public static ServletModule getInstance() {\r
89     return null;\r
90   }\r
91 \r
92   public ServletModuleUploadedMedia() {\r
93     super();\r
94 \r
95     definition = "uploadedMedia";\r
96     logger = new LoggerWrapper("ServletModule.UploadedMedia");\r
97     try {\r
98       model = MirGlobal.localizer().dataModel().adapterModel();\r
99     }\r
100     catch (Throwable t) {\r
101       throw new ServletModuleFailure(t);\r
102     }\r
103   }\r
104 \r
105   public void insert(HttpServletRequest aRequest, HttpServletResponse aResponse)\r
106           throws ServletModuleExc, ServletModuleUserExc {\r
107     try {\r
108       HTTPParsedRequest parsedRequest = new HTTPParsedRequest(aRequest,\r
109           configuration.getString("Mir.DefaultEncoding"),\r
110           configuration.getInt("MaxMediaUploadSize")*1024,\r
111           configuration.getString("TempDir"));\r
112 \r
113       Map mediaValues = new HashMap();\r
114 \r
115       mediaValues.put("to_publisher", ServletHelper.getUser(aRequest).getId());\r
116 \r
117       Iterator i = mainModule.getStorageObject().getFields().iterator();\r
118       while (i.hasNext()) {\r
119         String field = (String) i.next();\r
120         String value = parsedRequest.getParameter(field);\r
121         if (value!=null)\r
122           mediaValues.put(field, value);\r
123       }\r
124 \r
125       List mediaList = new Vector();\r
126 \r
127       i = parsedRequest.getFiles().iterator();\r
128       while (i.hasNext()) {\r
129         UploadedFile file = new mir.session.CommonsUploadedFileAdapter((FileItem) i.next());\r
130 \r
131         String suffix = file.getFieldName().substring(5);\r
132         mediaValues.put("title", parsedRequest.getParameter("media_title" + suffix));\r
133 \r
134         mediaList.add(MediaUploadProcessor.processMediaUpload(file, mediaValues));\r
135       }\r
136 \r
137       String articleid = parsedRequest.getParameter("articleid");\r
138       String commentid = parsedRequest.getParameter("commentid");\r
139 \r
140       if (articleid!=null) {\r
141         EntityContent entContent = (EntityContent) DatabaseContent.getInstance().selectById(articleid);\r
142 \r
143         i=mediaList.iterator();\r
144 \r
145         while (i.hasNext()) {\r
146           String id = ((EntityUploadedMedia) i.next()).getId();\r
147 \r
148           entContent.attach(id);\r
149           logAdminUsage(aRequest, id, "object attached to article " + articleid);\r
150         }\r
151 \r
152         ((ServletModuleContent) ServletModuleContent.getInstance()).editObject(aRequest, aResponse, articleid);\r
153 \r
154 \r
155         return;\r
156       }\r
157 \r
158       if (commentid!=null) {\r
159         EntityComment comment = (EntityComment) DatabaseComment.getInstance().selectById(commentid);\r
160 \r
161         i=mediaList.iterator();\r
162 \r
163         while (i.hasNext()) {\r
164           String id = ((EntityUploadedMedia) i.next()).getId();\r
165 \r
166           comment.attach(id);\r
167 \r
168           logAdminUsage(aRequest, id, "object attached to comment " + commentid);\r
169         }\r
170 \r
171         ((ServletModuleComment) ServletModuleComment.getInstance()).editObject(aRequest, aResponse, commentid);\r
172 \r
173         return;\r
174       }\r
175 \r
176       logAdminUsage(aRequest, "", mediaList.size() + " objects added");\r
177 \r
178       returnUploadedMediaList(aRequest, aResponse, mediaList, 1, mediaList.size(), mediaList.size(), "", null, null);\r
179     }\r
180     catch (Throwable t) {\r
181       Throwable cause = ExceptionFunctions.traceCauseException(t);\r
182 \r
183       if (cause instanceof ModuleMediaType.UnsupportedMimeTypeExc) {\r
184         throw new ServletModuleUserExc("media.error.unsupportedformat", new String[] {});\r
185       }\r
186       throw new ServletModuleFailure("ServletModuleUploadedMedia.insert: " + t.toString(), t);\r
187     }\r
188   }\r
189 \r
190   public void update(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {\r
191 \r
192     try {\r
193       HTTPParsedRequest parsedRequest = new HTTPParsedRequest(aRequest,\r
194           configuration.getString("Mir.DefaultEncoding"),\r
195           configuration.getInt("MaxMediaUploadSize")*1024,\r
196           configuration.getString("TempDir"));\r
197       Map mediaValues = new HashMap();\r
198 \r
199       Iterator i = mainModule.getStorageObject().getFields().iterator();\r
200       while (i.hasNext()) {\r
201         String field = (String) i.next();\r
202         String value = parsedRequest.getParameter(field);\r
203         if (value!=null)\r
204           mediaValues.put(field, value);\r
205       }\r
206 \r
207       mediaValues.put("to_publisher", ServletHelper.getUser(aRequest).getId());\r
208       mediaValues.put("is_produced", "0");\r
209       if (!mediaValues.containsKey("is_published"))\r
210         mediaValues.put("is_published", "0");\r
211 \r
212       String id = mainModule.set(mediaValues);\r
213       logger.debug("update: media ID = " + id);\r
214       logAdminUsage(aRequest, id, "object modified");\r
215 \r
216       editUploadedMediaObject(id, aRequest, aResponse);\r
217     }\r
218     catch (Throwable e) {\r
219       throw new ServletModuleFailure("upload -- exception " + e.toString(), e);\r
220     }\r
221 \r
222   }\r
223 \r
224   public void returnUploadedMediaList(HttpServletRequest aRequest, HttpServletResponse aResponse,\r
225                                       Object aList, int aFrom, int aTo, int aCount,\r
226                                       String aThisUrl, String aNextUrl, String aPreviousUrl) throws ServletModuleExc {\r
227 \r
228     try {\r
229       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);\r
230       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] {getLocale(aRequest), getFallbackLocale(aRequest)});\r
231 \r
232       responseData.put("searchfield", requestParser.getParameterWithDefault("searchfield", ""));\r
233       responseData.put("searchtext", requestParser.getParameterWithDefault("searchtext", ""));\r
234       responseData.put("searchispublished", requestParser.getParameterWithDefault("searchispublished", ""));\r
235       responseData.put("searchmediafolder", requestParser.getParameterWithDefault("searchmediafolder", ""));\r
236       responseData.put("articleid", requestParser.getParameter("articleid"));\r
237       responseData.put("commentid", requestParser.getParameter("commentid"));\r
238 \r
239       responseData.put("thisurl", aThisUrl);\r
240       responseData.put("nexturl", aNextUrl);\r
241       responseData.put("prevurl", aPreviousUrl);\r
242 \r
243       responseData.put("from", Integer.toString(aFrom));\r
244       responseData.put("count", Integer.toString(aCount));\r
245       responseData.put("to", Integer.toString(aTo));\r
246 \r
247       responseData.put("medialist", aList);\r
248 \r
249       addExtraData(responseData);\r
250       ServletHelper.generateResponse(aResponse.getWriter(), responseData, listGenerator);\r
251     }\r
252     catch (Throwable t) {\r
253       throw new ServletModuleFailure(t);\r
254     }\r
255   }\r
256 \r
257   public void returnUploadedMediaList(HttpServletRequest aRequest, HttpServletResponse aResponse,\r
258                                       String aWhereClause, String anOrderByClause, int anOffset) throws ServletModuleExc {\r
259 \r
260     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);\r
261     URLBuilder urlBuilder = new URLBuilder();\r
262     EntityAdapterModel model;\r
263     String nextPageUrl = null;\r
264     String previousPageUrl = null;\r
265     String thisUrl = null;\r
266 \r
267     int count;\r
268 \r
269     try {\r
270       model = MirGlobal.localizer().dataModel().adapterModel();\r
271 \r
272       Object mediaList =\r
273           new CachingRewindableIterator(\r
274           new EntityIteratorAdapter(aWhereClause, anOrderByClause, nrEntitiesPerListPage,\r
275                    model, definition, nrEntitiesPerListPage, anOffset)\r
276           );\r
277 \r
278       count = mainModule.getSize(aWhereClause);\r
279 \r
280       urlBuilder.setValue("module", moduleName);\r
281       urlBuilder.setValue("do", "list");\r
282       urlBuilder.setValue("where", aWhereClause);\r
283       urlBuilder.setValue("order", anOrderByClause);\r
284 \r
285       urlBuilder.setValue("articleid", requestParser.getParameter("articleid"));\r
286       urlBuilder.setValue("commentid", requestParser.getParameter("commentid"));\r
287       urlBuilder.setValue("searchfield", requestParser.getParameter("searchfield"));\r
288       urlBuilder.setValue("searchtext", requestParser.getParameter("searchtext"));\r
289       urlBuilder.setValue("searchispublished", requestParser.getParameter("searchispublished"));\r
290       urlBuilder.setValue("searchmediafolder", requestParser.getParameter("searchmediafolder"));\r
291       urlBuilder.setValue("where", aWhereClause);\r
292       urlBuilder.setValue("order", anOrderByClause);\r
293 \r
294       urlBuilder.setValue("offset", anOffset);\r
295       thisUrl = urlBuilder.getQuery();\r
296 \r
297       if (count >= anOffset + nrEntitiesPerListPage) {\r
298         urlBuilder.setValue("offset", anOffset + nrEntitiesPerListPage);\r
299         nextPageUrl = urlBuilder.getQuery();\r
300       }\r
301 \r
302       if (anOffset > 0) {\r
303         urlBuilder.setValue("offset", Math.max(anOffset - nrEntitiesPerListPage, 0));\r
304         previousPageUrl = urlBuilder.getQuery();\r
305       }\r
306 \r
307       returnUploadedMediaList(aRequest, aResponse, mediaList,\r
308               anOffset+1, anOffset+nrEntitiesPerListPage, count, thisUrl,\r
309               nextPageUrl, previousPageUrl);\r
310     }\r
311     catch (Throwable e) {\r
312       throw new ServletModuleFailure(e);\r
313     }\r
314   }\r
315 \r
316   public void search(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {\r
317     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);\r
318 \r
319     SQLQueryBuilder queryBuilder = new SQLQueryBuilder();\r
320 \r
321     String queryField = "";\r
322     String searchField = requestParser.getParameter("searchfield");\r
323     String searchText = requestParser.getParameter("searchtext");\r
324     String searchIsPublished = requestParser.getParameter("searchispublished");\r
325     String searchMediaFolder = requestParser.getParameter("searchmediafolder");\r
326 \r
327     queryBuilder.appendDescendingOrder("webdb_create");\r
328 \r
329     if (searchIsPublished!=null)\r
330       if (searchIsPublished.equals("0")) {\r
331         queryBuilder.appendAndCondition("is_published='f'");\r
332       }\r
333       else if (searchIsPublished.equals("1")) {\r
334         queryBuilder.appendAndCondition("is_published='t'");\r
335       }\r
336 \r
337     if (searchField!=null && searchText!=null && searchText.length()>0) {\r
338         queryBuilder.appendAndCondition(\r
339           "lower(" + searchField + ") like " +\r
340           "'%" + JDBCStringRoutines.escapeStringLiteral(searchText.toLowerCase()) + "%'");\r
341     }\r
342 \r
343     if (searchMediaFolder!=null && searchMediaFolder.length()>0) {\r
344       queryBuilder.appendAndCondition("to_media_folder="+Integer.parseInt(searchMediaFolder));\r
345     }\r
346 \r
347     returnUploadedMediaList(aRequest, aResponse,\r
348             queryBuilder.getWhereClause(), queryBuilder.getOrderByClause(), requestParser.getIntegerWithDefault("offset", 0));\r
349   }\r
350 \r
351   public void list(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {\r
352     HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);\r
353 \r
354     returnUploadedMediaList(aRequest, aResponse,\r
355        requestParser.getParameterWithDefault("where", ""),\r
356        requestParser.getParameterWithDefault("order", "webdb_create desc"),\r
357        requestParser.getIntegerWithDefault("offset", 0));\r
358   }\r
359 \r
360 \r
361   public void add(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {\r
362     try {\r
363       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);\r
364       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] {getLocale(aRequest), getFallbackLocale(aRequest)});\r
365 \r
366       int nrMedia = requestParser.getIntegerWithDefault("nrmedia", 1);\r
367       int maxNrMedia=configuration.getInt("ServletModule.OpenIndy.MaxMediaUploadItems", 20);\r
368 \r
369       List fields = mainModule.getStorageObject().getFields();\r
370       Map media = new HashMap();\r
371       Iterator i = fields.iterator();\r
372       while (i.hasNext()) {\r
373         media.put(i.next(), null);\r
374       }\r
375       media.put("to_media_folder", new Integer(7));\r
376       responseData.put("uploadedmedia", media);\r
377 \r
378       responseData.put("new", Boolean.TRUE);\r
379       responseData.put("articleid", requestParser.getParameter("articleid"));\r
380       responseData.put("commentid", requestParser.getParameter("commentid"));\r
381       responseData.put("returnurl", null);\r
382 \r
383       if (nrMedia<=0)\r
384         nrMedia=1;\r
385       if (nrMedia>maxNrMedia)\r
386         nrMedia=maxNrMedia;\r
387 \r
388       List mediaFields = new Vector();\r
389       for (int j=0; j<nrMedia; j++)\r
390         mediaFields.add(new Integer(j));\r
391 \r
392       responseData.put("nrmedia", new Integer(nrMedia));\r
393       responseData.put("mediafields", mediaFields);\r
394 \r
395       responseData.put("edittemplate", editGenerator);\r
396       responseData.put("module", moduleName);\r
397 \r
398       addExtraData(responseData);\r
399 \r
400       ServletHelper.generateResponse(aResponse.getWriter(), responseData, "uploadedmedia.template");\r
401     }\r
402     catch (Exception e) {\r
403       throw new ServletModuleFailure(e);\r
404     }\r
405   }\r
406 \r
407   public void edit(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {\r
408     editUploadedMediaObject(aRequest.getParameter("id"), aRequest, aResponse);\r
409   }\r
410 \r
411   private void editUploadedMediaObject(String idParam, HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {\r
412     if (idParam != null && !idParam.equals("")) {\r
413       try {\r
414         Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] {getLocale(aRequest), getFallbackLocale(aRequest)});\r
415         EntityAdapter object =\r
416             model.makeEntityAdapter(definition, mainModule.getById(idParam));\r
417         responseData.put("uploadedmedia", object);\r
418         responseData.put("new", Boolean.FALSE);\r
419         responseData.put("articleid", null);\r
420         responseData.put("commentid", null);\r
421         responseData.put("returnurl", null);\r
422         responseData.put("thisurl", null);\r
423 \r
424         responseData.put("edittemplate", editGenerator);\r
425         responseData.put("module", moduleName);\r
426 \r
427         addExtraData(responseData);\r
428 \r
429         ServletHelper.generateResponse(aResponse.getWriter(), responseData, "uploadedmedia.template");\r
430       }\r
431       catch (Throwable e) {\r
432         throw new ServletModuleFailure(e);\r
433       }\r
434     }\r
435     else {\r
436       throw new ServletModuleExc("ServletmoduleUploadedMedia :: editUploadedMediaObject without id");\r
437     }\r
438   }\r
439 \r
440   public void getMedia(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc {\r
441     String idParam = aRequest.getParameter("id");\r
442     if (idParam!=null && !idParam.equals("")) {\r
443       try {\r
444         EntityUploadedMedia ent = (EntityUploadedMedia)mainModule.getById(idParam);\r
445         Entity mediaType = ent.getMediaType();\r
446         MirMedia mediaHandler;\r
447 \r
448         ServletContext ctx = MirPropertiesConfiguration.getContext();\r
449         String fName = ent.getId()+"."+mediaType.getValue("name");\r
450 \r
451         mediaHandler = MediaHelper.getHandler(mediaType);\r
452         InputStream in = mediaHandler.getMedia(ent, mediaType);\r
453 \r
454         aResponse.setContentType(ctx.getMimeType(fName));\r
455         //important that before calling this aResponse.getWriter was not called first\r
456         ServletOutputStream out = aResponse.getOutputStream();\r
457 \r
458         int read ;\r
459         byte[] buf = new byte[8 * 1024];\r
460         while((read = in.read(buf)) != -1) {\r
461           out.write(buf, 0, read);\r
462         }\r
463         in.close();\r
464         out.close();\r
465       }\r
466       catch (Throwable e) {\r
467         throw new ServletModuleFailure(e);\r
468       }\r
469     }\r
470     else logger.error("id not specified.");\r
471     // no exception allowed\r
472   }\r
473 \r
474   public void getIcon(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc\r
475   {\r
476     String idParam = aRequest.getParameter("id");\r
477     if (idParam!=null && !idParam.equals("")) {\r
478       try {\r
479         EntityUploadedMedia ent = (EntityUploadedMedia) mainModule.getById(idParam);\r
480         Entity mediaType = ent.getMediaType();\r
481         MirMedia mediaHandler;\r
482 \r
483         mediaHandler = MediaHelper.getHandler(mediaType);\r
484         InputStream in = mediaHandler.getIcon(ent);\r
485 \r
486         if (in==null)\r
487           throw new ServletModuleExc("no icon available");\r
488 \r
489         aResponse.setContentType(mediaHandler.getIconMimeType(ent, mediaType));\r
490         //important that before calling this aResponse.getWriter was not called first\r
491         ServletOutputStream out = aResponse.getOutputStream();\r
492 \r
493         int read ;\r
494         byte[] buf = new byte[8 * 1024];\r
495         while((read = in.read(buf)) != -1) {\r
496           out.write(buf, 0, read);\r
497         }\r
498         in.close();\r
499         out.close();\r
500       }\r
501 \r
502       catch (Throwable e) {\r
503         logger.error("getIcon: " + e.toString());\r
504       }\r
505     }\r
506     else logger.error("getIcon: id not specified.");\r
507     // no exception allowed\r
508   }\r
509 \r
510   protected void addExtraData(Map aTarget) throws ServletModuleExc, ServletModuleFailure {\r
511     try {\r
512       aTarget.put("mediafolders",\r
513                   new EntityIteratorAdapter("", "", 20, MirGlobal.localizer().dataModel().adapterModel(), "mediaFolder"));\r
514     }\r
515     catch (Throwable t) {\r
516       throw new ServletModuleFailure(t);\r
517     }\r
518   }\r
519 \r
520   public void showarticles(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc\r
521   {\r
522     String idParam = aRequest.getParameter("id");\r
523     if (idParam!=null && !idParam.equals("")) {\r
524       try {\r
525         EntityUploadedMedia entity = (EntityUploadedMedia) mainModule.getById(idParam);\r
526 \r
527         ServletModuleContent.getInstance().returnList(\r
528             aRequest,\r
529             aResponse,\r
530             "exists (select * from content_x_media where content_id=content.id and media_id=" + JDBCStringRoutines.escapeStringLiteral( idParam ) + ")", "", 0);\r
531       }\r
532       catch (Throwable t) {\r
533         throw new ServletModuleFailure(t);\r
534       }\r
535     }\r
536     else logger.error("showarticles: id not specified.");\r
537   }\r
538 \r
539   public void showcomments(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletModuleExc\r
540   {\r
541     String idParam = aRequest.getParameter("id");\r
542     if (idParam!=null && !idParam.equals("")) {\r
543       try {\r
544         EntityUploadedMedia entity = (EntityUploadedMedia) mainModule.getById(idParam);\r
545 \r
546         ServletModuleComment.getInstance().returnList(\r
547             aRequest,\r
548             aResponse,\r
549             "exists (select * from comment_x_media where comment_id=comment.id and media_id=" + JDBCStringRoutines.escapeStringLiteral( idParam ) + ")", "", 0);\r
550       }\r
551       catch (Throwable t) {\r
552         throw new ServletModuleFailure(t);\r
553       }\r
554     }\r
555     else logger.error("editObjects: id not specified.");\r
556   }\r
557 \r
558 }