2828import org .eclipse .sw360 .datahandler .thrift .projects .Project ;
2929import org .eclipse .sw360 .datahandler .thrift .search .SearchResult ;
3030import org .eclipse .sw360 .datahandler .thrift .vulnerabilities .VulnerabilityDTO ;
31+ import org .eclipse .sw360 .datahandler .thrift .vulnerabilities .Vulnerability ;
3132
3233public class ResourceComparatorGenerator <T > {
3334
@@ -38,6 +39,7 @@ public class ResourceComparatorGenerator<T> {
3839 private static final Map <SearchResult ._Fields , Comparator <SearchResult >> searchResultMap = generateSearchResultMap ();
3940 private static final Map <ChangeLogs ._Fields , Comparator <ChangeLogs >> changeLogMap = generateChangeLogMap ();
4041 private static final Map <VulnerabilityDTO ._Fields , Comparator <VulnerabilityDTO >> vDtoMap = generateVulDtoMap ();
42+ private static final Map <Vulnerability ._Fields , Comparator <Vulnerability >> vMap = generateVulMap ();
4143 private static final Map <ModerationRequest ._Fields , Comparator <ModerationRequest >> moderationRequestMap = generateModerationRequestMap ();
4244
4345 private static Map <Component ._Fields , Comparator <Component >> generateComponentMap () {
@@ -95,6 +97,14 @@ private static Map<VulnerabilityDTO._Fields, Comparator<VulnerabilityDTO>> gener
9597 return Collections .unmodifiableMap (vulDTOMap );
9698 }
9799
100+ private static Map <Vulnerability ._Fields , Comparator <Vulnerability >> generateVulMap () {
101+ Map <Vulnerability ._Fields , Comparator <Vulnerability >> vulMap = new HashMap <>();
102+ vulMap .put (Vulnerability ._Fields .EXTERNAL_ID , Comparator .comparing (Vulnerability ::getExternalId , Comparator .nullsFirst (String .CASE_INSENSITIVE_ORDER )));
103+ vulMap .put (Vulnerability ._Fields .TITLE , Comparator .comparing (Vulnerability ::getTitle , Comparator .nullsFirst (String .CASE_INSENSITIVE_ORDER )));
104+ vulMap .put (Vulnerability ._Fields .PRIORITY , Comparator .comparing (Vulnerability ::getPriority , Comparator .nullsFirst (String .CASE_INSENSITIVE_ORDER )));
105+ return Collections .unmodifiableMap (vulMap );
106+ }
107+
98108 private static Map <ModerationRequest ._Fields , Comparator <ModerationRequest >> generateModerationRequestMap () {
99109 Map <ModerationRequest ._Fields , Comparator <ModerationRequest >> moderationRequestMap = new HashMap <>();
100110 moderationRequestMap .put (ModerationRequest ._Fields .TIMESTAMP ,
@@ -122,6 +132,8 @@ public Comparator<T> generateComparator(String type) throws ResourceClassNotFoun
122132 return (Comparator <T >)defaultChangeLogComparator ();
123133 case SW360Constants .TYPE_VULNERABILITYDTO :
124134 return (Comparator <T >)defaultVulDtoComparator ();
135+ case SW360Constants .TYPE_VULNERABILITY :
136+ return (Comparator <T >)defaultVulComparator ();
125137 case SW360Constants .TYPE_MODERATION :
126138 return (Comparator <T >)defaultModerationRequestComparator ();
127139 case SW360Constants .TYPE_PACKAGE :
@@ -200,6 +212,15 @@ public Comparator<T> generateComparator(String type, List<String> properties) th
200212 }
201213 }
202214 return generateVulDTOComparatorWithFields (type , vulDtos );
215+ case SW360Constants .TYPE_VULNERABILITY :
216+ List <Vulnerability ._Fields > vul = new ArrayList <>();
217+ for (String property : properties ) {
218+ Vulnerability ._Fields field = Vulnerability ._Fields .findByName (property );
219+ if (field != null ) {
220+ vul .add (field );
221+ }
222+ }
223+ return generateVulComparatorWithFields (type , vul );
203224 default :
204225 throw new ResourceClassNotFoundException ("No comparator for resource class with name " + type );
205226 }
@@ -268,6 +289,16 @@ public Comparator<T> generateVulDTOComparatorWithFields(String type, List<Vulner
268289 }
269290 }
270291
292+ public Comparator <T > generateVulComparatorWithFields (String type , List <Vulnerability ._Fields > fields ) throws ResourceClassNotFoundException {
293+ switch (type ) {
294+ case SW360Constants .TYPE_VULNERABILITY :
295+ return (Comparator <T >)vulnComparator (fields );
296+ default :
297+ throw new ResourceClassNotFoundException ("No comparator for resource class with name " + type );
298+ }
299+ }
300+
301+
271302 private Comparator <Component > componentComparator (List <Component ._Fields > fields ) {
272303 Comparator <Component > comparator = Comparator .comparing (x -> true );
273304 for (Component ._Fields field :fields ) {
@@ -352,6 +383,18 @@ private Comparator<VulnerabilityDTO> vulnDtoComparator(List<VulnerabilityDTO._Fi
352383 return comparator ;
353384 }
354385
386+ private Comparator <Vulnerability > vulnComparator (List <Vulnerability ._Fields > fields ) {
387+ Comparator <Vulnerability > comparator = Comparator .comparing (x -> true );
388+ for (Vulnerability ._Fields field :fields ) {
389+ Comparator <Vulnerability > fieldComparator = vMap .get (field );
390+ if (fieldComparator != null ) {
391+ comparator = comparator .thenComparing (fieldComparator );
392+ }
393+ }
394+ comparator = comparator .thenComparing (defaultVulComparator ());
395+ return comparator ;
396+ }
397+
355398 private Comparator <Component > defaultComponentComparator () {
356399 return componentMap .get (Component ._Fields .NAME );
357400 }
@@ -376,6 +419,10 @@ private Comparator<VulnerabilityDTO> defaultVulDtoComparator() {
376419 return vDtoMap .get (VulnerabilityDTO ._Fields .EXTERNAL_ID );
377420 }
378421
422+ private Comparator <Vulnerability > defaultVulComparator () {
423+ return vMap .get (Vulnerability ._Fields .EXTERNAL_ID );
424+ }
425+
379426 private Comparator <ModerationRequest > defaultModerationRequestComparator () {
380427 return moderationRequestMap .get (ModerationRequest ._Fields .TIMESTAMP );
381428 }
0 commit comments