1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.rss.web;
35
36 import fr.paris.lutece.plugins.document.service.publishing.PublishingService;
37 import fr.paris.lutece.plugins.rss.business.RssFeedHome;
38 import fr.paris.lutece.plugins.rss.business.RssGeneratedFile;
39 import fr.paris.lutece.plugins.rss.business.RssGeneratedFileHome;
40 import fr.paris.lutece.plugins.rss.service.RssGeneratorService;
41 import fr.paris.lutece.plugins.rss.service.RssService;
42 import fr.paris.lutece.portal.business.portlet.Portlet;
43 import fr.paris.lutece.portal.business.rss.IResourceRss;
44 import fr.paris.lutece.portal.service.message.AdminMessage;
45 import fr.paris.lutece.portal.service.message.AdminMessageService;
46 import fr.paris.lutece.portal.service.portlet.PortletService;
47 import fr.paris.lutece.portal.service.template.AppTemplateService;
48 import fr.paris.lutece.portal.service.util.AppLogService;
49 import fr.paris.lutece.portal.service.util.AppPathService;
50 import fr.paris.lutece.portal.service.util.AppPropertiesService;
51 import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;
52 import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
53 import fr.paris.lutece.portal.web.constants.Messages;
54 import fr.paris.lutece.util.ReferenceList;
55 import fr.paris.lutece.util.filesystem.UploadUtil;
56 import fr.paris.lutece.util.html.HtmlTemplate;
57 import fr.paris.lutece.util.html.Paginator;
58
59 import org.apache.commons.lang3.StringUtils;
60
61 import java.util.Arrays;
62 import java.util.Collection;
63 import java.util.HashMap;
64 import java.util.List;
65 import java.util.Map;
66
67 import javax.servlet.http.HttpServletRequest;
68
69
70
71
72
73
74 public class RssJspBean extends PluginAdminPageJspBean
75 {
76
77
78 public static final String RIGHT_RSS_MANAGEMENT = "RSS_MANAGEMENT";
79 private static final String PARAMETER_PUSH_RSS_PORTLET_ID = "rss_portlet_id";
80 private static final String PARAMETER_PUSH_RSS_ID = "rss_id";
81 private static final String PARAMETER_PUSH_RSS_NAME = "rss_name";
82 private static final String PARAMETER_PUSH_RSS_MAX_ITEMS = "rss_max_items";
83 private static final String PARAMETER_PUSH_RSS_ENCODING = "rss_encoding";
84 private static final String PARAMETER_PUSH_RSS_FEED_TYPE = "rss_feed_type";
85 private static final String PARAMETER_PUSH_RSS_DESCRIPTION = "rss_description";
86 private static final String PARAMETER_RSS_TYPE = "rss_type";
87 private static final String PARAMETER_RSS_RESOURCE_KEY = "rss_resource_key";
88 private static final String PARAMETER_PAGE_INDEX = "page_index";
89 private static final String PARAMETER_ITEMS_PER_PAGE = "items_per_page";
90 private static final String PARAMETER_WORKGROUP_KEY = "workgroup_key";
91 private static final String PARAMETER_CANCEL = "cancel";
92 private static final String PARAMETER_APPLY = "apply";
93 private static final String TEMPLATE_MANAGE_RSS_FILE = "admin/plugins/rss/manage_rss_file.html";
94 private static final String TEMPLATE_CREATE_PUSH_RSS_FILE = "admin/plugins/rss/create_rss_file.html";
95 private static final String TEMPLATE_CREATE_PUSH_RSS_FILE_PORTLET = "admin/plugins/rss/create_rss_file_portlet.html";
96 private static final String TEMPLATE_CREATE_PUSH_RSS_FILE_RESOURCE = "admin/plugins/rss/create_rss_file_resource.html";
97 private static final String TEMPLATE_MODIFY_PUSH_RSS_FILE_PORTLET = "admin/plugins/rss/modify_rss_file_portlet.html";
98 private static final String TEMPLATE_MODIFY_PUSH_RSS_FILE_RESOURCE = "admin/plugins/rss/modify_rss_file_resource.html";
99 private static final String MARK_RSS_FILE = "rssFile";
100 private static final String MARK_PUSH_RSS_LIST = "rss_files_list";
101 private static final String MARK_PUSH_RSS_URL = "rss_file_url";
102 private static final String MARK_PORTLET_LIST = "portlet_list";
103 private static final String MARK_RESOURCE_LIST = "resource_list";
104 private static final String MARK_PAGINATOR = "paginator";
105 private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
106 private static final String MARK_USER_WORKGROUP_LIST = "user_workgroup_list";
107 private static final String MARK_ENCODING_LIST = "encoding_list";
108 private static final String MARK_FEED_TYPE_LIST = "feed_type_list";
109 private static final String MARK_WORKGROUP_SELECTED = "selected_workgroup";
110 private static final String MARK_RSS_TYPE = "rss_type";
111 private static final String MARK_RSS_NAME = "rss_name";
112 private static final String MARK_RSS_MAX_ITEMS = "rss_max_items";
113 private static final String MARK_RSS_ENCODING = "rss_encoding";
114 private static final String MARK_RSS_FEED_TYPE = "rss_feed_type";
115 private static final String MARK_RESOURCE_RSS = "resource_rss";
116 private static final String MARK_RESOURCE_RSS_CONFIG = "resource_rss_config";
117 private static final int STATE_OK = 0;
118 private static final int STATE_PORTLET_MISSING = 1;
119 private static final String PROPERTY_PATH_PLUGIN_WAREHOUSE = "path.plugins.warehouse";
120 private static final String PROPERTY_FILE_TYPE = "rss.file.type";
121 private static final String PROPERTY_NAME_MAX_LENGTH = "rss.name.max.length";
122 private static final String PROPERTY_PAGE_TITLE_FILES = "rss.manage_rss_file.pageTitle";
123 private static final String PROPERTY_PAGE_TITLE_CREATE = "rss.create_rss_file.pageTitle";
124 private static final String PROPERTY_PAGE_TITLE_MODIFY = "rss.modify_rss_file.pageTitle";
125 private static final String PROPERTY_RSS_PER_PAGE = "rss.rssPerPage";
126 private static final String PROPERTY_RSS_ENCODING = "rss.encoding";
127 private static final String PROPERTY_RSS_FEED_TYPE = "rss.feedType";
128
129
130 private static final String MESSAGE_FILENAME_TOO_LONG = "rss.message.filenameTooLong";
131 private static final String MESSAGE_FILENAME_ALREADY_EXISTS = "rss.message.filenameAlreadyExists";
132 private static final String MESSAGE_NO_DOCUMENT_PORTLET = "rss.message.NoDocumentPortlet";
133 private static final String MESSAGE_RESOURCE = "rss.message.noResource";
134 private static final String MESSAGE_CONFIRM_DELETE_RSS_FILE = "rss.message.confirmRemoveRssFile";
135 private static final String MESSAGE_RSS_LINKED_FEED = "rss.message.linkedToFeed";
136 private static final String MESSAGE_MAX_ITEMS = "rss.message.maxItems";
137 private static final String MESSAGE_NO_ENCODING = "rss.message.noEncoding";
138 private static final String MESSAGE_NO_FEED_TYPE = "rss.message.noFeedType";
139
140
141 private static final String JSP_CREATE_RESOURCE_RSS_FILE = "jsp/admin/plugins/rss/DoCreateRssFile.jsp";
142 private static final String JSP_MODIFY_RESOURCE_RSS_FILE = "jsp/admin/plugins/rss/ModifyRssFile.jsp";
143 private static final String JSP_MANAGE_RSS_FILE = "jsp/admin/plugins/rss/ManageRssFiles.jsp";
144 private static final String JSP_DELETE_RSS_FILE = "jsp/admin/plugins/rss/DoDeleteRssFile.jsp";
145 private static final String REGEX_ID = "^[\\d]+$";
146 private static final String WORKGROUP_ALL = "all";
147 private static final String STRING_EMPTY = "";
148 private static final String PORTLET = "portlet";
149 private static final String RESOURCE_RSS = "resourceRss";
150 private int _nItemsPerPage;
151 private String _strCurrentPageIndex;
152
153
154
155
156
157
158
159 public String getManageRssFile( HttpServletRequest request )
160 {
161 setPageTitleProperty( PROPERTY_PAGE_TITLE_FILES );
162 _nItemsPerPage = getItemsPerPage( request );
163 _strCurrentPageIndex = getPageIndex( request );
164
165 List<RssGeneratedFile> listRssFileList = RssGeneratedFileHome.getRssFileList( );
166 listRssFileList = (List<RssGeneratedFile>) AdminWorkgroupService.getAuthorizedCollection( listRssFileList,
167 getUser( ) );
168
169 Paginator paginator = new Paginator( listRssFileList, _nItemsPerPage, getHomeUrl( request ),
170 PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
171 HashMap<String, Object> model = new HashMap<String, Object>( );
172 model.put( MARK_PAGINATOR, paginator );
173 model.put( MARK_NB_ITEMS_PER_PAGE, "" + _nItemsPerPage );
174 model.put( MARK_PUSH_RSS_LIST, paginator.getPageItems( ) );
175 model.put( MARK_PUSH_RSS_URL, getRssFileUrl( "", request ) );
176
177 HtmlTemplate templateList = AppTemplateService.getTemplate( TEMPLATE_MANAGE_RSS_FILE, getLocale( ), model );
178
179 return getAdminPage( templateList.getHtml( ) );
180 }
181
182
183
184
185
186 private List<String> getFeedTypes( )
187 {
188 return Arrays.asList( AppPropertiesService.getProperty( PROPERTY_RSS_FEED_TYPE ).split( "," ) );
189 }
190
191
192
193
194
195 private List<String> getEncodings( )
196 {
197 return Arrays.asList( AppPropertiesService.getProperty( PROPERTY_RSS_ENCODING ).split( "," ) );
198 }
199
200
201
202
203
204
205
206 public String doModifyRssFilePortlet( HttpServletRequest request )
207 {
208
209 if ( request.getParameter( PARAMETER_CANCEL ) != null )
210 {
211 return getHomeUrl( request );
212 }
213
214 String strRssFileId = request.getParameter( PARAMETER_PUSH_RSS_ID );
215 String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP_KEY );
216 String strMaxItems = request.getParameter( PARAMETER_PUSH_RSS_MAX_ITEMS );
217 String strEncoding = request.getParameter( PARAMETER_PUSH_RSS_ENCODING );
218 String strFeedType = request.getParameter( PARAMETER_PUSH_RSS_FEED_TYPE );
219
220 int nRssFileId = Integer.parseInt( strRssFileId );
221 String strPortletId = request.getParameter( PARAMETER_PUSH_RSS_PORTLET_ID );
222
223 if ( ( strPortletId == null ) || !strPortletId.matches( REGEX_ID ) )
224 {
225 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_DOCUMENT_PORTLET, AdminMessage.TYPE_STOP );
226 }
227
228 if ( StringUtils.isBlank( strFeedType ) )
229 {
230 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_FEED_TYPE, AdminMessage.TYPE_STOP );
231 }
232
233 if ( !getFeedTypes( ).contains( strFeedType ) )
234 {
235 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_FEED_TYPE, AdminMessage.TYPE_STOP );
236 }
237
238 if ( StringUtils.isBlank( strEncoding ) )
239 {
240 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_ENCODING, AdminMessage.TYPE_STOP );
241 }
242
243 int nMaxItems;
244
245 if ( StringUtils.isBlank( strMaxItems ) )
246 {
247 nMaxItems = 0;
248 }
249 else
250 {
251 try
252 {
253 nMaxItems = Integer.parseInt( strMaxItems );
254 }
255 catch ( NumberFormatException nfe )
256 {
257 AppLogService.error( nfe.getMessage( ), nfe );
258
259 return AdminMessageService.getMessageUrl( request, MESSAGE_MAX_ITEMS, AdminMessage.TYPE_STOP );
260 }
261 }
262
263 int nPortletId = Integer.parseInt( strPortletId );
264 String strRssFileName = request.getParameter( PARAMETER_PUSH_RSS_NAME );
265 String strRssFileDescription = request.getParameter( PARAMETER_PUSH_RSS_DESCRIPTION );
266
267 RssGeneratedFileess/RssGeneratedFile.html#RssGeneratedFile">RssGeneratedFile rssFile = new RssGeneratedFile( );
268 rssFile.setPortletId( nPortletId );
269 rssFile.setId( nRssFileId );
270 rssFile.setName( strRssFileName );
271 rssFile.setState( STATE_OK );
272 rssFile.setWorkgroup( strWorkgroup );
273 rssFile.setDescription( strRssFileDescription );
274 rssFile.setMaxItems( nMaxItems );
275 rssFile.setFeedType( strFeedType );
276 rssFile.setEncoding( strEncoding );
277
278
279 RssGeneratedFileHome.update( rssFile );
280
281
282 if ( !RssGeneratedFileHome.checkRssFilePortlet( nPortletId ) )
283 {
284 rssFile.setState( STATE_PORTLET_MISSING );
285 }
286
287
288 strRssFileName = UploadUtil.cleanFileName( strRssFileName );
289
290
291 String strRssDocument = RssGeneratorService.createRssDocument( nPortletId, rssFile.getDescription( ),
292 rssFile.getEncoding( ), rssFile.getFeedType( ), rssFile.getMaxItems( ), request );
293
294
295 RssGeneratorService.createFileRss( strRssFileName, strRssDocument );
296
297
298 RssGeneratedFileHome.update( rssFile );
299
300
301 return getHomeUrl( request );
302 }
303
304
305
306
307
308
309
310 public String doModifyRssFileResource( HttpServletRequest request )
311 {
312 if ( request.getParameter( PARAMETER_CANCEL ) != null )
313 {
314 return getHomeUrl( request );
315 }
316
317
318 String strRssFileId = request.getParameter( PARAMETER_PUSH_RSS_ID );
319
320
321 int nRssFileId = Integer.parseInt( strRssFileId );
322
323 String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP_KEY );
324 String strRssFileName = request.getParameter( PARAMETER_PUSH_RSS_NAME );
325 String strMaxItems = request.getParameter( PARAMETER_PUSH_RSS_MAX_ITEMS );
326 String strEncoding = request.getParameter( PARAMETER_PUSH_RSS_ENCODING );
327 String strFeedType = request.getParameter( PARAMETER_PUSH_RSS_FEED_TYPE );
328
329 String strResourceRssKey = request.getParameter( PARAMETER_RSS_RESOURCE_KEY );
330 IResourceRss resourceRss = RssService.getInstance( ).getResourceRssInstance( strResourceRssKey, getLocale( ) );
331
332 if ( request.getParameter( PARAMETER_APPLY ) != null )
333 {
334 return getJspModifyRssResource( request, strRssFileId, request.getParameter( PARAMETER_PUSH_RSS_NAME ),
335 request.getParameter( PARAMETER_WORKGROUP_KEY ), request.getParameter( PARAMETER_RSS_TYPE ),
336 request.getParameter( PARAMETER_RSS_RESOURCE_KEY ), resourceRss.getParameterToApply( request ) );
337 }
338
339 String strNameMaxLength = AppPropertiesService.getProperty( PROPERTY_NAME_MAX_LENGTH );
340
341 if ( strRssFileName.length( ) > Integer.parseInt( strNameMaxLength ) )
342 {
343 return AdminMessageService.getMessageUrl( request, MESSAGE_FILENAME_TOO_LONG, AdminMessage.TYPE_STOP );
344 }
345
346
347 strRssFileName = UploadUtil.cleanFileName( strRssFileName );
348
349
350 String strFileType = AppPropertiesService.getProperty( PROPERTY_FILE_TYPE );
351
352 if ( !strRssFileName.toLowerCase( ).endsWith( strFileType ) )
353 {
354 strRssFileName = strRssFileName + strFileType;
355 }
356
357 if ( ( resourceRss != null ) && ( request.getParameter( PARAMETER_CANCEL ) == null ) )
358 {
359 String strError = resourceRss.doValidateConfigForm( request, getLocale( ) );
360
361 if ( strError != null )
362 {
363 return strError;
364 }
365 }
366
367 if ( StringUtils.isBlank( strFeedType ) )
368 {
369 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_FEED_TYPE, AdminMessage.TYPE_STOP );
370 }
371
372 if ( !getFeedTypes( ).contains( strFeedType ) )
373 {
374 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_FEED_TYPE, AdminMessage.TYPE_STOP );
375 }
376
377 if ( StringUtils.isBlank( strEncoding ) )
378 {
379 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_ENCODING, AdminMessage.TYPE_STOP );
380 }
381
382 int nMaxItems;
383
384 if ( StringUtils.isBlank( strMaxItems ) )
385 {
386
387 nMaxItems = 0;
388 }
389 else
390 {
391 try
392 {
393 nMaxItems = Integer.parseInt( strMaxItems );
394 }
395 catch ( NumberFormatException nfe )
396 {
397 AppLogService.error( nfe.getMessage( ), nfe );
398
399 return AdminMessageService.getMessageUrl( request, MESSAGE_MAX_ITEMS, AdminMessage.TYPE_STOP );
400 }
401 }
402
403
404 RssGeneratedFileess/RssGeneratedFile.html#RssGeneratedFile">RssGeneratedFile rssFile = new RssGeneratedFile( );
405 rssFile.setId( nRssFileId );
406 rssFile.setName( strRssFileName );
407 rssFile.setState( STATE_OK );
408 rssFile.setWorkgroup( strWorkgroup );
409 rssFile.setDescription( resourceRss.getDescription( ) );
410 rssFile.setTypeResourceRss( resourceRss.getResourceRssType( ).getKey( ) );
411 rssFile.setMaxItems( nMaxItems );
412 rssFile.setFeedType( strFeedType );
413 rssFile.setEncoding( strEncoding );
414
415 resourceRss.setId( rssFile.getId( ) );
416 resourceRss.setEncoding( strEncoding );
417 resourceRss.setFeedType( strFeedType );
418
419
420 if ( !resourceRss.checkResource( ) )
421 {
422 rssFile.setState( STATE_PORTLET_MISSING );
423 }
424
425
426 RssGeneratedFileHome.update( rssFile );
427
428
429 resourceRss.doUpdateConfig( request, getLocale( ) );
430
431
432
433 String strRss = FeedUtil.getFeed( resourceRss );
434
435
436 RssGeneratorService.createFileRss( strRssFileName, strRss );
437
438
439 return getHomeUrl( request );
440 }
441
442
443
444
445
446
447
448 public String doCreateRssFile( HttpServletRequest request )
449 {
450 if ( request.getParameter( PARAMETER_CANCEL ) != null )
451 {
452 return getHomeUrl( request );
453 }
454
455 String strRssType = request.getParameter( PARAMETER_RSS_TYPE );
456 String strRssResourceName = request.getParameter( PARAMETER_RSS_RESOURCE_KEY );
457
458 if ( ( strRssType == null ) )
459 {
460 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_DOCUMENT_PORTLET, AdminMessage.TYPE_STOP );
461 }
462
463 if ( ( strRssType.equals( PORTLET ) ) )
464 {
465 return getCreateRssFilePortlet( request );
466 }
467 else if ( strRssType.equals( RESOURCE_RSS ) )
468 {
469 if ( ( strRssResourceName == null ) )
470 {
471 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_DOCUMENT_PORTLET, AdminMessage.TYPE_STOP );
472 }
473 else
474 {
475 IResourceRss resourceRss = RssService.getInstance( )
476 .getResourceRssInstance( strRssResourceName, getLocale( ) );
477
478 if ( resourceRss.contentResourceRss( ) )
479 {
480 HashMap<String, Object> model = new HashMap<String, Object>( );
481
482 if ( request.getParameter( PARAMETER_PUSH_RSS_NAME ) != null )
483 {
484 model.put( MARK_RSS_NAME, request.getParameter( PARAMETER_PUSH_RSS_NAME ) );
485 }
486 else
487 {
488 model.put( MARK_RSS_NAME, STRING_EMPTY );
489 }
490
491 if ( request.getParameter( PARAMETER_PUSH_RSS_MAX_ITEMS ) != null )
492 {
493 model.put( MARK_RSS_MAX_ITEMS, request.getParameter( PARAMETER_PUSH_RSS_MAX_ITEMS ) );
494 }
495 else
496 {
497 model.put( MARK_RSS_MAX_ITEMS, STRING_EMPTY );
498 }
499
500 if ( request.getParameter( PARAMETER_PUSH_RSS_MAX_ITEMS ) != null )
501 {
502 model.put( MARK_RSS_MAX_ITEMS, request.getParameter( PARAMETER_PUSH_RSS_MAX_ITEMS ) );
503 }
504 else
505 {
506 model.put( MARK_RSS_MAX_ITEMS, STRING_EMPTY );
507 }
508
509 if ( request.getParameter( PARAMETER_PUSH_RSS_FEED_TYPE ) != null )
510 {
511 model.put( MARK_RSS_FEED_TYPE, request.getParameter( PARAMETER_PUSH_RSS_FEED_TYPE ) );
512 }
513 else
514 {
515 model.put( MARK_RSS_FEED_TYPE, STRING_EMPTY );
516 }
517
518 if ( request.getParameter( PARAMETER_PUSH_RSS_ENCODING ) != null )
519 {
520 model.put( MARK_RSS_ENCODING, request.getParameter( PARAMETER_PUSH_RSS_ENCODING ) );
521 }
522 else
523 {
524 model.put( MARK_RSS_ENCODING, STRING_EMPTY );
525 }
526
527 ReferenceList refListWorkGroups = AdminWorkgroupService.getUserWorkgroups( getUser( ),
528 getLocale( ) );
529
530 model.put( MARK_USER_WORKGROUP_LIST, refListWorkGroups );
531
532 ReferenceList refListEncoding = getRefListEncoding( );
533
534 model.put( MARK_ENCODING_LIST, refListEncoding );
535
536 ReferenceList refListFeedType = getRefListFeedType( );
537 model.put( MARK_FEED_TYPE_LIST, refListFeedType );
538
539
540 if ( !refListWorkGroups.isEmpty( ) )
541 {
542 if ( request.getParameter( PARAMETER_WORKGROUP_KEY ) != null )
543 {
544 model.put( MARK_WORKGROUP_SELECTED, request.getParameter( PARAMETER_WORKGROUP_KEY ) );
545 }
546 else
547 {
548 model.put( MARK_WORKGROUP_SELECTED, WORKGROUP_ALL );
549 }
550 }
551
552 model.put( MARK_RSS_TYPE, RESOURCE_RSS );
553 model.put( MARK_RESOURCE_RSS, resourceRss.getResourceRssType( ) );
554 model.put( MARK_RESOURCE_RSS_CONFIG,
555 resourceRss.getDisplayCreateConfigForm( request, getLocale( ) ) );
556
557 setPageTitleProperty( PROPERTY_PAGE_TITLE_CREATE );
558
559 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_PUSH_RSS_FILE_RESOURCE,
560 getLocale( ), model );
561
562 return getAdminPage( template.getHtml( ) );
563 }
564 else
565 {
566 return AdminMessageService.getMessageUrl( request, MESSAGE_RESOURCE, AdminMessage.TYPE_STOP );
567 }
568 }
569 }
570
571 return null;
572 }
573
574
575
576
577
578 private ReferenceList getRefListEncoding( )
579 {
580 List<String> listEncodings = getEncodings( );
581 ReferenceList refList = new ReferenceList( );
582
583
584 for ( String strEncoding : listEncodings )
585 {
586 refList.addItem( strEncoding, strEncoding );
587 }
588
589 return refList;
590 }
591
592
593
594
595
596 private ReferenceList getRefListFeedType( )
597 {
598 List<String> listFeedType = getFeedTypes( );
599 ReferenceList refList = new ReferenceList( );
600
601 for ( String strFeedType : listFeedType )
602 {
603 refList.addItem( strFeedType, strFeedType );
604 }
605
606 return refList;
607 }
608
609
610
611
612
613
614
615 public String doCreateRssFilePortlet( HttpServletRequest request )
616 {
617 if ( request.getParameter( PARAMETER_CANCEL ) != null )
618 {
619 return getHomeUrl( request );
620 }
621
622 String strPortletId = request.getParameter( PARAMETER_PUSH_RSS_PORTLET_ID );
623 String strRssFileName = request.getParameter( PARAMETER_PUSH_RSS_NAME );
624 String strRssFileDescription = request.getParameter( PARAMETER_PUSH_RSS_DESCRIPTION );
625 String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP_KEY );
626 String strRssMaxItems = request.getParameter( PARAMETER_PUSH_RSS_MAX_ITEMS );
627 String strFeedType = request.getParameter( PARAMETER_PUSH_RSS_FEED_TYPE );
628 String strEncoding = request.getParameter( PARAMETER_PUSH_RSS_ENCODING );
629
630 if ( ( strPortletId == null ) || !strPortletId.matches( REGEX_ID ) )
631 {
632 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_DOCUMENT_PORTLET, AdminMessage.TYPE_STOP );
633 }
634
635 int nPortletId = Integer.parseInt( strPortletId );
636
637
638 if ( request.getParameter( PARAMETER_PUSH_RSS_NAME ).equals( "" ) ||
639 request.getParameter( PARAMETER_PUSH_RSS_DESCRIPTION ).equals( "" ) )
640 {
641 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
642 }
643
644
645 String strNameMaxLength = AppPropertiesService.getProperty( PROPERTY_NAME_MAX_LENGTH );
646
647 if ( strRssFileName.length( ) > Integer.parseInt( strNameMaxLength ) )
648 {
649 return AdminMessageService.getMessageUrl( request, MESSAGE_FILENAME_TOO_LONG, AdminMessage.TYPE_STOP );
650 }
651
652
653 strRssFileName = UploadUtil.cleanFileName( strRssFileName );
654
655
656 String strFileType = AppPropertiesService.getProperty( PROPERTY_FILE_TYPE );
657
658 if ( !strRssFileName.toLowerCase( ).endsWith( strFileType ) )
659 {
660 strRssFileName = strRssFileName + strFileType;
661 }
662
663
664 if ( RssGeneratedFileHome.checkRssFileFileName( strRssFileName ) )
665 {
666 return AdminMessageService.getMessageUrl( request, MESSAGE_FILENAME_ALREADY_EXISTS, AdminMessage.TYPE_STOP );
667 }
668
669 if ( StringUtils.isBlank( strFeedType ) )
670 {
671 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_FEED_TYPE, AdminMessage.TYPE_STOP );
672 }
673
674 if ( !getFeedTypes( ).contains( strFeedType ) )
675 {
676 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_FEED_TYPE, AdminMessage.TYPE_STOP );
677 }
678
679 if ( StringUtils.isBlank( strEncoding ) )
680 {
681 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_ENCODING, AdminMessage.TYPE_STOP );
682 }
683
684 int nMaxItems;
685
686 if ( StringUtils.isBlank( strRssMaxItems ) )
687 {
688
689 nMaxItems = 0;
690 }
691 else
692 {
693 try
694 {
695 nMaxItems = Integer.parseInt( strRssMaxItems );
696 }
697 catch ( NumberFormatException nfe )
698 {
699 AppLogService.error( nfe.getMessage( ), nfe );
700
701 return AdminMessageService.getMessageUrl( request, MESSAGE_MAX_ITEMS, AdminMessage.TYPE_STOP );
702 }
703 }
704
705
706 String strRssDocument = RssGeneratorService.createRssDocument( nPortletId, strRssFileDescription, strEncoding,
707 strFeedType, nMaxItems, request );
708
709
710 RssGeneratorService.createFileRss( strRssFileName, strRssDocument );
711
712
713 RssGeneratedFileess/RssGeneratedFile.html#RssGeneratedFile">RssGeneratedFile rssFile = new RssGeneratedFile( );
714 rssFile.setPortletId( nPortletId );
715 rssFile.setName( strRssFileName );
716 rssFile.setState( STATE_OK );
717 rssFile.setDescription( strRssFileDescription );
718 rssFile.setWorkgroup( strWorkgroup );
719 rssFile.setMaxItems( nMaxItems );
720 rssFile.setFeedType( strFeedType );
721 rssFile.setEncoding( strEncoding );
722
723 RssGeneratedFileHome.create( rssFile );
724
725 return getHomeUrl( request );
726 }
727
728
729
730
731
732
733
734 public String getCreateRssFile( HttpServletRequest request )
735 {
736 setPageTitleProperty( PROPERTY_PAGE_TITLE_CREATE );
737
738 ReferenceList referenceList = RssService.getInstance( ).getRefListResourceRssType( getLocale( ) );
739
740 HashMap<String, Object> model = new HashMap<String, Object>( );
741 model.put( MARK_RESOURCE_LIST, referenceList );
742
743 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_PUSH_RSS_FILE, getLocale( ), model );
744
745 return getAdminPage( template.getHtml( ) );
746 }
747
748
749
750
751
752
753
754 public String getCreateRssFilePortlet( HttpServletRequest request )
755 {
756 setPageTitleProperty( PROPERTY_PAGE_TITLE_CREATE );
757
758 ReferenceList refListWorkGroups = AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) );
759
760 Collection<Portlet> listInvolvedPortlets = PublishingService.getInstance( ).getPublishedPortlets( );
761
762 listInvolvedPortlets = PortletService.getInstance( )
763 .getAuthorizedPortletCollection( listInvolvedPortlets, getUser( ) );
764
765 ReferenceList referenceList = new ReferenceList( );
766
767 for ( Portlet portlet : listInvolvedPortlets )
768 {
769 referenceList.addItem( portlet.getId( ), portlet.getName( ) );
770 }
771
772 HashMap<String, Object> model = new HashMap<String, Object>( );
773 model.put( MARK_PORTLET_LIST, referenceList );
774 model.put( MARK_USER_WORKGROUP_LIST, refListWorkGroups );
775
776 ReferenceList refListEncoding = getRefListEncoding( );
777
778 model.put( MARK_RSS_MAX_ITEMS, STRING_EMPTY );
779
780 model.put( MARK_ENCODING_LIST, refListEncoding );
781 model.put( MARK_RSS_ENCODING, STRING_EMPTY );
782
783 ReferenceList refListFeedType = getRefListFeedType( );
784 model.put( MARK_FEED_TYPE_LIST, refListFeedType );
785 model.put( MARK_RSS_FEED_TYPE, STRING_EMPTY );
786
787
788 if ( !refListWorkGroups.isEmpty( ) )
789 {
790 model.put( MARK_WORKGROUP_SELECTED, refListWorkGroups.get( 0 ).getCode( ) );
791 }
792
793 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_PUSH_RSS_FILE_PORTLET, getLocale( ),
794 model );
795
796 return getAdminPage( template.getHtml( ) );
797 }
798
799
800
801
802
803
804
805 public String doCreateRssFileResource( HttpServletRequest request )
806 {
807 if ( request.getParameter( PARAMETER_CANCEL ) != null )
808 {
809 return getHomeUrl( request );
810 }
811
812 String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP_KEY );
813 String strRssFileName = request.getParameter( PARAMETER_PUSH_RSS_NAME );
814 String strRssMaxItems = request.getParameter( PARAMETER_PUSH_RSS_MAX_ITEMS );
815 String strEncoding = request.getParameter( PARAMETER_PUSH_RSS_ENCODING );
816 String strFeedType = request.getParameter( PARAMETER_PUSH_RSS_FEED_TYPE );
817
818 String strResourceRssKey = request.getParameter( PARAMETER_RSS_RESOURCE_KEY );
819 IResourceRss resourceRss = RssService.getInstance( ).getResourceRssInstance( strResourceRssKey, getLocale( ) );
820
821 if ( request.getParameter( PARAMETER_APPLY ) != null )
822 {
823 return getJspCreateRssResource( request, request.getParameter( PARAMETER_PUSH_RSS_NAME ),
824 request.getParameter( PARAMETER_WORKGROUP_KEY ), request.getParameter( PARAMETER_RSS_TYPE ),
825 request.getParameter( PARAMETER_RSS_RESOURCE_KEY ), resourceRss.getParameterToApply( request ) );
826 }
827
828 if ( strRssFileName.equals( "" ) )
829 {
830 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
831 }
832
833 String strNameMaxLength = AppPropertiesService.getProperty( PROPERTY_NAME_MAX_LENGTH );
834
835 if ( strRssFileName.length( ) > Integer.parseInt( strNameMaxLength ) )
836 {
837 return AdminMessageService.getMessageUrl( request, MESSAGE_FILENAME_TOO_LONG, AdminMessage.TYPE_STOP );
838 }
839
840
841 strRssFileName = UploadUtil.cleanFileName( strRssFileName );
842
843
844 String strFileType = AppPropertiesService.getProperty( PROPERTY_FILE_TYPE );
845
846 if ( !strRssFileName.toLowerCase( ).endsWith( strFileType ) )
847 {
848 strRssFileName = strRssFileName + strFileType;
849 }
850
851
852 if ( RssGeneratedFileHome.checkRssFileFileName( strRssFileName ) )
853 {
854 return AdminMessageService.getMessageUrl( request, MESSAGE_FILENAME_ALREADY_EXISTS, AdminMessage.TYPE_STOP );
855 }
856
857 if ( ( resourceRss != null ) && ( request.getParameter( PARAMETER_CANCEL ) == null ) )
858 {
859 String strError = resourceRss.doValidateConfigForm( request, getLocale( ) );
860
861 if ( strError != null )
862 {
863 return strError;
864 }
865 }
866
867 if ( StringUtils.isBlank( strFeedType ) )
868 {
869 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_FEED_TYPE, AdminMessage.TYPE_STOP );
870 }
871
872 if ( !getFeedTypes( ).contains( strFeedType ) )
873 {
874 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_FEED_TYPE, AdminMessage.TYPE_STOP );
875 }
876
877 if ( StringUtils.isBlank( strEncoding ) )
878 {
879 return AdminMessageService.getMessageUrl( request, MESSAGE_NO_ENCODING, AdminMessage.TYPE_STOP );
880 }
881
882 int nMaxItems;
883
884 if ( StringUtils.isBlank( strRssMaxItems ) )
885 {
886
887 nMaxItems = 0;
888 }
889 else
890 {
891 try
892 {
893 nMaxItems = Integer.parseInt( strRssMaxItems );
894 }
895 catch ( NumberFormatException nfe )
896 {
897 AppLogService.error( nfe.getMessage( ), nfe );
898
899 return AdminMessageService.getMessageUrl( request, MESSAGE_MAX_ITEMS, AdminMessage.TYPE_STOP );
900 }
901 }
902
903 RssGeneratedFileess/RssGeneratedFile.html#RssGeneratedFile">RssGeneratedFile rssFile = new RssGeneratedFile( );
904 rssFile.setName( strRssFileName );
905 rssFile.setState( STATE_OK );
906 rssFile.setDescription( resourceRss.getDescription( ) );
907 rssFile.setWorkgroup( strWorkgroup );
908 rssFile.setTypeResourceRss( resourceRss.getResourceRssType( ).getKey( ) );
909 rssFile.setMaxItems( nMaxItems );
910 rssFile.setFeedType( strFeedType );
911 rssFile.setEncoding( strEncoding );
912 RssGeneratedFileHome.create( rssFile );
913
914 resourceRss.setEncoding( strEncoding );
915 resourceRss.setFeedType( strFeedType );
916 resourceRss.setId( rssFile.getId( ) );
917
918
919 resourceRss.doSaveConfig( request, getLocale( ) );
920
921 String strRss = FeedUtil.getFeed( resourceRss );
922
923
924 RssGeneratorService.createFileRss( strRssFileName, strRss );
925
926 return getJspManageRssFile( request );
927 }
928
929
930
931
932
933
934 private String getJspManageRssFile( HttpServletRequest request )
935 {
936 return AppPathService.getBaseUrl( request ) + JSP_MANAGE_RSS_FILE;
937 }
938
939
940
941
942
943
944 private String getJspCreateRssResource( HttpServletRequest request, String strRssName, String strRssWorkgroup,
945 String rss_type, String resourceKey, Map<String, String> parameterList )
946 {
947 String strParam = new String( );
948
949 for ( String parameter : parameterList.keySet( ) )
950 {
951 strParam += ( parameter + "=" + parameterList.get( parameter ) + "&" );
952 }
953
954 return AppPathService.getBaseUrl( request ) + JSP_CREATE_RESOURCE_RSS_FILE + "?" + PARAMETER_PUSH_RSS_NAME +
955 "=" + strRssName + "&" + PARAMETER_WORKGROUP_KEY + "=" + strRssWorkgroup + "&" + PARAMETER_RSS_TYPE + "=" +
956 rss_type + "&" + PARAMETER_RSS_RESOURCE_KEY + "=" + resourceKey + "&" + strParam;
957 }
958
959
960
961
962
963
964 private String getJspModifyRssResource( HttpServletRequest request, String id_rss, String strRssName,
965 String strRssWorkgroup, String rss_type, String resourceKey, Map<String, String> parameterList )
966 {
967 String strParam = new String( );
968
969 for ( String parameter : parameterList.keySet( ) )
970 {
971 strParam += ( parameter + "=" + parameterList.get( parameter ) + "&" );
972 }
973
974 return AppPathService.getBaseUrl( request ) + JSP_MODIFY_RESOURCE_RSS_FILE + "?" + PARAMETER_PUSH_RSS_NAME +
975 "=" + strRssName + "&" + PARAMETER_WORKGROUP_KEY + "=" + strRssWorkgroup + "&" + PARAMETER_PUSH_RSS_ID + "=" +
976 id_rss + "&" + PARAMETER_RSS_TYPE + "=" + rss_type + "&" + PARAMETER_RSS_RESOURCE_KEY + "=" + resourceKey +
977 "&" + strParam;
978 }
979
980
981
982
983
984
985
986 public String getModifyRssFile( HttpServletRequest request )
987 {
988 setPageTitleProperty( PROPERTY_PAGE_TITLE_MODIFY );
989
990 ReferenceList refListWorkGroups = AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) );
991 int nRssFileId = Integer.parseInt( request.getParameter( PARAMETER_PUSH_RSS_ID ) );
992 RssGeneratedFile rss = RssGeneratedFileHome.findByPrimaryKey( nRssFileId );
993
994 HashMap<String, Object> model = new HashMap<String, Object>( );
995
996 if ( request.getParameter( PARAMETER_WORKGROUP_KEY ) != null )
997 {
998 rss.setWorkgroup( request.getParameter( PARAMETER_WORKGROUP_KEY ) );
999 }
1000
1001 if ( request.getParameter( PARAMETER_PUSH_RSS_NAME ) != null )
1002 {
1003 rss.setName( request.getParameter( PARAMETER_PUSH_RSS_NAME ) );
1004 }
1005
1006 model.put( MARK_RSS_FILE, rss );
1007 model.put( MARK_USER_WORKGROUP_LIST, refListWorkGroups );
1008
1009 ReferenceList refListEncoding = getRefListEncoding( );
1010
1011 model.put( MARK_ENCODING_LIST, refListEncoding );
1012
1013 ReferenceList refListFeedType = getRefListFeedType( );
1014 model.put( MARK_FEED_TYPE_LIST, refListFeedType );
1015
1016 HtmlTemplate template = null;
1017
1018 if ( ( rss.getTypeResourceRss( ) != null ) && ( rss.getPortletId( ) == 0 ) )
1019 {
1020 IResourceRss resourceRss = RssService.getInstance( )
1021 .getResourceRssInstance( rss.getTypeResourceRss( ), getLocale( ) );
1022
1023 model.put( MARK_RESOURCE_RSS, resourceRss.getResourceRssType( ) );
1024 resourceRss.setId( rss.getId( ) );
1025 model.put( MARK_RESOURCE_RSS_CONFIG, resourceRss.getDisplayModifyConfigForm( request, getLocale( ) ) );
1026 template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_PUSH_RSS_FILE_RESOURCE, getLocale( ), model );
1027 }
1028 else
1029 {
1030 Collection<Portlet> listInvolvedPortlets = PublishingService.getInstance( ).getPublishedPortlets( );
1031
1032 listInvolvedPortlets = PortletService.getInstance( )
1033 .getAuthorizedPortletCollection( listInvolvedPortlets, getUser( ) );
1034
1035 ReferenceList referenceList = new ReferenceList( );
1036
1037 for ( Portlet portlet : listInvolvedPortlets )
1038 {
1039 referenceList.addItem( portlet.getId( ), portlet.getName( ) );
1040 }
1041
1042 model.put( MARK_PORTLET_LIST, referenceList );
1043
1044 template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_PUSH_RSS_FILE_PORTLET, getLocale( ), model );
1045 }
1046
1047 return getAdminPage( template.getHtml( ) );
1048 }
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060 private String getRssFileUrl( String strNameRssFile, HttpServletRequest request )
1061 {
1062 String strBaseUrl = AppPathService.getBaseUrl( request );
1063 String strStockingDirectoryName = AppPropertiesService.getProperty( RssGeneratorService.PROPERTY_STORAGE_DIRECTORY_NAME );
1064 String strPluginWarehouse = AppPropertiesService.getProperty( PROPERTY_PATH_PLUGIN_WAREHOUSE );
1065
1066
1067 if ( strPluginWarehouse.startsWith( "/" ) )
1068 {
1069 strPluginWarehouse = strPluginWarehouse.substring( 1 );
1070 }
1071
1072 String strRssFileRepository = strPluginWarehouse + "/" + strStockingDirectoryName;
1073 strBaseUrl = strBaseUrl + strRssFileRepository + "/" + strNameRssFile;
1074
1075 return strBaseUrl;
1076 }
1077
1078
1079
1080
1081
1082
1083 public String doDeleteRssFile( HttpServletRequest request )
1084 {
1085 int nIdFileRss = Integer.parseInt( request.getParameter( PARAMETER_PUSH_RSS_ID ) );
1086 RssGeneratedFile rssGeneratedFile = RssGeneratedFileHome.findByPrimaryKey( nIdFileRss );
1087
1088 if ( ( rssGeneratedFile.getPortletId( ) == 0 ) && ( rssGeneratedFile.getTypeResourceRss( ) != null ) )
1089 {
1090 IResourceRss resourceRss = RssService.getInstance( )
1091 .getResourceRssInstance( rssGeneratedFile.getTypeResourceRss( ),
1092 getLocale( ) );
1093 resourceRss.deleteResourceRssConfig( rssGeneratedFile.getId( ) );
1094 }
1095
1096 RssGeneratedFileHome.remove( nIdFileRss );
1097
1098 return getHomeUrl( request );
1099 }
1100
1101
1102
1103
1104
1105
1106
1107 public String doConfirmDeleteRssFile( HttpServletRequest request )
1108 {
1109 String strIdFile = request.getParameter( PARAMETER_PUSH_RSS_ID );
1110 int nIdFile = Integer.parseInt( strIdFile );
1111 String strDeleteUrl = JSP_DELETE_RSS_FILE + "?" + PARAMETER_PUSH_RSS_ID + "=" + strIdFile;
1112 String strUrl = AdminMessageService.getMessageUrl( request, MESSAGE_RSS_LINKED_FEED, AdminMessage.TYPE_STOP );
1113
1114 if ( checkNoRssExternalFeed( nIdFile, request ) )
1115 {
1116 RssGeneratedFile rssFile = RssGeneratedFileHome.findByPrimaryKey( nIdFile );
1117 Object[] messageArgs = { rssFile.getName( ) };
1118 strUrl = AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_DELETE_RSS_FILE, messageArgs,
1119 strDeleteUrl, AdminMessage.TYPE_CONFIRMATION );
1120 }
1121
1122 return strUrl;
1123 }
1124
1125
1126
1127
1128
1129
1130 private int getItemsPerPage( HttpServletRequest request )
1131 {
1132 int nItemsPerPage;
1133 String strItemsPerPage = request.getParameter( PARAMETER_ITEMS_PER_PAGE );
1134
1135 if ( strItemsPerPage != null )
1136 {
1137 nItemsPerPage = Integer.parseInt( strItemsPerPage );
1138 }
1139 else
1140 {
1141 if ( _nItemsPerPage != 0 )
1142 {
1143 nItemsPerPage = _nItemsPerPage;
1144 }
1145 else
1146 {
1147 nItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_RSS_PER_PAGE, 10 );
1148 }
1149 }
1150
1151 return nItemsPerPage;
1152 }
1153
1154
1155
1156
1157
1158
1159 private String getPageIndex( HttpServletRequest request )
1160 {
1161 String strPageIndex = request.getParameter( PARAMETER_PAGE_INDEX );
1162 strPageIndex = ( strPageIndex != null ) ? strPageIndex : _strCurrentPageIndex;
1163
1164 return strPageIndex;
1165 }
1166
1167
1168
1169
1170
1171
1172
1173 public boolean checkNoRssExternalFeed( int nIdRssFile, HttpServletRequest request )
1174 {
1175 RssGeneratedFile rssFile = RssGeneratedFileHome.findByPrimaryKey( nIdRssFile );
1176 String strUrlFile = getRssFileUrl( rssFile.getName( ), request );
1177
1178
1179 return RssFeedHome.checkUrlNotUsed( strUrlFile );
1180 }
1181 }