001package org.hl7.fhir.convertors.conv10_40.resources10_40;
002
003import java.util.ArrayList;
004import java.util.List;
005import java.util.Objects;
006
007import org.hl7.fhir.convertors.SourceElementComponentWrapper;
008import org.hl7.fhir.convertors.context.ConversionContext10_40;
009import org.hl7.fhir.convertors.conv10_40.VersionConvertor_10_40;
010import org.hl7.fhir.convertors.conv10_40.datatypes10_40.complextypes10_40.CodeableConcept10_40;
011import org.hl7.fhir.convertors.conv10_40.datatypes10_40.complextypes10_40.ContactPoint10_40;
012import org.hl7.fhir.convertors.conv10_40.datatypes10_40.complextypes10_40.Identifier10_40;
013import org.hl7.fhir.convertors.conv10_40.datatypes10_40.primitivetypes10_40.Boolean10_40;
014import org.hl7.fhir.convertors.conv10_40.datatypes10_40.primitivetypes10_40.Code10_40;
015import org.hl7.fhir.convertors.conv10_40.datatypes10_40.primitivetypes10_40.DateTime10_40;
016import org.hl7.fhir.convertors.conv10_40.datatypes10_40.primitivetypes10_40.String10_40;
017import org.hl7.fhir.convertors.conv10_40.datatypes10_40.primitivetypes10_40.Uri10_40;
018import org.hl7.fhir.dstu2.model.Enumeration;
019import org.hl7.fhir.dstu2.model.Enumerations;
020import org.hl7.fhir.exceptions.FHIRException;
021import org.hl7.fhir.r4.model.CanonicalType;
022import org.hl7.fhir.r4.model.ConceptMap;
023import org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent;
024import org.hl7.fhir.r4.model.Type;
025
026public class ConceptMap10_40 {
027
028  public static org.hl7.fhir.r4.model.ConceptMap convertConceptMap(org.hl7.fhir.dstu2.model.ConceptMap src) throws FHIRException {
029    if (src == null || src.isEmpty())
030      return null;
031    org.hl7.fhir.r4.model.ConceptMap tgt = new org.hl7.fhir.r4.model.ConceptMap();
032    ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyDomainResource(src, tgt);
033    if (src.hasUrlElement())
034      tgt.setUrlElement(Uri10_40.convertUri(src.getUrlElement()));
035    if (src.hasIdentifier())
036      tgt.setIdentifier(Identifier10_40.convertIdentifier(src.getIdentifier()));
037    if (src.hasVersionElement())
038      tgt.setVersionElement(String10_40.convertString(src.getVersionElement()));
039    if (src.hasNameElement())
040      tgt.setNameElement(String10_40.convertString(src.getNameElement()));
041    if (src.hasStatus())
042      tgt.setStatusElement(Enumerations10_40.convertConformanceResourceStatus(src.getStatusElement()));
043    if (src.hasExperimental())
044      tgt.setExperimentalElement(Boolean10_40.convertBoolean(src.getExperimentalElement()));
045    if (src.hasPublisherElement())
046      tgt.setPublisherElement(String10_40.convertString(src.getPublisherElement()));
047    for (org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent t : src.getContact())
048      tgt.addContact(convertConceptMapContactComponent(t));
049    if (src.hasDate())
050      tgt.setDateElement(DateTime10_40.convertDateTime(src.getDateElement()));
051    if (src.hasDescription())
052      tgt.setDescription(src.getDescription());
053    for (org.hl7.fhir.dstu2.model.CodeableConcept t : src.getUseContext())
054      if (VersionConvertor_10_40.isJurisdiction(t))
055        tgt.addJurisdiction(CodeableConcept10_40.convertCodeableConcept(t));
056      else
057        tgt.addUseContext(CodeableConcept10_40.convertCodeableConceptToUsageContext(t));
058    if (src.hasRequirements())
059      tgt.setPurpose(src.getRequirements());
060    if (src.hasCopyright())
061      tgt.setCopyright(src.getCopyright());
062    if (src.hasSource()) {
063      org.hl7.fhir.r4.model.Type r = ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().convertType(src.getSource());
064      tgt.setSource(r instanceof org.hl7.fhir.r4.model.Reference ? new CanonicalType(((org.hl7.fhir.r4.model.Reference) r).getReference()) : r);
065    }
066    if (src.hasTarget()) {
067      Type r = ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().convertType(src.getTarget());
068      tgt.setTarget(r instanceof org.hl7.fhir.r4.model.Reference ? new CanonicalType(((org.hl7.fhir.r4.model.Reference) r).getReference()) : r);
069    }
070    for (org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent t : src.getElement()) {
071      List<SourceElementComponentWrapper<ConceptMap.SourceElementComponent>> ws = convertSourceElementComponent(t);
072      for (SourceElementComponentWrapper<ConceptMap.SourceElementComponent> w : ws)
073        getGroup(tgt, w.getSource(), w.getTarget()).addElement(w.getComp());
074    }
075    return tgt;
076  }
077
078  public static org.hl7.fhir.dstu2.model.ConceptMap convertConceptMap(org.hl7.fhir.r4.model.ConceptMap src) throws FHIRException {
079    if (src == null || src.isEmpty())
080      return null;
081    org.hl7.fhir.dstu2.model.ConceptMap tgt = new org.hl7.fhir.dstu2.model.ConceptMap();
082    ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyDomainResource(src, tgt);
083    if (src.hasUrlElement())
084      tgt.setUrlElement(Uri10_40.convertUri(src.getUrlElement()));
085    if (src.hasIdentifier())
086      tgt.setIdentifier(Identifier10_40.convertIdentifier(src.getIdentifier()));
087    if (src.hasVersionElement())
088      tgt.setVersionElement(String10_40.convertString(src.getVersionElement()));
089    if (src.hasNameElement())
090      tgt.setNameElement(String10_40.convertString(src.getNameElement()));
091    if (src.hasStatus())
092      tgt.setStatusElement(Enumerations10_40.convertConformanceResourceStatus(src.getStatusElement()));
093    if (src.hasExperimental())
094      tgt.setExperimentalElement(Boolean10_40.convertBoolean(src.getExperimentalElement()));
095    if (src.hasPublisherElement())
096      tgt.setPublisherElement(String10_40.convertString(src.getPublisherElement()));
097    for (org.hl7.fhir.r4.model.ContactDetail t : src.getContact()) tgt.addContact(convertConceptMapContactComponent(t));
098    if (src.hasDate())
099      tgt.setDateElement(DateTime10_40.convertDateTime(src.getDateElement()));
100    if (src.hasDescription())
101      tgt.setDescription(src.getDescription());
102    for (org.hl7.fhir.r4.model.UsageContext t : src.getUseContext())
103      if (t.hasValueCodeableConcept())
104        tgt.addUseContext(CodeableConcept10_40.convertCodeableConcept(t.getValueCodeableConcept()));
105    for (org.hl7.fhir.r4.model.CodeableConcept t : src.getJurisdiction())
106      tgt.addUseContext(CodeableConcept10_40.convertCodeableConcept(t));
107    if (src.hasPurpose())
108      tgt.setRequirements(src.getPurpose());
109    if (src.hasCopyright())
110      tgt.setCopyright(src.getCopyright());
111    if (src.hasSource())
112      tgt.setSource(ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().convertType(src.getSource()));
113    if (src.hasTarget())
114      tgt.setTarget(ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().convertType(src.getTarget()));
115    for (org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent g : src.getGroup())
116      for (org.hl7.fhir.r4.model.ConceptMap.SourceElementComponent t : g.getElement())
117        tgt.addElement(convertSourceElementComponent(t, g));
118    return tgt;
119  }
120
121  public static org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent convertConceptMapContactComponent(org.hl7.fhir.r4.model.ContactDetail src) throws FHIRException {
122    if (src == null || src.isEmpty())
123      return null;
124    org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent();
125    ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyElement(src, tgt);
126    if (src.hasNameElement())
127      tgt.setNameElement(String10_40.convertString(src.getNameElement()));
128    for (org.hl7.fhir.r4.model.ContactPoint t : src.getTelecom())
129      tgt.addTelecom(ContactPoint10_40.convertContactPoint(t));
130    return tgt;
131  }
132
133  public static org.hl7.fhir.r4.model.ContactDetail convertConceptMapContactComponent(org.hl7.fhir.dstu2.model.ConceptMap.ConceptMapContactComponent src) throws FHIRException {
134    if (src == null || src.isEmpty())
135      return null;
136    org.hl7.fhir.r4.model.ContactDetail tgt = new org.hl7.fhir.r4.model.ContactDetail();
137    ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyElement(src, tgt);
138    if (src.hasNameElement())
139      tgt.setNameElement(String10_40.convertString(src.getNameElement()));
140    for (org.hl7.fhir.dstu2.model.ContactPoint t : src.getTelecom())
141      tgt.addTelecom(ContactPoint10_40.convertContactPoint(t));
142    return tgt;
143  }
144
145  static public org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence> convertConceptMapEquivalence(org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence> src) throws FHIRException {
146      if (src == null || src.isEmpty())
147          return null;
148      Enumeration<Enumerations.ConceptMapEquivalence> tgt = new Enumeration<>(new Enumerations.ConceptMapEquivalenceEnumFactory());
149      ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyElement(src, tgt);
150      if (src.getValue() == null) {
151          tgt.setValue(null);
152      } else {
153          switch (src.getValue()) {
154              case EQUIVALENT:
155                  tgt.setValue(Enumerations.ConceptMapEquivalence.EQUIVALENT);
156                  break;
157              case EQUAL:
158                  tgt.setValue(Enumerations.ConceptMapEquivalence.EQUAL);
159                  break;
160              case WIDER:
161                  tgt.setValue(Enumerations.ConceptMapEquivalence.WIDER);
162                  break;
163              case SUBSUMES:
164                  tgt.setValue(Enumerations.ConceptMapEquivalence.SUBSUMES);
165                  break;
166              case NARROWER:
167                  tgt.setValue(Enumerations.ConceptMapEquivalence.NARROWER);
168                  break;
169              case SPECIALIZES:
170                  tgt.setValue(Enumerations.ConceptMapEquivalence.SPECIALIZES);
171                  break;
172              case INEXACT:
173                  tgt.setValue(Enumerations.ConceptMapEquivalence.INEXACT);
174                  break;
175              case UNMATCHED:
176                  tgt.setValue(Enumerations.ConceptMapEquivalence.UNMATCHED);
177                  break;
178              case DISJOINT:
179                  tgt.setValue(Enumerations.ConceptMapEquivalence.DISJOINT);
180                  break;
181              default:
182                  tgt.setValue(Enumerations.ConceptMapEquivalence.NULL);
183                  break;
184          }
185      }
186      return tgt;
187  }
188
189  static public org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence> convertConceptMapEquivalence(org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Enumerations.ConceptMapEquivalence> src) throws FHIRException {
190      if (src == null || src.isEmpty())
191          return null;
192      org.hl7.fhir.r4.model.Enumeration<org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence> tgt = new org.hl7.fhir.r4.model.Enumeration<>(new org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalenceEnumFactory());
193      ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyElement(src, tgt);
194      if (src.getValue() == null) {
195          tgt.setValue(null);
196      } else {
197          switch (src.getValue()) {
198              case EQUIVALENT:
199                  tgt.setValue(org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.EQUIVALENT);
200                  break;
201              case EQUAL:
202                  tgt.setValue(org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.EQUAL);
203                  break;
204              case WIDER:
205                  tgt.setValue(org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.WIDER);
206                  break;
207              case SUBSUMES:
208                  tgt.setValue(org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.SUBSUMES);
209                  break;
210              case NARROWER:
211                  tgt.setValue(org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.NARROWER);
212                  break;
213              case SPECIALIZES:
214                  tgt.setValue(org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.SPECIALIZES);
215                  break;
216              case INEXACT:
217                  tgt.setValue(org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.INEXACT);
218                  break;
219              case UNMATCHED:
220                  tgt.setValue(org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.UNMATCHED);
221                  break;
222              case DISJOINT:
223                  tgt.setValue(org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.DISJOINT);
224                  break;
225              default:
226                  tgt.setValue(org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence.NULL);
227                  break;
228          }
229      }
230      return tgt;
231  }
232
233  public static org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent convertOtherElementComponent(org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent src) throws FHIRException {
234    if (src == null || src.isEmpty())
235      return null;
236    org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent tgt = new org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent();
237    ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyBackboneElement(src,tgt);
238    if (src.hasElementElement())
239      tgt.setPropertyElement(Uri10_40.convertUri(src.getElementElement()));
240    if (src.hasCodeSystem())
241      tgt.setSystem(src.getCodeSystem());
242    if (src.hasCodeElement())
243      tgt.setValueElement(String10_40.convertString(src.getCodeElement()));
244    return tgt;
245  }
246
247  public static org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent convertOtherElementComponent(org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent src) throws FHIRException {
248    if (src == null || src.isEmpty())
249      return null;
250    org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent();
251    ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyBackboneElement(src,tgt);
252    if (src.hasPropertyElement())
253      tgt.setElementElement(Uri10_40.convertUri(src.getPropertyElement()));
254    if (src.hasSystem())
255      tgt.setCodeSystem(src.getSystem());
256    if (src.hasValueElement())
257      tgt.setCodeElement(String10_40.convertString(src.getValueElement()));
258    return tgt;
259  }
260
261  public static List<SourceElementComponentWrapper<ConceptMap.SourceElementComponent>> convertSourceElementComponent(org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent src) throws FHIRException {
262    List<SourceElementComponentWrapper<ConceptMap.SourceElementComponent>> res = new ArrayList<>();
263    if (src == null || src.isEmpty())
264      return res;
265    for (org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent t : src.getTarget()) {
266      org.hl7.fhir.r4.model.ConceptMap.SourceElementComponent tgt = new org.hl7.fhir.r4.model.ConceptMap.SourceElementComponent();
267      ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyBackboneElement(src,tgt);
268      tgt.setCode(src.getCode());
269      tgt.addTarget(convertTargetElementComponent(t));
270      res.add(new SourceElementComponentWrapper<>(tgt, src.getCodeSystem(), t.getCodeSystem()));
271    }
272    return res;
273  }
274
275  public static org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent convertSourceElementComponent(org.hl7.fhir.r4.model.ConceptMap.SourceElementComponent src, org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent g) throws FHIRException {
276    if (src == null || src.isEmpty())
277      return null;
278    org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.SourceElementComponent();
279    ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyBackboneElement(src,tgt);
280    tgt.setCodeSystem(g.getSource());
281    if (src.hasCodeElement())
282      tgt.setCodeElement(Code10_40.convertCode(src.getCodeElement()));
283    for (org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent t : src.getTarget())
284      tgt.addTarget(convertTargetElementComponent(t, g));
285    return tgt;
286  }
287
288  public static org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent convertTargetElementComponent(org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent src, org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent g) throws FHIRException {
289    if (src == null || src.isEmpty())
290      return null;
291    org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent tgt = new org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent();
292    ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyBackboneElement(src,tgt);
293    tgt.setCodeSystem(g.getTarget());
294    if (src.hasCodeElement())
295      tgt.setCodeElement(Code10_40.convertCode(src.getCodeElement()));
296    if (src.hasEquivalence())
297      tgt.setEquivalenceElement(convertConceptMapEquivalence(src.getEquivalenceElement()));
298    if (src.hasCommentElement())
299      tgt.setCommentsElement(String10_40.convertString(src.getCommentElement()));
300    for (org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent t : src.getDependsOn())
301      tgt.addDependsOn(convertOtherElementComponent(t));
302    for (org.hl7.fhir.r4.model.ConceptMap.OtherElementComponent t : src.getProduct())
303      tgt.addProduct(convertOtherElementComponent(t));
304    return tgt;
305  }
306
307  public static org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent convertTargetElementComponent(org.hl7.fhir.dstu2.model.ConceptMap.TargetElementComponent src) throws FHIRException {
308    if (src == null || src.isEmpty())
309      return null;
310    org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent tgt = new org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent();
311    ConversionContext10_40.INSTANCE.getVersionConvertor_10_40().copyBackboneElement(src,tgt);
312    if (src.hasCodeElement())
313      tgt.setCodeElement(Code10_40.convertCode(src.getCodeElement()));
314    if (src.hasEquivalence())
315      tgt.setEquivalenceElement(convertConceptMapEquivalence(src.getEquivalenceElement()));
316    if (src.hasCommentsElement())
317      tgt.setCommentElement(String10_40.convertString(src.getCommentsElement()));
318    for (org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent t : src.getDependsOn())
319      tgt.addDependsOn(convertOtherElementComponent(t));
320    for (org.hl7.fhir.dstu2.model.ConceptMap.OtherElementComponent t : src.getProduct())
321      tgt.addProduct(convertOtherElementComponent(t));
322    return tgt;
323  }
324
325  static public ConceptMapGroupComponent getGroup(ConceptMap map, String srcs, String tgts) {
326    for (ConceptMapGroupComponent grp : map.getGroup()) {
327      if (Objects.equals(grp.getSource(), srcs) && Objects.equals(grp.getTarget(), tgts))
328        return grp;
329    }
330    ConceptMapGroupComponent grp = map.addGroup();
331    grp.setSource(srcs);
332    grp.setTarget(tgts);
333    return grp;
334  }
335}