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.dila.service.impl;
35
36 import fr.paris.lutece.plugins.dila.business.enums.ResourceTypeEnum;
37 import fr.paris.lutece.plugins.dila.business.fichelocale.dto.LocalCardChapterDTO;
38 import fr.paris.lutece.plugins.dila.business.fichelocale.dto.LocalCardDTO;
39 import fr.paris.lutece.plugins.dila.business.fichelocale.dto.LocalDTO;
40 import fr.paris.lutece.plugins.dila.business.fichelocale.dto.LocalFolderDTO;
41 import fr.paris.lutece.plugins.dila.business.fichelocale.dto.LocalFolderLinkDTO;
42 import fr.paris.lutece.plugins.dila.business.fichelocale.dto.XmlDTO;
43 import fr.paris.lutece.plugins.dila.service.DilaLocalTypeEnum;
44 import fr.paris.lutece.plugins.dila.service.IDilaLocalService;
45 import fr.paris.lutece.plugins.dila.service.IDilaValidationService;
46 import fr.paris.lutece.plugins.dila.service.IDilaXmlService;
47 import fr.paris.lutece.portal.web.constants.Messages;
48
49 import java.io.Serializable;
50 import java.util.ArrayList;
51 import java.util.List;
52
53 import javax.inject.Inject;
54 import javax.inject.Named;
55
56 import org.apache.commons.lang.StringUtils;
57
58
59
60
61
62 public class DilaValidationService implements IDilaValidationService, Serializable
63 {
64
65 private static final long serialVersionUID = 1670192896500470936L;
66 @Inject
67 @Named( "dilaXmlService" )
68 private IDilaXmlService _dilaXmlService;
69 @Inject
70 @Named( "dilaLocalService" )
71 private IDilaLocalService _dilaLocalService;
72
73
74
75
76 @Override
77 public String validateLocalFolder( LocalFolderDTO folderBean, List<LocalFolderLinkDTO> listLinks )
78 {
79 String errorKeyTheme = this.validateRootTheme( folderBean );
80 String errorKeyLinkedFolder = this.validateLinkedFolder( folderBean );
81 String errorKeyLinks = this.validateLinks( folderBean, listLinks );
82
83 if ( StringUtils.isNotBlank( errorKeyTheme ) )
84 {
85 return errorKeyTheme;
86 }
87 else if ( StringUtils.isNotBlank( errorKeyLinkedFolder ) )
88 {
89 return errorKeyLinkedFolder;
90 }
91 else if ( StringUtils.isNotBlank( errorKeyLinks ) )
92 {
93 return errorKeyLinks;
94 }
95 else if ( StringUtils.isBlank( folderBean.getLocalDTO( ).getAuthor( ) )
96 || StringUtils.isBlank( folderBean.getLocalDTO( ).getTitle( ) )
97 || StringUtils.isBlank( folderBean.getPresentation( ) ) )
98 {
99 return Messages.MANDATORY_FIELDS;
100 }
101
102 return null;
103 }
104
105
106
107
108 @Override
109 public String validateLocalCard( LocalCardDTO cardBean, List<LocalCardChapterDTO> listChapters )
110 {
111 String errorKeyRootFolder = this.validateRootFolder( cardBean, cardBean.getParentFolderId( ) );
112 String errorKeyLinkedCard = this.validateLinkedCard( cardBean, cardBean.getSiblingCardId( ) );
113 String errorKeyChapters = this.validateChapters( listChapters );
114
115 if ( StringUtils.isNotBlank( errorKeyRootFolder ) )
116 {
117 return errorKeyRootFolder;
118 }
119 else if ( StringUtils.isNotBlank( errorKeyLinkedCard ) )
120 {
121 return errorKeyLinkedCard;
122 }
123 else if ( StringUtils.isNotBlank( errorKeyChapters ) )
124 {
125 return errorKeyChapters;
126 }
127 else if ( StringUtils.isBlank( cardBean.getLocalDTO( ).getAuthor( ) )
128 || StringUtils.isBlank( cardBean.getLocalDTO( ).getTitle( ) ) )
129 {
130 return Messages.MANDATORY_FIELDS;
131 }
132
133 return null;
134 }
135
136
137
138
139 @Override
140 public String validateRootTheme( LocalFolderDTO folderBean )
141 {
142 String errorKey = null;
143
144 folderBean.getLocalDTO( ).setBreadCrumb( null );
145 folderBean.setParentThemeTitle( null );
146
147 if ( StringUtils.isBlank( folderBean.getParentThemeId( ) ) || ( folderBean.getParentThemeId( ).length( ) > 255 ) )
148 {
149 return "dila.create_fichelocale.error.themeParentVide";
150 }
151 else if ( folderBean.getParentThemeId( ).startsWith( "N" ) )
152 {
153
154 List<String> availableTypes = new ArrayList<String>( );
155
156 availableTypes.add( ResourceTypeEnum.THEME.getLabel( ) );
157 availableTypes.add( ResourceTypeEnum.SUBTHEME.getLabel( ) );
158
159 XmlDTO xml = _dilaXmlService.findByIdAndTypesAndAudience( folderBean.getParentThemeId( ), availableTypes,
160 folderBean.getLocalDTO( ).getIdAudience( ) );
161
162 if ( xml != null )
163 {
164 folderBean.getLocalDTO( ).setBreadCrumb( xml.getBreadCrumb( ) + ";" + xml.getIdXml( ) );
165 folderBean.setParentThemeTitle( xml.getTitle( ) );
166 }
167 }
168
169 if ( folderBean.getLocalDTO( ).getBreadCrumb( ) == null )
170 {
171 errorKey = "dila.create_fichelocale.error.themeIntrouvable";
172 }
173
174 return errorKey;
175 }
176
177
178
179
180 @Override
181 public String validateLinkedFolder( LocalFolderDTO folderBean )
182 {
183 String errorKey = null;
184 String linkedFolderTitle = null;
185
186 if ( StringUtils.isNotBlank( folderBean.getSiblingFolderId( ) ) )
187 {
188 if ( StringUtils.isNumeric( folderBean.getSiblingFolderId( ) ) )
189 {
190
191 linkedFolderTitle = _dilaLocalService.findTitleByIdAndTypeAndAudience( Long.valueOf( folderBean
192 .getSiblingFolderId( ) ), DilaLocalTypeEnum.FOLDER.getId( ), folderBean.getLocalDTO( )
193 .getIdAudience( ) );
194 }
195 else if ( !folderBean.getSiblingFolderId( ).startsWith( "F" ) )
196 {
197
198 List<String> availableTypes = new ArrayList<String>( );
199 availableTypes.add( ResourceTypeEnum.FOLDER.getLabel( ) );
200
201 linkedFolderTitle = _dilaXmlService.findTitleByIdAndTypesAndAudience( folderBean.getSiblingFolderId( ),
202 availableTypes, folderBean.getLocalDTO( ).getIdAudience( ) );
203 }
204
205 if ( StringUtils.isBlank( linkedFolderTitle ) )
206 {
207 errorKey = "dila.create_fichelocale.error.dossierIntrouvable";
208 }
209 else
210 {
211 folderBean.setSiblingFolderTitle( linkedFolderTitle );
212 }
213 }
214
215 return errorKey;
216 }
217
218
219
220
221 @Override
222 public String validateRootFolder( LocalCardDTO cardBean, String strId )
223 {
224 String errorKey = null;
225 String strTitle = null;
226
227 if ( StringUtils.isBlank( cardBean.getParentFolderId( ) ) || ( cardBean.getParentFolderId( ).length( ) > 255 ) )
228 {
229 return "dila.create_fichelocale.error.dossierParentVide";
230 }
231
232 if ( StringUtils.isNumeric( cardBean.getParentFolderId( ) ) )
233 {
234
235 LocalDTO rootFolder = _dilaLocalService
236 .findLocalByIdAndTypeAndAudience( Long.valueOf( cardBean.getParentFolderId( ) ),
237 DilaLocalTypeEnum.FOLDER.getId( ), cardBean.getLocalDTO( ).getIdAudience( ) );
238
239 if ( rootFolder != null )
240 {
241 cardBean.getLocalParentFolder( ).setLocalDTO( rootFolder );
242 strTitle = rootFolder.getTitle( );
243 }
244 }
245 else if ( !cardBean.getParentFolderId( ).startsWith( "F" ) )
246 {
247
248 List<String> availableTypes = new ArrayList<String>( );
249 availableTypes.add( ResourceTypeEnum.FOLDER.getLabel( ) );
250
251 XmlDTO rootXML = _dilaXmlService.findByIdAndTypesAndAudience( cardBean.getParentFolderId( ),
252 availableTypes, cardBean.getLocalDTO( ).getIdAudience( ) );
253
254 if ( rootXML != null )
255 {
256 cardBean.setNationalParentFolder( rootXML );
257 strTitle = rootXML.getTitle( );
258 }
259 else
260 {
261 errorKey = "dila.create_fichelocale.error.dossierIntrouvable";
262 }
263 }
264
265 if ( ( cardBean.getLocalParentFolder( ).getLocalDTO( ).getId( ) == null )
266 && ( cardBean.getNationalParentFolder( ).getIdXml( ) == null ) )
267 {
268 errorKey = "dila.create_fichelocale.error.dossierIntrouvable";
269 }
270
271 cardBean.setParentFolderTitle( strTitle );
272
273 return errorKey;
274 }
275
276
277
278
279 @Override
280 public String validateLinkCard( LocalFolderDTO folderBean, String strId, LocalFolderLinkDTO link )
281 {
282 String errorKey = null;
283
284 if ( StringUtils.isEmpty( strId ) || ( strId.length( ) > 255 ) )
285 {
286 errorKey = Messages.MANDATORY_FIELDS;
287 }
288 else
289 {
290 String linkCardTitle = null;
291
292 if ( StringUtils.isNumeric( strId ) )
293 {
294
295 linkCardTitle = _dilaLocalService.findTitleByIdAndTypeAndAudience( Long.valueOf( strId ),
296 DilaLocalTypeEnum.CARD.getId( ), folderBean.getLocalDTO( ).getIdAudience( ) );
297 }
298 else if ( strId.startsWith( "F" ) )
299 {
300
301 List<String> availableTypes = new ArrayList<String>( );
302 availableTypes.add( ResourceTypeEnum.CARD.getLabel( ) );
303
304 linkCardTitle = _dilaXmlService.findTitleByIdAndTypesAndAudience( strId, availableTypes, folderBean
305 .getLocalDTO( ).getIdAudience( ) );
306 }
307
308 if ( StringUtils.isBlank( linkCardTitle ) )
309 {
310 errorKey = "dila.create_fichelocale.error.ficheSoeurIntrouvable";
311 }
312
313 link.setCardTitle( linkCardTitle );
314 }
315
316 return errorKey;
317 }
318
319
320
321
322 @Override
323 public String validateLinkedCard( LocalCardDTO cardBean, String strId )
324 {
325 String errorKey = null;
326 String linkedCardTitle = null;
327
328 if ( !StringUtils.isBlank( cardBean.getSiblingCardId( ) ) )
329 {
330 if ( StringUtils.isNumeric( cardBean.getSiblingCardId( ) ) )
331 {
332
333 linkedCardTitle = _dilaLocalService.findTitleByIdAndTypeAndAudience( Long.valueOf( cardBean
334 .getSiblingCardId( ) ), DilaLocalTypeEnum.CARD.getId( ), cardBean.getLocalDTO( )
335 .getIdAudience( ) );
336 }
337 else if ( cardBean.getSiblingCardId( ).startsWith( "F" ) )
338 {
339
340 List<String> availableTypes = new ArrayList<String>( );
341 availableTypes.add( ResourceTypeEnum.CARD.getLabel( ) );
342
343 linkedCardTitle = _dilaXmlService.findTitleByIdAndTypesAndAudience( cardBean.getSiblingCardId( ),
344 availableTypes, cardBean.getLocalDTO( ).getIdAudience( ) );
345 }
346
347 if ( StringUtils.isBlank( linkedCardTitle ) )
348 {
349
350 errorKey = "dila.create_fichelocale.error.ficheSoeurIntrouvable";
351 }
352
353 cardBean.setSiblingCardTitle( linkedCardTitle );
354 }
355
356 return errorKey;
357 }
358
359
360
361
362
363
364
365 private String validateLinks( LocalFolderDTO folderBean, List<LocalFolderLinkDTO> listLinks )
366 {
367 for ( LocalFolderLinkDTO link : listLinks )
368 {
369 if ( StringUtils.isEmpty( link.getTitle( ) ) || StringUtils.isEmpty( link.getCardId( ) ) )
370 {
371
372 return Messages.MANDATORY_FIELDS;
373 }
374
375 if ( StringUtils.isNotBlank( this.validateLinkCard( folderBean, link.getCardId( ), link ) ) )
376 {
377
378 return "dila.create_fichelocale.error.ficheSoeurIntrouvable";
379 }
380 }
381
382 return null;
383 }
384
385
386
387
388
389
390 private String validateChapters( List<LocalCardChapterDTO> listChapters )
391 {
392 for ( LocalCardChapterDTO chapter : listChapters )
393 {
394 if ( StringUtils.isEmpty( chapter.getTitle( ) ) || StringUtils.isEmpty( chapter.getContent( ) ) )
395 {
396
397 return Messages.MANDATORY_FIELDS;
398 }
399 }
400
401 return null;
402 }
403 }