1
1
package org .cbioportal .persistence .helper ;
2
2
3
3
import org .cbioportal .model .ClinicalAttribute ;
4
+ import org .cbioportal .model .MolecularProfile ;
4
5
import org .cbioportal .persistence .enums .ClinicalAttributeDataSource ;
5
6
import org .cbioportal .web .parameter .CategorizedClinicalDataCountFilter ;
6
7
import org .cbioportal .web .parameter .CustomSampleIdentifier ;
13
14
import java .util .List ;
14
15
import java .util .Map ;
15
16
import java .util .Objects ;
17
+ import java .util .stream .Collectors ;
16
18
17
19
public final class StudyViewFilterHelper {
18
20
public static StudyViewFilterHelper build (@ Nullable StudyViewFilter studyViewFilter ,
19
21
@ Nullable Map <ClinicalAttributeDataSource , List <ClinicalAttribute >> clinicalAttributesMap ,
22
+ @ Nullable Map <ClinicalAttributeDataSource , List <MolecularProfile >> genericAssayProfilesMap ,
20
23
@ Nullable List <CustomSampleIdentifier > customDataSamples ) {
21
24
if (Objects .isNull (studyViewFilter )) {
22
25
studyViewFilter = new StudyViewFilter ();
23
26
}
24
27
if (Objects .isNull (clinicalAttributesMap )) {
25
28
clinicalAttributesMap = new EnumMap <>(ClinicalAttributeDataSource .class );
26
29
}
30
+ if (Objects .isNull (genericAssayProfilesMap )) {
31
+ genericAssayProfilesMap = new EnumMap <>(ClinicalAttributeDataSource .class );
32
+ }
27
33
if (Objects .isNull (customDataSamples )) {
28
34
customDataSamples = new ArrayList <>();
29
35
}
30
- return new StudyViewFilterHelper (studyViewFilter , clinicalAttributesMap , customDataSamples );
36
+ return new StudyViewFilterHelper (studyViewFilter , clinicalAttributesMap , genericAssayProfilesMap , customDataSamples );
31
37
}
32
38
33
39
private final StudyViewFilter studyViewFilter ;
@@ -37,9 +43,10 @@ public static StudyViewFilterHelper build(@Nullable StudyViewFilter studyViewFil
37
43
38
44
39
45
private StudyViewFilterHelper (@ NonNull StudyViewFilter studyViewFilter , @ NonNull Map <ClinicalAttributeDataSource , List <ClinicalAttribute >> clinicalAttributesMap ,
46
+ @ NonNull Map <ClinicalAttributeDataSource , List <MolecularProfile >> genericAssayProfilesMap ,
40
47
@ NonNull List <CustomSampleIdentifier > customDataSamples ) {
41
48
this .studyViewFilter = studyViewFilter ;
42
- this .categorizedClinicalDataCountFilter = extractClinicalDataCountFilters (studyViewFilter , clinicalAttributesMap );
49
+ this .categorizedClinicalDataCountFilter = extractClinicalDataCountFilters (studyViewFilter , clinicalAttributesMap , genericAssayProfilesMap );
43
50
this .customDataSamples = customDataSamples ;
44
51
this .applyPatientIdFilters = shouldApplyPatientIdFilters ();
45
52
}
@@ -56,46 +63,77 @@ public List<CustomSampleIdentifier> customDataSamples() {
56
63
return this .customDataSamples ;
57
64
}
58
65
59
- private CategorizedClinicalDataCountFilter extractClinicalDataCountFilters (final StudyViewFilter studyViewFilter , Map <ClinicalAttributeDataSource , List <ClinicalAttribute >> clinicalAttributesMap ) {
60
-
61
- if (studyViewFilter .getClinicalDataFilters () == null || clinicalAttributesMap .isEmpty ()) {
66
+ private CategorizedClinicalDataCountFilter extractClinicalDataCountFilters (final StudyViewFilter studyViewFilter , Map <ClinicalAttributeDataSource , List <ClinicalAttribute >> clinicalAttributesMap , Map <ClinicalAttributeDataSource , List <MolecularProfile >> genericAssayProfilesMap ) {
67
+ if ((studyViewFilter .getClinicalDataFilters () == null || clinicalAttributesMap .isEmpty ()) &&
68
+ (studyViewFilter .getGenericAssayDataFilters () == null || genericAssayProfilesMap .isEmpty ()) &&
69
+ studyViewFilter .getGenomicDataFilters () == null )
70
+ {
62
71
return CategorizedClinicalDataCountFilter .getBuilder ().build ();
63
72
}
64
73
65
- List <String > patientCategoricalAttributes = clinicalAttributesMap .get (ClinicalAttributeDataSource .PATIENT )
66
- .stream ().filter (ca -> ca .getDatatype ().equals ("STRING" ))
67
- .map (ClinicalAttribute ::getAttrId )
68
- .toList ();
74
+ CategorizedClinicalDataCountFilter .Builder builder = CategorizedClinicalDataCountFilter .getBuilder ();
75
+
76
+ if (studyViewFilter .getClinicalDataFilters () != null ) {
77
+ List <String > patientCategoricalAttributes = clinicalAttributesMap .get (ClinicalAttributeDataSource .PATIENT )
78
+ .stream ().filter (ca -> ca .getDatatype ().equals ("STRING" ))
79
+ .map (ClinicalAttribute ::getAttrId )
80
+ .toList ();
69
81
70
- List <String > patientNumericalAttributes = clinicalAttributesMap .get (ClinicalAttributeDataSource .PATIENT )
71
- .stream ().filter (ca -> ca .getDatatype ().equals ("NUMBER" ))
72
- .map (ClinicalAttribute ::getAttrId )
73
- .toList ();
82
+ List <String > patientNumericalAttributes = clinicalAttributesMap .get (ClinicalAttributeDataSource .PATIENT )
83
+ .stream ().filter (ca -> ca .getDatatype ().equals ("NUMBER" ))
84
+ .map (ClinicalAttribute ::getAttrId )
85
+ .toList ();
74
86
75
- List <String > sampleCategoricalAttributes = clinicalAttributesMap .get (ClinicalAttributeDataSource .SAMPLE )
76
- .stream ().filter (ca -> ca .getDatatype ().equals ("STRING" ))
77
- .map (ClinicalAttribute ::getAttrId )
78
- .toList ();
87
+ List <String > sampleCategoricalAttributes = clinicalAttributesMap .get (ClinicalAttributeDataSource .SAMPLE )
88
+ .stream ().filter (ca -> ca .getDatatype ().equals ("STRING" ))
89
+ .map (ClinicalAttribute ::getAttrId )
90
+ .toList ();
79
91
80
- List <String > sampleNumericalAttributes = clinicalAttributesMap .get (ClinicalAttributeDataSource .SAMPLE )
81
- .stream ().filter (ca -> ca .getDatatype ().equals ("NUMBER" ))
82
- .map (ClinicalAttribute ::getAttrId )
83
- .toList ();
92
+ List <String > sampleNumericalAttributes = clinicalAttributesMap .get (ClinicalAttributeDataSource .SAMPLE )
93
+ .stream ().filter (ca -> ca .getDatatype ().equals ("NUMBER" ))
94
+ .map (ClinicalAttribute ::getAttrId )
95
+ .toList ();
96
+
97
+ builder .setPatientCategoricalClinicalDataFilters (studyViewFilter .getClinicalDataFilters ()
98
+ .stream ().filter (clinicalDataFilter -> patientCategoricalAttributes .contains (clinicalDataFilter .getAttributeId ()))
99
+ .collect (Collectors .toList ()))
100
+ .setPatientNumericalClinicalDataFilters (studyViewFilter .getClinicalDataFilters ().stream ()
101
+ .filter (clinicalDataFilter -> patientNumericalAttributes .contains (clinicalDataFilter .getAttributeId ()))
102
+ .collect (Collectors .toList ()))
103
+ .setSampleCategoricalClinicalDataFilters (studyViewFilter .getClinicalDataFilters ().stream ()
104
+ .filter (clinicalDataFilter -> sampleCategoricalAttributes .contains (clinicalDataFilter .getAttributeId ()))
105
+ .collect (Collectors .toList ()))
106
+ .setSampleNumericalClinicalDataFilters (studyViewFilter .getClinicalDataFilters ().stream ()
107
+ .filter (clinicalDataFilter -> sampleNumericalAttributes .contains (clinicalDataFilter .getAttributeId ()))
108
+ .collect (Collectors .toList ()));
109
+ }
110
+ if (studyViewFilter .getGenomicDataFilters () != null ) {
111
+ builder .setSampleNumericalGenomicDataFilters (studyViewFilter .getGenomicDataFilters ().stream ()
112
+ .filter (genomicDataFilter -> !genomicDataFilter .getProfileType ().equals ("cna" ) && !genomicDataFilter .getProfileType ().equals ("gistic" ))
113
+ .collect (Collectors .toList ()));
114
+ builder .setSampleCategoricalGenomicDataFilters (studyViewFilter .getGenomicDataFilters ().stream ()
115
+ .filter (genomicDataFilter -> genomicDataFilter .getProfileType ().equals ("cna" ) || genomicDataFilter .getProfileType ().equals ("gistic" ))
116
+ .collect (Collectors .toList ()));
117
+ }
118
+ if (studyViewFilter .getGenericAssayDataFilters () != null ) {
119
+ // TODO: Support patient level profiles and data filtering
120
+ List <String > sampleCategoricalProfileTypes = genericAssayProfilesMap .get (ClinicalAttributeDataSource .SAMPLE )
121
+ .stream ().filter (profile -> profile .getDatatype ().equals ("CATEGORICAL" ) || profile .getDatatype ().equals ("BINARY" ))
122
+ .map (profile -> profile .getStableId ().replace (profile .getCancerStudyIdentifier () + "_" , "" ))
123
+ .toList ();
84
124
85
- return CategorizedClinicalDataCountFilter .getBuilder ()
86
- .setPatientCategoricalClinicalDataFilters (studyViewFilter .getClinicalDataFilters ()
87
- .stream ().filter (clinicalDataFilter -> patientCategoricalAttributes .contains (clinicalDataFilter .getAttributeId ()))
88
- .toList ())
89
- .setPatientNumericalClinicalDataFilters (studyViewFilter .getClinicalDataFilters ().stream ()
90
- .filter (clinicalDataFilter -> patientNumericalAttributes .contains (clinicalDataFilter .getAttributeId ()))
91
- .toList ())
92
- .setSampleCategoricalClinicalDataFilters (studyViewFilter .getClinicalDataFilters ().stream ()
93
- .filter (clinicalDataFilter -> sampleCategoricalAttributes .contains (clinicalDataFilter .getAttributeId ()))
94
- .toList ())
95
- .setSampleNumericalClinicalDataFilters (studyViewFilter .getClinicalDataFilters ().stream ()
96
- .filter (clinicalDataFilter -> sampleNumericalAttributes .contains (clinicalDataFilter .getAttributeId ()))
97
- .toList ())
98
- .build ();
125
+ List <String > sampleNumericalProfileTypes = genericAssayProfilesMap .get (ClinicalAttributeDataSource .SAMPLE )
126
+ .stream ().filter (profile -> profile .getDatatype ().equals ("LIMIT-VALUE" ))
127
+ .map (profile -> profile .getStableId ().replace (profile .getCancerStudyIdentifier () + "_" , "" ))
128
+ .toList ();
129
+ builder .setSampleNumericalGenericAssayDataFilters (studyViewFilter .getGenericAssayDataFilters ().stream ()
130
+ .filter (genericAssayDataFilter -> sampleNumericalProfileTypes .contains (genericAssayDataFilter .getProfileType ()))
131
+ .collect (Collectors .toList ()));
132
+ builder .setSampleCategoricalGenericAssayDataFilters (studyViewFilter .getGenericAssayDataFilters ().stream ()
133
+ .filter (genericAssayDataFilter -> sampleCategoricalProfileTypes .contains (genericAssayDataFilter .getProfileType ()))
134
+ .collect (Collectors .toList ()));
135
+ }
136
+ return builder .build ();
99
137
}
100
138
101
139
public boolean shouldApplyPatientIdFilters () {
0 commit comments