1515
1616package de .symeda .sormas .api .exposure ;
1717
18+ import java .util .Arrays ;
19+ import java .util .Collection ;
20+ import java .util .Collections ;
21+ import java .util .EnumSet ;
22+ import java .util .List ;
23+ import java .util .Set ;
24+ import java .util .stream .Collectors ;
25+
1826import de .symeda .sormas .api .Disease ;
1927import de .symeda .sormas .api .i18n .I18nProperties ;
2028import de .symeda .sormas .api .utils .Diseases ;
@@ -24,63 +32,94 @@ public enum ExposureType {
2432 @ Diseases (value = {
2533 Disease .CRYPTOSPORIDIOSIS ,
2634 Disease .GIARDIASIS }, hide = true )
27- WORK ,
35+ WORK ( true ) ,
2836 @ Diseases ({
2937 Disease .CRYPTOSPORIDIOSIS ,
3038 Disease .GIARDIASIS })
31- TRAVEL ,
39+ TRAVEL ( true ) ,
3240 @ Diseases (value = {
3341 Disease .CRYPTOSPORIDIOSIS ,
3442 Disease .GIARDIASIS }, hide = true )
35- SPORT ,
43+ SPORT ( false ) ,
3644 @ Diseases (value = {
3745 Disease .CRYPTOSPORIDIOSIS ,
3846 Disease .GIARDIASIS }, hide = true )
39- VISIT ,
47+ VISIT ( false ) ,
4048 @ Diseases (value = {
4149 Disease .CRYPTOSPORIDIOSIS ,
4250 Disease .GIARDIASIS }, hide = true )
43- GATHERING ,
51+ GATHERING ( true ) ,
4452 @ Diseases (value = {
4553 Disease .CRYPTOSPORIDIOSIS ,
4654 Disease .GIARDIASIS }, hide = true )
47- HABITATION ,
55+ HABITATION ( false ) ,
4856 @ Diseases (value = {
4957 Disease .CRYPTOSPORIDIOSIS ,
5058 Disease .GIARDIASIS }, hide = true )
51- PERSONAL_SERVICES ,
59+ PERSONAL_SERVICES ( false ) ,
5260 @ Diseases (value = {
5361 Disease .RESPIRATORY_SYNCYTIAL_VIRUS })
54- CHILDCARE_FACILITY ,
62+ CHILDCARE_FACILITY ( false ) ,
5563 @ Diseases (value = {
5664 Disease .CORONAVIRUS ,
5765 Disease .GIARDIASIS ,
5866 Disease .CRYPTOSPORIDIOSIS }, hide = true )
59- BURIAL ,
67+ BURIAL ( false ) ,
6068 @ Diseases (value = {
6169 Disease .CORONAVIRUS }, hide = true )
62- ANIMAL_CONTACT ,
70+ ANIMAL_CONTACT ( false ) ,
6371 @ Diseases ({
6472 Disease .GIARDIASIS ,
6573 Disease .CRYPTOSPORIDIOSIS })
66- RECREATIONAL_WATER ,
74+ RECREATIONAL_WATER ( false , ExposureCategory . WATER_BORNE ) ,
6775 @ Diseases ({
6876 Disease .GIARDIASIS ,
6977 Disease .CRYPTOSPORIDIOSIS })
70- FOOD ,
78+ FOOD ( false , ExposureCategory . FOOD_BORNE ) ,
7179 @ Diseases ({
7280 Disease .GIARDIASIS ,
7381 Disease .CRYPTOSPORIDIOSIS })
74- SEXUAL_CONTACT ,
82+ SEXUAL_CONTACT ( false , ExposureCategory . DIRECT_CONTACT ) ,
7583 @ Diseases ({
7684 Disease .CRYPTOSPORIDIOSIS })
77- SYMPTOMATIC_CONTACT ,
85+ SYMPTOMATIC_CONTACT ( false , ExposureCategory . DIRECT_CONTACT ) ,
7886 @ Diseases ({
7987 Disease .CRYPTOSPORIDIOSIS ,
8088 Disease .GIARDIASIS })
81- FLOOD_EXPOSURE ,
82- OTHER ,
83- UNKNOWN ;
89+ FLOOD_EXPOSURE (false , ExposureCategory .WATER_BORNE ),
90+ OTHER (true ),
91+ UNKNOWN (true );
92+
93+ private final boolean defaultType ;
94+ private final Set <ExposureCategory > categories ;
95+
96+ ExposureType (boolean defaultType , ExposureCategory ... categories ) {
97+ this .defaultType = defaultType ;
98+ this .categories = categories .length == 0 ? Collections .emptySet () : Collections .unmodifiableSet (EnumSet .copyOf (Arrays .asList (categories )));
99+ }
100+
101+ public boolean isDefaultType () {
102+ return defaultType ;
103+ }
104+
105+ public Set <ExposureCategory > getCategories () {
106+ return categories ;
107+ }
108+
109+ public static List <ExposureType > getValues (Collection <ExposureCategory > diseaseCategories ) {
110+ boolean hasConfig = diseaseCategories != null && !diseaseCategories .isEmpty ();
111+ Set <ExposureCategory > configured = hasConfig ? EnumSet .copyOf (diseaseCategories ) : EnumSet .noneOf (ExposureCategory .class );
112+
113+ return Arrays .stream (values ()).filter (type -> {
114+ if (type .isDefaultType ()) {
115+ return true ;
116+ }
117+ if (!hasConfig ) {
118+ return false ;
119+ }
120+ return type .getCategories ().stream ().anyMatch (configured ::contains );
121+ }).collect (Collectors .toList ());
122+ }
84123
85124 @ Override
86125 public String toString () {
0 commit comments