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