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.digglike.service.subscription;
35
36 import fr.paris.lutece.plugins.digglike.business.Category;
37 import fr.paris.lutece.plugins.digglike.business.CategoryHome;
38 import fr.paris.lutece.plugins.digglike.business.Digg;
39 import fr.paris.lutece.plugins.digglike.business.DiggHome;
40 import fr.paris.lutece.plugins.digglike.business.DiggSubmit;
41 import fr.paris.lutece.plugins.digglike.service.DiggSubmitService;
42 import fr.paris.lutece.plugins.digglike.service.DigglikePlugin;
43 import fr.paris.lutece.plugins.subscribe.business.Subscription;
44 import fr.paris.lutece.plugins.subscribe.business.SubscriptionFilter;
45 import fr.paris.lutece.plugins.subscribe.service.ISubscriptionProviderService;
46 import fr.paris.lutece.plugins.subscribe.service.SubscriptionService;
47 import fr.paris.lutece.portal.service.i18n.I18nService;
48 import fr.paris.lutece.portal.service.plugin.PluginService;
49 import fr.paris.lutece.portal.service.security.LuteceUser;
50 import fr.paris.lutece.portal.service.spring.SpringContextService;
51
52 import org.apache.commons.lang.StringUtils;
53
54 import java.util.List;
55 import java.util.Locale;
56
57
58
59
60
61 public class DigglikeSubscriptionProviderService implements ISubscriptionProviderService
62 {
63
64
65
66 public static final String BEAN_NAME = "digglike.digglikeSubscriptionProviderService";
67 public static final String SUBSCRIPTION_DIGG = "digg";
68 public static final String SUBSCRIPTION_DIGG_CATEGORY = "digg_category";
69 public static final String SUBSCRIPTION_DIGG_SUBMIT = "digg_submit";
70 private static final String SUBSCRIPTION_PROVIDER_NAME = "digglike.digglikeSubscriptionProviderService";
71 private static final String MESSAGE_SUBSCRIBED_DIGG = "digglike.message.subscriptions.subscribedDigg";
72 private static final String MESSAGE_SUBSCRIBED_DIGG_SUBMIT = "digglike.message.subscriptions.subscribedDiggSubmit";
73 private static final String MESSAGE_SUBSCRIBED_DIGG_CATEGORY = "digglike.message.subscriptions.subscribedCategory";
74 private static DigglikeSubscriptionProviderService _instance;
75
76
77
78
79
80
81 public static DigglikeSubscriptionProviderService getService( )
82 {
83 if ( _instance == null )
84 {
85 synchronized ( DigglikeSubscriptionProviderService.class )
86 {
87 _instance = SpringContextService.getBean( BEAN_NAME );
88 }
89 }
90
91 return _instance;
92 }
93
94
95
96
97 @Override
98 public String getProviderName( )
99 {
100 return SUBSCRIPTION_PROVIDER_NAME;
101 }
102
103
104
105
106 @Override
107 public String getSubscriptionHtmlDescription( LuteceUser user, String strSubscriptionKey,
108 String strIdSubscribedResource, Locale locale )
109 {
110 int nId = ( ( strIdSubscribedResource != null ) && StringUtils.isNumeric( strIdSubscribedResource ) )
111 ? Integer.parseInt( strIdSubscribedResource ) : 0;
112
113 if ( nId > 0 )
114 {
115 if ( StringUtils.equals( SUBSCRIPTION_DIGG, strSubscriptionKey ) )
116 {
117 Digg digg = DiggHome.findByPrimaryKey( nId, PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME ) );
118
119 if ( digg != null )
120 {
121 Object[] params = { digg.getTitle( ) };
122
123 return I18nService.getLocalizedString( MESSAGE_SUBSCRIBED_DIGG, params, locale );
124 }
125 }
126 else if ( StringUtils.equals( SUBSCRIPTION_DIGG_SUBMIT, strSubscriptionKey ) )
127 {
128 DiggSubmit diggSubmit = DiggSubmitService.getService( )
129 .findByPrimaryKey( nId, false,
130 PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME ) );
131
132 if ( diggSubmit != null )
133 {
134 Object[] params = { diggSubmit.getDiggSubmitTitle( ) };
135
136 return I18nService.getLocalizedString( MESSAGE_SUBSCRIBED_DIGG_SUBMIT, params, locale );
137 }
138 }
139 else if ( StringUtils.equals( SUBSCRIPTION_DIGG_CATEGORY, strSubscriptionKey ) )
140 {
141 Category category = CategoryHome.findByPrimaryKey( nId,
142 PluginService.getPlugin( DigglikePlugin.PLUGIN_NAME ) );
143
144 if ( category != null )
145 {
146 Object[] params = { category.getTitle( ) };
147
148 return I18nService.getLocalizedString( MESSAGE_SUBSCRIBED_DIGG_CATEGORY, params, locale );
149 }
150 }
151 }
152
153 return StringUtils.EMPTY;
154 }
155
156
157
158
159 @Override
160 public boolean isSubscriptionRemovable( LuteceUser user, String strSubscriptionKey, String strIdSubscribedResource )
161 {
162
163 return true;
164 }
165
166
167
168
169 @Override
170 public String getUrlModifySubscription( LuteceUser user, String strSubscriptionKey, String strIdSubscribedResource )
171 {
172
173 return null;
174 }
175
176
177
178
179 @Override
180 public void notifySubscriptionRemoval( Subscription subscription )
181 {
182
183 }
184
185
186
187
188
189
190 public void removeDiggSubscription( LuteceUser user, int nIdDigg )
191 {
192 removeDiggSubmitSubscription( user, nIdDigg, SUBSCRIPTION_DIGG );
193 }
194
195
196
197
198
199
200 public void removeDiggCategorySubscription( LuteceUser user, int nIdCategory )
201 {
202 removeDiggSubmitSubscription( user, nIdCategory, SUBSCRIPTION_DIGG_CATEGORY );
203 }
204
205
206
207
208
209
210 public void removeDiggSubmitSubscription( LuteceUser user, int nIdDiggSubmit )
211 {
212 removeDiggSubmitSubscription( user, nIdDiggSubmit, SUBSCRIPTION_DIGG_SUBMIT );
213 }
214
215
216
217
218
219
220
221 private void removeDiggSubmitSubscription( LuteceUser user, int nId, String strSubscriptionKey )
222 {
223 SubscriptionFilter filter = new SubscriptionFilter( user.getName( ), getProviderName( ), strSubscriptionKey,
224 Integer.toString( nId ) );
225
226 List<Subscription> listSubscription = SubscriptionService.getInstance( ).findByFilter( filter );
227
228 if ( ( listSubscription != null ) && ( listSubscription.size( ) > 0 ) )
229 {
230 for ( Subscription subscription : listSubscription )
231 {
232 SubscriptionService.getInstance( ).removeSubscription( subscription, false );
233 }
234 }
235 }
236
237
238
239
240
241
242 public void createDiggSubscription( LuteceUser user, int nIdDigg )
243 {
244 if ( !hasUserSubscribedToResource( user, nIdDigg, SUBSCRIPTION_DIGG ) )
245 {
246 createSubscription( user, nIdDigg, SUBSCRIPTION_DIGG );
247 }
248 }
249
250
251
252
253
254
255 public void createDiggCategorySubscription( LuteceUser user, int nIdDigg )
256 {
257 if ( !hasUserSubscribedToResource( user, nIdDigg, SUBSCRIPTION_DIGG_CATEGORY ) )
258 {
259 createSubscription( user, nIdDigg, SUBSCRIPTION_DIGG_CATEGORY );
260 }
261 }
262
263
264
265
266
267
268 public void createDiggSubmitSubscription( LuteceUser user, int nIdDiggSubmit )
269 {
270 if ( !hasUserSubscribedToResource( user, nIdDiggSubmit, SUBSCRIPTION_DIGG_SUBMIT ) )
271 {
272 createSubscription( user, nIdDiggSubmit, SUBSCRIPTION_DIGG_SUBMIT );
273 }
274 }
275
276 private void createSubscription( LuteceUser user, int nId, String strSubscriptionKey )
277 {
278 Subscription subscription = new Subscription( );
279 subscription.setIdSubscribedResource( Integer.toString( nId ) );
280 subscription.setUserId( user.getName( ) );
281 subscription.setSubscriptionKey( strSubscriptionKey );
282 subscription.setSubscriptionProvider( getProviderName( ) );
283 SubscriptionService.getInstance( ).createSubscription( subscription );
284 }
285
286
287
288
289
290
291
292
293
294 public boolean hasUserSubscribedToDiggCategory( LuteceUser user, int nIdDiggCategory )
295 {
296 return hasUserSubscribedToResource( user, nIdDiggCategory, SUBSCRIPTION_DIGG_CATEGORY );
297 }
298
299
300
301
302
303
304
305
306
307 public boolean hasUserSubscribedToDiggSubmit( LuteceUser user, int nIdDiggSubmit )
308 {
309 return hasUserSubscribedToResource( user, nIdDiggSubmit, SUBSCRIPTION_DIGG_SUBMIT );
310 }
311
312
313
314
315
316
317
318
319 public boolean hasUserSubscribedToDigg( LuteceUser user, int nIdDigg )
320 {
321 return hasUserSubscribedToResource( user, nIdDigg, SUBSCRIPTION_DIGG );
322 }
323
324
325
326
327
328
329
330
331 private boolean hasUserSubscribedToResource( LuteceUser user, int nId, String strSubscriptionKey )
332 {
333 SubscriptionFilter filter = new SubscriptionFilter( user.getName( ), getProviderName( ), strSubscriptionKey,
334 Integer.toString( nId ) );
335 List<Subscription> listSubscription = SubscriptionService.getInstance( ).findByFilter( filter );
336
337 if ( ( listSubscription != null ) && ( listSubscription.size( ) > 0 ) )
338 {
339 return true;
340 }
341
342 return false;
343 }
344
345 @Override
346 public String getSubscriptionHtmlDescriptionBis( LuteceUser user, String strSubscriptionKey,
347 String strIdSubscribedResource, Locale locale, String userSub )
348 {
349
350 return getSubscriptionHtmlDescriptionBis( user, strSubscriptionKey, strIdSubscribedResource, locale, userSub );
351 }
352 }