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.directory.modules.multiview.business.record.filter;
35
36 import java.util.ArrayList;
37 import java.util.List;
38 import java.util.Map;
39 import java.util.Map.Entry;
40 import java.util.regex.Pattern;
41
42 import org.apache.commons.lang3.StringUtils;
43
44 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.RecordParameters;
45
46
47
48
49 public final class RecordFilterQueryBuilder
50 {
51
52 private static final String DEFAULT_QUERY_VALUE = StringUtils.EMPTY;
53 private static final String KEY_NAME_SEPARATOR = "$";
54 private static final String DEFAULT_ITEM_VALUE = "-1";
55 private static final String PARAMETER_TO_REPLACE_SYMBOL = "?";
56
57
58
59
60 private RecordFilterQueryBuilder( )
61 {
62
63 }
64
65
66
67
68
69
70
71
72
73
74 public static String buildRecordFilterQuery( String strRecordFilterQueryPattern, RecordParameters recordParameters )
75 {
76 String strRecordFilterQuery = DEFAULT_QUERY_VALUE;
77 List<String> listParameterValuesToUse = new ArrayList<>( );
78
79 if ( StringUtils.isNotBlank( strRecordFilterQueryPattern ) && recordParameters != null )
80 {
81 Map<String, Object> mapRecordParameterNameValue = recordParameters.getRecordParametersMap( );
82
83 if ( mapRecordParameterNameValue != null && !mapRecordParameterNameValue.isEmpty( ) )
84 {
85 strRecordFilterQuery = strRecordFilterQueryPattern;
86
87 for ( Entry<String, Object> entryRecordParameter : mapRecordParameterNameValue.entrySet( ) )
88 {
89 String strParameterName = entryRecordParameter.getKey( );
90 Object objParameterValue = entryRecordParameter.getValue( );
91
92
93
94 if ( objParameterValue == null || String.valueOf( objParameterValue ).equals( DEFAULT_ITEM_VALUE ) )
95 {
96 strRecordFilterQuery = DEFAULT_QUERY_VALUE;
97 break;
98 }
99 else
100 {
101 String strParameterValue = String.valueOf( objParameterValue );
102 listParameterValuesToUse.add( strParameterValue );
103
104 String strParameterNameBuilt = buildParameterNameToReplace( strParameterName );
105 strRecordFilterQuery = strRecordFilterQuery.replaceAll( Pattern.quote( strParameterNameBuilt ), PARAMETER_TO_REPLACE_SYMBOL );
106 }
107 }
108 }
109
110 recordParameters.setListUsedParametersValue( listParameterValuesToUse );
111 }
112
113 return strRecordFilterQuery;
114 }
115
116
117
118
119
120
121
122
123 private static String buildParameterNameToReplace( String strParameterName )
124 {
125 StringBuilder stringBuilderParameterName = new StringBuilder( );
126 stringBuilderParameterName.append( KEY_NAME_SEPARATOR ).append( strParameterName ).append( KEY_NAME_SEPARATOR );
127
128 return stringBuilderParameterName.toString( );
129 }
130 }