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 ;
3132
3233public class ResourceComparatorGenerator <T > {
3334
3435 private static final Map <Component ._Fields , Comparator <Component >> componentMap = generateComponentMap ();
3536 private static final Map <Project ._Fields , Comparator <Project >> projectMap = generateProjectMap ();
37+ private static final Map <User ._Fields , Comparator <User >> userMap = generateUserMap ();
3638 private static final Map <Release ._Fields , Comparator <Release >> releaseMap = generateReleaseMap ();
3739 private static final Map <Package ._Fields , Comparator <Package >> packageMap = generatePackageMap ();
3840 private static final Map <SearchResult ._Fields , Comparator <SearchResult >> searchResultMap = generateSearchResultMap ();
@@ -59,6 +61,13 @@ private static Map<Project._Fields, Comparator<Project>> generateProjectMap() {
5961 return Collections .unmodifiableMap (projectMap );
6062 }
6163
64+ private static Map <User ._Fields , Comparator <User >> generateUserMap () {
65+ Map <User ._Fields , Comparator <User >> userMap = new HashMap <>();
66+ userMap .put (User ._Fields .FULLNAME , Comparator .comparing (User ::getFullname , Comparator .nullsFirst (String .CASE_INSENSITIVE_ORDER )));
67+ userMap .put (User ._Fields .EMAIL , Comparator .comparing (User ::getEmail , Comparator .nullsFirst (String .CASE_INSENSITIVE_ORDER )));
68+ return Collections .unmodifiableMap (userMap );
69+ }
70+
6271 private static Map <Release ._Fields , Comparator <Release >> generateReleaseMap () {
6372 Map <Release ._Fields , Comparator <Release >> releaseMap = new HashMap <>();
6473 releaseMap .put (Release ._Fields .NAME , Comparator .comparing (Release ::getName , Comparator .nullsFirst (String .CASE_INSENSITIVE_ORDER )));
@@ -114,6 +123,8 @@ public Comparator<T> generateComparator(String type) throws ResourceClassNotFoun
114123 return (Comparator <T >)defaultComponentComparator ();
115124 case SW360Constants .TYPE_PROJECT :
116125 return (Comparator <T >)defaultProjectComparator ();
126+ case SW360Constants .TYPE_USER :
127+ return (Comparator <T >)defaultUserComparator ();
117128 case SW360Constants .TYPE_RELEASE :
118129 return (Comparator <T >)defaultReleaseComparator ();
119130 case SW360Constants .TYPE_SEARCHRESULT :
@@ -155,6 +166,15 @@ public Comparator<T> generateComparator(String type, List<String> properties) th
155166 }
156167 }
157168 return generateProjectComparatorWithFields (type , projectFields );
169+ case SW360Constants .TYPE_USER :
170+ List <User ._Fields > userFields = new ArrayList <>();
171+ for (String property :properties ) {
172+ User ._Fields field = User ._Fields .findByName (property );
173+ if (field != null ) {
174+ userFields .add (field );
175+ }
176+ }
177+ return generateUserComparatorWithFields (type , userFields );
158178 case SW360Constants .TYPE_RELEASE :
159179 List <Release ._Fields > releaeFields = new ArrayList <>();
160180 for (String property :properties ) {
@@ -223,6 +243,15 @@ public Comparator<T> generateProjectComparatorWithFields(String type, List<Proje
223243 }
224244 }
225245
246+ public Comparator <T > generateUserComparatorWithFields (String type , List <User ._Fields > fields ) throws ResourceClassNotFoundException {
247+ switch (type ) {
248+ case SW360Constants .TYPE_USER :
249+ return (Comparator <T >)userComparator (fields );
250+ default :
251+ throw new ResourceClassNotFoundException ("No comparator for resource class with name " + type );
252+ }
253+ }
254+
226255 public Comparator <T > generateReleaseComparatorWithFields (String type , List <Release ._Fields > fields ) throws ResourceClassNotFoundException {
227256 switch (type ) {
228257 case SW360Constants .TYPE_RELEASE :
@@ -292,6 +321,18 @@ private Comparator<Project> projectComparator(List<Project._Fields> fields) {
292321 return comparator ;
293322 }
294323
324+ private Comparator <User > userComparator (List <User ._Fields > fields ) {
325+ Comparator <User > comparator = Comparator .comparing (x -> true );
326+ for (User ._Fields field :fields ) {
327+ Comparator <User > fieldComparator = userMap .get (field );
328+ if (fieldComparator != null ) {
329+ comparator = comparator .thenComparing (fieldComparator );
330+ }
331+ }
332+ comparator = comparator .thenComparing (defaultUserComparator ());
333+ return comparator ;
334+ }
335+
295336 private Comparator <Release > releaseComparator (List <Release ._Fields > fields ) {
296337 Comparator <Release > comparator = Comparator .comparing (x -> true );
297338 for (Release ._Fields field :fields ) {
@@ -360,6 +401,10 @@ private Comparator<Project> defaultProjectComparator() {
360401 return projectMap .get (Project ._Fields .NAME );
361402 }
362403
404+ private Comparator <User > defaultUserComparator () {
405+ return userMap .get (User ._Fields .EMAIL );
406+ }
407+
363408 private Comparator <Release > defaultReleaseComparator () {
364409 return releaseMap .get (Release ._Fields .NAME );
365410 }
0 commit comments