2626import org .eclipse .sw360 .datahandler .thrift .moderation .ModerationRequest ;
2727import org .eclipse .sw360 .datahandler .thrift .packages .Package ;
2828import org .eclipse .sw360 .datahandler .thrift .projects .Project ;
29+ import org .eclipse .sw360 .datahandler .thrift .users .User ;
2930import org .eclipse .sw360 .datahandler .thrift .search .SearchResult ;
3031import org .eclipse .sw360 .datahandler .thrift .vulnerabilities .VulnerabilityDTO ;
3132import org .eclipse .sw360 .datahandler .thrift .vulnerabilities .Vulnerability ;
@@ -34,6 +35,7 @@ public class ResourceComparatorGenerator<T> {
3435
3536 private static final Map <Component ._Fields , Comparator <Component >> componentMap = generateComponentMap ();
3637 private static final Map <Project ._Fields , Comparator <Project >> projectMap = generateProjectMap ();
38+ private static final Map <User ._Fields , Comparator <User >> userMap = generateUserMap ();
3739 private static final Map <Release ._Fields , Comparator <Release >> releaseMap = generateReleaseMap ();
3840 private static final Map <Package ._Fields , Comparator <Package >> packageMap = generatePackageMap ();
3941 private static final Map <SearchResult ._Fields , Comparator <SearchResult >> searchResultMap = generateSearchResultMap ();
@@ -61,6 +63,13 @@ private static Map<Project._Fields, Comparator<Project>> generateProjectMap() {
6163 return Collections .unmodifiableMap (projectMap );
6264 }
6365
66+ private static Map <User ._Fields , Comparator <User >> generateUserMap () {
67+ Map <User ._Fields , Comparator <User >> userMap = new HashMap <>();
68+ userMap .put (User ._Fields .FULLNAME , Comparator .comparing (User ::getFullname , Comparator .nullsFirst (String .CASE_INSENSITIVE_ORDER )));
69+ userMap .put (User ._Fields .EMAIL , Comparator .comparing (User ::getEmail , Comparator .nullsFirst (String .CASE_INSENSITIVE_ORDER )));
70+ return Collections .unmodifiableMap (userMap );
71+ }
72+
6473 private static Map <Release ._Fields , Comparator <Release >> generateReleaseMap () {
6574 Map <Release ._Fields , Comparator <Release >> releaseMap = new HashMap <>();
6675 releaseMap .put (Release ._Fields .NAME , Comparator .comparing (Release ::getName , Comparator .nullsFirst (String .CASE_INSENSITIVE_ORDER )));
@@ -124,6 +133,8 @@ public Comparator<T> generateComparator(String type) throws ResourceClassNotFoun
124133 return (Comparator <T >)defaultComponentComparator ();
125134 case SW360Constants .TYPE_PROJECT :
126135 return (Comparator <T >)defaultProjectComparator ();
136+ case SW360Constants .TYPE_USER :
137+ return (Comparator <T >)defaultUserComparator ();
127138 case SW360Constants .TYPE_RELEASE :
128139 return (Comparator <T >)defaultReleaseComparator ();
129140 case SW360Constants .TYPE_SEARCHRESULT :
@@ -167,6 +178,15 @@ public Comparator<T> generateComparator(String type, List<String> properties) th
167178 }
168179 }
169180 return generateProjectComparatorWithFields (type , projectFields );
181+ case SW360Constants .TYPE_USER :
182+ List <User ._Fields > userFields = new ArrayList <>();
183+ for (String property :properties ) {
184+ User ._Fields field = User ._Fields .findByName (property );
185+ if (field != null ) {
186+ userFields .add (field );
187+ }
188+ }
189+ return generateUserComparatorWithFields (type , userFields );
170190 case SW360Constants .TYPE_RELEASE :
171191 List <Release ._Fields > releaeFields = new ArrayList <>();
172192 for (String property :properties ) {
@@ -244,6 +264,15 @@ public Comparator<T> generateProjectComparatorWithFields(String type, List<Proje
244264 }
245265 }
246266
267+ public Comparator <T > generateUserComparatorWithFields (String type , List <User ._Fields > fields ) throws ResourceClassNotFoundException {
268+ switch (type ) {
269+ case SW360Constants .TYPE_USER :
270+ return (Comparator <T >)userComparator (fields );
271+ default :
272+ throw new ResourceClassNotFoundException ("No comparator for resource class with name " + type );
273+ }
274+ }
275+
247276 public Comparator <T > generateReleaseComparatorWithFields (String type , List <Release ._Fields > fields ) throws ResourceClassNotFoundException {
248277 switch (type ) {
249278 case SW360Constants .TYPE_RELEASE :
@@ -323,6 +352,18 @@ private Comparator<Project> projectComparator(List<Project._Fields> fields) {
323352 return comparator ;
324353 }
325354
355+ private Comparator <User > userComparator (List <User ._Fields > fields ) {
356+ Comparator <User > comparator = Comparator .comparing (x -> true );
357+ for (User ._Fields field :fields ) {
358+ Comparator <User > fieldComparator = userMap .get (field );
359+ if (fieldComparator != null ) {
360+ comparator = comparator .thenComparing (fieldComparator );
361+ }
362+ }
363+ comparator = comparator .thenComparing (defaultUserComparator ());
364+ return comparator ;
365+ }
366+
326367 private Comparator <Release > releaseComparator (List <Release ._Fields > fields ) {
327368 Comparator <Release > comparator = Comparator .comparing (x -> true );
328369 for (Release ._Fields field :fields ) {
@@ -403,6 +444,10 @@ private Comparator<Project> defaultProjectComparator() {
403444 return projectMap .get (Project ._Fields .NAME );
404445 }
405446
447+ private Comparator <User > defaultUserComparator () {
448+ return userMap .get (User ._Fields .EMAIL );
449+ }
450+
406451 private Comparator <Release > defaultReleaseComparator () {
407452 return releaseMap .get (Release ._Fields .NAME );
408453 }
0 commit comments