View Javadoc

1   /*
2    * Copyright (c) 2002-2014, Mairie de Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.plugins.digglike.business.rss;
35  
36  import fr.paris.lutece.plugins.digglike.business.Category;
37  import fr.paris.lutece.plugins.digglike.business.CommentSubmit;
38  import fr.paris.lutece.plugins.digglike.business.Digg;
39  import fr.paris.lutece.plugins.digglike.business.DiggFilter;
40  import fr.paris.lutece.plugins.digglike.business.DiggHome;
41  import fr.paris.lutece.plugins.digglike.business.DiggSubmit;
42  import fr.paris.lutece.plugins.digglike.business.DiggSubmitState;
43  import fr.paris.lutece.plugins.digglike.business.SubmitFilter;
44  import fr.paris.lutece.plugins.digglike.service.CommentSubmitService;
45  import fr.paris.lutece.plugins.digglike.service.DiggSubmitService;
46  import fr.paris.lutece.plugins.digglike.service.DigglikePlugin;
47  import fr.paris.lutece.portal.business.rss.FeedResource;
48  import fr.paris.lutece.portal.business.rss.FeedResourceImage;
49  import fr.paris.lutece.portal.business.rss.FeedResourceItem;
50  import fr.paris.lutece.portal.business.rss.IFeedResource;
51  import fr.paris.lutece.portal.business.rss.IFeedResourceImage;
52  import fr.paris.lutece.portal.business.rss.IFeedResourceItem;
53  import fr.paris.lutece.portal.business.rss.ResourceRss;
54  import fr.paris.lutece.portal.service.content.XPageAppService;
55  import fr.paris.lutece.portal.service.i18n.I18nService;
56  import fr.paris.lutece.portal.service.message.AdminMessage;
57  import fr.paris.lutece.portal.service.message.AdminMessageService;
58  import fr.paris.lutece.portal.service.plugin.Plugin;
59  import fr.paris.lutece.portal.service.plugin.PluginService;
60  import fr.paris.lutece.portal.service.template.AppTemplateService;
61  import fr.paris.lutece.portal.service.util.AppLogService;
62  import fr.paris.lutece.portal.service.util.AppPathService;
63  import fr.paris.lutece.portal.service.util.AppPropertiesService;
64  import fr.paris.lutece.util.ReferenceList;
65  import fr.paris.lutece.util.html.HtmlTemplate;
66  import fr.paris.lutece.util.url.UrlItem;
67  
68  import java.text.SimpleDateFormat;
69  import java.util.ArrayList;
70  import java.util.Date;
71  import java.util.HashMap;
72  import java.util.List;
73  import java.util.Locale;
74  import java.util.Map;
75  
76  import javax.servlet.http.HttpServletRequest;
77  
78  import org.apache.commons.lang.StringUtils;
79  
80  
81  /**
82   * DirectoryResourceRss.
83   */
84  public class DiggResourceRss extends ResourceRss
85  {
86      // templates
87      /** The Constant TEMPLATE_TASK_EVALUATION_CREATE_CONFIG. */
88      private static final String TEMPLATE_TASK_EVALUATION_CREATE_CONFIG = "admin/plugins/digglike/rss/resource_create_config.html";
89  
90      /** The Constant TEMPLATE_TASK_EVALUATION_MODIFY_CONFIG. */
91      private static final String TEMPLATE_TASK_EVALUATION_MODIFY_CONFIG = "admin/plugins/digglike/rss/resource_modify_config.html";
92  
93      /** The Constant TEMPLATE_PUSH_RSS_XML_DIGG. */
94      private static final String TEMPLATE_PUSH_RSS_XML_DIGG = "admin/plugins/digglike/rss/rss_xml_digg.html";
95  
96      /** The Constant TEMPLATE_PUSH_RSS_XML_SUBMIT. */
97      private static final String TEMPLATE_PUSH_RSS_XML_SUBMIT = "admin/plugins/digglike/rss/rss_xml_submit.html";
98  
99      /** The Constant TEMPLATE_RSS_SUBMIT_DESCRIPTION. */
100     private static final String TEMPLATE_RSS_SUBMIT_DESCRIPTION = "admin/plugins/digglike/rss/rss_submit_description.html";
101 
102     /** The Constant TEMPLATE_RSS_SUBMIT_ITEM_TITLE. */
103     private static final String TEMPLATE_RSS_SUBMIT_ITEM_TITLE = "admin/plugins/digglike/rss/rss_submit_item_title.html";
104 
105     /** The Constant TEMPLATE_RSS_DIGG_ITEM_TITLE. */
106     private static final String TEMPLATE_RSS_DIGG_ITEM_TITLE = "admin/plugins/digglike/rss/rss_digg_item_title.html";
107 
108     // JSPs
109     // private static final String JSP_MANAGE_COMMENT_SUBMIT = "/jsp/admin/plugins/digglike/ManageCommentSubmit.jsp?id_digg_submit=";
110     // private static final String JSP_MANAGE_DIGG_SUBMIT = "/jsp/admin/plugins/digglike/ManageDiggSubmit.jsp?id_digg=";
111 
112     // Markers
113     /** The Constant MARK_DIGG_LIST. */
114     private static final String MARK_DIGG_LIST = "digglike_list";
115 
116     /** The Constant MARK_DIGG_LIST_DEFAULT_ITEM. */
117     private static final String MARK_DIGG_LIST_DEFAULT_ITEM = "digglike_list_default_item";
118 
119     /** The Constant MARK_RSS_ID_DIGG. */
120     private static final String MARK_RSS_ID_DIGG = "id_digg";
121 
122     /** The Constant MARK_RSS_ID_SUBMIT. */
123     private static final String MARK_RSS_ID_SUBMIT = "id_submit";
124 
125     /** The Constant MARK_DIGGSUBMIT_LIST. */
126     private static final String MARK_DIGGSUBMIT_LIST = "diggsubmit_list";
127 
128     /** The Constant MARK_EMPTY_DIGG. */
129     private static final String MARK_EMPTY_DIGG = "empty_digg";
130 
131     /** The Constant MARK_RSS_ITEM_TITLE. */
132     private static final String MARK_RSS_ITEM_TITLE = "item_title";
133 
134     /** The Constant MARK_RSS_ITEM_DESCRIPTION. */
135     private static final String MARK_RSS_ITEM_DESCRIPTION = "item_description";
136 
137     /** The Constant MARK_RSS_ITEM_DATE. */
138     private static final String MARK_RSS_ITEM_DATE = "item_date";
139 
140     /** The Constant MARK_DIGG_SUBMIT_LIST_DEFAULT_ITEM. */
141     private static final String MARK_DIGG_SUBMIT_LIST_DEFAULT_ITEM = "digglike_list_submit_default_item";
142 
143     /** The Constant MARK_IS_DIGG_SUBMIT_RSS. */
144     private static final String MARK_IS_DIGG_SUBMIT_RSS = "digglike_is_digg_submit_rss";
145 
146     /** The Constant MARK_RSS_SITE_DATE. */
147     private static final String MARK_RSS_SITE_DATE = "site_date";
148 
149     /** The Constant MARK_RSS_NUMBER_VOTE. */
150     private static final String MARK_RSS_NUMBER_VOTE = "number_vote";
151 
152     /** The Constant MARK_RSS_SCORE. */
153     private static final String MARK_RSS_SCORE = "score";
154 
155     /** The Constant MARK_RSS_CATEGORY. */
156     private static final String MARK_RSS_CATEGORY = "category";
157 
158     /** The Constant MARK_RSS_ITEM_STATE. */
159     private static final String MARK_RSS_ITEM_STATE = "state";
160 
161     /** The Constant MARK_RSS_ITEM_AUTHOR. */
162     private static final String MARK_RSS_ITEM_AUTHOR = "author";
163 
164     /** The Constant MARK_RSS_SITE_NAME. */
165     private static final String MARK_RSS_SITE_NAME = "site_name";
166 
167     /** The Constant MARK_RSS_SITE_ID. */
168     private static final String MARK_RSS_SITE_ID = "digg_id";
169 
170     /** The Constant MARK_RSS_FILE_LANGUAGE. */
171     private static final String MARK_RSS_FILE_LANGUAGE = "file_language";
172 
173     /** The Constant MARK_RSS_SITE_URL. */
174     private static final String MARK_RSS_SITE_URL = "site_url";
175 
176     /** The Constant MARK_ITEM_LIST. */
177     private static final String MARK_ITEM_LIST = "itemList";
178 
179     /** The Constant MARK_RSS_SITE_DESCRIPTION. */
180     private static final String MARK_RSS_SITE_DESCRIPTION = "site_description";
181 
182     /** The Constant MARK_RSS_SITE_STATE. */
183     private static final String MARK_RSS_SITE_STATE = "state";
184 
185     // Parameters
186     /** The Constant PARAMETER_ID_DIGG. */
187     private static final String PARAMETER_ID_DIGG = "id_digg";
188 
189     /** The Constant PARAMETER_RSS_CHOICE. */
190     private static final String PARAMETER_RSS_CHOICE = "rss_choice";
191 
192     /** The Constant PARAMETER_RSS_CHOICE_SUBMIT. */
193     private static final String PARAMETER_RSS_CHOICE_SUBMIT = "digg_submit";
194 
195     /** The Constant PARAMETER_ID_DIGG_SUBMIT. */
196     private static final String PARAMETER_ID_DIGG_SUBMIT = "id_digg_submit";
197 
198     /** The Constant PARAMETER_URL_FEED_IMAGE. */
199     private static final String PARAMETER_URL_FEED_IMAGE = "/images/local/skin/valid-rss.png";
200 
201     /** The Constant PARAMETER_DIGG_COMMENT. */
202     private static final String PARAMETER_DIGG_COMMENT = "digg_comment";
203 
204     /** The Constant PARAMETER_DIGG_DETAIL. */
205     private static final String PARAMETER_DIGG_DETAIL = "digg_detail";
206 
207     // Properties
208     /** The Constant FIELD_ID_DIGG. */
209     private static final String FIELD_ID_DIGG = "digglike.resource_rss.label_digg";
210 
211     /** The Constant FIELD_STATE. */
212     private static final String FIELD_STATE = "digglike.resource_rss.state";
213 
214     /** The Constant FIELD_STATE_ENABLE. */
215     private static final String FIELD_STATE_ENABLE = "digglike.resource_rss.enable";
216 
217     /** The Constant FIELD_STATE_DISABLE. */
218     private static final String FIELD_STATE_DISABLE = "digglike.resource_rss.disable";
219 
220     /** The Constant FORMAT_RSS_DATE. */
221     private static final String FORMAT_RSS_DATE = "EEE, d MMM yyyy HH:mm:ss Z";
222 
223     // Messages
224     /** The Constant MESSAGE_MANDATORY_FIELD. */
225     private static final String MESSAGE_MANDATORY_FIELD = "digglike.message.mandatory.field";
226 
227     /** The Constant MESSAGE_EMPTY_DIGG. */
228     private static final String MESSAGE_EMPTY_DIGG = "digglike.message.empty_digg";
229 
230     /** The Constant PROPERTY_SITE_LANGUAGE. */
231     private static final String PROPERTY_SITE_LANGUAGE = "rss.language";
232 
233     /** The Constant PROPERTY_WEBAPP_PROD_URL. */
234     private static final String PROPERTY_WEBAPP_PROD_URL = "lutece.prod.url";
235 
236     /** The Constant PROPERTY_XPAGE_APPLICATION_ID. */
237     private static final String PROPERTY_XPAGE_APPLICATION_ID = "digglike.xpage.applicationId";
238 
239     // Constants
240     /** The Constant DEFAULT_XPAGE_ID. */
241     private static final String DEFAULT_XPAGE_ID = "digg";
242 
243     /** The Constant SLASH. */
244     private static final String SLASH = "/";
245 
246     /**
247      * {@inheritDoc}
248      */
249     @Override
250     public boolean contentResourceRss(  )
251     {
252         Plugin pluginDigglike = PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME );
253 
254         DiggFilter filter = new DiggFilter(  );
255         if ( DiggHome.getDiggList( filter, pluginDigglike ).size( ) > 0 )
256         {
257             return true;
258         }
259 
260         return false;
261     }
262 
263     /**
264      * {@inheritDoc}
265      */
266     @Override
267     public void doSaveConfig( HttpServletRequest request, Locale locale )
268     {
269         Plugin pluginDigglike = PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME );
270 
271         String stridDigg = request.getParameter( PARAMETER_ID_DIGG );
272         String strRssChoice = request.getParameter( PARAMETER_RSS_CHOICE );
273         String stridDiggSubmit = request.getParameter( PARAMETER_ID_DIGG_SUBMIT + stridDigg );
274 
275         boolean bisSubmitRss = strRssChoice.equals( PARAMETER_RSS_CHOICE_SUBMIT ) ? true : false;
276 
277         if ( stridDiggSubmit.equals( MARK_EMPTY_DIGG ) )
278         {
279             stridDiggSubmit = "0";
280         }
281 
282         DiggResourceRssConfig config = new DiggResourceRssConfig(  );
283         config.setIdRss( this.getId(  ) );
284         config.setIdDigg( Integer.parseInt( stridDigg ) );
285         config.setIdDiggSubmit( Integer.parseInt( stridDiggSubmit ) );
286         config.setSubmitRss( bisSubmitRss );
287 
288         DiggResourceRssConfigHome.create( config, pluginDigglike );
289     }
290 
291     /**
292      * {@inheritDoc}
293      */
294     @Override
295     public void doUpdateConfig( HttpServletRequest request, Locale locale )
296     {
297         Plugin pluginDigglike = PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME );
298         String strIdDigg = request.getParameter( PARAMETER_ID_DIGG );
299         String strRssChoice = request.getParameter( PARAMETER_RSS_CHOICE );
300         String stridDiggSubmit = request.getParameter( PARAMETER_ID_DIGG_SUBMIT + strIdDigg );
301         boolean bisSubmitRss = strRssChoice.equals( PARAMETER_RSS_CHOICE_SUBMIT ) ? true : false;
302 
303         if ( stridDiggSubmit.equals( MARK_EMPTY_DIGG ) )
304         {
305             stridDiggSubmit = "0";
306         }
307 
308         DiggResourceRssConfig config = new DiggResourceRssConfig(  );
309         config.setIdRss( this.getId(  ) );
310         config.setIdDigg( Integer.parseInt( strIdDigg ) );
311         config.setIdDiggSubmit( Integer.parseInt( stridDiggSubmit ) );
312         config.setSubmitRss( bisSubmitRss );
313 
314         DiggResourceRssConfigHome.update( config, pluginDigglike );
315     }
316 
317     /**
318      * {@inheritDoc}
319      */
320     @Override
321     public String doValidateConfigForm( HttpServletRequest request, Locale locale )
322     {
323         Plugin pluginDigglike = PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME );
324         String strError = "";
325         String stridDigg = request.getParameter( PARAMETER_ID_DIGG );
326         String stridDiggSubmit = request.getParameter( PARAMETER_ID_DIGG_SUBMIT + stridDigg );
327         String strRssChoice = request.getParameter( PARAMETER_RSS_CHOICE );
328         boolean bisSubmitRss = strRssChoice.equals( PARAMETER_RSS_CHOICE_SUBMIT ) ? true : false;
329 
330         if ( stridDigg == null )
331         {
332             strError = FIELD_ID_DIGG;
333         }
334 
335         if ( bisSubmitRss && stridDiggSubmit.equals( MARK_EMPTY_DIGG ) )
336         {
337             return AdminMessageService.getMessageUrl( request, MESSAGE_EMPTY_DIGG, AdminMessage.TYPE_STOP );
338         }
339 
340         if ( !strError.equals( "" ) )
341         {
342             Object[] tabRequiredFields = { I18nService.getLocalizedString( strError, locale ) };
343 
344             return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELD, tabRequiredFields,
345                 AdminMessage.TYPE_STOP );
346         }
347 
348         if ( bisSubmitRss )
349         {
350             DiggSubmit diggSubmit = DiggSubmitService.getService(  )
351                                                      .findByPrimaryKey( Integer.parseInt( stridDiggSubmit ), false,
352                     pluginDigglike );
353             this.setName( diggSubmit.getDiggSubmitTitle(  ) );
354             this.setDescription( diggSubmit.getDiggSubmitValue(  ).replaceAll( "<div[^>]+>", "" )
355                                            .replaceAll( "</div>", "" ) );
356         }
357         else
358         {
359             Digg digg = DiggHome.findByPrimaryKey( Integer.parseInt( stridDigg ), pluginDigglike );
360             this.setName( digg.getTitle(  ) );
361             this.setDescription( digg.getLibelleContribution(  ) );
362         }
363 
364         return null;
365     }
366 
367     /**
368      * {@inheritDoc}
369      */
370     @Override
371     public String getDisplayCreateConfigForm( HttpServletRequest request, Locale locale )
372     {
373         Plugin pluginDigglike = PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME );
374 
375         DiggFilter filter = new DiggFilter(  );
376 
377         List<Digg> diggList = DiggHome.getDiggList( filter, pluginDigglike );
378         ReferenceList referenceDigg = new ReferenceList(  );
379 
380         HashMap<String, Object> model = new HashMap<String, Object>(  );
381 
382         Map<String, ReferenceList> diggMap = new HashMap<String, ReferenceList>(  );
383 
384         for ( Digg digg : diggList )
385         {
386             SubmitFilter submitFilter = new SubmitFilter(  );
387             submitFilter.setIdDigg( digg.getIdDigg(  ) );
388 
389             List<DiggSubmit> diggSubmitList = DiggSubmitService.getService(  )
390                                                                .getDiggSubmitList( submitFilter, pluginDigglike );
391             ReferenceList referenceDiggSubmit = new ReferenceList(  );
392 
393             for ( DiggSubmit diggSubmit : diggSubmitList )
394             {
395                 referenceDiggSubmit.addItem( diggSubmit.getIdDiggSubmit(  ),
396                     diggSubmit.getDiggSubmitValue(  ).replaceAll( "<div[^>]+>", "" ).replaceAll( "</div>", "" ) );
397             }
398 
399             diggMap.put( String.valueOf( digg.getIdDigg(  ) ), referenceDiggSubmit );
400             referenceDigg.addItem( digg.getIdDigg(  ), digg.getTitle(  ) );
401         }
402 
403         model.put( MARK_DIGGSUBMIT_LIST, diggMap );
404         model.put( MARK_DIGG_SUBMIT_LIST_DEFAULT_ITEM, -1 );
405         model.put( MARK_DIGG_LIST_DEFAULT_ITEM, -1 );
406         model.put( MARK_DIGG_LIST, referenceDigg );
407 
408         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_TASK_EVALUATION_CREATE_CONFIG, locale, model );
409 
410         return template.getHtml(  );
411     }
412 
413     /**
414      * {@inheritDoc}
415      */
416     @Override
417     public String getDisplayModifyConfigForm( HttpServletRequest request, Locale locale )
418     {
419         Plugin pluginDigglike = PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME );
420         DiggFilter filter = new DiggFilter(  );
421         List<Digg> diggList = DiggHome.getDiggList( filter, pluginDigglike );
422         ReferenceList referenceDigg = new ReferenceList(  );
423 
424         DiggResourceRssConfig diggResourceRssConfig = DiggResourceRssConfigHome.findByPrimaryKey( this.getId(  ),
425                 pluginDigglike );
426         HashMap<String, Object> model = new HashMap<String, Object>(  );
427 
428         if ( request.getParameter( PARAMETER_ID_DIGG ) != null )
429         {
430             int idDigg = Integer.parseInt( request.getParameter( PARAMETER_ID_DIGG ) );
431 
432             model.put( MARK_DIGG_LIST_DEFAULT_ITEM, idDigg );
433         }
434         else
435         {
436             model.put( MARK_DIGG_LIST_DEFAULT_ITEM, diggResourceRssConfig.getIdDigg(  ) );
437         }
438 
439         Map<String, ReferenceList> diggMap = new HashMap<String, ReferenceList>(  );
440 
441         for ( Digg digg : diggList )
442         {
443             SubmitFilter submitFilter = new SubmitFilter(  );
444             submitFilter.setIdDigg( digg.getIdDigg(  ) );
445 
446             List<DiggSubmit> diggSubmitList = DiggSubmitService.getService(  )
447                                                                .getDiggSubmitList( submitFilter, pluginDigglike );
448             ReferenceList referenceDiggSubmit = new ReferenceList(  );
449 
450             for ( DiggSubmit diggSubmit : diggSubmitList )
451             {
452                 referenceDiggSubmit.addItem( diggSubmit.getIdDiggSubmit(  ),
453                     diggSubmit.getDiggSubmitValue(  ).replaceAll( "<div[^>]+>", "" ).replaceAll( "</div>", "" ) );
454             }
455 
456             diggMap.put( String.valueOf( digg.getIdDigg(  ) ), referenceDiggSubmit );
457             referenceDigg.addItem( digg.getIdDigg(  ), digg.getTitle(  ) );
458         }
459 
460         if ( request.getParameter( PARAMETER_ID_DIGG_SUBMIT ) != null )
461         {
462             int idDiggSubmit = Integer.parseInt( request.getParameter( PARAMETER_ID_DIGG_SUBMIT ) );
463 
464             model.put( MARK_DIGG_SUBMIT_LIST_DEFAULT_ITEM, idDiggSubmit );
465         }
466         else
467         {
468             model.put( MARK_DIGG_SUBMIT_LIST_DEFAULT_ITEM, diggResourceRssConfig.getIdDiggSubmit(  ) );
469         }
470 
471         model.put( MARK_IS_DIGG_SUBMIT_RSS, diggResourceRssConfig.isSubmitRss(  ) );
472         model.put( MARK_DIGGSUBMIT_LIST, diggMap );
473         model.put( MARK_DIGG_LIST, referenceDigg );
474 
475         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_TASK_EVALUATION_MODIFY_CONFIG, locale, model );
476 
477         return template.getHtml(  );
478     }
479 
480     /**
481      * {@inheritDoc}
482      */
483     @Override
484     public String createHtmlRss(  )
485     {
486         HashMap<String, Object> model = new HashMap<String, Object>(  );
487         Plugin pluginDiggglike = PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME );
488         DiggResourceRssConfig config = DiggResourceRssConfigHome.findByPrimaryKey( this.getId(  ), pluginDiggglike );
489 
490         String strRssFileLanguage = AppPropertiesService.getProperty( PROPERTY_SITE_LANGUAGE );
491         Locale locale = new Locale( strRssFileLanguage );
492 
493         String strWebAppUrl = AppPropertiesService.getProperty( PROPERTY_WEBAPP_PROD_URL );
494         String strSiteUrl = strWebAppUrl;
495 
496         if ( config.isSubmitRss(  ) )
497         {
498             //Submit Rss
499             DiggSubmit diggSubmit = DiggSubmitService.getService(  )
500                                                      .findByPrimaryKey( config.getIdDiggSubmit(  ), false,
501                     pluginDiggglike );
502             DiggSubmitState diggsubmitStage = diggSubmit.getDiggSubmitState(  );
503             Category category = diggSubmit.getCategory(  );
504             model.put( MARK_RSS_SITE_NAME, diggSubmit.getDiggSubmitTitle(  ) );
505             model.put( MARK_RSS_SITE_ID, diggSubmit.getIdDiggSubmit(  ) );
506             model.put( MARK_RSS_FILE_LANGUAGE, strRssFileLanguage );
507             model.put( MARK_RSS_SITE_URL, strSiteUrl );
508 
509             model.put( MARK_RSS_NUMBER_VOTE, diggSubmit.getNumberVote(  ) );
510             model.put( MARK_RSS_SCORE, diggSubmit.getNumberScore(  ) );
511 
512             model.put( MARK_RSS_SITE_STATE, diggsubmitStage.getTitle(  ) );
513             model.put( MARK_RSS_SITE_DESCRIPTION,
514                 diggSubmit.getDiggSubmitValue(  ).replaceAll( "<div[^>]+>", "" ).replaceAll( "</div>", "" ) );
515 
516             if ( category != null )
517             {
518                 model.put( MARK_RSS_CATEGORY, category.getTitle(  ) );
519             }
520 
521             model.put( MARK_RSS_SITE_DATE,
522                 new SimpleDateFormat( FORMAT_RSS_DATE, Locale.ENGLISH ).format( diggSubmit.getDateResponse(  ) ) );
523 
524             SubmitFilter submitFilter = new SubmitFilter(  );
525             submitFilter.setIdDiggSubmit( config.getIdDiggSubmit(  ) );
526 
527             List<CommentSubmit> listResultCommentSubmit = CommentSubmitService.getService(  )
528                                                                               .getCommentSubmitList( submitFilter,
529                     pluginDiggglike );
530             List<Map<String, Object>> listItem = new ArrayList<Map<String, Object>>(  );
531 
532             //Descriptino of the comments
533             for ( CommentSubmit commentSubmit : listResultCommentSubmit )
534             {
535                 HashMap<String, Object> item = new HashMap<String, Object>(  );
536 
537                 if ( commentSubmit.getLuteceUserKey(  ) != null )
538                 {
539                     item.put( MARK_RSS_ITEM_AUTHOR, commentSubmit.getLuteceUserKey(  ) );
540                 }
541                 else
542                 {
543                     item.put( MARK_RSS_ITEM_AUTHOR, null );
544                 }
545 
546                 item.put( MARK_RSS_ITEM_STATE,
547                     commentSubmit.isActive(  ) ? I18nService.getLocalizedString( FIELD_STATE_ENABLE, locale )
548                                                : I18nService.getLocalizedString( FIELD_STATE_DISABLE, locale ) );
549                 item.put( MARK_RSS_ITEM_DESCRIPTION, commentSubmit.getValue(  ) );
550                 item.put( MARK_RSS_ID_SUBMIT, diggSubmit.getIdDiggSubmit(  ) );
551                 item.put( MARK_RSS_ITEM_DATE,
552                     new SimpleDateFormat( FORMAT_RSS_DATE, Locale.ENGLISH ).format( commentSubmit.getDateComment(  ) ) );
553 
554                 listItem.add( item );
555             }
556 
557             model.put( MARK_ITEM_LIST, listItem );
558 
559             model.put( MARK_RSS_ID_DIGG, config.getIdDigg(  ) );
560 
561             HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_PUSH_RSS_XML_SUBMIT, locale, model );
562 
563             return template.getHtml(  );
564         }
565         else
566         {
567             //Digg Rss
568             Digg digg = DiggHome.findByPrimaryKey( config.getIdDigg(  ), pluginDiggglike );
569 
570             model.put( MARK_RSS_SITE_NAME, digg.getTitle(  ) );
571             model.put( MARK_RSS_SITE_ID, digg.getIdDigg(  ) );
572             model.put( MARK_RSS_FILE_LANGUAGE, strRssFileLanguage );
573             model.put( MARK_RSS_SITE_URL, strSiteUrl );
574 
575             if ( digg.isActive(  ) )
576             {
577                 model.put( MARK_RSS_SITE_DESCRIPTION, I18nService.getLocalizedString( FIELD_STATE_ENABLE, locale ) );
578             }
579             else
580             {
581                 model.put( MARK_RSS_SITE_DESCRIPTION, I18nService.getLocalizedString( FIELD_STATE_DISABLE, locale ) );
582             }
583 
584             model.put( MARK_RSS_SITE_DATE,
585                 new SimpleDateFormat( FORMAT_RSS_DATE, Locale.ENGLISH ).format( digg.getDateCreation(  ) ) );
586 
587             SubmitFilter submitFilter = new SubmitFilter(  );
588             submitFilter.setIdDigg( config.getIdDigg(  ) );
589 
590             List<DiggSubmit> listResultDiggSubmit = DiggSubmitService.getService(  )
591                                                                      .getDiggSubmitList( submitFilter, pluginDiggglike );
592             List<Map<String, Object>> listItem = new ArrayList<Map<String, Object>>(  );
593 
594             //Description of  the submits
595             for ( DiggSubmit diggSubmit : listResultDiggSubmit )
596             {
597                 HashMap<String, Object> item = new HashMap<String, Object>(  );
598                 DiggSubmitState diggsubmitState = diggSubmit.getDiggSubmitState(  );
599                 Category category = diggSubmit.getCategory(  );
600 
601                 item.put( MARK_RSS_ITEM_TITLE, diggSubmit.getDiggSubmitTitle(  ) );
602                 item.put( MARK_RSS_NUMBER_VOTE, diggSubmit.getNumberVote(  ) );
603                 item.put( MARK_RSS_SCORE, diggSubmit.getNumberScore(  ) );
604                 item.put( MARK_RSS_ITEM_STATE, diggsubmitState.getTitle(  ) );
605 
606                 if ( category != null )
607                 {
608                     item.put( MARK_RSS_CATEGORY, diggSubmit.getDiggSubmitTitle(  ) );
609                 }
610 
611                 item.put( MARK_RSS_ITEM_DESCRIPTION,
612                     diggSubmit.getDiggSubmitValue(  ).replaceAll( "<div[^>]+>", "" ).replaceAll( "</div>", "" ) );
613                 item.put( MARK_RSS_ID_SUBMIT, diggSubmit.getIdDiggSubmit(  ) );
614                 item.put( MARK_RSS_ITEM_DATE,
615                     new SimpleDateFormat( FORMAT_RSS_DATE, Locale.ENGLISH ).format( diggSubmit.getDateResponse(  ) ) );
616                 listItem.add( item );
617             }
618 
619             model.put( MARK_ITEM_LIST, listItem );
620 
621             model.put( MARK_RSS_ID_DIGG, config.getIdDigg(  ) );
622 
623             HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_PUSH_RSS_XML_DIGG, locale, model );
624 
625             return template.getHtml(  );
626         }
627     }
628 
629     /**
630      * {@inheritDoc}
631      */
632     @Override
633     public IFeedResource getFeed(  )
634     {
635         String strRssFileLanguage = AppPropertiesService.getProperty( PROPERTY_SITE_LANGUAGE );
636         Locale locale = new Locale( strRssFileLanguage );
637 
638         String strWebAppUrl = AppPropertiesService.getProperty( PROPERTY_WEBAPP_PROD_URL );
639         String strSiteUrl = strWebAppUrl;
640 
641         Plugin pluginDiggglike = PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME );
642         DiggResourceRssConfig config = DiggResourceRssConfigHome.findByPrimaryKey( this.getId(  ), pluginDiggglike );
643 
644         if ( config.isSubmitRss(  ) )
645         {
646             //Submit Rss
647             DiggSubmit diggSubmit = DiggSubmitService.getService(  )
648                                                      .findByPrimaryKey( config.getIdDiggSubmit(  ), false,
649                     pluginDiggglike );
650             DiggSubmitState diggsubmitStage = diggSubmit.getDiggSubmitState(  );
651             Category category = diggSubmit.getCategory(  );
652 
653             IFeedResource resource = new FeedResource(  );
654             resource.setTitle( diggSubmit.getDiggSubmitTitle(  ) );
655             /**
656                      * The link is changed to access to the digg in FO
657                      * @since v2.2.5
658                      */
659 
660             // resource.setLink( strSiteUrl + JSP_MANAGE_DIGG_SUBMIT + diggSubmit.getIdDiggSubmit( ) );
661             resource.setLink( buildUrlDigg( strSiteUrl, diggSubmit.getDigg(  ) ) );
662             resource.setLanguage( strRssFileLanguage );
663 
664             Date date = new Date( diggSubmit.getDateResponse(  ).getTime(  ) );
665             resource.setDate( date );
666 
667             IFeedResourceImage image = new FeedResourceImage(  );
668             image.setUrl( strSiteUrl + PARAMETER_URL_FEED_IMAGE );
669             image.setTitle( diggSubmit.getDiggSubmitTitle(  ) );
670             image.setLink( strSiteUrl );
671 
672             resource.setImage( image );
673 
674             String strDescription;
675             Map<String, Object> model = new HashMap<String, Object>(  );
676 
677             model.put( MARK_RSS_SITE_DESCRIPTION,
678                 diggSubmit.getDiggSubmitValue(  ).replaceAll( "<div[^>]+>", "" ).replaceAll( "</div>", "" ) );
679             model.put( MARK_RSS_SITE_STATE, diggsubmitStage.getTitle(  ) );
680 
681             if ( category != null )
682             {
683                 model.put( MARK_RSS_CATEGORY, category.getTitle(  ) );
684             }
685 
686             model.put( MARK_RSS_NUMBER_VOTE, diggSubmit.getNumberVote(  ) );
687             model.put( MARK_RSS_SCORE, diggSubmit.getNumberScore(  ) );
688 
689             HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_RSS_SUBMIT_DESCRIPTION, locale, model );
690             strDescription = template.getHtml(  );
691 
692             resource.setDescription( strDescription );
693 
694             SubmitFilter submitFilter = new SubmitFilter(  );
695             submitFilter.setIdDiggSubmit( config.getIdDiggSubmit(  ) );
696 
697             List<CommentSubmit> listResultCommentSubmit = CommentSubmitService.getService(  )
698                                                                               .getCommentSubmitList( submitFilter,
699                     pluginDiggglike );
700             List<IFeedResourceItem> listItems = new ArrayList<IFeedResourceItem>(  );
701 
702             //Description of the comments	
703             for ( CommentSubmit commentSubmit : listResultCommentSubmit )
704             {
705                 IFeedResourceItem item = new FeedResourceItem(  );
706 
707                 String strTitleItem;
708                 Map<String, Object> model2 = new HashMap<String, Object>(  );
709 
710                 if ( commentSubmit.getLuteceUserKey(  ) != null )
711                 {
712                     model2.put( MARK_RSS_ITEM_AUTHOR, commentSubmit.getLuteceUserKey(  ) );
713                 }
714                 else
715                 {
716                     model2.put( MARK_RSS_ITEM_AUTHOR, null );
717                 }
718 
719                 model2.put( MARK_RSS_ITEM_STATE,
720                     commentSubmit.isActive(  ) ? I18nService.getLocalizedString( FIELD_STATE_ENABLE, locale )
721                                                : I18nService.getLocalizedString( FIELD_STATE_DISABLE, locale ) );
722 
723                 HtmlTemplate template2 = AppTemplateService.getTemplate( TEMPLATE_RSS_SUBMIT_ITEM_TITLE, locale, model2 );
724                 strTitleItem = template2.getHtml(  );
725 
726                 item.setTitle( strTitleItem );
727                 /**
728                          * The link is changed to access to the digg submit in FO
729                          * @since v2.2.5
730                          */
731 
732                 // item.setLink( strSiteUrl + JSP_MANAGE_COMMENT_SUBMIT + diggSubmit.getIdDiggSubmit( ) );
733                 item.setLink( buildUrlDiggSubmit( strSiteUrl, diggSubmit ) );
734                 item.setDescription( commentSubmit.getValue(  ) );
735                 item.setDate( commentSubmit.getDateComment(  ) );
736 
737                 listItems.add( item );
738             }
739 
740             resource.setItems( listItems );
741 
742             return resource;
743         }
744         else
745         {
746             //Digg Rss
747             Digg digg = DiggHome.findByPrimaryKey( config.getIdDigg(  ), pluginDiggglike );
748 
749             IFeedResource resource = new FeedResource(  );
750             resource.setTitle( digg.getTitle(  ) );
751             /**
752                      * The link is changed to access to the digg in FO
753                      * @since v2.2.5
754                      */
755 
756             // resource.setLink( strSiteUrl + JSP_MANAGE_DIGG_SUBMIT + digg.getIdDigg(  ) );
757             resource.setLink( buildUrlDigg( strSiteUrl, digg ) );
758             resource.setLanguage( strRssFileLanguage );
759 
760             Date date = new Date( digg.getDateCreation(  ).getTime(  ) );
761             resource.setDate( date );
762 
763             IFeedResourceImage image = new FeedResourceImage(  );
764             image.setUrl( strSiteUrl + PARAMETER_URL_FEED_IMAGE );
765             image.setTitle( digg.getTitle(  ) );
766             image.setLink( strSiteUrl );
767 
768             resource.setImage( image );
769 
770             if ( digg.isActive(  ) )
771             {
772                 resource.setDescription( I18nService.getLocalizedString( FIELD_STATE, locale ) + " : " +
773                     I18nService.getLocalizedString( FIELD_STATE_ENABLE, locale ) );
774             }
775             else
776             {
777                 resource.setDescription( I18nService.getLocalizedString( FIELD_STATE, locale ) + " : " +
778                     I18nService.getLocalizedString( FIELD_STATE_DISABLE, locale ) );
779             }
780 
781             SubmitFilter submitFilter = new SubmitFilter(  );
782             submitFilter.setIdDigg( config.getIdDigg(  ) );
783 
784             List<DiggSubmit> listResultDiggSubmit = DiggSubmitService.getService(  )
785                                                                      .getDiggSubmitList( submitFilter, pluginDiggglike );
786             List<IFeedResourceItem> listItems = new ArrayList<IFeedResourceItem>(  );
787 
788             //Description of  the submits
789             for ( DiggSubmit diggSubmit : listResultDiggSubmit )
790             {
791                 IFeedResourceItem item = new FeedResourceItem(  );
792 
793                 String strTitle;
794                 Map<String, Object> model = new HashMap<String, Object>(  );
795                 DiggSubmitState diggsubmitState = diggSubmit.getDiggSubmitState(  );
796                 Category category = diggSubmit.getCategory(  );
797 
798                 model.put( MARK_RSS_ITEM_TITLE, diggSubmit.getDiggSubmitTitle(  ) );
799                 model.put( MARK_RSS_NUMBER_VOTE, diggSubmit.getNumberVote(  ) );
800                 model.put( MARK_RSS_SCORE, diggSubmit.getNumberScore(  ) );
801                 model.put( MARK_RSS_ITEM_STATE, diggsubmitState.getTitle(  ) );
802 
803                 if ( category != null )
804                 {
805                     model.put( MARK_RSS_CATEGORY, diggSubmit.getDiggSubmitTitle(  ) );
806                 }
807 
808                 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_RSS_DIGG_ITEM_TITLE, locale, model );
809                 strTitle = template.getHtml(  );
810 
811                 item.setTitle( strTitle );
812                 /**
813                          * The link is changed to access to the digg submit in FO
814                          * @since v2.2.5
815                          */
816 
817                 // item.setLink( strSiteUrl + JSP_MANAGE_COMMENT_SUBMIT + diggSubmit.getIdDiggSubmit( ) );
818                 item.setLink( buildUrlDiggSubmit( strSiteUrl, diggSubmit ) );
819                 item.setDescription( diggSubmit.getDiggSubmitValue(  ).replaceAll( "<div[^>]+>", "" )
820                                                .replaceAll( "</div>", "" ) );
821                 item.setDate( diggSubmit.getDateResponse(  ) );
822 
823                 listItems.add( item );
824             }
825 
826             resource.setItems( listItems );
827 
828             return resource;
829         }
830     }
831 
832     /**
833      * {@inheritDoc}
834      */
835     @Override
836     public void deleteResourceRssConfig( int idResourceRss )
837     {
838         Plugin pluginDirectory = PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME );
839         DiggResourceRssConfigHome.remove( idResourceRss, pluginDirectory );
840     }
841 
842     /**
843      * {@inheritDoc}
844      */
845     @Override
846     public Map<String, String> getParameterToApply( HttpServletRequest request )
847     {
848         Map<String, String> map = new HashMap<String, String>(  );
849 
850         map.put( PARAMETER_ID_DIGG, request.getParameter( PARAMETER_ID_DIGG ) );
851 
852         return map;
853     }
854 
855     /**
856      * {@inheritDoc}
857      */
858     @Override
859     public boolean checkResource(  )
860     {
861         Plugin pluginDirectory = PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME );
862         DiggResourceRssConfig config = DiggResourceRssConfigHome.findByPrimaryKey( this.getId(  ), pluginDirectory );
863         Digg digg = DiggHome.findByPrimaryKey( config.getIdDigg(  ), pluginDirectory );
864 
865         return ( digg != null );
866     }
867 
868     /**
869          * Builds the url digg submit.
870          *
871          * @param strSiteUrl the str site url
872          * @param diggSubmit the digg submit
873          * @return the string
874          */
875     private static String buildUrlDiggSubmit( String strSiteUrl, DiggSubmit diggSubmit )
876     {
877         if ( ( diggSubmit != null ) && ( diggSubmit.getDigg(  ) != null ) )
878         {
879             UrlItem url = new UrlItem( strSiteUrl + SLASH + AppPathService.getPortalUrl(  ) );
880             url.addParameter( XPageAppService.PARAM_XPAGE_APP,
881                 AppPropertiesService.getProperty( PROPERTY_XPAGE_APPLICATION_ID, DEFAULT_XPAGE_ID ) );
882             url.addParameter( PARAMETER_ID_DIGG, diggSubmit.getDigg(  ).getIdDigg(  ) );
883             url.addParameter( PARAMETER_ID_DIGG_SUBMIT, diggSubmit.getIdDiggSubmit(  ) );
884             url.addParameter( PARAMETER_DIGG_COMMENT, "1" );
885             url.addParameter( PARAMETER_DIGG_DETAIL, "1" );
886 
887             return url.getUrl(  );
888         }
889 
890         AppLogService.debug( "DiggResourceRss - DiggSubmit is null when trying to build the URL." );
891 
892         return StringUtils.EMPTY;
893     }
894 
895     /**
896      * Builds the url digg submit.
897      *
898      * @param strSiteUrl the str site url
899      * @param digg the digg
900      * @return the string
901      */
902     private static String buildUrlDigg( String strSiteUrl, Digg digg )
903     {
904         if ( digg != null )
905         {
906             UrlItem url = new UrlItem( strSiteUrl + SLASH + AppPathService.getPortalUrl(  ) );
907             url.addParameter( XPageAppService.PARAM_XPAGE_APP,
908                 AppPropertiesService.getProperty( PROPERTY_XPAGE_APPLICATION_ID, DEFAULT_XPAGE_ID ) );
909             url.addParameter( PARAMETER_ID_DIGG, digg.getIdDigg(  ) );
910 
911             return url.getUrl(  );
912         }
913 
914         AppLogService.debug( "DiggResourceRss - Digg is null when trying to build the URL." );
915 
916         return StringUtils.EMPTY;
917     }
918 }