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