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