001/*-
002 * #%L
003 * Smile CDR - CDR
004 * %%
005 * Copyright (C) 2016 - 2025 Smile CDR, Inc.
006 * %%
007 * All rights reserved.
008 * #L%
009 */
010package ca.cdr.api.fhirgw.json;
011
012import ca.cdr.api.model.json.IModelJson;
013import ca.uhn.fhir.model.api.annotation.ExampleSupplier;
014import com.fasterxml.jackson.annotation.JsonProperty;
015import io.swagger.v3.oas.annotations.media.Schema;
016
017import java.util.ArrayList;
018import java.util.List;
019import java.util.function.Supplier;
020
021@Schema(
022                name = "GatewayConfiguration",
023                description =
024                                "This is the outer document element containing configuration for the Smile CDR FHIR Gateway module.")
025@ExampleSupplier(GatewayConfigurationJson.ExampleSupplier.class)
026public class GatewayConfigurationJson implements IModelJson {
027
028        @JsonProperty("targets")
029        private List<GatewayTargetJson> myTargets;
030
031        @JsonProperty("searchRoutes")
032        private List<GatewaySearchRouteJson> mySearchRoutes;
033
034        @JsonProperty("readRoutes")
035        private List<GatewayReadRouteJson> myReadRoutes;
036
037        @JsonProperty("operationRoutes")
038        private List<GatewayOperationRouteJson> myOperationRoutes;
039
040        @JsonProperty("updateRoutes")
041        private List<GatewayUpdateRouteJson> myUpdateRoutes;
042
043        @JsonProperty("createRoutes")
044        private List<GatewayCreateRouteJson> myCreateRoutes;
045
046        @JsonProperty("deleteRoutes")
047        private List<GatewayDeleteRouteJson> myDeleteRoutes;
048
049        @JsonProperty("transactionRoutes")
050        private List<GatewayTransactionRouteJson> myTransactionRoutes;
051
052        @JsonProperty("historyRoutes")
053        private List<GatewayHistoryRouteJson> myHistoryRoutes;
054
055        public List<GatewayTargetJson> getTargets() {
056                if (myTargets == null) {
057                        myTargets = new ArrayList<>();
058                }
059                return myTargets;
060        }
061
062        public void setTargets(List<GatewayTargetJson> theTargets) {
063                myTargets = theTargets;
064        }
065
066        public List<GatewayReadRouteJson> getReadRoutes() {
067                if (myReadRoutes == null) {
068                        myReadRoutes = new ArrayList<>();
069                }
070                return myReadRoutes;
071        }
072
073        public void setReadRoutes(List<GatewayReadRouteJson> theReadRoutes) {
074                myReadRoutes = theReadRoutes;
075        }
076
077        public List<GatewaySearchRouteJson> getSearchRoutes() {
078                if (mySearchRoutes == null) {
079                        mySearchRoutes = new ArrayList<>();
080                }
081                return mySearchRoutes;
082        }
083
084        public void setSearchRoutes(List<GatewaySearchRouteJson> theSearchRoutes) {
085                mySearchRoutes = theSearchRoutes;
086        }
087
088        public GatewayTargetJson addTarget() {
089                GatewayTargetJson retVal = new GatewayTargetJson();
090                getTargets().add(retVal);
091                return retVal;
092        }
093
094        public List<GatewayOperationRouteJson> getOperationRoutes() {
095                if (myOperationRoutes == null) {
096                        myOperationRoutes = new ArrayList<>();
097                }
098                return myOperationRoutes;
099        }
100
101        public void setOperationRoutes(List<GatewayOperationRouteJson> theOperationRoutes) {
102                myOperationRoutes = theOperationRoutes;
103        }
104
105        public List<GatewayUpdateRouteJson> getUpdateRoutes() {
106                if (myUpdateRoutes == null) {
107                        myUpdateRoutes = new ArrayList<>();
108                }
109                return myUpdateRoutes;
110        }
111
112        public void setUpdateRoutes(List<GatewayUpdateRouteJson> theUpdateRoutes) {
113                myUpdateRoutes = theUpdateRoutes;
114        }
115
116        public List<GatewayCreateRouteJson> getCreateRoutes() {
117                if (myCreateRoutes == null) {
118                        myCreateRoutes = new ArrayList<>();
119                }
120                return myCreateRoutes;
121        }
122
123        public void setCreateRoutes(List<GatewayCreateRouteJson> theCreateRoutes) {
124                myCreateRoutes = theCreateRoutes;
125        }
126
127        public List<GatewayDeleteRouteJson> getDeleteRoutes() {
128                if (myDeleteRoutes == null) {
129                        myDeleteRoutes = new ArrayList<>();
130                }
131                return myDeleteRoutes;
132        }
133
134        public void setDeleteRoutes(List<GatewayDeleteRouteJson> theDeleteRoutes) {
135                myDeleteRoutes = theDeleteRoutes;
136        }
137
138        public GatewayReadRouteJson addReadRoute() {
139                GatewayReadRouteJson retVal = new GatewayReadRouteJson();
140                getReadRoutes().add(retVal);
141                return retVal;
142        }
143
144        public GatewaySearchRouteJson addSearchRoute() {
145                GatewaySearchRouteJson retVal = new GatewaySearchRouteJson();
146                getSearchRoutes().add(retVal);
147                return retVal;
148        }
149
150        public GatewayOperationRouteJson addOperationRoute() {
151                GatewayOperationRouteJson retVal = new GatewayOperationRouteJson();
152                getOperationRoutes().add(retVal);
153                return retVal;
154        }
155
156        public GatewayUpdateRouteJson addUpdateRoute() {
157                GatewayUpdateRouteJson retval = new GatewayUpdateRouteJson();
158                getUpdateRoutes().add(retval);
159                return retval;
160        }
161
162        public GatewayCreateRouteJson addCreateRoute() {
163                GatewayCreateRouteJson retval = new GatewayCreateRouteJson();
164                getCreateRoutes().add(retval);
165                return retval;
166        }
167
168        public GatewayDeleteRouteJson addDeleteRoute() {
169                GatewayDeleteRouteJson retval = new GatewayDeleteRouteJson();
170                getDeleteRoutes().add(retval);
171                return retval;
172        }
173
174        public List<GatewayTransactionRouteJson> getTransactionRoutes() {
175                if (myTransactionRoutes == null) {
176                        myTransactionRoutes = new ArrayList<>();
177                }
178                return myTransactionRoutes;
179        }
180
181        public GatewayTransactionRouteJson addTransactionRoute() {
182                GatewayTransactionRouteJson retval = new GatewayTransactionRouteJson();
183                getTransactionRoutes().add(retval);
184                return retval;
185        }
186
187        public void setTransactionRoutes(List<GatewayTransactionRouteJson> theTransactionRoutes) {
188                myTransactionRoutes = theTransactionRoutes;
189        }
190
191        public List<GatewayHistoryRouteJson> getHistoryRoutes() {
192                if (myHistoryRoutes == null) {
193                        myHistoryRoutes = new ArrayList<>();
194                }
195                return myHistoryRoutes;
196        }
197
198        public void setHistoryRoutes(List<GatewayHistoryRouteJson> theHistoryRoutes) {
199                myHistoryRoutes = theHistoryRoutes;
200        }
201
202        public static class ExampleSupplier implements Supplier<GatewayConfigurationJson> {
203                @Override
204                public GatewayConfigurationJson get() {
205                        GatewayConfigurationJson retVal = new GatewayConfigurationJson();
206                        retVal.addTarget().setId("target1").setResourceIdPrefix("TGT1-").setBaseUrl("http://fhir1.example.com/api");
207                        retVal.addTarget().setId("target2").setResourceIdPrefix("TGT2-").setBaseUrl("http://fhir2.example.com/api");
208                        retVal.addSearchRoute()
209                                        .setId("route1")
210                                        .setParallel(true)
211                                        .addResourceType("Patient")
212                                        .addResourceType("Observation")
213                                        .addResourceType("Encounter")
214                                        .addTarget(new GatewayRouteTargetJson().setTargetId("target1"))
215                                        .addTarget(new GatewayRouteTargetJson().setTargetId("target2"));
216
217                        return retVal;
218                }
219        }
220}