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;
35
36 import java.io.Serializable;
37 import java.util.Comparator;
38 import java.util.List;
39
40 import org.apache.commons.lang3.math.NumberUtils;
41
42 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.RecordColumnCell;
43 import fr.paris.lutece.plugins.directory.modules.multiview.business.record.column.RecordColumnCellComparator;
44 import fr.paris.lutece.portal.service.spring.SpringContextService;
45
46
47
48
49 public class DirectoryRecordItemComparator implements Comparator<DirectoryRecordItem>, Serializable
50 {
51
52
53
54 private static final long serialVersionUID = -8569813504412874604L;
55
56
57 private static final int SORT_ASCENDANT_DIRECTION = NumberUtils.INTEGER_ONE;
58 private static final int SORT_DESCENDANT_DIRECTION = NumberUtils.INTEGER_MINUS_ONE;
59 private static final String DEFAULT_CONFIGURATION_BEAN_NAME = "directory-multiview.directoryRecordItem.comparator.configuration.default";
60
61
62 private final String _strSortAttributeName;
63 private final int _nCellPosition;
64 private final int _nSortDirection;
65
66
67
68
69
70
71
72 public DirectoryRecordItemComparator( DirectoryRecordItemComparatorConfig directoryRecordItemComparatorConfig )
73 {
74 if ( directoryRecordItemComparatorConfig != null && directoryRecordItemComparatorConfig.getColumnToSortPosition( ) != NumberUtils.INTEGER_MINUS_ONE )
75 {
76 _strSortAttributeName = directoryRecordItemComparatorConfig.getSortAttributeName( );
77 _nCellPosition = directoryRecordItemComparatorConfig.getColumnToSortPosition( );
78 _nSortDirection = computeSortDirection( directoryRecordItemComparatorConfig.isAscSort( ) );
79 }
80 else
81 {
82 DirectoryRecordItemComparatorConfig directoryRecordItemComparatorConfigDefault = SpringContextService.getBean( DEFAULT_CONFIGURATION_BEAN_NAME );
83 _strSortAttributeName = directoryRecordItemComparatorConfigDefault.getSortAttributeName( );
84 _nCellPosition = directoryRecordItemComparatorConfigDefault.getColumnToSortPosition( );
85 _nSortDirection = computeSortDirection( directoryRecordItemComparatorConfigDefault.isAscSort( ) );
86 }
87 }
88
89
90
91
92
93
94
95
96
97
98 public DirectoryRecordItemComparator( DirectoryRecordItemComparatorConfig directoryRecordItemComparatorConfig,
99 DirectoryRecordItemComparatorConfig directoryRecordItemComparatorConfigDefault )
100 {
101 if ( directoryRecordItemComparatorConfig != null && directoryRecordItemComparatorConfig.getColumnToSortPosition( ) != NumberUtils.INTEGER_MINUS_ONE )
102 {
103 _strSortAttributeName = directoryRecordItemComparatorConfig.getSortAttributeName( );
104 _nCellPosition = directoryRecordItemComparatorConfig.getColumnToSortPosition( );
105 _nSortDirection = computeSortDirection( directoryRecordItemComparatorConfig.isAscSort( ) );
106 }
107 else
108 {
109 _strSortAttributeName = directoryRecordItemComparatorConfigDefault.getSortAttributeName( );
110 _nCellPosition = directoryRecordItemComparatorConfigDefault.getColumnToSortPosition( );
111 _nSortDirection = computeSortDirection( directoryRecordItemComparatorConfigDefault.isAscSort( ) );
112 }
113 }
114
115
116
117
118
119
120
121
122 private int computeSortDirection( boolean bSortAsc )
123 {
124 int nSortDirection = SORT_ASCENDANT_DIRECTION;
125
126 if ( !bSortAsc )
127 {
128 nSortDirection = SORT_DESCENDANT_DIRECTION;
129 }
130
131 return nSortDirection;
132 }
133
134
135
136
137 @Override
138 public int compare( DirectoryRecordItem directoryRecordItemOne, DirectoryRecordItem directoryRecordItemTwo )
139 {
140 int nComparisonResult = NumberUtils.INTEGER_ZERO;
141
142 if ( directoryRecordItemOne == null )
143 {
144 if ( directoryRecordItemTwo != null )
145 {
146 nComparisonResult = NumberUtils.INTEGER_MINUS_ONE;
147 }
148 }
149 else
150 {
151 if ( directoryRecordItemTwo == null )
152 {
153 nComparisonResult = NumberUtils.INTEGER_ONE;
154 }
155 else
156 {
157 List<RecordColumnCell> listRecordColumnCellOne = directoryRecordItemOne.getDirectoryRecordCellValues( );
158 List<RecordColumnCell> listRecordColumnCellTwo = directoryRecordItemTwo.getDirectoryRecordCellValues( );
159
160 nComparisonResult = compareRecordColumnCellList( listRecordColumnCellOne, listRecordColumnCellTwo );
161 }
162 }
163
164 return ( _nSortDirection * nComparisonResult );
165 }
166
167
168
169
170
171
172
173
174
175
176 private int compareRecordColumnCellList( List<RecordColumnCell> listRecordColumnCellOne, List<RecordColumnCell> listRecordColumnCellTwo )
177 {
178 int nRecordColumnComparisonResult = NumberUtils.INTEGER_ZERO;
179
180 if ( listRecordColumnCellOne == null )
181 {
182 if ( listRecordColumnCellTwo != null )
183 {
184 nRecordColumnComparisonResult = NumberUtils.INTEGER_MINUS_ONE;
185 }
186 }
187 else
188 {
189 if ( listRecordColumnCellTwo == null )
190 {
191 nRecordColumnComparisonResult = NumberUtils.INTEGER_ONE;
192 }
193 else
194 {
195 int nlistRecordColumnCellOneSize = listRecordColumnCellOne.size( );
196 int nlistRecordColumnCellTwoSize = listRecordColumnCellTwo.size( );
197 int nRecordColumnCellPosition = _nCellPosition - 1;
198
199 if ( nlistRecordColumnCellOneSize == nlistRecordColumnCellTwoSize && nlistRecordColumnCellTwoSize > nRecordColumnCellPosition
200 && nRecordColumnCellPosition > -1 )
201 {
202 RecordColumnCell recordColumnCellOne = listRecordColumnCellOne.get( nRecordColumnCellPosition );
203 RecordColumnCell recordColumnCellTwo = listRecordColumnCellTwo.get( nRecordColumnCellPosition );
204
205 RecordColumnCellComparator recordColumnCellComparator = new RecordColumnCellComparator( _strSortAttributeName );
206 nRecordColumnComparisonResult = recordColumnCellComparator.compare( recordColumnCellOne, recordColumnCellTwo );
207 }
208 }
209 }
210
211 return nRecordColumnComparisonResult;
212 }
213 }