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.forms.validation;
35
36 import java.util.HashMap;
37 import java.util.List;
38 import java.util.Map;
39
40 import org.apache.commons.collections.CollectionUtils;
41 import org.apache.commons.lang3.StringUtils;
42
43 import fr.paris.lutece.plugins.forms.business.Control;
44 import fr.paris.lutece.plugins.forms.business.FormQuestionResponse;
45 import fr.paris.lutece.plugins.forms.util.FormsConstants;
46 import fr.paris.lutece.plugins.genericattributes.business.Response;
47 import fr.paris.lutece.plugins.regularexpression.business.RegularExpressionHome;
48 import fr.paris.lutece.portal.business.regularexpression.RegularExpression;
49 import fr.paris.lutece.portal.service.i18n.I18nService;
50 import fr.paris.lutece.portal.service.plugin.Plugin;
51 import fr.paris.lutece.portal.service.plugin.PluginService;
52 import fr.paris.lutece.portal.service.regularexpression.IRegularExpressionService;
53 import fr.paris.lutece.portal.service.spring.SpringContextService;
54 import fr.paris.lutece.portal.service.template.AppTemplateService;
55 import fr.paris.lutece.util.ReferenceList;
56 import fr.paris.lutece.util.html.HtmlTemplate;
57
58 public abstract class AbstractPatternValidator extends AbstractValidator
59 {
60
61 private static final String BEAN_NAME_REGULAR_EXPRESSION = "regularExpressionService";
62 private static final String TEMPLATE_JS_FUNCTION = "/skin/plugins/forms/validators/pattern_function.js";
63 private static final String TEMPLATE_DISPLAY_HTML = "/admin/plugins/forms/validators/pattern_template.html";
64
65 private Plugin _plugin = PluginService.getPlugin( "forms" );
66
67 public AbstractPatternValidator( String strValidatorName, String strValidatorDisplayName, List<String> listAvailableEntryType )
68 {
69 super( strValidatorName, strValidatorDisplayName, listAvailableEntryType );
70 }
71
72 @Override
73 public String getDisplayHtml( Control control )
74 {
75 Map<String, Object> model = new HashMap<>( );
76
77 List<RegularExpression> listRegularExpression = RegularExpressionHome.getList( _plugin );
78 ReferenceList refListRegularExpression = new ReferenceList( );
79
80 for ( RegularExpression regularExpression : listRegularExpression )
81 {
82 refListRegularExpression.addItem( regularExpression.getIdExpression( ), regularExpression.getTitle( ) );
83 }
84
85 model.put( FormsConstants.PARAMETER_REF_LIST_VALUE, refListRegularExpression );
86 model.put( FormsConstants.PARAMETER_CONTROL_VALUE, control.getValue( ) );
87
88 HtmlTemplate htmlTemplateQuestion = AppTemplateService.getTemplate( TEMPLATE_DISPLAY_HTML, I18nService.getDefaultLocale( ), model );
89
90 return htmlTemplateQuestion.getHtml( );
91 }
92
93 @Override
94 public String getJavascriptValidation( )
95 {
96 Map<String, Object> model = new HashMap<>( );
97 return AppTemplateService.getTemplate( TEMPLATE_JS_FUNCTION, I18nService.getDefaultLocale( ), model ).getHtml( );
98 }
99
100 @Override
101 public String getJavascriptControlValue( Control control )
102 {
103 RegularExpression regularExpression = RegularExpressionHome.findByPrimaryKey( Integer.valueOf( control.getValue( ) ), _plugin );
104
105 return regularExpression.getValue( );
106 }
107
108 @Override
109 public boolean validate( FormQuestionResponse questionResponse, Control control )
110 {
111 RegularExpression regularExpression = RegularExpressionHome.findByPrimaryKey( Integer.valueOf( control.getValue( ) ), _plugin );
112
113 if ( regularExpression != null )
114 {
115 IRegularExpressionService service = SpringContextService.getBean( BEAN_NAME_REGULAR_EXPRESSION );
116 for ( Response response : questionResponse.getEntryResponse( ) )
117 {
118 String toValidate = getValueToValidate( response );
119 if (StringUtils.isNotEmpty(toValidate) && !service.isMatches( toValidate, regularExpression ) )
120 {
121 return false;
122 }
123 }
124 return true;
125 }
126 return false;
127 }
128
129 protected abstract String getValueToValidate( Response response );
130 }