001package org.hl7.fhir.convertors.conv14_50.resources14_50;
002
003import org.hl7.fhir.convertors.VersionConvertorConstants;
004import org.hl7.fhir.convertors.context.ConversionContext14_50;
005import org.hl7.fhir.convertors.conv14_50.datatypes14_50.Reference14_50;
006import org.hl7.fhir.convertors.conv14_50.datatypes14_50.complextypes14_50.CodeableConcept14_50;
007import org.hl7.fhir.convertors.conv14_50.datatypes14_50.complextypes14_50.ContactPoint14_50;
008import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.Boolean14_50;
009import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.Code14_50;
010import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.DateTime14_50;
011import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.Integer14_50;
012import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.String14_50;
013import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.Uri14_50;
014import org.hl7.fhir.dstu2016may.model.OperationDefinition;
015import org.hl7.fhir.exceptions.FHIRException;
016import org.hl7.fhir.r5.model.DataType;
017import org.hl7.fhir.r5.model.Enumeration;
018import org.hl7.fhir.r5.model.Enumerations;
019import org.hl7.fhir.r5.model.Enumerations.VersionIndependentResourceTypesAll;
020import org.hl7.fhir.r5.model.Enumerations.VersionIndependentResourceTypesAllEnumFactory;
021
022public class OperationDefinition14_50 {
023
024  public static org.hl7.fhir.dstu2016may.model.OperationDefinition convertOperationDefinition(org.hl7.fhir.r5.model.OperationDefinition src) throws FHIRException {
025    if (src == null || src.isEmpty())
026      return null;
027    org.hl7.fhir.dstu2016may.model.OperationDefinition tgt = new org.hl7.fhir.dstu2016may.model.OperationDefinition();
028    ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyDomainResource(src, tgt);
029    if (src.hasUrl())
030      tgt.setUrlElement(Uri14_50.convertUri(src.getUrlElement()));
031    if (src.hasVersion())
032      tgt.setVersionElement(String14_50.convertString(src.getVersionElement()));
033    if (src.hasNameElement())
034      tgt.setNameElement(String14_50.convertString(src.getNameElement()));
035    if (src.hasStatus())
036      tgt.setStatusElement(Enumerations14_50.convertConformanceResourceStatus(src.getStatusElement()));
037    if (src.hasKind())
038      tgt.setKindElement(convertOperationKind(src.getKindElement()));
039    if (src.hasExperimental())
040      tgt.setExperimentalElement(Boolean14_50.convertBoolean(src.getExperimentalElement()));
041    if (src.hasDate())
042      tgt.setDateElement(DateTime14_50.convertDateTime(src.getDateElement()));
043    if (src.hasPublisher())
044      tgt.setPublisherElement(String14_50.convertString(src.getPublisherElement()));
045    for (org.hl7.fhir.r5.model.ContactDetail t : src.getContact())
046      tgt.addContact(convertOperationDefinitionContactComponent(t));
047    if (src.hasDescription())
048      tgt.setDescription(src.getDescription());
049    for (org.hl7.fhir.r5.model.UsageContext t : src.getUseContext())
050      if (t.hasValueCodeableConcept())
051        tgt.addUseContext(CodeableConcept14_50.convertCodeableConcept(t.getValueCodeableConcept()));
052    for (org.hl7.fhir.r5.model.CodeableConcept t : src.getJurisdiction())
053      tgt.addUseContext(CodeableConcept14_50.convertCodeableConcept(t));
054    if (src.hasPurpose())
055      tgt.setRequirements(src.getPurpose());
056    if (src.hasAffectsState())
057      tgt.setIdempotent(!src.getAffectsState());
058    if (src.hasCodeElement())
059      tgt.setCodeElement(Code14_50.convertCode(src.getCodeElement()));
060    if (src.hasComment())
061      tgt.setComment(src.getComment());
062    if (src.hasBaseElement())
063      tgt.setBase(Reference14_50.convertCanonicalToReference(src.getBaseElement()));
064    if (src.hasSystemElement())
065      tgt.setSystemElement(Boolean14_50.convertBoolean(src.getSystemElement()));
066    if (src.getType())
067      for (Enumeration<VersionIndependentResourceTypesAll> t : src.getResource()) tgt.addType(t.getCode());
068    if (src.hasInstanceElement())
069      tgt.setInstanceElement(Boolean14_50.convertBoolean(src.getInstanceElement()));
070    for (org.hl7.fhir.r5.model.OperationDefinition.OperationDefinitionParameterComponent t : src.getParameter())
071      tgt.addParameter(convertOperationDefinitionParameterComponent(t));
072    return tgt;
073  }
074
075  public static org.hl7.fhir.r5.model.OperationDefinition convertOperationDefinition(org.hl7.fhir.dstu2016may.model.OperationDefinition src) throws FHIRException {
076    if (src == null || src.isEmpty())
077      return null;
078    org.hl7.fhir.r5.model.OperationDefinition tgt = new org.hl7.fhir.r5.model.OperationDefinition();
079    ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyDomainResource(src, tgt);
080    if (src.hasUrl())
081      tgt.setUrlElement(Uri14_50.convertUri(src.getUrlElement()));
082    if (src.hasVersion())
083      tgt.setVersionElement(String14_50.convertString(src.getVersionElement()));
084    if (src.hasNameElement())
085      tgt.setNameElement(String14_50.convertString(src.getNameElement()));
086    if (src.hasStatus())
087      tgt.setStatusElement(Enumerations14_50.convertConformanceResourceStatus(src.getStatusElement()));
088    if (src.hasKind())
089      tgt.setKindElement(convertOperationKind(src.getKindElement()));
090    if (src.hasExperimental())
091      tgt.setExperimentalElement(Boolean14_50.convertBoolean(src.getExperimentalElement()));
092    if (src.hasDate())
093      tgt.setDateElement(DateTime14_50.convertDateTime(src.getDateElement()));
094    if (src.hasPublisher())
095      tgt.setPublisherElement(String14_50.convertString(src.getPublisherElement()));
096    for (org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionContactComponent t : src.getContact())
097      tgt.addContact(convertOperationDefinitionContactComponent(t));
098    if (src.hasDescription())
099      tgt.setDescription(src.getDescription());
100    for (org.hl7.fhir.dstu2016may.model.CodeableConcept t : src.getUseContext())
101      if (CodeableConcept14_50.isJurisdiction(t))
102        tgt.addJurisdiction(CodeableConcept14_50.convertCodeableConcept(t));
103      else
104        tgt.addUseContext(CodeableConcept14_50.convertCodeableConceptToUsageContext(t));
105    if (src.hasRequirements())
106      tgt.setPurpose(src.getRequirements());
107    if (src.hasIdempotent())
108      tgt.setAffectsState(!src.getIdempotent());
109    if (src.hasCodeElement())
110      tgt.setCodeElement(Code14_50.convertCode(src.getCodeElement()));
111    if (src.hasComment())
112      tgt.setComment(src.getComment());
113    if (src.hasBase())
114      tgt.setBaseElement(Reference14_50.convertReferenceToCanonical(src.getBase()));
115    if (src.hasSystemElement())
116      tgt.setSystemElement(Boolean14_50.convertBoolean(src.getSystemElement()));
117    for (org.hl7.fhir.dstu2016may.model.CodeType t : src.getType()) tgt.getResource().add(new Enumeration<VersionIndependentResourceTypesAll>(new VersionIndependentResourceTypesAllEnumFactory(), Code14_50.convertCode(t)));
118    tgt.setType(tgt.hasResource());
119    if (src.hasInstanceElement())
120      tgt.setInstanceElement(Boolean14_50.convertBoolean(src.getInstanceElement()));
121    for (org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionParameterComponent t : src.getParameter())
122      tgt.addParameter(convertOperationDefinitionParameterComponent(t));
123    return tgt;
124  }
125
126  public static org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionContactComponent convertOperationDefinitionContactComponent(org.hl7.fhir.r5.model.ContactDetail src) throws FHIRException {
127    if (src == null || src.isEmpty())
128      return null;
129    org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionContactComponent tgt = new org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionContactComponent();
130    ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyElement(src, tgt);
131    if (src.hasName())
132      tgt.setNameElement(String14_50.convertString(src.getNameElement()));
133    for (org.hl7.fhir.r5.model.ContactPoint t : src.getTelecom())
134      tgt.addTelecom(ContactPoint14_50.convertContactPoint(t));
135    return tgt;
136  }
137
138  public static org.hl7.fhir.r5.model.ContactDetail convertOperationDefinitionContactComponent(org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionContactComponent src) throws FHIRException {
139    if (src == null || src.isEmpty())
140      return null;
141    org.hl7.fhir.r5.model.ContactDetail tgt = new org.hl7.fhir.r5.model.ContactDetail();
142    ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyElement(src, tgt);
143    if (src.hasName())
144      tgt.setNameElement(String14_50.convertString(src.getNameElement()));
145    for (org.hl7.fhir.dstu2016may.model.ContactPoint t : src.getTelecom())
146      tgt.addTelecom(ContactPoint14_50.convertContactPoint(t));
147    return tgt;
148  }
149
150  public static org.hl7.fhir.r5.model.OperationDefinition.OperationDefinitionParameterBindingComponent convertOperationDefinitionParameterBindingComponent(org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionParameterBindingComponent src) throws FHIRException {
151    if (src == null || src.isEmpty())
152      return null;
153    org.hl7.fhir.r5.model.OperationDefinition.OperationDefinitionParameterBindingComponent tgt = new org.hl7.fhir.r5.model.OperationDefinition.OperationDefinitionParameterBindingComponent();
154    ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyBackboneElement(src,tgt);
155    if (src.hasStrength())
156      tgt.setStrengthElement(Enumerations14_50.convertBindingStrength(src.getStrengthElement()));
157    DataType t = ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().convertType(src.getValueSet());
158    if (t != null) {
159      if (t instanceof org.hl7.fhir.r5.model.Reference)
160        tgt.setValueSet(((org.hl7.fhir.r5.model.Reference) t).getReference());
161      else
162        tgt.setValueSet(t.primitiveValue());
163      tgt.setValueSet(VersionConvertorConstants.refToVS(tgt.getValueSet()));
164    }
165    return tgt;
166  }
167
168  public static org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionParameterBindingComponent convertOperationDefinitionParameterBindingComponent(org.hl7.fhir.r5.model.OperationDefinition.OperationDefinitionParameterBindingComponent src) throws FHIRException {
169    if (src == null || src.isEmpty())
170      return null;
171    org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionParameterBindingComponent tgt = new org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionParameterBindingComponent();
172    ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyBackboneElement(src,tgt);
173    if (src.hasStrength())
174      tgt.setStrengthElement(Enumerations14_50.convertBindingStrength(src.getStrengthElement()));
175    if (src.hasValueSet()) {
176      String vsr = VersionConvertorConstants.vsToRef(src.getValueSet());
177      if (vsr != null)
178        tgt.setValueSet(new org.hl7.fhir.dstu2016may.model.UriType(vsr));
179      else
180        tgt.setValueSet(new org.hl7.fhir.dstu2016may.model.Reference(src.getValueSet()));
181    }
182    return tgt;
183  }
184
185  public static org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionParameterComponent convertOperationDefinitionParameterComponent(org.hl7.fhir.r5.model.OperationDefinition.OperationDefinitionParameterComponent src) throws FHIRException {
186    if (src == null || src.isEmpty())
187      return null;
188    org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionParameterComponent tgt = new org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionParameterComponent();
189    ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyBackboneElement(src,tgt);
190    if (src.hasNameElement())
191      tgt.setNameElement(Code14_50.convertCode(src.getNameElement()));
192    if (src.hasUse())
193      tgt.setUseElement(convertOperationParameterUse(src.getUseElement()));
194    if (src.hasMinElement())
195      tgt.setMinElement(Integer14_50.convertInteger(src.getMinElement()));
196    if (src.hasMaxElement())
197      tgt.setMaxElement(String14_50.convertString(src.getMaxElement()));
198    if (src.hasDocumentation())
199      tgt.setDocumentationElement(String14_50.convertString(src.getDocumentationElement()));
200    if (src.hasType()) {
201      tgt.setType(src.getType().toCode());
202    }
203    if (src.hasSearchType())
204      tgt.setSearchTypeElement(Enumerations14_50.convertSearchParamType(src.getSearchTypeElement()));
205    for (org.hl7.fhir.r5.model.UriType t : src.getTargetProfile())
206      tgt.setProfile(new org.hl7.fhir.dstu2016may.model.Reference(t.getValue()));
207    if (src.hasBinding())
208      tgt.setBinding(convertOperationDefinitionParameterBindingComponent(src.getBinding()));
209    for (org.hl7.fhir.r5.model.OperationDefinition.OperationDefinitionParameterComponent t : src.getPart())
210      tgt.addPart(convertOperationDefinitionParameterComponent(t));
211    return tgt;
212  }
213
214  public static org.hl7.fhir.r5.model.OperationDefinition.OperationDefinitionParameterComponent convertOperationDefinitionParameterComponent(org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionParameterComponent src) throws FHIRException {
215    if (src == null || src.isEmpty())
216      return null;
217    org.hl7.fhir.r5.model.OperationDefinition.OperationDefinitionParameterComponent tgt = new org.hl7.fhir.r5.model.OperationDefinition.OperationDefinitionParameterComponent();
218    ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyBackboneElement(src,tgt);
219    if (src.hasNameElement())
220      tgt.setNameElement(Code14_50.convertCode(src.getNameElement()));
221    if (src.hasUse())
222      tgt.setUseElement(convertOperationParameterUse(src.getUseElement()));
223    if (src.hasMinElement())
224      tgt.setMinElement(Integer14_50.convertInteger(src.getMinElement()));
225    if (src.hasMaxElement())
226      tgt.setMaxElement(String14_50.convertString(src.getMaxElement()));
227    if (src.hasDocumentation())
228      tgt.setDocumentationElement(String14_50.convertStringToMarkdown(src.getDocumentationElement()));
229    if (src.hasType())
230      tgt.setType(Enumerations.FHIRTypes.fromCode(fixTypeCode(src.getType())));
231    if (src.hasSearchType())
232      tgt.setSearchTypeElement(Enumerations14_50.convertSearchParamType(src.getSearchTypeElement()));
233    tgt.addTargetProfile(src.getProfile().getReference());
234    if (src.hasBinding())
235      tgt.setBinding(convertOperationDefinitionParameterBindingComponent(src.getBinding()));
236    for (org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationDefinitionParameterComponent t : src.getPart())
237      tgt.addPart(convertOperationDefinitionParameterComponent(t));
238    return tgt;
239  }
240
241  private static String fixTypeCode(String type) {
242    if ("Type".equals(type)) {
243      return "DataType";
244    } else {
245      return type;
246    }
247  }
248
249  static public org.hl7.fhir.dstu2016may.model.Enumeration<org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationKind> convertOperationKind(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.OperationDefinition.OperationKind> src) throws FHIRException {
250      if (src == null || src.isEmpty())
251          return null;
252      org.hl7.fhir.dstu2016may.model.Enumeration<OperationDefinition.OperationKind> tgt = new org.hl7.fhir.dstu2016may.model.Enumeration<>(new OperationDefinition.OperationKindEnumFactory());
253      ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyElement(src, tgt);
254      if (src.getValue() == null) {
255          tgt.setValue(null);
256      } else {
257          switch (src.getValue()) {
258              case OPERATION:
259                  tgt.setValue(OperationDefinition.OperationKind.OPERATION);
260                  break;
261              case QUERY:
262                  tgt.setValue(OperationDefinition.OperationKind.QUERY);
263                  break;
264              default:
265                  tgt.setValue(OperationDefinition.OperationKind.NULL);
266                  break;
267          }
268      }
269      return tgt;
270  }
271
272  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.OperationDefinition.OperationKind> convertOperationKind(org.hl7.fhir.dstu2016may.model.Enumeration<org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationKind> src) throws FHIRException {
273      if (src == null || src.isEmpty())
274          return null;
275      Enumeration<org.hl7.fhir.r5.model.OperationDefinition.OperationKind> tgt = new Enumeration<>(new org.hl7.fhir.r5.model.OperationDefinition.OperationKindEnumFactory());
276      ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyElement(src, tgt);
277      if (src.getValue() == null) {
278          tgt.setValue(null);
279      } else {
280          switch (src.getValue()) {
281              case OPERATION:
282                  tgt.setValue(org.hl7.fhir.r5.model.OperationDefinition.OperationKind.OPERATION);
283                  break;
284              case QUERY:
285                  tgt.setValue(org.hl7.fhir.r5.model.OperationDefinition.OperationKind.QUERY);
286                  break;
287              default:
288                  tgt.setValue(org.hl7.fhir.r5.model.OperationDefinition.OperationKind.NULL);
289                  break;
290          }
291      }
292      return tgt;
293  }
294
295  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.Enumerations.OperationParameterUse> convertOperationParameterUse(org.hl7.fhir.dstu2016may.model.Enumeration<org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationParameterUse> src) throws FHIRException {
296      if (src == null || src.isEmpty())
297          return null;
298      Enumeration<Enumerations.OperationParameterUse> tgt = new Enumeration<>(new Enumerations.OperationParameterUseEnumFactory());
299      ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyElement(src, tgt);
300      if (src.getValue() == null) {
301          tgt.setValue(null);
302      } else {
303          switch (src.getValue()) {
304              case IN:
305                  tgt.setValue(Enumerations.OperationParameterUse.IN);
306                  break;
307              case OUT:
308                  tgt.setValue(Enumerations.OperationParameterUse.OUT);
309                  break;
310              default:
311                  tgt.setValue(Enumerations.OperationParameterUse.NULL);
312                  break;
313          }
314      }
315      return tgt;
316  }
317
318  static public org.hl7.fhir.dstu2016may.model.Enumeration<org.hl7.fhir.dstu2016may.model.OperationDefinition.OperationParameterUse> convertOperationParameterUse(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.Enumerations.OperationParameterUse> src) throws FHIRException {
319      if (src == null || src.isEmpty())
320          return null;
321      org.hl7.fhir.dstu2016may.model.Enumeration<OperationDefinition.OperationParameterUse> tgt = new org.hl7.fhir.dstu2016may.model.Enumeration<>(new OperationDefinition.OperationParameterUseEnumFactory());
322      ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyElement(src, tgt);
323      if (src.getValue() == null) {
324          tgt.setValue(null);
325      } else {
326          switch (src.getValue()) {
327              case IN:
328                  tgt.setValue(OperationDefinition.OperationParameterUse.IN);
329                  break;
330              case OUT:
331                  tgt.setValue(OperationDefinition.OperationParameterUse.OUT);
332                  break;
333              default:
334                  tgt.setValue(OperationDefinition.OperationParameterUse.NULL);
335                  break;
336          }
337      }
338      return tgt;
339  }
340}