001/*-
002 * #%L
003 * HAPI FHIR - Converter
004 * %%
005 * Copyright (C) 2014 - 2024 Smile CDR, Inc.
006 * %%
007 * Licensed under the Apache License, Version 2.0 (the "License");
008 * you may not use this file except in compliance with the License.
009 * You may obtain a copy of the License at
010 *
011 *      http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 * #L%
019 */
020package ca.uhn.hapi.converters.canonical;
021
022import ca.uhn.fhir.context.BaseRuntimeChildDefinition;
023import ca.uhn.fhir.context.FhirContext;
024import ca.uhn.fhir.context.FhirVersionEnum;
025import ca.uhn.fhir.i18n.Msg;
026import ca.uhn.fhir.model.dstu2.composite.CodeableConceptDt;
027import ca.uhn.fhir.model.dstu2.composite.CodingDt;
028import ca.uhn.fhir.util.HapiExtensions;
029import jakarta.annotation.Nonnull;
030import org.apache.commons.lang3.StringUtils;
031import org.hl7.fhir.convertors.advisors.impl.BaseAdvisor_10_40;
032import org.hl7.fhir.convertors.advisors.impl.BaseAdvisor_10_50;
033import org.hl7.fhir.convertors.advisors.impl.BaseAdvisor_14_40;
034import org.hl7.fhir.convertors.advisors.impl.BaseAdvisor_14_50;
035import org.hl7.fhir.convertors.advisors.impl.BaseAdvisor_30_40;
036import org.hl7.fhir.convertors.advisors.impl.BaseAdvisor_30_50;
037import org.hl7.fhir.convertors.advisors.impl.BaseAdvisor_40_50;
038import org.hl7.fhir.convertors.advisors.impl.BaseAdvisor_43_50;
039import org.hl7.fhir.convertors.factory.VersionConvertorFactory_10_40;
040import org.hl7.fhir.convertors.factory.VersionConvertorFactory_10_50;
041import org.hl7.fhir.convertors.factory.VersionConvertorFactory_14_40;
042import org.hl7.fhir.convertors.factory.VersionConvertorFactory_14_50;
043import org.hl7.fhir.convertors.factory.VersionConvertorFactory_30_40;
044import org.hl7.fhir.convertors.factory.VersionConvertorFactory_30_50;
045import org.hl7.fhir.convertors.factory.VersionConvertorFactory_40_50;
046import org.hl7.fhir.convertors.factory.VersionConvertorFactory_43_50;
047import org.hl7.fhir.dstu2.model.Resource;
048import org.hl7.fhir.instance.model.api.IBase;
049import org.hl7.fhir.instance.model.api.IBaseCoding;
050import org.hl7.fhir.instance.model.api.IBaseConformance;
051import org.hl7.fhir.instance.model.api.IBaseDatatype;
052import org.hl7.fhir.instance.model.api.IBaseParameters;
053import org.hl7.fhir.instance.model.api.IBaseResource;
054import org.hl7.fhir.instance.model.api.IPrimitiveType;
055import org.hl7.fhir.r4.model.AuditEvent;
056import org.hl7.fhir.r4.model.CodeSystem;
057import org.hl7.fhir.r4.model.CodeableConcept;
058import org.hl7.fhir.r4.model.Coding;
059import org.hl7.fhir.r4.model.ConceptMap;
060import org.hl7.fhir.r4.model.Parameters;
061import org.hl7.fhir.r4.model.ValueSet;
062import org.hl7.fhir.r5.model.CapabilityStatement;
063import org.hl7.fhir.r5.model.CodeType;
064import org.hl7.fhir.r5.model.Enumerations;
065import org.hl7.fhir.r5.model.PackageInformation;
066import org.hl7.fhir.r5.model.SearchParameter;
067import org.hl7.fhir.r5.model.StructureDefinition;
068
069import java.util.Date;
070import java.util.List;
071import java.util.Objects;
072import java.util.stream.Collectors;
073
074import static org.apache.commons.lang3.StringUtils.isBlank;
075
076/**
077 * This class converts versions of various resources to/from a canonical version
078 * of the resource. The specific version that is considered canonical is arbitrary
079 * for historical reasons, generally it will be R4 or R5 but this varies by resource
080 * type.
081 * <p>
082 * This class is an internal HAPI FHIR API and can change without notice at any time.
083 * Use with caution!
084 * </p>
085 */
086public class VersionCanonicalizer {
087
088        private static final BaseAdvisor_30_50 ADVISOR_30_50 = new BaseAdvisor_30_50(false);
089        private static final BaseAdvisor_30_40 ADVISOR_30_40 = new BaseAdvisor_30_40(false);
090        private static final BaseAdvisor_10_40 ADVISOR_10_40 = new BaseAdvisor_10_40(false);
091        private static final BaseAdvisor_10_50 ADVISOR_10_50 = new BaseAdvisor_10_50(false);
092        private static final BaseAdvisor_40_50 ADVISOR_40_50 = new BaseAdvisor_40_50(false);
093        private static final BaseAdvisor_43_50 ADVISOR_43_50 = new BaseAdvisor_43_50(false);
094        private static final BaseAdvisor_14_40 ADVISOR_14_40 = new BaseAdvisor_14_40(false);
095        private static final BaseAdvisor_14_50 ADVISOR_14_50 = new BaseAdvisor_14_50(false);
096
097        private final IStrategy myStrategy;
098        private final FhirContext myContext;
099
100        public VersionCanonicalizer(FhirVersionEnum theTargetVersion) {
101                this(theTargetVersion.newContextCached());
102        }
103
104        public VersionCanonicalizer(FhirContext theTargetContext) {
105                myContext = theTargetContext;
106                FhirVersionEnum targetVersion = theTargetContext.getVersion().getVersion();
107                switch (targetVersion) {
108                        case DSTU2:
109                                myStrategy = new Dstu2Strategy(false);
110                                break;
111                        case DSTU2_HL7ORG:
112                                myStrategy = new Dstu2Strategy(true);
113                                break;
114                        case DSTU2_1:
115                                myStrategy = new Dstu21Strategy();
116                                break;
117                        case DSTU3:
118                                myStrategy = new Dstu3Strategy();
119                                break;
120                        case R4:
121                                myStrategy = new R4Strategy();
122                                break;
123                        case R4B:
124                                myStrategy = new R4BStrategy();
125                                break;
126                        case R5:
127                                myStrategy = new R5Strategy();
128                                break;
129                        default:
130                                throw new IllegalStateException(Msg.code(193) + "Can't handle version: " + targetVersion);
131                }
132        }
133
134        @SuppressWarnings({"EnhancedSwitchMigration"})
135
136        /**
137         * Canonical version: R5
138         */
139        public CapabilityStatement capabilityStatementToCanonical(IBaseResource theCapabilityStatement) {
140                return myStrategy.capabilityStatementToCanonical(theCapabilityStatement);
141        }
142
143        /**
144         * Canonical version: R5
145         */
146        public IBaseConformance capabilityStatementFromCanonical(CapabilityStatement theCapabilityStatement) {
147                return myStrategy.capabilityStatementFromCanonical(theCapabilityStatement);
148        }
149
150        /**
151         * Canonical version: R4
152         */
153        public CodeableConcept codeableConceptToCanonical(IBaseDatatype theCodeableConcept) {
154                if (theCodeableConcept == null) {
155                        return null;
156                }
157                return myStrategy.codeableConceptToCanonical(theCodeableConcept);
158        }
159
160        /**
161         * Canonical version: R4
162         */
163        public Coding codingToCanonical(IBaseCoding theCodingToValidate) {
164                if (theCodingToValidate == null) {
165                        return null;
166                }
167                return myStrategy.codingToCanonical(theCodingToValidate);
168        }
169
170        /**
171         * Canonical version: R4
172         */
173        public ValueSet valueSetToCanonical(IBaseResource theValueSet) {
174                if (theValueSet == null) {
175                        return null;
176                }
177                return myStrategy.valueSetToCanonical(theValueSet);
178        }
179
180        /**
181         * Canonical version: R4
182         */
183        public CodeSystem codeSystemToCanonical(IBaseResource theCodeSystem) {
184                return myStrategy.codeSystemToCanonical(theCodeSystem);
185        }
186
187        /**
188         * Canonical version: R4
189         */
190        public IBaseResource valueSetFromCanonical(ValueSet theValueSet) {
191                return myStrategy.valueSetFromCanonical(theValueSet);
192        }
193
194        /**
195         * Canonical version: R4
196         */
197        public ConceptMap conceptMapToCanonical(IBaseResource theConceptMap) {
198                return myStrategy.conceptMapToCanonical(theConceptMap);
199        }
200
201        /**
202         * Canonical version: R5
203         * <p>
204         * Note that this method will look for any nonstandard resource types specified in
205         * {@literal SearchParameter.base} or {@literal SearchParameter.target} and move them into
206         * extensions with the URLs {@link HapiExtensions#EXTENSION_SEARCHPARAM_CUSTOM_BASE_RESOURCE}
207         * and {@link HapiExtensions#EXTENSION_SEARCHPARAM_CUSTOM_TARGET_RESOURCE} respectively. If any
208         * nonstandard resource types are found, all resource types in the respective list are moved into
209         * the extension (including standard types) and the source list is cleared.
210         */
211        public <T extends IBaseResource> SearchParameter searchParameterToCanonical(T theSearchParameter) {
212
213                /*
214                 * The R4 model allows custom types to be put into SearchParameter.base and
215                 * SearchParameter.target because those fields use a simple CodeType. But
216                 * in R5 it uses an Enumeration, so it's not actually possible to put custom
217                 * resource types into those fields. This means that the version converter fails
218                 * with an exception unless we remove those values from those fields before
219                 * conversion. However, we don't want to affect the state of the originally
220                 * passed in resource since that may affect other things. So, we clone
221                 * it first. This is a pain in the butt, but there doesn't seem to be any
222                 * better option.
223                 */
224                T input = myContext.newTerser().clone(theSearchParameter);
225
226                List<String> baseExtensionValues =
227                                extractNonStandardSearchParameterListAndClearSourceIfAnyArePresent(input, "base");
228                List<String> targetExtensionValues =
229                                extractNonStandardSearchParameterListAndClearSourceIfAnyArePresent(input, "target");
230
231                SearchParameter retVal = myStrategy.searchParameterToCanonical(input);
232
233                baseExtensionValues.forEach(
234                                t -> retVal.addExtension(HapiExtensions.EXTENSION_SEARCHPARAM_CUSTOM_BASE_RESOURCE, new CodeType(t)));
235                targetExtensionValues.forEach(
236                                t -> retVal.addExtension(HapiExtensions.EXTENSION_SEARCHPARAM_CUSTOM_TARGET_RESOURCE, new CodeType(t)));
237                return retVal;
238        }
239
240        public IBaseResource searchParameterFromCanonical(SearchParameter theSearchParameter) {
241                return myStrategy.searchParameterFromCanonical(theSearchParameter);
242        }
243
244        public IBaseParameters parametersFromCanonical(Parameters theParameters) {
245                return myStrategy.parametersFromCanonical(theParameters);
246        }
247
248        public StructureDefinition structureDefinitionToCanonical(IBaseResource theResource) {
249                StructureDefinition retVal = myStrategy.structureDefinitionToCanonical(theResource);
250                String packageUserData = (String) theResource.getUserData("package");
251                if (packageUserData != null) {
252                        retVal.setUserData("package", packageUserData);
253                        retVal.setSourcePackage(new PackageInformation(packageUserData, new Date()));
254                }
255                return retVal;
256        }
257
258        public IBaseResource structureDefinitionFromCanonical(StructureDefinition theResource) {
259                return myStrategy.structureDefinitionFromCanonical(theResource);
260        }
261
262        public IBaseResource valueSetFromValidatorCanonical(org.hl7.fhir.r5.model.ValueSet theResource) {
263                return myStrategy.valueSetFromValidatorCanonical(theResource);
264        }
265
266        public org.hl7.fhir.r5.model.Resource resourceToValidatorCanonical(IBaseResource theResource) {
267                return myStrategy.resourceToValidatorCanonical(theResource);
268        }
269
270        public org.hl7.fhir.r5.model.ValueSet valueSetToValidatorCanonical(IBaseResource theResource) {
271                return myStrategy.valueSetToValidatorCanonical(theResource);
272        }
273
274        public org.hl7.fhir.r5.model.CodeSystem codeSystemToValidatorCanonical(IBaseResource theResource) {
275                return myStrategy.codeSystemToValidatorCanonical(theResource);
276        }
277
278        public IBaseResource auditEventFromCanonical(AuditEvent theResource) {
279                return myStrategy.auditEventFromCanonical(theResource);
280        }
281
282        @Nonnull
283        private List<String> extractNonStandardSearchParameterListAndClearSourceIfAnyArePresent(
284                        IBaseResource theSearchParameter, String theChildName) {
285
286                BaseRuntimeChildDefinition child =
287                                myContext.getResourceDefinition(theSearchParameter).getChildByName(theChildName);
288                List<IBase> baseList = child.getAccessor().getValues(theSearchParameter);
289
290                List<String> baseExtensionValues = baseList.stream()
291                                .filter(Objects::nonNull)
292                                .filter(t -> t instanceof IPrimitiveType)
293                                .map(t -> (IPrimitiveType<?>) t)
294                                .map(IPrimitiveType::getValueAsString)
295                                .filter(StringUtils::isNotBlank)
296                                .collect(Collectors.toList());
297                if (baseExtensionValues.stream().allMatch(Enumerations.VersionIndependentResourceTypesAll::isValidCode)) {
298                        baseExtensionValues.clear();
299                } else {
300                        baseList.clear();
301                }
302                return baseExtensionValues;
303        }
304
305        private interface IStrategy {
306
307                CapabilityStatement capabilityStatementToCanonical(IBaseResource theCapabilityStatement);
308
309                Coding codingToCanonical(IBaseCoding theCoding);
310
311                CodeableConcept codeableConceptToCanonical(IBaseDatatype theCodeableConcept);
312
313                ValueSet valueSetToCanonical(IBaseResource theValueSet);
314
315                CodeSystem codeSystemToCanonical(IBaseResource theCodeSystem);
316
317                IBaseResource valueSetFromCanonical(ValueSet theValueSet);
318
319                ConceptMap conceptMapToCanonical(IBaseResource theConceptMap);
320
321                SearchParameter searchParameterToCanonical(IBaseResource theSearchParameter);
322
323                IBaseParameters parametersFromCanonical(Parameters theParameters);
324
325                StructureDefinition structureDefinitionToCanonical(IBaseResource theResource);
326
327                IBaseResource structureDefinitionFromCanonical(StructureDefinition theResource);
328
329                IBaseResource valueSetFromValidatorCanonical(org.hl7.fhir.r5.model.ValueSet theResource);
330
331                org.hl7.fhir.r5.model.Resource resourceToValidatorCanonical(IBaseResource theResource);
332
333                org.hl7.fhir.r5.model.ValueSet valueSetToValidatorCanonical(IBaseResource theResource);
334
335                org.hl7.fhir.r5.model.CodeSystem codeSystemToValidatorCanonical(IBaseResource theResource);
336
337                IBaseResource searchParameterFromCanonical(SearchParameter theResource);
338
339                IBaseResource auditEventFromCanonical(AuditEvent theResource);
340
341                IBaseConformance capabilityStatementFromCanonical(CapabilityStatement theResource);
342        }
343
344        private static class Dstu2Strategy implements IStrategy {
345
346                private final FhirContext myDstu2Hl7OrgContext = FhirContext.forDstu2Hl7OrgCached();
347
348                private final FhirContext myDstu2Context = FhirContext.forDstu2Cached();
349                private final boolean myHl7OrgStructures;
350
351                public Dstu2Strategy(boolean theHl7OrgStructures) {
352                        myHl7OrgStructures = theHl7OrgStructures;
353                }
354
355                @Override
356                public CapabilityStatement capabilityStatementToCanonical(IBaseResource theCapabilityStatement) {
357                        org.hl7.fhir.dstu2.model.Resource reencoded = reencodeToHl7Org(theCapabilityStatement);
358                        return (CapabilityStatement) VersionConvertorFactory_10_50.convertResource(reencoded, ADVISOR_10_50);
359                }
360
361                @Override
362                public Coding codingToCanonical(IBaseCoding theCoding) {
363                        CodingDt coding = (CodingDt) theCoding;
364                        Coding retVal = new Coding();
365                        retVal.setCode(coding.getCode());
366                        retVal.setSystem(coding.getSystem());
367                        retVal.setDisplay(coding.getDisplay());
368                        retVal.setVersion(coding.getVersion());
369                        if (!coding.getUserSelectedElement().isEmpty()) {
370                                retVal.setUserSelected(coding.getUserSelected());
371                        }
372
373                        return retVal;
374                }
375
376                @Override
377                public CodeableConcept codeableConceptToCanonical(IBaseDatatype theCodeableConcept) {
378                        CodeableConceptDt codeableConcept = (CodeableConceptDt) theCodeableConcept;
379
380                        CodeableConcept retVal = new CodeableConcept();
381                        retVal.setText(codeableConcept.getText());
382                        for (CodingDt next : codeableConcept.getCoding()) {
383                                retVal.addCoding(codingToCanonical(next));
384                        }
385
386                        return retVal;
387                }
388
389                @Override
390                public ValueSet valueSetToCanonical(IBaseResource theValueSet) {
391                        org.hl7.fhir.dstu2.model.Resource reencoded = reencodeToHl7Org(theValueSet);
392                        return (ValueSet) VersionConvertorFactory_10_40.convertResource(reencoded, ADVISOR_10_40);
393                }
394
395                @Override
396                public CodeSystem codeSystemToCanonical(IBaseResource theCodeSystem) {
397                        CodeSystem retVal = new CodeSystem();
398
399                        ca.uhn.fhir.model.dstu2.resource.ValueSet input = (ca.uhn.fhir.model.dstu2.resource.ValueSet) theCodeSystem;
400                        retVal.setUrl(input.getUrl());
401
402                        for (ca.uhn.fhir.model.dstu2.resource.ValueSet.CodeSystemConcept next :
403                                        input.getCodeSystem().getConcept()) {
404                                translateAndAddConcept(next, retVal.getConcept());
405                        }
406
407                        return retVal;
408                }
409
410                private void translateAndAddConcept(
411                                ca.uhn.fhir.model.dstu2.resource.ValueSet.CodeSystemConcept theSource,
412                                List<CodeSystem.ConceptDefinitionComponent> theTarget) {
413                        CodeSystem.ConceptDefinitionComponent targetConcept = new CodeSystem.ConceptDefinitionComponent();
414                        targetConcept.setCode(theSource.getCode());
415                        targetConcept.setDisplay(theSource.getDisplay());
416
417                        for (ca.uhn.fhir.model.dstu2.resource.ValueSet.CodeSystemConceptDesignation next :
418                                        theSource.getDesignation()) {
419                                CodeSystem.ConceptDefinitionDesignationComponent targetDesignation = targetConcept.addDesignation();
420                                targetDesignation.setLanguage(next.getLanguage());
421                                targetDesignation.setValue(next.getValue());
422                                if (next.getUse() != null) {
423                                        targetDesignation.setUse(codingToCanonical(next.getUse()));
424                                }
425                        }
426
427                        for (ca.uhn.fhir.model.dstu2.resource.ValueSet.CodeSystemConcept nextChild : theSource.getConcept()) {
428                                translateAndAddConcept(nextChild, targetConcept.getConcept());
429                        }
430
431                        theTarget.add(targetConcept);
432                }
433
434                @Override
435                public IBaseResource valueSetFromCanonical(ValueSet theValueSet) {
436                        Resource valueSetDstu2Hl7Org = VersionConvertorFactory_10_40.convertResource(theValueSet, ADVISOR_10_40);
437                        return reencodeFromHl7Org(valueSetDstu2Hl7Org);
438                }
439
440                @Override
441                public ConceptMap conceptMapToCanonical(IBaseResource theConceptMap) {
442                        org.hl7.fhir.dstu2.model.Resource reencoded = reencodeToHl7Org(theConceptMap);
443                        return (ConceptMap) VersionConvertorFactory_10_40.convertResource(reencoded, ADVISOR_10_40);
444                }
445
446                @Override
447                public SearchParameter searchParameterToCanonical(IBaseResource theSearchParameter) {
448                        org.hl7.fhir.dstu2.model.SearchParameter reencoded =
449                                        (org.hl7.fhir.dstu2.model.SearchParameter) reencodeToHl7Org(theSearchParameter);
450                        SearchParameter retVal =
451                                        (SearchParameter) VersionConvertorFactory_10_50.convertResource(reencoded, ADVISOR_10_50);
452                        if (isBlank(retVal.getExpression())) {
453                                retVal.setExpression(reencoded.getXpath());
454                        }
455                        return retVal;
456                }
457
458                @Override
459                public IBaseParameters parametersFromCanonical(Parameters theParameters) {
460                        Resource converted = VersionConvertorFactory_10_40.convertResource(theParameters, ADVISOR_10_40);
461                        return (IBaseParameters) reencodeFromHl7Org(converted);
462                }
463
464                @Override
465                public StructureDefinition structureDefinitionToCanonical(IBaseResource theResource) {
466                        org.hl7.fhir.dstu2.model.Resource reencoded = reencodeToHl7Org(theResource);
467                        return (StructureDefinition) VersionConvertorFactory_10_50.convertResource(reencoded, ADVISOR_10_50);
468                }
469
470                @Override
471                public IBaseResource structureDefinitionFromCanonical(StructureDefinition theResource) {
472                        Resource converted = VersionConvertorFactory_10_50.convertResource(theResource, ADVISOR_10_50);
473                        return reencodeFromHl7Org(converted);
474                }
475
476                @Override
477                public IBaseResource valueSetFromValidatorCanonical(org.hl7.fhir.r5.model.ValueSet theResource) {
478                        Resource converted = VersionConvertorFactory_10_50.convertResource(theResource, ADVISOR_10_50);
479                        return reencodeFromHl7Org(converted);
480                }
481
482                @Override
483                public org.hl7.fhir.r5.model.Resource resourceToValidatorCanonical(IBaseResource theResource) {
484                        org.hl7.fhir.dstu2.model.Resource reencoded = reencodeToHl7Org(theResource);
485                        return VersionConvertorFactory_10_50.convertResource(reencoded, ADVISOR_10_50);
486                }
487
488                @Override
489                public org.hl7.fhir.r5.model.ValueSet valueSetToValidatorCanonical(IBaseResource theResource) {
490                        org.hl7.fhir.dstu2.model.Resource reencoded = reencodeToHl7Org(theResource);
491                        return (org.hl7.fhir.r5.model.ValueSet)
492                                        VersionConvertorFactory_10_50.convertResource(reencoded, ADVISOR_10_50);
493                }
494
495                @Override
496                public org.hl7.fhir.r5.model.CodeSystem codeSystemToValidatorCanonical(IBaseResource theResource) {
497                        org.hl7.fhir.dstu2.model.Resource reencoded = reencodeToHl7Org(theResource);
498                        return (org.hl7.fhir.r5.model.CodeSystem)
499                                        VersionConvertorFactory_10_50.convertResource(reencoded, ADVISOR_10_50);
500                }
501
502                @Override
503                public IBaseResource auditEventFromCanonical(AuditEvent theResource) {
504                        Resource hl7Org = VersionConvertorFactory_10_40.convertResource(theResource, ADVISOR_10_40);
505                        return reencodeFromHl7Org(hl7Org);
506                }
507
508                @Override
509                public IBaseResource searchParameterFromCanonical(SearchParameter theResource) {
510                        Resource resource = VersionConvertorFactory_10_50.convertResource(theResource, ADVISOR_10_50);
511                        return reencodeFromHl7Org(resource);
512                }
513
514                @Override
515                public IBaseConformance capabilityStatementFromCanonical(CapabilityStatement theResource) {
516                        Resource converted = VersionConvertorFactory_10_50.convertResource(theResource, ADVISOR_10_50);
517                        return (IBaseConformance) reencodeFromHl7Org(converted);
518                }
519
520                private Resource reencodeToHl7Org(IBaseResource theInput) {
521                        if (myHl7OrgStructures) {
522                                return (Resource) theInput;
523                        }
524                        return (Resource) myDstu2Hl7OrgContext
525                                        .newJsonParser()
526                                        .parseResource(myDstu2Context.newJsonParser().encodeResourceToString(theInput));
527                }
528
529                private IBaseResource reencodeFromHl7Org(Resource theInput) {
530                        if (myHl7OrgStructures) {
531                                return theInput;
532                        }
533                        return myDstu2Context
534                                        .newJsonParser()
535                                        .parseResource(myDstu2Hl7OrgContext.newJsonParser().encodeResourceToString(theInput));
536                }
537        }
538
539        private static class Dstu21Strategy implements IStrategy {
540
541                @Override
542                public CapabilityStatement capabilityStatementToCanonical(IBaseResource theCapabilityStatement) {
543                        return (CapabilityStatement) VersionConvertorFactory_14_50.convertResource(
544                                        (org.hl7.fhir.dstu2016may.model.Resource) theCapabilityStatement, ADVISOR_14_50);
545                }
546
547                @Override
548                public Coding codingToCanonical(IBaseCoding theCoding) {
549                        return (org.hl7.fhir.r4.model.Coding) VersionConvertorFactory_14_40.convertType(
550                                        (org.hl7.fhir.dstu2016may.model.Coding) theCoding, ADVISOR_14_40);
551                }
552
553                @Override
554                public CodeableConcept codeableConceptToCanonical(IBaseDatatype theCodeableConcept) {
555                        return (org.hl7.fhir.r4.model.CodeableConcept) VersionConvertorFactory_14_40.convertType(
556                                        (org.hl7.fhir.dstu2016may.model.CodeableConcept) theCodeableConcept, ADVISOR_14_40);
557                }
558
559                @Override
560                public ValueSet valueSetToCanonical(IBaseResource theValueSet) {
561                        return (ValueSet) VersionConvertorFactory_14_40.convertResource(
562                                        (org.hl7.fhir.dstu2016may.model.Resource) theValueSet, ADVISOR_14_40);
563                }
564
565                @Override
566                public CodeSystem codeSystemToCanonical(IBaseResource theCodeSystem) {
567                        return (CodeSystem) VersionConvertorFactory_14_40.convertResource(
568                                        (org.hl7.fhir.dstu2016may.model.Resource) theCodeSystem, ADVISOR_14_40);
569                }
570
571                @Override
572                public IBaseResource valueSetFromCanonical(ValueSet theValueSet) {
573                        return VersionConvertorFactory_14_40.convertResource(theValueSet, ADVISOR_14_40);
574                }
575
576                @Override
577                public ConceptMap conceptMapToCanonical(IBaseResource theConceptMap) {
578                        return (ConceptMap) VersionConvertorFactory_14_40.convertResource(
579                                        (org.hl7.fhir.dstu2016may.model.Resource) theConceptMap, ADVISOR_14_40);
580                }
581
582                @Override
583                public SearchParameter searchParameterToCanonical(IBaseResource theSearchParameter) {
584                        return (SearchParameter) VersionConvertorFactory_14_50.convertResource(
585                                        (org.hl7.fhir.dstu2016may.model.Resource) theSearchParameter, ADVISOR_14_50);
586                }
587
588                @Override
589                public IBaseParameters parametersFromCanonical(Parameters theParameters) {
590                        return (IBaseParameters) VersionConvertorFactory_14_40.convertResource(theParameters, ADVISOR_14_40);
591                }
592
593                @Override
594                public StructureDefinition structureDefinitionToCanonical(IBaseResource theResource) {
595                        return (StructureDefinition) VersionConvertorFactory_14_50.convertResource(
596                                        (org.hl7.fhir.dstu2016may.model.Resource) theResource, ADVISOR_14_50);
597                }
598
599                @Override
600                public IBaseResource structureDefinitionFromCanonical(StructureDefinition theResource) {
601                        return VersionConvertorFactory_14_50.convertResource(theResource, ADVISOR_14_50);
602                }
603
604                @Override
605                public IBaseResource valueSetFromValidatorCanonical(org.hl7.fhir.r5.model.ValueSet theResource) {
606                        return VersionConvertorFactory_14_50.convertResource(theResource, ADVISOR_14_50);
607                }
608
609                @Override
610                public org.hl7.fhir.r5.model.Resource resourceToValidatorCanonical(IBaseResource theResource) {
611                        return VersionConvertorFactory_14_50.convertResource(
612                                        (org.hl7.fhir.dstu2016may.model.Resource) theResource, ADVISOR_14_50);
613                }
614
615                @Override
616                public org.hl7.fhir.r5.model.ValueSet valueSetToValidatorCanonical(IBaseResource theResource) {
617                        return (org.hl7.fhir.r5.model.ValueSet) VersionConvertorFactory_14_50.convertResource(
618                                        (org.hl7.fhir.dstu2016may.model.Resource) theResource, ADVISOR_14_50);
619                }
620
621                @Override
622                public org.hl7.fhir.r5.model.CodeSystem codeSystemToValidatorCanonical(IBaseResource theResource) {
623                        return (org.hl7.fhir.r5.model.CodeSystem) VersionConvertorFactory_14_50.convertResource(
624                                        (org.hl7.fhir.dstu2016may.model.Resource) theResource, ADVISOR_14_50);
625                }
626
627                @Override
628                public IBaseResource searchParameterFromCanonical(SearchParameter theResource) {
629                        return VersionConvertorFactory_14_50.convertResource(theResource, ADVISOR_14_50);
630                }
631
632                @Override
633                public IBaseResource auditEventFromCanonical(AuditEvent theResource) {
634                        return VersionConvertorFactory_14_40.convertResource(theResource, ADVISOR_14_40);
635                }
636
637                @Override
638                public IBaseConformance capabilityStatementFromCanonical(CapabilityStatement theResource) {
639                        return (IBaseConformance) VersionConvertorFactory_14_50.convertResource(theResource, ADVISOR_14_50);
640                }
641        }
642
643        private static class Dstu3Strategy implements IStrategy {
644
645                @Override
646                public CapabilityStatement capabilityStatementToCanonical(IBaseResource theCapabilityStatement) {
647                        return (CapabilityStatement) VersionConvertorFactory_30_50.convertResource(
648                                        (org.hl7.fhir.dstu3.model.Resource) theCapabilityStatement, ADVISOR_30_50);
649                }
650
651                @Override
652                public Coding codingToCanonical(IBaseCoding theCoding) {
653                        return (org.hl7.fhir.r4.model.Coding) VersionConvertorFactory_30_40.convertType(
654                                        (org.hl7.fhir.dstu3.model.Coding) theCoding, ADVISOR_30_40);
655                }
656
657                @Override
658                public CodeableConcept codeableConceptToCanonical(IBaseDatatype theCodeableConcept) {
659                        return (org.hl7.fhir.r4.model.CodeableConcept) VersionConvertorFactory_30_40.convertType(
660                                        (org.hl7.fhir.dstu3.model.CodeableConcept) theCodeableConcept, ADVISOR_30_40);
661                }
662
663                @Override
664                public ValueSet valueSetToCanonical(IBaseResource theValueSet) {
665                        return (ValueSet) VersionConvertorFactory_30_40.convertResource(
666                                        (org.hl7.fhir.dstu3.model.Resource) theValueSet, ADVISOR_30_40);
667                }
668
669                @Override
670                public CodeSystem codeSystemToCanonical(IBaseResource theCodeSystem) {
671                        return (CodeSystem) VersionConvertorFactory_30_40.convertResource(
672                                        (org.hl7.fhir.dstu3.model.Resource) theCodeSystem, ADVISOR_30_40);
673                }
674
675                @Override
676                public IBaseResource valueSetFromCanonical(ValueSet theValueSet) {
677                        return VersionConvertorFactory_30_40.convertResource(theValueSet, ADVISOR_30_40);
678                }
679
680                @Override
681                public ConceptMap conceptMapToCanonical(IBaseResource theConceptMap) {
682                        return (ConceptMap) VersionConvertorFactory_30_40.convertResource(
683                                        (org.hl7.fhir.dstu3.model.Resource) theConceptMap, ADVISOR_30_40);
684                }
685
686                @Override
687                public SearchParameter searchParameterToCanonical(IBaseResource theSearchParameter) {
688                        return (SearchParameter) VersionConvertorFactory_30_50.convertResource(
689                                        (org.hl7.fhir.dstu3.model.Resource) theSearchParameter, ADVISOR_30_50);
690                }
691
692                @Override
693                public IBaseParameters parametersFromCanonical(Parameters theParameters) {
694                        return (IBaseParameters) VersionConvertorFactory_30_40.convertResource(theParameters, ADVISOR_30_40);
695                }
696
697                @Override
698                public StructureDefinition structureDefinitionToCanonical(IBaseResource theResource) {
699                        return (StructureDefinition) VersionConvertorFactory_30_50.convertResource(
700                                        (org.hl7.fhir.dstu3.model.Resource) theResource, ADVISOR_30_50);
701                }
702
703                @Override
704                public IBaseResource structureDefinitionFromCanonical(StructureDefinition theResource) {
705                        return VersionConvertorFactory_30_50.convertResource(theResource, ADVISOR_30_50);
706                }
707
708                @Override
709                public IBaseResource valueSetFromValidatorCanonical(org.hl7.fhir.r5.model.ValueSet theResource) {
710                        return VersionConvertorFactory_30_50.convertResource(theResource, ADVISOR_30_50);
711                }
712
713                @Override
714                public org.hl7.fhir.r5.model.Resource resourceToValidatorCanonical(IBaseResource theResource) {
715                        return VersionConvertorFactory_30_50.convertResource(
716                                        (org.hl7.fhir.dstu3.model.Resource) theResource, ADVISOR_30_50);
717                }
718
719                @Override
720                public org.hl7.fhir.r5.model.ValueSet valueSetToValidatorCanonical(IBaseResource theResource) {
721                        return (org.hl7.fhir.r5.model.ValueSet) VersionConvertorFactory_30_50.convertResource(
722                                        (org.hl7.fhir.dstu3.model.Resource) theResource, ADVISOR_30_50);
723                }
724
725                @Override
726                public org.hl7.fhir.r5.model.CodeSystem codeSystemToValidatorCanonical(IBaseResource theResource) {
727                        return (org.hl7.fhir.r5.model.CodeSystem) VersionConvertorFactory_30_50.convertResource(
728                                        (org.hl7.fhir.dstu3.model.Resource) theResource, ADVISOR_30_50);
729                }
730
731                @Override
732                public IBaseResource searchParameterFromCanonical(SearchParameter theResource) {
733                        return VersionConvertorFactory_30_50.convertResource(theResource, ADVISOR_30_50);
734                }
735
736                @Override
737                public IBaseResource auditEventFromCanonical(AuditEvent theResource) {
738                        return VersionConvertorFactory_30_40.convertResource(theResource, ADVISOR_30_40);
739                }
740
741                @Override
742                public IBaseConformance capabilityStatementFromCanonical(CapabilityStatement theResource) {
743                        return (IBaseConformance) VersionConvertorFactory_30_50.convertResource(theResource, ADVISOR_30_50);
744                }
745        }
746
747        private static class R4Strategy implements IStrategy {
748                @Override
749                public CapabilityStatement capabilityStatementToCanonical(IBaseResource theCapabilityStatement) {
750                        return (CapabilityStatement) VersionConvertorFactory_40_50.convertResource(
751                                        (org.hl7.fhir.r4.model.Resource) theCapabilityStatement, ADVISOR_40_50);
752                }
753
754                @Override
755                public Coding codingToCanonical(IBaseCoding theCoding) {
756                        return (Coding) theCoding;
757                }
758
759                @Override
760                public CodeableConcept codeableConceptToCanonical(IBaseDatatype theCodeableConcept) {
761                        return (CodeableConcept) theCodeableConcept;
762                }
763
764                @Override
765                public ValueSet valueSetToCanonical(IBaseResource theValueSet) {
766                        return (ValueSet) theValueSet;
767                }
768
769                @Override
770                public CodeSystem codeSystemToCanonical(IBaseResource theCodeSystem) {
771                        return (CodeSystem) theCodeSystem;
772                }
773
774                @Override
775                public IBaseResource valueSetFromCanonical(ValueSet theValueSet) {
776                        return theValueSet;
777                }
778
779                @Override
780                public ConceptMap conceptMapToCanonical(IBaseResource theConceptMap) {
781                        return (ConceptMap) theConceptMap;
782                }
783
784                @Override
785                public SearchParameter searchParameterToCanonical(IBaseResource theSearchParameter) {
786                        return (SearchParameter) VersionConvertorFactory_40_50.convertResource(
787                                        (org.hl7.fhir.r4.model.Resource) theSearchParameter, ADVISOR_40_50);
788                }
789
790                @Override
791                public IBaseParameters parametersFromCanonical(Parameters theParameters) {
792                        return theParameters;
793                }
794
795                @Override
796                public StructureDefinition structureDefinitionToCanonical(IBaseResource theResource) {
797                        return (StructureDefinition) VersionConvertorFactory_40_50.convertResource(
798                                        (org.hl7.fhir.r4.model.Resource) theResource, ADVISOR_40_50);
799                }
800
801                @Override
802                public IBaseResource structureDefinitionFromCanonical(StructureDefinition theResource) {
803                        return VersionConvertorFactory_40_50.convertResource(theResource, ADVISOR_40_50);
804                }
805
806                @Override
807                public IBaseResource valueSetFromValidatorCanonical(org.hl7.fhir.r5.model.ValueSet theResource) {
808                        return VersionConvertorFactory_40_50.convertResource(theResource, ADVISOR_40_50);
809                }
810
811                @Override
812                public org.hl7.fhir.r5.model.Resource resourceToValidatorCanonical(IBaseResource theResource) {
813                        return VersionConvertorFactory_40_50.convertResource(
814                                        (org.hl7.fhir.r4.model.Resource) theResource, ADVISOR_40_50);
815                }
816
817                @Override
818                public org.hl7.fhir.r5.model.ValueSet valueSetToValidatorCanonical(IBaseResource theResource) {
819                        return (org.hl7.fhir.r5.model.ValueSet) VersionConvertorFactory_40_50.convertResource(
820                                        (org.hl7.fhir.r4.model.Resource) theResource, ADVISOR_40_50);
821                }
822
823                @Override
824                public org.hl7.fhir.r5.model.CodeSystem codeSystemToValidatorCanonical(IBaseResource theResource) {
825                        return (org.hl7.fhir.r5.model.CodeSystem) VersionConvertorFactory_40_50.convertResource(
826                                        (org.hl7.fhir.r4.model.Resource) theResource, ADVISOR_40_50);
827                }
828
829                @Override
830                public IBaseResource searchParameterFromCanonical(SearchParameter theResource) {
831                        return VersionConvertorFactory_40_50.convertResource(theResource, ADVISOR_40_50);
832                }
833
834                @Override
835                public IBaseResource auditEventFromCanonical(AuditEvent theResource) {
836                        return theResource;
837                }
838
839                @Override
840                public IBaseConformance capabilityStatementFromCanonical(CapabilityStatement theResource) {
841                        return (IBaseConformance) VersionConvertorFactory_40_50.convertResource(theResource, ADVISOR_40_50);
842                }
843        }
844
845        private static class R4BStrategy implements IStrategy {
846
847                @Override
848                public CapabilityStatement capabilityStatementToCanonical(IBaseResource theCapabilityStatement) {
849                        return (CapabilityStatement) VersionConvertorFactory_43_50.convertResource(
850                                        (org.hl7.fhir.r4b.model.Resource) theCapabilityStatement, ADVISOR_43_50);
851                }
852
853                @Override
854                public Coding codingToCanonical(IBaseCoding theCoding) {
855                        org.hl7.fhir.r5.model.Coding r5coding = (org.hl7.fhir.r5.model.Coding)
856                                        VersionConvertorFactory_43_50.convertType((org.hl7.fhir.r4b.model.Coding) theCoding, ADVISOR_43_50);
857                        return (org.hl7.fhir.r4.model.Coding) VersionConvertorFactory_40_50.convertType(r5coding, ADVISOR_40_50);
858                }
859
860                @Override
861                public CodeableConcept codeableConceptToCanonical(IBaseDatatype theCodeableConcept) {
862                        org.hl7.fhir.r5.model.CodeableConcept r5coding =
863                                        (org.hl7.fhir.r5.model.CodeableConcept) VersionConvertorFactory_43_50.convertType(
864                                                        (org.hl7.fhir.r4b.model.CodeableConcept) theCodeableConcept, ADVISOR_43_50);
865                        return (org.hl7.fhir.r4.model.CodeableConcept)
866                                        VersionConvertorFactory_40_50.convertType(r5coding, ADVISOR_40_50);
867                }
868
869                @Override
870                public ValueSet valueSetToCanonical(IBaseResource theValueSet) {
871                        org.hl7.fhir.r5.model.ValueSet valueSetR5 =
872                                        (org.hl7.fhir.r5.model.ValueSet) VersionConvertorFactory_43_50.convertResource(
873                                                        (org.hl7.fhir.r4b.model.Resource) theValueSet, ADVISOR_43_50);
874                        return (org.hl7.fhir.r4.model.ValueSet)
875                                        VersionConvertorFactory_40_50.convertResource(valueSetR5, ADVISOR_40_50);
876                }
877
878                @Override
879                public CodeSystem codeSystemToCanonical(IBaseResource theCodeSystem) {
880                        org.hl7.fhir.r5.model.CodeSystem codeSystemR5 =
881                                        (org.hl7.fhir.r5.model.CodeSystem) VersionConvertorFactory_43_50.convertResource(
882                                                        (org.hl7.fhir.r4b.model.Resource) theCodeSystem, ADVISOR_43_50);
883                        return (org.hl7.fhir.r4.model.CodeSystem)
884                                        VersionConvertorFactory_40_50.convertResource(codeSystemR5, ADVISOR_40_50);
885                }
886
887                @Override
888                public IBaseResource valueSetFromCanonical(ValueSet theValueSet) {
889                        org.hl7.fhir.r5.model.ValueSet valueSetR5 = (org.hl7.fhir.r5.model.ValueSet)
890                                        VersionConvertorFactory_40_50.convertResource(theValueSet, ADVISOR_40_50);
891                        return VersionConvertorFactory_43_50.convertResource(valueSetR5, ADVISOR_43_50);
892                }
893
894                @Override
895                public ConceptMap conceptMapToCanonical(IBaseResource theConceptMap) {
896                        org.hl7.fhir.r5.model.ConceptMap conceptMapR5 =
897                                        (org.hl7.fhir.r5.model.ConceptMap) VersionConvertorFactory_43_50.convertResource(
898                                                        (org.hl7.fhir.r4b.model.Resource) theConceptMap, ADVISOR_43_50);
899                        return (ConceptMap) VersionConvertorFactory_40_50.convertResource(conceptMapR5, ADVISOR_40_50);
900                }
901
902                @Override
903                public SearchParameter searchParameterToCanonical(IBaseResource theSearchParameter) {
904                        return (SearchParameter) VersionConvertorFactory_43_50.convertResource(
905                                        (org.hl7.fhir.r4b.model.Resource) theSearchParameter, ADVISOR_43_50);
906                }
907
908                @Override
909                public IBaseParameters parametersFromCanonical(Parameters theParameters) {
910                        org.hl7.fhir.r5.model.Parameters parametersR5 = (org.hl7.fhir.r5.model.Parameters)
911                                        VersionConvertorFactory_40_50.convertResource(theParameters, ADVISOR_40_50);
912                        return (IBaseParameters) VersionConvertorFactory_43_50.convertResource(parametersR5, ADVISOR_43_50);
913                }
914
915                @Override
916                public StructureDefinition structureDefinitionToCanonical(IBaseResource theResource) {
917                        return (StructureDefinition) VersionConvertorFactory_43_50.convertResource(
918                                        (org.hl7.fhir.r4b.model.Resource) theResource, ADVISOR_43_50);
919                }
920
921                @Override
922                public IBaseResource structureDefinitionFromCanonical(StructureDefinition theResource) {
923                        return VersionConvertorFactory_43_50.convertResource(theResource, ADVISOR_43_50);
924                }
925
926                @Override
927                public IBaseResource valueSetFromValidatorCanonical(org.hl7.fhir.r5.model.ValueSet theResource) {
928                        return VersionConvertorFactory_43_50.convertResource(theResource, ADVISOR_43_50);
929                }
930
931                @Override
932                public org.hl7.fhir.r5.model.Resource resourceToValidatorCanonical(IBaseResource theResource) {
933                        return VersionConvertorFactory_43_50.convertResource(
934                                        (org.hl7.fhir.r4b.model.Resource) theResource, ADVISOR_43_50);
935                }
936
937                @Override
938                public org.hl7.fhir.r5.model.ValueSet valueSetToValidatorCanonical(IBaseResource theResource) {
939                        return (org.hl7.fhir.r5.model.ValueSet) VersionConvertorFactory_43_50.convertResource(
940                                        (org.hl7.fhir.r4b.model.Resource) theResource, ADVISOR_43_50);
941                }
942
943                @Override
944                public org.hl7.fhir.r5.model.CodeSystem codeSystemToValidatorCanonical(IBaseResource theResource) {
945                        return (org.hl7.fhir.r5.model.CodeSystem) VersionConvertorFactory_43_50.convertResource(
946                                        (org.hl7.fhir.r4b.model.Resource) theResource, ADVISOR_43_50);
947                }
948
949                @Override
950                public IBaseResource searchParameterFromCanonical(SearchParameter theResource) {
951                        return VersionConvertorFactory_43_50.convertResource(theResource, ADVISOR_43_50);
952                }
953
954                @Override
955                public IBaseResource auditEventFromCanonical(AuditEvent theResource) {
956                        org.hl7.fhir.r5.model.AuditEvent r5 = (org.hl7.fhir.r5.model.AuditEvent)
957                                        VersionConvertorFactory_40_50.convertResource(theResource, ADVISOR_40_50);
958                        return VersionConvertorFactory_43_50.convertResource(r5, ADVISOR_43_50);
959                }
960
961                @Override
962                public IBaseConformance capabilityStatementFromCanonical(CapabilityStatement theResource) {
963                        return (IBaseConformance) VersionConvertorFactory_43_50.convertResource(theResource, ADVISOR_43_50);
964                }
965        }
966
967        private static class R5Strategy implements IStrategy {
968
969                @Override
970                public CapabilityStatement capabilityStatementToCanonical(IBaseResource theCapabilityStatement) {
971                        return (CapabilityStatement) theCapabilityStatement;
972                }
973
974                @Override
975                public Coding codingToCanonical(IBaseCoding theCoding) {
976                        return (org.hl7.fhir.r4.model.Coding)
977                                        VersionConvertorFactory_40_50.convertType((org.hl7.fhir.r5.model.Coding) theCoding, ADVISOR_40_50);
978                }
979
980                @Override
981                public CodeableConcept codeableConceptToCanonical(IBaseDatatype theCodeableConcept) {
982                        return (org.hl7.fhir.r4.model.CodeableConcept) VersionConvertorFactory_40_50.convertType(
983                                        (org.hl7.fhir.r5.model.CodeableConcept) theCodeableConcept, ADVISOR_40_50);
984                }
985
986                @Override
987                public ValueSet valueSetToCanonical(IBaseResource theValueSet) {
988                        return (ValueSet) VersionConvertorFactory_40_50.convertResource(
989                                        (org.hl7.fhir.r5.model.ValueSet) theValueSet, ADVISOR_40_50);
990                }
991
992                @Override
993                public CodeSystem codeSystemToCanonical(IBaseResource theCodeSystem) {
994                        return (CodeSystem) VersionConvertorFactory_40_50.convertResource(
995                                        (org.hl7.fhir.r5.model.CodeSystem) theCodeSystem, ADVISOR_40_50);
996                }
997
998                @Override
999                public IBaseResource valueSetFromCanonical(ValueSet theValueSet) {
1000                        return VersionConvertorFactory_40_50.convertResource(theValueSet, ADVISOR_40_50);
1001                }
1002
1003                @Override
1004                public ConceptMap conceptMapToCanonical(IBaseResource theConceptMap) {
1005                        return (ConceptMap) VersionConvertorFactory_40_50.convertResource(
1006                                        (org.hl7.fhir.r5.model.ConceptMap) theConceptMap, ADVISOR_40_50);
1007                }
1008
1009                @Override
1010                public SearchParameter searchParameterToCanonical(IBaseResource theSearchParameter) {
1011                        return (SearchParameter) theSearchParameter;
1012                }
1013
1014                @Override
1015                public IBaseParameters parametersFromCanonical(Parameters theParameters) {
1016                        return (IBaseParameters) VersionConvertorFactory_40_50.convertResource(theParameters, ADVISOR_40_50);
1017                }
1018
1019                @Override
1020                public StructureDefinition structureDefinitionToCanonical(IBaseResource theResource) {
1021                        return (StructureDefinition) theResource;
1022                }
1023
1024                @Override
1025                public IBaseResource structureDefinitionFromCanonical(StructureDefinition theResource) {
1026                        return theResource;
1027                }
1028
1029                @Override
1030                public IBaseResource valueSetFromValidatorCanonical(org.hl7.fhir.r5.model.ValueSet theResource) {
1031                        return theResource;
1032                }
1033
1034                @Override
1035                public org.hl7.fhir.r5.model.Resource resourceToValidatorCanonical(IBaseResource theResource) {
1036                        return (org.hl7.fhir.r5.model.Resource) theResource;
1037                }
1038
1039                @Override
1040                public org.hl7.fhir.r5.model.ValueSet valueSetToValidatorCanonical(IBaseResource theResource) {
1041                        return (org.hl7.fhir.r5.model.ValueSet) theResource;
1042                }
1043
1044                @Override
1045                public org.hl7.fhir.r5.model.CodeSystem codeSystemToValidatorCanonical(IBaseResource theResource) {
1046                        return (org.hl7.fhir.r5.model.CodeSystem) theResource;
1047                }
1048
1049                @Override
1050                public IBaseResource searchParameterFromCanonical(SearchParameter theResource) {
1051                        return theResource;
1052                }
1053
1054                @Override
1055                public IBaseResource auditEventFromCanonical(AuditEvent theResource) {
1056                        return VersionConvertorFactory_40_50.convertResource(theResource, ADVISOR_40_50);
1057                }
1058
1059                @Override
1060                public IBaseConformance capabilityStatementFromCanonical(CapabilityStatement theResource) {
1061                        return theResource;
1062                }
1063        }
1064}