001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
033import java.util.ArrayList;
034import java.util.Date;
035import java.util.List;
036
037import org.hl7.fhir.exceptions.FHIRException;
038import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
039import org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence;
040import org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalenceEnumFactory;
041import org.hl7.fhir.r4.model.Enumerations.PublicationStatus;
042import org.hl7.fhir.r4.model.Enumerations.PublicationStatusEnumFactory;
043import org.hl7.fhir.utilities.Utilities;
044
045import ca.uhn.fhir.model.api.annotation.Block;
046import ca.uhn.fhir.model.api.annotation.Child;
047import ca.uhn.fhir.model.api.annotation.ChildOrder;
048import ca.uhn.fhir.model.api.annotation.Description;
049import ca.uhn.fhir.model.api.annotation.ResourceDef;
050import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
051
052/**
053 * A statement of relationships from one set of concepts to one or more other
054 * concepts - either concepts in code systems, or data element/data element
055 * concepts, or classes in class models.
056 */
057@ResourceDef(name = "ConceptMap", profile = "http://hl7.org/fhir/StructureDefinition/ConceptMap")
058@ChildOrder(names = { "url", "identifier", "version", "name", "title", "status", "experimental", "date", "publisher",
059    "contact", "description", "useContext", "jurisdiction", "purpose", "copyright", "source[x]", "target[x]", "group" })
060public class ConceptMap extends MetadataResource {
061
062  public enum ConceptMapGroupUnmappedMode {
063    /**
064     * Use the code as provided in the $translate request.
065     */
066    PROVIDED,
067    /**
068     * Use the code explicitly provided in the group.unmapped.
069     */
070    FIXED,
071    /**
072     * Use the map identified by the canonical URL in the url element.
073     */
074    OTHERMAP,
075    /**
076     * added to help the parsers with the generic types
077     */
078    NULL;
079
080    public static ConceptMapGroupUnmappedMode fromCode(String codeString) throws FHIRException {
081      if (codeString == null || "".equals(codeString))
082        return null;
083      if ("provided".equals(codeString))
084        return PROVIDED;
085      if ("fixed".equals(codeString))
086        return FIXED;
087      if ("other-map".equals(codeString))
088        return OTHERMAP;
089      if (Configuration.isAcceptInvalidEnums())
090        return null;
091      else
092        throw new FHIRException("Unknown ConceptMapGroupUnmappedMode code '" + codeString + "'");
093    }
094
095    public String toCode() {
096      switch (this) {
097      case PROVIDED:
098        return "provided";
099      case FIXED:
100        return "fixed";
101      case OTHERMAP:
102        return "other-map";
103      case NULL:
104        return null;
105      default:
106        return "?";
107      }
108    }
109
110    public String getSystem() {
111      switch (this) {
112      case PROVIDED:
113        return "http://hl7.org/fhir/conceptmap-unmapped-mode";
114      case FIXED:
115        return "http://hl7.org/fhir/conceptmap-unmapped-mode";
116      case OTHERMAP:
117        return "http://hl7.org/fhir/conceptmap-unmapped-mode";
118      case NULL:
119        return null;
120      default:
121        return "?";
122      }
123    }
124
125    public String getDefinition() {
126      switch (this) {
127      case PROVIDED:
128        return "Use the code as provided in the $translate request.";
129      case FIXED:
130        return "Use the code explicitly provided in the group.unmapped.";
131      case OTHERMAP:
132        return "Use the map identified by the canonical URL in the url element.";
133      case NULL:
134        return null;
135      default:
136        return "?";
137      }
138    }
139
140    public String getDisplay() {
141      switch (this) {
142      case PROVIDED:
143        return "Provided Code";
144      case FIXED:
145        return "Fixed Code";
146      case OTHERMAP:
147        return "Other Map";
148      case NULL:
149        return null;
150      default:
151        return "?";
152      }
153    }
154  }
155
156  public static class ConceptMapGroupUnmappedModeEnumFactory implements EnumFactory<ConceptMapGroupUnmappedMode> {
157    public ConceptMapGroupUnmappedMode fromCode(String codeString) throws IllegalArgumentException {
158      if (codeString == null || "".equals(codeString))
159        if (codeString == null || "".equals(codeString))
160          return null;
161      if ("provided".equals(codeString))
162        return ConceptMapGroupUnmappedMode.PROVIDED;
163      if ("fixed".equals(codeString))
164        return ConceptMapGroupUnmappedMode.FIXED;
165      if ("other-map".equals(codeString))
166        return ConceptMapGroupUnmappedMode.OTHERMAP;
167      throw new IllegalArgumentException("Unknown ConceptMapGroupUnmappedMode code '" + codeString + "'");
168    }
169
170    public Enumeration<ConceptMapGroupUnmappedMode> fromType(PrimitiveType<?> code) throws FHIRException {
171      if (code == null)
172        return null;
173      if (code.isEmpty())
174        return new Enumeration<ConceptMapGroupUnmappedMode>(this, ConceptMapGroupUnmappedMode.NULL, code);
175      String codeString = code.asStringValue();
176      if (codeString == null || "".equals(codeString))
177        return new Enumeration<ConceptMapGroupUnmappedMode>(this, ConceptMapGroupUnmappedMode.NULL, code);
178      if ("provided".equals(codeString))
179        return new Enumeration<ConceptMapGroupUnmappedMode>(this, ConceptMapGroupUnmappedMode.PROVIDED, code);
180      if ("fixed".equals(codeString))
181        return new Enumeration<ConceptMapGroupUnmappedMode>(this, ConceptMapGroupUnmappedMode.FIXED, code);
182      if ("other-map".equals(codeString))
183        return new Enumeration<ConceptMapGroupUnmappedMode>(this, ConceptMapGroupUnmappedMode.OTHERMAP, code);
184      throw new FHIRException("Unknown ConceptMapGroupUnmappedMode code '" + codeString + "'");
185    }
186
187    public String toCode(ConceptMapGroupUnmappedMode code) {
188       if (code == ConceptMapGroupUnmappedMode.NULL)
189           return null;
190       if (code == ConceptMapGroupUnmappedMode.PROVIDED)
191        return "provided";
192      if (code == ConceptMapGroupUnmappedMode.FIXED)
193        return "fixed";
194      if (code == ConceptMapGroupUnmappedMode.OTHERMAP)
195        return "other-map";
196      return "?";
197   }
198
199    public String toSystem(ConceptMapGroupUnmappedMode code) {
200      return code.getSystem();
201    }
202  }
203
204  @Block()
205  public static class ConceptMapGroupComponent extends BackboneElement implements IBaseBackboneElement {
206    /**
207     * An absolute URI that identifies the source system where the concepts to be
208     * mapped are defined.
209     */
210    @Child(name = "source", type = { UriType.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
211    @Description(shortDefinition = "Source system where concepts to be mapped are defined", formalDefinition = "An absolute URI that identifies the source system where the concepts to be mapped are defined.")
212    protected UriType source;
213
214    /**
215     * The specific version of the code system, as determined by the code system
216     * authority.
217     */
218    @Child(name = "sourceVersion", type = {
219        StringType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
220    @Description(shortDefinition = "Specific version of the  code system", formalDefinition = "The specific version of the code system, as determined by the code system authority.")
221    protected StringType sourceVersion;
222
223    /**
224     * An absolute URI that identifies the target system that the concepts will be
225     * mapped to.
226     */
227    @Child(name = "target", type = { UriType.class }, order = 3, min = 0, max = 1, modifier = false, summary = false)
228    @Description(shortDefinition = "Target system that the concepts are to be mapped to", formalDefinition = "An absolute URI that identifies the target system that the concepts will be mapped to.")
229    protected UriType target;
230
231    /**
232     * The specific version of the code system, as determined by the code system
233     * authority.
234     */
235    @Child(name = "targetVersion", type = {
236        StringType.class }, order = 4, min = 0, max = 1, modifier = false, summary = false)
237    @Description(shortDefinition = "Specific version of the  code system", formalDefinition = "The specific version of the code system, as determined by the code system authority.")
238    protected StringType targetVersion;
239
240    /**
241     * Mappings for an individual concept in the source to one or more concepts in
242     * the target.
243     */
244    @Child(name = "element", type = {}, order = 5, min = 1, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
245    @Description(shortDefinition = "Mappings for a concept from the source set", formalDefinition = "Mappings for an individual concept in the source to one or more concepts in the target.")
246    protected List<SourceElementComponent> element;
247
248    /**
249     * What to do when there is no mapping for the source concept. "Unmapped" does
250     * not include codes that are unmatched, and the unmapped element is ignored in
251     * a code is specified to have equivalence = unmatched.
252     */
253    @Child(name = "unmapped", type = {}, order = 6, min = 0, max = 1, modifier = false, summary = false)
254    @Description(shortDefinition = "What to do when there is no mapping for the source concept", formalDefinition = "What to do when there is no mapping for the source concept. \"Unmapped\" does not include codes that are unmatched, and the unmapped element is ignored in a code is specified to have equivalence = unmatched.")
255    protected ConceptMapGroupUnmappedComponent unmapped;
256
257    private static final long serialVersionUID = 1606357508L;
258
259    /**
260     * Constructor
261     */
262    public ConceptMapGroupComponent() {
263      super();
264    }
265
266    /**
267     * @return {@link #source} (An absolute URI that identifies the source system
268     *         where the concepts to be mapped are defined.). This is the underlying
269     *         object with id, value and extensions. The accessor "getSource" gives
270     *         direct access to the value
271     */
272    public UriType getSourceElement() {
273      if (this.source == null)
274        if (Configuration.errorOnAutoCreate())
275          throw new Error("Attempt to auto-create ConceptMapGroupComponent.source");
276        else if (Configuration.doAutoCreate())
277          this.source = new UriType(); // bb
278      return this.source;
279    }
280
281    public boolean hasSourceElement() {
282      return this.source != null && !this.source.isEmpty();
283    }
284
285    public boolean hasSource() {
286      return this.source != null && !this.source.isEmpty();
287    }
288
289    /**
290     * @param value {@link #source} (An absolute URI that identifies the source
291     *              system where the concepts to be mapped are defined.). This is
292     *              the underlying object with id, value and extensions. The
293     *              accessor "getSource" gives direct access to the value
294     */
295    public ConceptMapGroupComponent setSourceElement(UriType value) {
296      this.source = value;
297      return this;
298    }
299
300    /**
301     * @return An absolute URI that identifies the source system where the concepts
302     *         to be mapped are defined.
303     */
304    public String getSource() {
305      return this.source == null ? null : this.source.getValue();
306    }
307
308    /**
309     * @param value An absolute URI that identifies the source system where the
310     *              concepts to be mapped are defined.
311     */
312    public ConceptMapGroupComponent setSource(String value) {
313      if (Utilities.noString(value))
314        this.source = null;
315      else {
316        if (this.source == null)
317          this.source = new UriType();
318        this.source.setValue(value);
319      }
320      return this;
321    }
322
323    /**
324     * @return {@link #sourceVersion} (The specific version of the code system, as
325     *         determined by the code system authority.). This is the underlying
326     *         object with id, value and extensions. The accessor "getSourceVersion"
327     *         gives direct access to the value
328     */
329    public StringType getSourceVersionElement() {
330      if (this.sourceVersion == null)
331        if (Configuration.errorOnAutoCreate())
332          throw new Error("Attempt to auto-create ConceptMapGroupComponent.sourceVersion");
333        else if (Configuration.doAutoCreate())
334          this.sourceVersion = new StringType(); // bb
335      return this.sourceVersion;
336    }
337
338    public boolean hasSourceVersionElement() {
339      return this.sourceVersion != null && !this.sourceVersion.isEmpty();
340    }
341
342    public boolean hasSourceVersion() {
343      return this.sourceVersion != null && !this.sourceVersion.isEmpty();
344    }
345
346    /**
347     * @param value {@link #sourceVersion} (The specific version of the code system,
348     *              as determined by the code system authority.). This is the
349     *              underlying object with id, value and extensions. The accessor
350     *              "getSourceVersion" gives direct access to the value
351     */
352    public ConceptMapGroupComponent setSourceVersionElement(StringType value) {
353      this.sourceVersion = value;
354      return this;
355    }
356
357    /**
358     * @return The specific version of the code system, as determined by the code
359     *         system authority.
360     */
361    public String getSourceVersion() {
362      return this.sourceVersion == null ? null : this.sourceVersion.getValue();
363    }
364
365    /**
366     * @param value The specific version of the code system, as determined by the
367     *              code system authority.
368     */
369    public ConceptMapGroupComponent setSourceVersion(String value) {
370      if (Utilities.noString(value))
371        this.sourceVersion = null;
372      else {
373        if (this.sourceVersion == null)
374          this.sourceVersion = new StringType();
375        this.sourceVersion.setValue(value);
376      }
377      return this;
378    }
379
380    /**
381     * @return {@link #target} (An absolute URI that identifies the target system
382     *         that the concepts will be mapped to.). This is the underlying object
383     *         with id, value and extensions. The accessor "getTarget" gives direct
384     *         access to the value
385     */
386    public UriType getTargetElement() {
387      if (this.target == null)
388        if (Configuration.errorOnAutoCreate())
389          throw new Error("Attempt to auto-create ConceptMapGroupComponent.target");
390        else if (Configuration.doAutoCreate())
391          this.target = new UriType(); // bb
392      return this.target;
393    }
394
395    public boolean hasTargetElement() {
396      return this.target != null && !this.target.isEmpty();
397    }
398
399    public boolean hasTarget() {
400      return this.target != null && !this.target.isEmpty();
401    }
402
403    /**
404     * @param value {@link #target} (An absolute URI that identifies the target
405     *              system that the concepts will be mapped to.). This is the
406     *              underlying object with id, value and extensions. The accessor
407     *              "getTarget" gives direct access to the value
408     */
409    public ConceptMapGroupComponent setTargetElement(UriType value) {
410      this.target = value;
411      return this;
412    }
413
414    /**
415     * @return An absolute URI that identifies the target system that the concepts
416     *         will be mapped to.
417     */
418    public String getTarget() {
419      return this.target == null ? null : this.target.getValue();
420    }
421
422    /**
423     * @param value An absolute URI that identifies the target system that the
424     *              concepts will be mapped to.
425     */
426    public ConceptMapGroupComponent setTarget(String value) {
427      if (Utilities.noString(value))
428        this.target = null;
429      else {
430        if (this.target == null)
431          this.target = new UriType();
432        this.target.setValue(value);
433      }
434      return this;
435    }
436
437    /**
438     * @return {@link #targetVersion} (The specific version of the code system, as
439     *         determined by the code system authority.). This is the underlying
440     *         object with id, value and extensions. The accessor "getTargetVersion"
441     *         gives direct access to the value
442     */
443    public StringType getTargetVersionElement() {
444      if (this.targetVersion == null)
445        if (Configuration.errorOnAutoCreate())
446          throw new Error("Attempt to auto-create ConceptMapGroupComponent.targetVersion");
447        else if (Configuration.doAutoCreate())
448          this.targetVersion = new StringType(); // bb
449      return this.targetVersion;
450    }
451
452    public boolean hasTargetVersionElement() {
453      return this.targetVersion != null && !this.targetVersion.isEmpty();
454    }
455
456    public boolean hasTargetVersion() {
457      return this.targetVersion != null && !this.targetVersion.isEmpty();
458    }
459
460    /**
461     * @param value {@link #targetVersion} (The specific version of the code system,
462     *              as determined by the code system authority.). This is the
463     *              underlying object with id, value and extensions. The accessor
464     *              "getTargetVersion" gives direct access to the value
465     */
466    public ConceptMapGroupComponent setTargetVersionElement(StringType value) {
467      this.targetVersion = value;
468      return this;
469    }
470
471    /**
472     * @return The specific version of the code system, as determined by the code
473     *         system authority.
474     */
475    public String getTargetVersion() {
476      return this.targetVersion == null ? null : this.targetVersion.getValue();
477    }
478
479    /**
480     * @param value The specific version of the code system, as determined by the
481     *              code system authority.
482     */
483    public ConceptMapGroupComponent setTargetVersion(String value) {
484      if (Utilities.noString(value))
485        this.targetVersion = null;
486      else {
487        if (this.targetVersion == null)
488          this.targetVersion = new StringType();
489        this.targetVersion.setValue(value);
490      }
491      return this;
492    }
493
494    /**
495     * @return {@link #element} (Mappings for an individual concept in the source to
496     *         one or more concepts in the target.)
497     */
498    public List<SourceElementComponent> getElement() {
499      if (this.element == null)
500        this.element = new ArrayList<SourceElementComponent>();
501      return this.element;
502    }
503
504    /**
505     * @return Returns a reference to <code>this</code> for easy method chaining
506     */
507    public ConceptMapGroupComponent setElement(List<SourceElementComponent> theElement) {
508      this.element = theElement;
509      return this;
510    }
511
512    public boolean hasElement() {
513      if (this.element == null)
514        return false;
515      for (SourceElementComponent item : this.element)
516        if (!item.isEmpty())
517          return true;
518      return false;
519    }
520
521    public SourceElementComponent addElement() { // 3
522      SourceElementComponent t = new SourceElementComponent();
523      if (this.element == null)
524        this.element = new ArrayList<SourceElementComponent>();
525      this.element.add(t);
526      return t;
527    }
528
529    public ConceptMapGroupComponent addElement(SourceElementComponent t) { // 3
530      if (t == null)
531        return this;
532      if (this.element == null)
533        this.element = new ArrayList<SourceElementComponent>();
534      this.element.add(t);
535      return this;
536    }
537
538    /**
539     * @return The first repetition of repeating field {@link #element}, creating it
540     *         if it does not already exist
541     */
542    public SourceElementComponent getElementFirstRep() {
543      if (getElement().isEmpty()) {
544        addElement();
545      }
546      return getElement().get(0);
547    }
548
549    /**
550     * @return {@link #unmapped} (What to do when there is no mapping for the source
551     *         concept. "Unmapped" does not include codes that are unmatched, and
552     *         the unmapped element is ignored in a code is specified to have
553     *         equivalence = unmatched.)
554     */
555    public ConceptMapGroupUnmappedComponent getUnmapped() {
556      if (this.unmapped == null)
557        if (Configuration.errorOnAutoCreate())
558          throw new Error("Attempt to auto-create ConceptMapGroupComponent.unmapped");
559        else if (Configuration.doAutoCreate())
560          this.unmapped = new ConceptMapGroupUnmappedComponent(); // cc
561      return this.unmapped;
562    }
563
564    public boolean hasUnmapped() {
565      return this.unmapped != null && !this.unmapped.isEmpty();
566    }
567
568    /**
569     * @param value {@link #unmapped} (What to do when there is no mapping for the
570     *              source concept. "Unmapped" does not include codes that are
571     *              unmatched, and the unmapped element is ignored in a code is
572     *              specified to have equivalence = unmatched.)
573     */
574    public ConceptMapGroupComponent setUnmapped(ConceptMapGroupUnmappedComponent value) {
575      this.unmapped = value;
576      return this;
577    }
578
579    protected void listChildren(List<Property> children) {
580      super.listChildren(children);
581      children.add(new Property("source", "uri",
582          "An absolute URI that identifies the source system where the concepts to be mapped are defined.", 0, 1,
583          source));
584      children.add(new Property("sourceVersion", "string",
585          "The specific version of the code system, as determined by the code system authority.", 0, 1, sourceVersion));
586      children.add(new Property("target", "uri",
587          "An absolute URI that identifies the target system that the concepts will be mapped to.", 0, 1, target));
588      children.add(new Property("targetVersion", "string",
589          "The specific version of the code system, as determined by the code system authority.", 0, 1, targetVersion));
590      children.add(new Property("element", "",
591          "Mappings for an individual concept in the source to one or more concepts in the target.", 0,
592          java.lang.Integer.MAX_VALUE, element));
593      children.add(new Property("unmapped", "",
594          "What to do when there is no mapping for the source concept. \"Unmapped\" does not include codes that are unmatched, and the unmapped element is ignored in a code is specified to have equivalence = unmatched.",
595          0, 1, unmapped));
596    }
597
598    @Override
599    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
600      switch (_hash) {
601      case -896505829:
602        /* source */ return new Property("source", "uri",
603            "An absolute URI that identifies the source system where the concepts to be mapped are defined.", 0, 1,
604            source);
605      case 446171197:
606        /* sourceVersion */ return new Property("sourceVersion", "string",
607            "The specific version of the code system, as determined by the code system authority.", 0, 1,
608            sourceVersion);
609      case -880905839:
610        /* target */ return new Property("target", "uri",
611            "An absolute URI that identifies the target system that the concepts will be mapped to.", 0, 1, target);
612      case -1639412217:
613        /* targetVersion */ return new Property("targetVersion", "string",
614            "The specific version of the code system, as determined by the code system authority.", 0, 1,
615            targetVersion);
616      case -1662836996:
617        /* element */ return new Property("element", "",
618            "Mappings for an individual concept in the source to one or more concepts in the target.", 0,
619            java.lang.Integer.MAX_VALUE, element);
620      case -194857460:
621        /* unmapped */ return new Property("unmapped", "",
622            "What to do when there is no mapping for the source concept. \"Unmapped\" does not include codes that are unmatched, and the unmapped element is ignored in a code is specified to have equivalence = unmatched.",
623            0, 1, unmapped);
624      default:
625        return super.getNamedProperty(_hash, _name, _checkValid);
626      }
627
628    }
629
630    @Override
631    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
632      switch (hash) {
633      case -896505829:
634        /* source */ return this.source == null ? new Base[0] : new Base[] { this.source }; // UriType
635      case 446171197:
636        /* sourceVersion */ return this.sourceVersion == null ? new Base[0] : new Base[] { this.sourceVersion }; // StringType
637      case -880905839:
638        /* target */ return this.target == null ? new Base[0] : new Base[] { this.target }; // UriType
639      case -1639412217:
640        /* targetVersion */ return this.targetVersion == null ? new Base[0] : new Base[] { this.targetVersion }; // StringType
641      case -1662836996:
642        /* element */ return this.element == null ? new Base[0] : this.element.toArray(new Base[this.element.size()]); // SourceElementComponent
643      case -194857460:
644        /* unmapped */ return this.unmapped == null ? new Base[0] : new Base[] { this.unmapped }; // ConceptMapGroupUnmappedComponent
645      default:
646        return super.getProperty(hash, name, checkValid);
647      }
648
649    }
650
651    @Override
652    public Base setProperty(int hash, String name, Base value) throws FHIRException {
653      switch (hash) {
654      case -896505829: // source
655        this.source = castToUri(value); // UriType
656        return value;
657      case 446171197: // sourceVersion
658        this.sourceVersion = castToString(value); // StringType
659        return value;
660      case -880905839: // target
661        this.target = castToUri(value); // UriType
662        return value;
663      case -1639412217: // targetVersion
664        this.targetVersion = castToString(value); // StringType
665        return value;
666      case -1662836996: // element
667        this.getElement().add((SourceElementComponent) value); // SourceElementComponent
668        return value;
669      case -194857460: // unmapped
670        this.unmapped = (ConceptMapGroupUnmappedComponent) value; // ConceptMapGroupUnmappedComponent
671        return value;
672      default:
673        return super.setProperty(hash, name, value);
674      }
675
676    }
677
678    @Override
679    public Base setProperty(String name, Base value) throws FHIRException {
680      if (name.equals("source")) {
681        this.source = castToUri(value); // UriType
682      } else if (name.equals("sourceVersion")) {
683        this.sourceVersion = castToString(value); // StringType
684      } else if (name.equals("target")) {
685        this.target = castToUri(value); // UriType
686      } else if (name.equals("targetVersion")) {
687        this.targetVersion = castToString(value); // StringType
688      } else if (name.equals("element")) {
689        this.getElement().add((SourceElementComponent) value);
690      } else if (name.equals("unmapped")) {
691        this.unmapped = (ConceptMapGroupUnmappedComponent) value; // ConceptMapGroupUnmappedComponent
692      } else
693        return super.setProperty(name, value);
694      return value;
695    }
696
697  @Override
698  public void removeChild(String name, Base value) throws FHIRException {
699      if (name.equals("source")) {
700        this.source = null;
701      } else if (name.equals("sourceVersion")) {
702        this.sourceVersion = null;
703      } else if (name.equals("target")) {
704        this.target = null;
705      } else if (name.equals("targetVersion")) {
706        this.targetVersion = null;
707      } else if (name.equals("element")) {
708        this.getElement().remove((SourceElementComponent) value);
709      } else if (name.equals("unmapped")) {
710        this.unmapped = (ConceptMapGroupUnmappedComponent) value; // ConceptMapGroupUnmappedComponent
711      } else
712        super.removeChild(name, value);
713      
714    }
715
716    @Override
717    public Base makeProperty(int hash, String name) throws FHIRException {
718      switch (hash) {
719      case -896505829:
720        return getSourceElement();
721      case 446171197:
722        return getSourceVersionElement();
723      case -880905839:
724        return getTargetElement();
725      case -1639412217:
726        return getTargetVersionElement();
727      case -1662836996:
728        return addElement();
729      case -194857460:
730        return getUnmapped();
731      default:
732        return super.makeProperty(hash, name);
733      }
734
735    }
736
737    @Override
738    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
739      switch (hash) {
740      case -896505829:
741        /* source */ return new String[] { "uri" };
742      case 446171197:
743        /* sourceVersion */ return new String[] { "string" };
744      case -880905839:
745        /* target */ return new String[] { "uri" };
746      case -1639412217:
747        /* targetVersion */ return new String[] { "string" };
748      case -1662836996:
749        /* element */ return new String[] {};
750      case -194857460:
751        /* unmapped */ return new String[] {};
752      default:
753        return super.getTypesForProperty(hash, name);
754      }
755
756    }
757
758    @Override
759    public Base addChild(String name) throws FHIRException {
760      if (name.equals("source")) {
761        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.source");
762      } else if (name.equals("sourceVersion")) {
763        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.sourceVersion");
764      } else if (name.equals("target")) {
765        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.target");
766      } else if (name.equals("targetVersion")) {
767        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.targetVersion");
768      } else if (name.equals("element")) {
769        return addElement();
770      } else if (name.equals("unmapped")) {
771        this.unmapped = new ConceptMapGroupUnmappedComponent();
772        return this.unmapped;
773      } else
774        return super.addChild(name);
775    }
776
777    public ConceptMapGroupComponent copy() {
778      ConceptMapGroupComponent dst = new ConceptMapGroupComponent();
779      copyValues(dst);
780      return dst;
781    }
782
783    public void copyValues(ConceptMapGroupComponent dst) {
784      super.copyValues(dst);
785      dst.source = source == null ? null : source.copy();
786      dst.sourceVersion = sourceVersion == null ? null : sourceVersion.copy();
787      dst.target = target == null ? null : target.copy();
788      dst.targetVersion = targetVersion == null ? null : targetVersion.copy();
789      if (element != null) {
790        dst.element = new ArrayList<SourceElementComponent>();
791        for (SourceElementComponent i : element)
792          dst.element.add(i.copy());
793      }
794      ;
795      dst.unmapped = unmapped == null ? null : unmapped.copy();
796    }
797
798    @Override
799    public boolean equalsDeep(Base other_) {
800      if (!super.equalsDeep(other_))
801        return false;
802      if (!(other_ instanceof ConceptMapGroupComponent))
803        return false;
804      ConceptMapGroupComponent o = (ConceptMapGroupComponent) other_;
805      return compareDeep(source, o.source, true) && compareDeep(sourceVersion, o.sourceVersion, true)
806          && compareDeep(target, o.target, true) && compareDeep(targetVersion, o.targetVersion, true)
807          && compareDeep(element, o.element, true) && compareDeep(unmapped, o.unmapped, true);
808    }
809
810    @Override
811    public boolean equalsShallow(Base other_) {
812      if (!super.equalsShallow(other_))
813        return false;
814      if (!(other_ instanceof ConceptMapGroupComponent))
815        return false;
816      ConceptMapGroupComponent o = (ConceptMapGroupComponent) other_;
817      return compareValues(source, o.source, true) && compareValues(sourceVersion, o.sourceVersion, true)
818          && compareValues(target, o.target, true) && compareValues(targetVersion, o.targetVersion, true);
819    }
820
821    public boolean isEmpty() {
822      return super.isEmpty()
823          && ca.uhn.fhir.util.ElementUtil.isEmpty(source, sourceVersion, target, targetVersion, element, unmapped);
824    }
825
826    public String fhirType() {
827      return "ConceptMap.group";
828
829    }
830
831  }
832
833  @Block()
834  public static class SourceElementComponent extends BackboneElement implements IBaseBackboneElement {
835    /**
836     * Identity (code or path) or the element/item being mapped.
837     */
838    @Child(name = "code", type = { CodeType.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
839    @Description(shortDefinition = "Identifies element being mapped", formalDefinition = "Identity (code or path) or the element/item being mapped.")
840    protected CodeType code;
841
842    /**
843     * The display for the code. The display is only provided to help editors when
844     * editing the concept map.
845     */
846    @Child(name = "display", type = {
847        StringType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
848    @Description(shortDefinition = "Display for the code", formalDefinition = "The display for the code. The display is only provided to help editors when editing the concept map.")
849    protected StringType display;
850
851    /**
852     * A concept from the target value set that this concept maps to.
853     */
854    @Child(name = "target", type = {}, order = 3, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
855    @Description(shortDefinition = "Concept in target system for element", formalDefinition = "A concept from the target value set that this concept maps to.")
856    protected List<TargetElementComponent> target;
857
858    private static final long serialVersionUID = -1115258852L;
859
860    /**
861     * Constructor
862     */
863    public SourceElementComponent() {
864      super();
865    }
866
867    /**
868     * @return {@link #code} (Identity (code or path) or the element/item being
869     *         mapped.). This is the underlying object with id, value and
870     *         extensions. The accessor "getCode" gives direct access to the value
871     */
872    public CodeType getCodeElement() {
873      if (this.code == null)
874        if (Configuration.errorOnAutoCreate())
875          throw new Error("Attempt to auto-create SourceElementComponent.code");
876        else if (Configuration.doAutoCreate())
877          this.code = new CodeType(); // bb
878      return this.code;
879    }
880
881    public boolean hasCodeElement() {
882      return this.code != null && !this.code.isEmpty();
883    }
884
885    public boolean hasCode() {
886      return this.code != null && !this.code.isEmpty();
887    }
888
889    /**
890     * @param value {@link #code} (Identity (code or path) or the element/item being
891     *              mapped.). This is the underlying object with id, value and
892     *              extensions. The accessor "getCode" gives direct access to the
893     *              value
894     */
895    public SourceElementComponent setCodeElement(CodeType value) {
896      this.code = value;
897      return this;
898    }
899
900    /**
901     * @return Identity (code or path) or the element/item being mapped.
902     */
903    public String getCode() {
904      return this.code == null ? null : this.code.getValue();
905    }
906
907    /**
908     * @param value Identity (code or path) or the element/item being mapped.
909     */
910    public SourceElementComponent setCode(String value) {
911      if (Utilities.noString(value))
912        this.code = null;
913      else {
914        if (this.code == null)
915          this.code = new CodeType();
916        this.code.setValue(value);
917      }
918      return this;
919    }
920
921    /**
922     * @return {@link #display} (The display for the code. The display is only
923     *         provided to help editors when editing the concept map.). This is the
924     *         underlying object with id, value and extensions. The accessor
925     *         "getDisplay" gives direct access to the value
926     */
927    public StringType getDisplayElement() {
928      if (this.display == null)
929        if (Configuration.errorOnAutoCreate())
930          throw new Error("Attempt to auto-create SourceElementComponent.display");
931        else if (Configuration.doAutoCreate())
932          this.display = new StringType(); // bb
933      return this.display;
934    }
935
936    public boolean hasDisplayElement() {
937      return this.display != null && !this.display.isEmpty();
938    }
939
940    public boolean hasDisplay() {
941      return this.display != null && !this.display.isEmpty();
942    }
943
944    /**
945     * @param value {@link #display} (The display for the code. The display is only
946     *              provided to help editors when editing the concept map.). This is
947     *              the underlying object with id, value and extensions. The
948     *              accessor "getDisplay" gives direct access to the value
949     */
950    public SourceElementComponent setDisplayElement(StringType value) {
951      this.display = value;
952      return this;
953    }
954
955    /**
956     * @return The display for the code. The display is only provided to help
957     *         editors when editing the concept map.
958     */
959    public String getDisplay() {
960      return this.display == null ? null : this.display.getValue();
961    }
962
963    /**
964     * @param value The display for the code. The display is only provided to help
965     *              editors when editing the concept map.
966     */
967    public SourceElementComponent setDisplay(String value) {
968      if (Utilities.noString(value))
969        this.display = null;
970      else {
971        if (this.display == null)
972          this.display = new StringType();
973        this.display.setValue(value);
974      }
975      return this;
976    }
977
978    /**
979     * @return {@link #target} (A concept from the target value set that this
980     *         concept maps to.)
981     */
982    public List<TargetElementComponent> getTarget() {
983      if (this.target == null)
984        this.target = new ArrayList<TargetElementComponent>();
985      return this.target;
986    }
987
988    /**
989     * @return Returns a reference to <code>this</code> for easy method chaining
990     */
991    public SourceElementComponent setTarget(List<TargetElementComponent> theTarget) {
992      this.target = theTarget;
993      return this;
994    }
995
996    public boolean hasTarget() {
997      if (this.target == null)
998        return false;
999      for (TargetElementComponent item : this.target)
1000        if (!item.isEmpty())
1001          return true;
1002      return false;
1003    }
1004
1005    public TargetElementComponent addTarget() { // 3
1006      TargetElementComponent t = new TargetElementComponent();
1007      if (this.target == null)
1008        this.target = new ArrayList<TargetElementComponent>();
1009      this.target.add(t);
1010      return t;
1011    }
1012
1013    public SourceElementComponent addTarget(TargetElementComponent t) { // 3
1014      if (t == null)
1015        return this;
1016      if (this.target == null)
1017        this.target = new ArrayList<TargetElementComponent>();
1018      this.target.add(t);
1019      return this;
1020    }
1021
1022    /**
1023     * @return The first repetition of repeating field {@link #target}, creating it
1024     *         if it does not already exist
1025     */
1026    public TargetElementComponent getTargetFirstRep() {
1027      if (getTarget().isEmpty()) {
1028        addTarget();
1029      }
1030      return getTarget().get(0);
1031    }
1032
1033    protected void listChildren(List<Property> children) {
1034      super.listChildren(children);
1035      children
1036          .add(new Property("code", "code", "Identity (code or path) or the element/item being mapped.", 0, 1, code));
1037      children.add(new Property("display", "string",
1038          "The display for the code. The display is only provided to help editors when editing the concept map.", 0, 1,
1039          display));
1040      children.add(new Property("target", "", "A concept from the target value set that this concept maps to.", 0,
1041          java.lang.Integer.MAX_VALUE, target));
1042    }
1043
1044    @Override
1045    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1046      switch (_hash) {
1047      case 3059181:
1048        /* code */ return new Property("code", "code", "Identity (code or path) or the element/item being mapped.", 0,
1049            1, code);
1050      case 1671764162:
1051        /* display */ return new Property("display", "string",
1052            "The display for the code. The display is only provided to help editors when editing the concept map.", 0,
1053            1, display);
1054      case -880905839:
1055        /* target */ return new Property("target", "", "A concept from the target value set that this concept maps to.",
1056            0, java.lang.Integer.MAX_VALUE, target);
1057      default:
1058        return super.getNamedProperty(_hash, _name, _checkValid);
1059      }
1060
1061    }
1062
1063    @Override
1064    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1065      switch (hash) {
1066      case 3059181:
1067        /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeType
1068      case 1671764162:
1069        /* display */ return this.display == null ? new Base[0] : new Base[] { this.display }; // StringType
1070      case -880905839:
1071        /* target */ return this.target == null ? new Base[0] : this.target.toArray(new Base[this.target.size()]); // TargetElementComponent
1072      default:
1073        return super.getProperty(hash, name, checkValid);
1074      }
1075
1076    }
1077
1078    @Override
1079    public Base setProperty(int hash, String name, Base value) throws FHIRException {
1080      switch (hash) {
1081      case 3059181: // code
1082        this.code = castToCode(value); // CodeType
1083        return value;
1084      case 1671764162: // display
1085        this.display = castToString(value); // StringType
1086        return value;
1087      case -880905839: // target
1088        this.getTarget().add((TargetElementComponent) value); // TargetElementComponent
1089        return value;
1090      default:
1091        return super.setProperty(hash, name, value);
1092      }
1093
1094    }
1095
1096    @Override
1097    public Base setProperty(String name, Base value) throws FHIRException {
1098      if (name.equals("code")) {
1099        this.code = castToCode(value); // CodeType
1100      } else if (name.equals("display")) {
1101        this.display = castToString(value); // StringType
1102      } else if (name.equals("target")) {
1103        this.getTarget().add((TargetElementComponent) value);
1104      } else
1105        return super.setProperty(name, value);
1106      return value;
1107    }
1108
1109  @Override
1110  public void removeChild(String name, Base value) throws FHIRException {
1111      if (name.equals("code")) {
1112        this.code = null;
1113      } else if (name.equals("display")) {
1114        this.display = null;
1115      } else if (name.equals("target")) {
1116        this.getTarget().remove((TargetElementComponent) value);
1117      } else
1118        super.removeChild(name, value);
1119      
1120    }
1121
1122    @Override
1123    public Base makeProperty(int hash, String name) throws FHIRException {
1124      switch (hash) {
1125      case 3059181:
1126        return getCodeElement();
1127      case 1671764162:
1128        return getDisplayElement();
1129      case -880905839:
1130        return addTarget();
1131      default:
1132        return super.makeProperty(hash, name);
1133      }
1134
1135    }
1136
1137    @Override
1138    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1139      switch (hash) {
1140      case 3059181:
1141        /* code */ return new String[] { "code" };
1142      case 1671764162:
1143        /* display */ return new String[] { "string" };
1144      case -880905839:
1145        /* target */ return new String[] {};
1146      default:
1147        return super.getTypesForProperty(hash, name);
1148      }
1149
1150    }
1151
1152    @Override
1153    public Base addChild(String name) throws FHIRException {
1154      if (name.equals("code")) {
1155        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.code");
1156      } else if (name.equals("display")) {
1157        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.display");
1158      } else if (name.equals("target")) {
1159        return addTarget();
1160      } else
1161        return super.addChild(name);
1162    }
1163
1164    public SourceElementComponent copy() {
1165      SourceElementComponent dst = new SourceElementComponent();
1166      copyValues(dst);
1167      return dst;
1168    }
1169
1170    public void copyValues(SourceElementComponent dst) {
1171      super.copyValues(dst);
1172      dst.code = code == null ? null : code.copy();
1173      dst.display = display == null ? null : display.copy();
1174      if (target != null) {
1175        dst.target = new ArrayList<TargetElementComponent>();
1176        for (TargetElementComponent i : target)
1177          dst.target.add(i.copy());
1178      }
1179      ;
1180    }
1181
1182    @Override
1183    public boolean equalsDeep(Base other_) {
1184      if (!super.equalsDeep(other_))
1185        return false;
1186      if (!(other_ instanceof SourceElementComponent))
1187        return false;
1188      SourceElementComponent o = (SourceElementComponent) other_;
1189      return compareDeep(code, o.code, true) && compareDeep(display, o.display, true)
1190          && compareDeep(target, o.target, true);
1191    }
1192
1193    @Override
1194    public boolean equalsShallow(Base other_) {
1195      if (!super.equalsShallow(other_))
1196        return false;
1197      if (!(other_ instanceof SourceElementComponent))
1198        return false;
1199      SourceElementComponent o = (SourceElementComponent) other_;
1200      return compareValues(code, o.code, true) && compareValues(display, o.display, true);
1201    }
1202
1203    public boolean isEmpty() {
1204      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, display, target);
1205    }
1206
1207    public String fhirType() {
1208      return "ConceptMap.group.element";
1209
1210    }
1211
1212  }
1213
1214  @Block()
1215  public static class TargetElementComponent extends BackboneElement implements IBaseBackboneElement {
1216    /**
1217     * Identity (code or path) or the element/item that the map refers to.
1218     */
1219    @Child(name = "code", type = { CodeType.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
1220    @Description(shortDefinition = "Code that identifies the target element", formalDefinition = "Identity (code or path) or the element/item that the map refers to.")
1221    protected CodeType code;
1222
1223    /**
1224     * The display for the code. The display is only provided to help editors when
1225     * editing the concept map.
1226     */
1227    @Child(name = "display", type = {
1228        StringType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
1229    @Description(shortDefinition = "Display for the code", formalDefinition = "The display for the code. The display is only provided to help editors when editing the concept map.")
1230    protected StringType display;
1231
1232    /**
1233     * The equivalence between the source and target concepts (counting for the
1234     * dependencies and products). The equivalence is read from target to source
1235     * (e.g. the target is 'wider' than the source).
1236     */
1237    @Child(name = "equivalence", type = {
1238        CodeType.class }, order = 3, min = 1, max = 1, modifier = true, summary = false)
1239    @Description(shortDefinition = "relatedto | equivalent | equal | wider | subsumes | narrower | specializes | inexact | unmatched | disjoint", formalDefinition = "The equivalence between the source and target concepts (counting for the dependencies and products). The equivalence is read from target to source (e.g. the target is 'wider' than the source).")
1240    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/concept-map-equivalence")
1241    protected Enumeration<ConceptMapEquivalence> equivalence;
1242
1243    /**
1244     * A description of status/issues in mapping that conveys additional information
1245     * not represented in the structured data.
1246     */
1247    @Child(name = "comment", type = {
1248        StringType.class }, order = 4, min = 0, max = 1, modifier = false, summary = false)
1249    @Description(shortDefinition = "Description of status/issues in mapping", formalDefinition = "A description of status/issues in mapping that conveys additional information not represented in  the structured data.")
1250    protected StringType comment;
1251
1252    /**
1253     * A set of additional dependencies for this mapping to hold. This mapping is
1254     * only applicable if the specified element can be resolved, and it has the
1255     * specified value.
1256     */
1257    @Child(name = "dependsOn", type = {}, order = 5, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1258    @Description(shortDefinition = "Other elements required for this mapping (from context)", formalDefinition = "A set of additional dependencies for this mapping to hold. This mapping is only applicable if the specified element can be resolved, and it has the specified value.")
1259    protected List<OtherElementComponent> dependsOn;
1260
1261    /**
1262     * A set of additional outcomes from this mapping to other elements. To properly
1263     * execute this mapping, the specified element must be mapped to some data
1264     * element or source that is in context. The mapping may still be useful without
1265     * a place for the additional data elements, but the equivalence cannot be
1266     * relied on.
1267     */
1268    @Child(name = "product", type = {
1269        OtherElementComponent.class }, order = 6, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1270    @Description(shortDefinition = "Other concepts that this mapping also produces", formalDefinition = "A set of additional outcomes from this mapping to other elements. To properly execute this mapping, the specified element must be mapped to some data element or source that is in context. The mapping may still be useful without a place for the additional data elements, but the equivalence cannot be relied on.")
1271    protected List<OtherElementComponent> product;
1272
1273    private static final long serialVersionUID = -2008997477L;
1274
1275    /**
1276     * Constructor
1277     */
1278    public TargetElementComponent() {
1279      super();
1280    }
1281
1282    /**
1283     * Constructor
1284     */
1285    public TargetElementComponent(Enumeration<ConceptMapEquivalence> equivalence) {
1286      super();
1287      this.equivalence = equivalence;
1288    }
1289
1290    /**
1291     * @return {@link #code} (Identity (code or path) or the element/item that the
1292     *         map refers to.). This is the underlying object with id, value and
1293     *         extensions. The accessor "getCode" gives direct access to the value
1294     */
1295    public CodeType getCodeElement() {
1296      if (this.code == null)
1297        if (Configuration.errorOnAutoCreate())
1298          throw new Error("Attempt to auto-create TargetElementComponent.code");
1299        else if (Configuration.doAutoCreate())
1300          this.code = new CodeType(); // bb
1301      return this.code;
1302    }
1303
1304    public boolean hasCodeElement() {
1305      return this.code != null && !this.code.isEmpty();
1306    }
1307
1308    public boolean hasCode() {
1309      return this.code != null && !this.code.isEmpty();
1310    }
1311
1312    /**
1313     * @param value {@link #code} (Identity (code or path) or the element/item that
1314     *              the map refers to.). This is the underlying object with id,
1315     *              value and extensions. The accessor "getCode" gives direct access
1316     *              to the value
1317     */
1318    public TargetElementComponent setCodeElement(CodeType value) {
1319      this.code = value;
1320      return this;
1321    }
1322
1323    /**
1324     * @return Identity (code or path) or the element/item that the map refers to.
1325     */
1326    public String getCode() {
1327      return this.code == null ? null : this.code.getValue();
1328    }
1329
1330    /**
1331     * @param value Identity (code or path) or the element/item that the map refers
1332     *              to.
1333     */
1334    public TargetElementComponent setCode(String value) {
1335      if (Utilities.noString(value))
1336        this.code = null;
1337      else {
1338        if (this.code == null)
1339          this.code = new CodeType();
1340        this.code.setValue(value);
1341      }
1342      return this;
1343    }
1344
1345    /**
1346     * @return {@link #display} (The display for the code. The display is only
1347     *         provided to help editors when editing the concept map.). This is the
1348     *         underlying object with id, value and extensions. The accessor
1349     *         "getDisplay" gives direct access to the value
1350     */
1351    public StringType getDisplayElement() {
1352      if (this.display == null)
1353        if (Configuration.errorOnAutoCreate())
1354          throw new Error("Attempt to auto-create TargetElementComponent.display");
1355        else if (Configuration.doAutoCreate())
1356          this.display = new StringType(); // bb
1357      return this.display;
1358    }
1359
1360    public boolean hasDisplayElement() {
1361      return this.display != null && !this.display.isEmpty();
1362    }
1363
1364    public boolean hasDisplay() {
1365      return this.display != null && !this.display.isEmpty();
1366    }
1367
1368    /**
1369     * @param value {@link #display} (The display for the code. The display is only
1370     *              provided to help editors when editing the concept map.). This is
1371     *              the underlying object with id, value and extensions. The
1372     *              accessor "getDisplay" gives direct access to the value
1373     */
1374    public TargetElementComponent setDisplayElement(StringType value) {
1375      this.display = value;
1376      return this;
1377    }
1378
1379    /**
1380     * @return The display for the code. The display is only provided to help
1381     *         editors when editing the concept map.
1382     */
1383    public String getDisplay() {
1384      return this.display == null ? null : this.display.getValue();
1385    }
1386
1387    /**
1388     * @param value The display for the code. The display is only provided to help
1389     *              editors when editing the concept map.
1390     */
1391    public TargetElementComponent setDisplay(String value) {
1392      if (Utilities.noString(value))
1393        this.display = null;
1394      else {
1395        if (this.display == null)
1396          this.display = new StringType();
1397        this.display.setValue(value);
1398      }
1399      return this;
1400    }
1401
1402    /**
1403     * @return {@link #equivalence} (The equivalence between the source and target
1404     *         concepts (counting for the dependencies and products). The
1405     *         equivalence is read from target to source (e.g. the target is 'wider'
1406     *         than the source).). This is the underlying object with id, value and
1407     *         extensions. The accessor "getEquivalence" gives direct access to the
1408     *         value
1409     */
1410    public Enumeration<ConceptMapEquivalence> getEquivalenceElement() {
1411      if (this.equivalence == null)
1412        if (Configuration.errorOnAutoCreate())
1413          throw new Error("Attempt to auto-create TargetElementComponent.equivalence");
1414        else if (Configuration.doAutoCreate())
1415          this.equivalence = new Enumeration<ConceptMapEquivalence>(new ConceptMapEquivalenceEnumFactory()); // bb
1416      return this.equivalence;
1417    }
1418
1419    public boolean hasEquivalenceElement() {
1420      return this.equivalence != null && !this.equivalence.isEmpty();
1421    }
1422
1423    public boolean hasEquivalence() {
1424      return this.equivalence != null && !this.equivalence.isEmpty();
1425    }
1426
1427    /**
1428     * @param value {@link #equivalence} (The equivalence between the source and
1429     *              target concepts (counting for the dependencies and products).
1430     *              The equivalence is read from target to source (e.g. the target
1431     *              is 'wider' than the source).). This is the underlying object
1432     *              with id, value and extensions. The accessor "getEquivalence"
1433     *              gives direct access to the value
1434     */
1435    public TargetElementComponent setEquivalenceElement(Enumeration<ConceptMapEquivalence> value) {
1436      this.equivalence = value;
1437      return this;
1438    }
1439
1440    /**
1441     * @return The equivalence between the source and target concepts (counting for
1442     *         the dependencies and products). The equivalence is read from target
1443     *         to source (e.g. the target is 'wider' than the source).
1444     */
1445    public ConceptMapEquivalence getEquivalence() {
1446      return this.equivalence == null ? null : this.equivalence.getValue();
1447    }
1448
1449    /**
1450     * @param value The equivalence between the source and target concepts (counting
1451     *              for the dependencies and products). The equivalence is read from
1452     *              target to source (e.g. the target is 'wider' than the source).
1453     */
1454    public TargetElementComponent setEquivalence(ConceptMapEquivalence value) {
1455      if (this.equivalence == null)
1456        this.equivalence = new Enumeration<ConceptMapEquivalence>(new ConceptMapEquivalenceEnumFactory());
1457      this.equivalence.setValue(value);
1458      return this;
1459    }
1460
1461    /**
1462     * @return {@link #comment} (A description of status/issues in mapping that
1463     *         conveys additional information not represented in the structured
1464     *         data.). This is the underlying object with id, value and extensions.
1465     *         The accessor "getComment" gives direct access to the value
1466     */
1467    public StringType getCommentElement() {
1468      if (this.comment == null)
1469        if (Configuration.errorOnAutoCreate())
1470          throw new Error("Attempt to auto-create TargetElementComponent.comment");
1471        else if (Configuration.doAutoCreate())
1472          this.comment = new StringType(); // bb
1473      return this.comment;
1474    }
1475
1476    public boolean hasCommentElement() {
1477      return this.comment != null && !this.comment.isEmpty();
1478    }
1479
1480    public boolean hasComment() {
1481      return this.comment != null && !this.comment.isEmpty();
1482    }
1483
1484    /**
1485     * @param value {@link #comment} (A description of status/issues in mapping that
1486     *              conveys additional information not represented in the structured
1487     *              data.). This is the underlying object with id, value and
1488     *              extensions. The accessor "getComment" gives direct access to the
1489     *              value
1490     */
1491    public TargetElementComponent setCommentElement(StringType value) {
1492      this.comment = value;
1493      return this;
1494    }
1495
1496    /**
1497     * @return A description of status/issues in mapping that conveys additional
1498     *         information not represented in the structured data.
1499     */
1500    public String getComment() {
1501      return this.comment == null ? null : this.comment.getValue();
1502    }
1503
1504    /**
1505     * @param value A description of status/issues in mapping that conveys
1506     *              additional information not represented in the structured data.
1507     */
1508    public TargetElementComponent setComment(String value) {
1509      if (Utilities.noString(value))
1510        this.comment = null;
1511      else {
1512        if (this.comment == null)
1513          this.comment = new StringType();
1514        this.comment.setValue(value);
1515      }
1516      return this;
1517    }
1518
1519    /**
1520     * @return {@link #dependsOn} (A set of additional dependencies for this mapping
1521     *         to hold. This mapping is only applicable if the specified element can
1522     *         be resolved, and it has the specified value.)
1523     */
1524    public List<OtherElementComponent> getDependsOn() {
1525      if (this.dependsOn == null)
1526        this.dependsOn = new ArrayList<OtherElementComponent>();
1527      return this.dependsOn;
1528    }
1529
1530    /**
1531     * @return Returns a reference to <code>this</code> for easy method chaining
1532     */
1533    public TargetElementComponent setDependsOn(List<OtherElementComponent> theDependsOn) {
1534      this.dependsOn = theDependsOn;
1535      return this;
1536    }
1537
1538    public boolean hasDependsOn() {
1539      if (this.dependsOn == null)
1540        return false;
1541      for (OtherElementComponent item : this.dependsOn)
1542        if (!item.isEmpty())
1543          return true;
1544      return false;
1545    }
1546
1547    public OtherElementComponent addDependsOn() { // 3
1548      OtherElementComponent t = new OtherElementComponent();
1549      if (this.dependsOn == null)
1550        this.dependsOn = new ArrayList<OtherElementComponent>();
1551      this.dependsOn.add(t);
1552      return t;
1553    }
1554
1555    public TargetElementComponent addDependsOn(OtherElementComponent t) { // 3
1556      if (t == null)
1557        return this;
1558      if (this.dependsOn == null)
1559        this.dependsOn = new ArrayList<OtherElementComponent>();
1560      this.dependsOn.add(t);
1561      return this;
1562    }
1563
1564    /**
1565     * @return The first repetition of repeating field {@link #dependsOn}, creating
1566     *         it if it does not already exist
1567     */
1568    public OtherElementComponent getDependsOnFirstRep() {
1569      if (getDependsOn().isEmpty()) {
1570        addDependsOn();
1571      }
1572      return getDependsOn().get(0);
1573    }
1574
1575    /**
1576     * @return {@link #product} (A set of additional outcomes from this mapping to
1577     *         other elements. To properly execute this mapping, the specified
1578     *         element must be mapped to some data element or source that is in
1579     *         context. The mapping may still be useful without a place for the
1580     *         additional data elements, but the equivalence cannot be relied on.)
1581     */
1582    public List<OtherElementComponent> getProduct() {
1583      if (this.product == null)
1584        this.product = new ArrayList<OtherElementComponent>();
1585      return this.product;
1586    }
1587
1588    /**
1589     * @return Returns a reference to <code>this</code> for easy method chaining
1590     */
1591    public TargetElementComponent setProduct(List<OtherElementComponent> theProduct) {
1592      this.product = theProduct;
1593      return this;
1594    }
1595
1596    public boolean hasProduct() {
1597      if (this.product == null)
1598        return false;
1599      for (OtherElementComponent item : this.product)
1600        if (!item.isEmpty())
1601          return true;
1602      return false;
1603    }
1604
1605    public OtherElementComponent addProduct() { // 3
1606      OtherElementComponent t = new OtherElementComponent();
1607      if (this.product == null)
1608        this.product = new ArrayList<OtherElementComponent>();
1609      this.product.add(t);
1610      return t;
1611    }
1612
1613    public TargetElementComponent addProduct(OtherElementComponent t) { // 3
1614      if (t == null)
1615        return this;
1616      if (this.product == null)
1617        this.product = new ArrayList<OtherElementComponent>();
1618      this.product.add(t);
1619      return this;
1620    }
1621
1622    /**
1623     * @return The first repetition of repeating field {@link #product}, creating it
1624     *         if it does not already exist
1625     */
1626    public OtherElementComponent getProductFirstRep() {
1627      if (getProduct().isEmpty()) {
1628        addProduct();
1629      }
1630      return getProduct().get(0);
1631    }
1632
1633    protected void listChildren(List<Property> children) {
1634      super.listChildren(children);
1635      children.add(new Property("code", "code", "Identity (code or path) or the element/item that the map refers to.",
1636          0, 1, code));
1637      children.add(new Property("display", "string",
1638          "The display for the code. The display is only provided to help editors when editing the concept map.", 0, 1,
1639          display));
1640      children.add(new Property("equivalence", "code",
1641          "The equivalence between the source and target concepts (counting for the dependencies and products). The equivalence is read from target to source (e.g. the target is 'wider' than the source).",
1642          0, 1, equivalence));
1643      children.add(new Property("comment", "string",
1644          "A description of status/issues in mapping that conveys additional information not represented in  the structured data.",
1645          0, 1, comment));
1646      children.add(new Property("dependsOn", "",
1647          "A set of additional dependencies for this mapping to hold. This mapping is only applicable if the specified element can be resolved, and it has the specified value.",
1648          0, java.lang.Integer.MAX_VALUE, dependsOn));
1649      children.add(new Property("product", "@ConceptMap.group.element.target.dependsOn",
1650          "A set of additional outcomes from this mapping to other elements. To properly execute this mapping, the specified element must be mapped to some data element or source that is in context. The mapping may still be useful without a place for the additional data elements, but the equivalence cannot be relied on.",
1651          0, java.lang.Integer.MAX_VALUE, product));
1652    }
1653
1654    @Override
1655    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1656      switch (_hash) {
1657      case 3059181:
1658        /* code */ return new Property("code", "code",
1659            "Identity (code or path) or the element/item that the map refers to.", 0, 1, code);
1660      case 1671764162:
1661        /* display */ return new Property("display", "string",
1662            "The display for the code. The display is only provided to help editors when editing the concept map.", 0,
1663            1, display);
1664      case -15828692:
1665        /* equivalence */ return new Property("equivalence", "code",
1666            "The equivalence between the source and target concepts (counting for the dependencies and products). The equivalence is read from target to source (e.g. the target is 'wider' than the source).",
1667            0, 1, equivalence);
1668      case 950398559:
1669        /* comment */ return new Property("comment", "string",
1670            "A description of status/issues in mapping that conveys additional information not represented in  the structured data.",
1671            0, 1, comment);
1672      case -1109214266:
1673        /* dependsOn */ return new Property("dependsOn", "",
1674            "A set of additional dependencies for this mapping to hold. This mapping is only applicable if the specified element can be resolved, and it has the specified value.",
1675            0, java.lang.Integer.MAX_VALUE, dependsOn);
1676      case -309474065:
1677        /* product */ return new Property("product", "@ConceptMap.group.element.target.dependsOn",
1678            "A set of additional outcomes from this mapping to other elements. To properly execute this mapping, the specified element must be mapped to some data element or source that is in context. The mapping may still be useful without a place for the additional data elements, but the equivalence cannot be relied on.",
1679            0, java.lang.Integer.MAX_VALUE, product);
1680      default:
1681        return super.getNamedProperty(_hash, _name, _checkValid);
1682      }
1683
1684    }
1685
1686    @Override
1687    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1688      switch (hash) {
1689      case 3059181:
1690        /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeType
1691      case 1671764162:
1692        /* display */ return this.display == null ? new Base[0] : new Base[] { this.display }; // StringType
1693      case -15828692:
1694        /* equivalence */ return this.equivalence == null ? new Base[0] : new Base[] { this.equivalence }; // Enumeration<ConceptMapEquivalence>
1695      case 950398559:
1696        /* comment */ return this.comment == null ? new Base[0] : new Base[] { this.comment }; // StringType
1697      case -1109214266:
1698        /* dependsOn */ return this.dependsOn == null ? new Base[0]
1699            : this.dependsOn.toArray(new Base[this.dependsOn.size()]); // OtherElementComponent
1700      case -309474065:
1701        /* product */ return this.product == null ? new Base[0] : this.product.toArray(new Base[this.product.size()]); // OtherElementComponent
1702      default:
1703        return super.getProperty(hash, name, checkValid);
1704      }
1705
1706    }
1707
1708    @Override
1709    public Base setProperty(int hash, String name, Base value) throws FHIRException {
1710      switch (hash) {
1711      case 3059181: // code
1712        this.code = castToCode(value); // CodeType
1713        return value;
1714      case 1671764162: // display
1715        this.display = castToString(value); // StringType
1716        return value;
1717      case -15828692: // equivalence
1718        value = new ConceptMapEquivalenceEnumFactory().fromType(castToCode(value));
1719        this.equivalence = (Enumeration) value; // Enumeration<ConceptMapEquivalence>
1720        return value;
1721      case 950398559: // comment
1722        this.comment = castToString(value); // StringType
1723        return value;
1724      case -1109214266: // dependsOn
1725        this.getDependsOn().add((OtherElementComponent) value); // OtherElementComponent
1726        return value;
1727      case -309474065: // product
1728        this.getProduct().add((OtherElementComponent) value); // OtherElementComponent
1729        return value;
1730      default:
1731        return super.setProperty(hash, name, value);
1732      }
1733
1734    }
1735
1736    @Override
1737    public Base setProperty(String name, Base value) throws FHIRException {
1738      if (name.equals("code")) {
1739        this.code = castToCode(value); // CodeType
1740      } else if (name.equals("display")) {
1741        this.display = castToString(value); // StringType
1742      } else if (name.equals("equivalence")) {
1743        value = new ConceptMapEquivalenceEnumFactory().fromType(castToCode(value));
1744        this.equivalence = (Enumeration) value; // Enumeration<ConceptMapEquivalence>
1745      } else if (name.equals("comment")) {
1746        this.comment = castToString(value); // StringType
1747      } else if (name.equals("dependsOn")) {
1748        this.getDependsOn().add((OtherElementComponent) value);
1749      } else if (name.equals("product")) {
1750        this.getProduct().add((OtherElementComponent) value);
1751      } else
1752        return super.setProperty(name, value);
1753      return value;
1754    }
1755
1756  @Override
1757  public void removeChild(String name, Base value) throws FHIRException {
1758      if (name.equals("code")) {
1759        this.code = null;
1760      } else if (name.equals("display")) {
1761        this.display = null;
1762      } else if (name.equals("equivalence")) {
1763        this.equivalence = null;
1764      } else if (name.equals("comment")) {
1765        this.comment = null;
1766      } else if (name.equals("dependsOn")) {
1767        this.getDependsOn().remove((OtherElementComponent) value);
1768      } else if (name.equals("product")) {
1769        this.getProduct().remove((OtherElementComponent) value);
1770      } else
1771        super.removeChild(name, value);
1772      
1773    }
1774
1775    @Override
1776    public Base makeProperty(int hash, String name) throws FHIRException {
1777      switch (hash) {
1778      case 3059181:
1779        return getCodeElement();
1780      case 1671764162:
1781        return getDisplayElement();
1782      case -15828692:
1783        return getEquivalenceElement();
1784      case 950398559:
1785        return getCommentElement();
1786      case -1109214266:
1787        return addDependsOn();
1788      case -309474065:
1789        return addProduct();
1790      default:
1791        return super.makeProperty(hash, name);
1792      }
1793
1794    }
1795
1796    @Override
1797    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1798      switch (hash) {
1799      case 3059181:
1800        /* code */ return new String[] { "code" };
1801      case 1671764162:
1802        /* display */ return new String[] { "string" };
1803      case -15828692:
1804        /* equivalence */ return new String[] { "code" };
1805      case 950398559:
1806        /* comment */ return new String[] { "string" };
1807      case -1109214266:
1808        /* dependsOn */ return new String[] {};
1809      case -309474065:
1810        /* product */ return new String[] { "@ConceptMap.group.element.target.dependsOn" };
1811      default:
1812        return super.getTypesForProperty(hash, name);
1813      }
1814
1815    }
1816
1817    @Override
1818    public Base addChild(String name) throws FHIRException {
1819      if (name.equals("code")) {
1820        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.code");
1821      } else if (name.equals("display")) {
1822        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.display");
1823      } else if (name.equals("equivalence")) {
1824        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.equivalence");
1825      } else if (name.equals("comment")) {
1826        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.comment");
1827      } else if (name.equals("dependsOn")) {
1828        return addDependsOn();
1829      } else if (name.equals("product")) {
1830        return addProduct();
1831      } else
1832        return super.addChild(name);
1833    }
1834
1835    public TargetElementComponent copy() {
1836      TargetElementComponent dst = new TargetElementComponent();
1837      copyValues(dst);
1838      return dst;
1839    }
1840
1841    public void copyValues(TargetElementComponent dst) {
1842      super.copyValues(dst);
1843      dst.code = code == null ? null : code.copy();
1844      dst.display = display == null ? null : display.copy();
1845      dst.equivalence = equivalence == null ? null : equivalence.copy();
1846      dst.comment = comment == null ? null : comment.copy();
1847      if (dependsOn != null) {
1848        dst.dependsOn = new ArrayList<OtherElementComponent>();
1849        for (OtherElementComponent i : dependsOn)
1850          dst.dependsOn.add(i.copy());
1851      }
1852      ;
1853      if (product != null) {
1854        dst.product = new ArrayList<OtherElementComponent>();
1855        for (OtherElementComponent i : product)
1856          dst.product.add(i.copy());
1857      }
1858      ;
1859    }
1860
1861    @Override
1862    public boolean equalsDeep(Base other_) {
1863      if (!super.equalsDeep(other_))
1864        return false;
1865      if (!(other_ instanceof TargetElementComponent))
1866        return false;
1867      TargetElementComponent o = (TargetElementComponent) other_;
1868      return compareDeep(code, o.code, true) && compareDeep(display, o.display, true)
1869          && compareDeep(equivalence, o.equivalence, true) && compareDeep(comment, o.comment, true)
1870          && compareDeep(dependsOn, o.dependsOn, true) && compareDeep(product, o.product, true);
1871    }
1872
1873    @Override
1874    public boolean equalsShallow(Base other_) {
1875      if (!super.equalsShallow(other_))
1876        return false;
1877      if (!(other_ instanceof TargetElementComponent))
1878        return false;
1879      TargetElementComponent o = (TargetElementComponent) other_;
1880      return compareValues(code, o.code, true) && compareValues(display, o.display, true)
1881          && compareValues(equivalence, o.equivalence, true) && compareValues(comment, o.comment, true);
1882    }
1883
1884    public boolean isEmpty() {
1885      return super.isEmpty()
1886          && ca.uhn.fhir.util.ElementUtil.isEmpty(code, display, equivalence, comment, dependsOn, product);
1887    }
1888
1889    public String fhirType() {
1890      return "ConceptMap.group.element.target";
1891
1892    }
1893
1894  }
1895
1896  @Block()
1897  public static class OtherElementComponent extends BackboneElement implements IBaseBackboneElement {
1898    /**
1899     * A reference to an element that holds a coded value that corresponds to a code
1900     * system property. The idea is that the information model carries an element
1901     * somewhere that is labeled to correspond with a code system property.
1902     */
1903    @Child(name = "property", type = { UriType.class }, order = 1, min = 1, max = 1, modifier = false, summary = false)
1904    @Description(shortDefinition = "Reference to property mapping depends on", formalDefinition = "A reference to an element that holds a coded value that corresponds to a code system property. The idea is that the information model carries an element somewhere that is labeled to correspond with a code system property.")
1905    protected UriType property;
1906
1907    /**
1908     * An absolute URI that identifies the code system of the dependency code (if
1909     * the source/dependency is a value set that crosses code systems).
1910     */
1911    @Child(name = "system", type = {
1912        CanonicalType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
1913    @Description(shortDefinition = "Code System (if necessary)", formalDefinition = "An absolute URI that identifies the code system of the dependency code (if the source/dependency is a value set that crosses code systems).")
1914    protected CanonicalType system;
1915
1916    /**
1917     * Identity (code or path) or the element/item/ValueSet/text that the map
1918     * depends on / refers to.
1919     */
1920    @Child(name = "value", type = { StringType.class }, order = 3, min = 1, max = 1, modifier = false, summary = false)
1921    @Description(shortDefinition = "Value of the referenced element", formalDefinition = "Identity (code or path) or the element/item/ValueSet/text that the map depends on / refers to.")
1922    protected StringType value;
1923
1924    /**
1925     * The display for the code. The display is only provided to help editors when
1926     * editing the concept map.
1927     */
1928    @Child(name = "display", type = {
1929        StringType.class }, order = 4, min = 0, max = 1, modifier = false, summary = false)
1930    @Description(shortDefinition = "Display for the code (if value is a code)", formalDefinition = "The display for the code. The display is only provided to help editors when editing the concept map.")
1931    protected StringType display;
1932
1933    private static final long serialVersionUID = -1836341923L;
1934
1935    /**
1936     * Constructor
1937     */
1938    public OtherElementComponent() {
1939      super();
1940    }
1941
1942    /**
1943     * Constructor
1944     */
1945    public OtherElementComponent(UriType property, StringType value) {
1946      super();
1947      this.property = property;
1948      this.value = value;
1949    }
1950
1951    /**
1952     * @return {@link #property} (A reference to an element that holds a coded value
1953     *         that corresponds to a code system property. The idea is that the
1954     *         information model carries an element somewhere that is labeled to
1955     *         correspond with a code system property.). This is the underlying
1956     *         object with id, value and extensions. The accessor "getProperty"
1957     *         gives direct access to the value
1958     */
1959    public UriType getPropertyElement() {
1960      if (this.property == null)
1961        if (Configuration.errorOnAutoCreate())
1962          throw new Error("Attempt to auto-create OtherElementComponent.property");
1963        else if (Configuration.doAutoCreate())
1964          this.property = new UriType(); // bb
1965      return this.property;
1966    }
1967
1968    public boolean hasPropertyElement() {
1969      return this.property != null && !this.property.isEmpty();
1970    }
1971
1972    public boolean hasProperty() {
1973      return this.property != null && !this.property.isEmpty();
1974    }
1975
1976    /**
1977     * @param value {@link #property} (A reference to an element that holds a coded
1978     *              value that corresponds to a code system property. The idea is
1979     *              that the information model carries an element somewhere that is
1980     *              labeled to correspond with a code system property.). This is the
1981     *              underlying object with id, value and extensions. The accessor
1982     *              "getProperty" gives direct access to the value
1983     */
1984    public OtherElementComponent setPropertyElement(UriType value) {
1985      this.property = value;
1986      return this;
1987    }
1988
1989    /**
1990     * @return A reference to an element that holds a coded value that corresponds
1991     *         to a code system property. The idea is that the information model
1992     *         carries an element somewhere that is labeled to correspond with a
1993     *         code system property.
1994     */
1995    public String getProperty() {
1996      return this.property == null ? null : this.property.getValue();
1997    }
1998
1999    /**
2000     * @param value A reference to an element that holds a coded value that
2001     *              corresponds to a code system property. The idea is that the
2002     *              information model carries an element somewhere that is labeled
2003     *              to correspond with a code system property.
2004     */
2005    public OtherElementComponent setProperty(String value) {
2006      if (this.property == null)
2007        this.property = new UriType();
2008      this.property.setValue(value);
2009      return this;
2010    }
2011
2012    /**
2013     * @return {@link #system} (An absolute URI that identifies the code system of
2014     *         the dependency code (if the source/dependency is a value set that
2015     *         crosses code systems).). This is the underlying object with id, value
2016     *         and extensions. The accessor "getSystem" gives direct access to the
2017     *         value
2018     */
2019    public CanonicalType getSystemElement() {
2020      if (this.system == null)
2021        if (Configuration.errorOnAutoCreate())
2022          throw new Error("Attempt to auto-create OtherElementComponent.system");
2023        else if (Configuration.doAutoCreate())
2024          this.system = new CanonicalType(); // bb
2025      return this.system;
2026    }
2027
2028    public boolean hasSystemElement() {
2029      return this.system != null && !this.system.isEmpty();
2030    }
2031
2032    public boolean hasSystem() {
2033      return this.system != null && !this.system.isEmpty();
2034    }
2035
2036    /**
2037     * @param value {@link #system} (An absolute URI that identifies the code system
2038     *              of the dependency code (if the source/dependency is a value set
2039     *              that crosses code systems).). This is the underlying object with
2040     *              id, value and extensions. The accessor "getSystem" gives direct
2041     *              access to the value
2042     */
2043    public OtherElementComponent setSystemElement(CanonicalType value) {
2044      this.system = value;
2045      return this;
2046    }
2047
2048    /**
2049     * @return An absolute URI that identifies the code system of the dependency
2050     *         code (if the source/dependency is a value set that crosses code
2051     *         systems).
2052     */
2053    public String getSystem() {
2054      return this.system == null ? null : this.system.getValue();
2055    }
2056
2057    /**
2058     * @param value An absolute URI that identifies the code system of the
2059     *              dependency code (if the source/dependency is a value set that
2060     *              crosses code systems).
2061     */
2062    public OtherElementComponent setSystem(String value) {
2063      if (Utilities.noString(value))
2064        this.system = null;
2065      else {
2066        if (this.system == null)
2067          this.system = new CanonicalType();
2068        this.system.setValue(value);
2069      }
2070      return this;
2071    }
2072
2073    /**
2074     * @return {@link #value} (Identity (code or path) or the
2075     *         element/item/ValueSet/text that the map depends on / refers to.).
2076     *         This is the underlying object with id, value and extensions. The
2077     *         accessor "getValue" gives direct access to the value
2078     */
2079    public StringType getValueElement() {
2080      if (this.value == null)
2081        if (Configuration.errorOnAutoCreate())
2082          throw new Error("Attempt to auto-create OtherElementComponent.value");
2083        else if (Configuration.doAutoCreate())
2084          this.value = new StringType(); // bb
2085      return this.value;
2086    }
2087
2088    public boolean hasValueElement() {
2089      return this.value != null && !this.value.isEmpty();
2090    }
2091
2092    public boolean hasValue() {
2093      return this.value != null && !this.value.isEmpty();
2094    }
2095
2096    /**
2097     * @param value {@link #value} (Identity (code or path) or the
2098     *              element/item/ValueSet/text that the map depends on / refers
2099     *              to.). This is the underlying object with id, value and
2100     *              extensions. The accessor "getValue" gives direct access to the
2101     *              value
2102     */
2103    public OtherElementComponent setValueElement(StringType value) {
2104      this.value = value;
2105      return this;
2106    }
2107
2108    /**
2109     * @return Identity (code or path) or the element/item/ValueSet/text that the
2110     *         map depends on / refers to.
2111     */
2112    public String getValue() {
2113      return this.value == null ? null : this.value.getValue();
2114    }
2115
2116    /**
2117     * @param value Identity (code or path) or the element/item/ValueSet/text that
2118     *              the map depends on / refers to.
2119     */
2120    public OtherElementComponent setValue(String value) {
2121      if (this.value == null)
2122        this.value = new StringType();
2123      this.value.setValue(value);
2124      return this;
2125    }
2126
2127    /**
2128     * @return {@link #display} (The display for the code. The display is only
2129     *         provided to help editors when editing the concept map.). This is the
2130     *         underlying object with id, value and extensions. The accessor
2131     *         "getDisplay" gives direct access to the value
2132     */
2133    public StringType getDisplayElement() {
2134      if (this.display == null)
2135        if (Configuration.errorOnAutoCreate())
2136          throw new Error("Attempt to auto-create OtherElementComponent.display");
2137        else if (Configuration.doAutoCreate())
2138          this.display = new StringType(); // bb
2139      return this.display;
2140    }
2141
2142    public boolean hasDisplayElement() {
2143      return this.display != null && !this.display.isEmpty();
2144    }
2145
2146    public boolean hasDisplay() {
2147      return this.display != null && !this.display.isEmpty();
2148    }
2149
2150    /**
2151     * @param value {@link #display} (The display for the code. The display is only
2152     *              provided to help editors when editing the concept map.). This is
2153     *              the underlying object with id, value and extensions. The
2154     *              accessor "getDisplay" gives direct access to the value
2155     */
2156    public OtherElementComponent setDisplayElement(StringType value) {
2157      this.display = value;
2158      return this;
2159    }
2160
2161    /**
2162     * @return The display for the code. The display is only provided to help
2163     *         editors when editing the concept map.
2164     */
2165    public String getDisplay() {
2166      return this.display == null ? null : this.display.getValue();
2167    }
2168
2169    /**
2170     * @param value The display for the code. The display is only provided to help
2171     *              editors when editing the concept map.
2172     */
2173    public OtherElementComponent setDisplay(String value) {
2174      if (Utilities.noString(value))
2175        this.display = null;
2176      else {
2177        if (this.display == null)
2178          this.display = new StringType();
2179        this.display.setValue(value);
2180      }
2181      return this;
2182    }
2183
2184    protected void listChildren(List<Property> children) {
2185      super.listChildren(children);
2186      children.add(new Property("property", "uri",
2187          "A reference to an element that holds a coded value that corresponds to a code system property. The idea is that the information model carries an element somewhere that is labeled to correspond with a code system property.",
2188          0, 1, property));
2189      children.add(new Property("system", "canonical(CodeSystem)",
2190          "An absolute URI that identifies the code system of the dependency code (if the source/dependency is a value set that crosses code systems).",
2191          0, 1, system));
2192      children.add(new Property("value", "string",
2193          "Identity (code or path) or the element/item/ValueSet/text that the map depends on / refers to.", 0, 1,
2194          value));
2195      children.add(new Property("display", "string",
2196          "The display for the code. The display is only provided to help editors when editing the concept map.", 0, 1,
2197          display));
2198    }
2199
2200    @Override
2201    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2202      switch (_hash) {
2203      case -993141291:
2204        /* property */ return new Property("property", "uri",
2205            "A reference to an element that holds a coded value that corresponds to a code system property. The idea is that the information model carries an element somewhere that is labeled to correspond with a code system property.",
2206            0, 1, property);
2207      case -887328209:
2208        /* system */ return new Property("system", "canonical(CodeSystem)",
2209            "An absolute URI that identifies the code system of the dependency code (if the source/dependency is a value set that crosses code systems).",
2210            0, 1, system);
2211      case 111972721:
2212        /* value */ return new Property("value", "string",
2213            "Identity (code or path) or the element/item/ValueSet/text that the map depends on / refers to.", 0, 1,
2214            value);
2215      case 1671764162:
2216        /* display */ return new Property("display", "string",
2217            "The display for the code. The display is only provided to help editors when editing the concept map.", 0,
2218            1, display);
2219      default:
2220        return super.getNamedProperty(_hash, _name, _checkValid);
2221      }
2222
2223    }
2224
2225    @Override
2226    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2227      switch (hash) {
2228      case -993141291:
2229        /* property */ return this.property == null ? new Base[0] : new Base[] { this.property }; // UriType
2230      case -887328209:
2231        /* system */ return this.system == null ? new Base[0] : new Base[] { this.system }; // CanonicalType
2232      case 111972721:
2233        /* value */ return this.value == null ? new Base[0] : new Base[] { this.value }; // StringType
2234      case 1671764162:
2235        /* display */ return this.display == null ? new Base[0] : new Base[] { this.display }; // StringType
2236      default:
2237        return super.getProperty(hash, name, checkValid);
2238      }
2239
2240    }
2241
2242    @Override
2243    public Base setProperty(int hash, String name, Base value) throws FHIRException {
2244      switch (hash) {
2245      case -993141291: // property
2246        this.property = castToUri(value); // UriType
2247        return value;
2248      case -887328209: // system
2249        this.system = castToCanonical(value); // CanonicalType
2250        return value;
2251      case 111972721: // value
2252        this.value = castToString(value); // StringType
2253        return value;
2254      case 1671764162: // display
2255        this.display = castToString(value); // StringType
2256        return value;
2257      default:
2258        return super.setProperty(hash, name, value);
2259      }
2260
2261    }
2262
2263    @Override
2264    public Base setProperty(String name, Base value) throws FHIRException {
2265      if (name.equals("property")) {
2266        this.property = castToUri(value); // UriType
2267      } else if (name.equals("system")) {
2268        this.system = castToCanonical(value); // CanonicalType
2269      } else if (name.equals("value")) {
2270        this.value = castToString(value); // StringType
2271      } else if (name.equals("display")) {
2272        this.display = castToString(value); // StringType
2273      } else
2274        return super.setProperty(name, value);
2275      return value;
2276    }
2277
2278  @Override
2279  public void removeChild(String name, Base value) throws FHIRException {
2280      if (name.equals("property")) {
2281        this.property = null;
2282      } else if (name.equals("system")) {
2283        this.system = null;
2284      } else if (name.equals("value")) {
2285        this.value = null;
2286      } else if (name.equals("display")) {
2287        this.display = null;
2288      } else
2289        super.removeChild(name, value);
2290      
2291    }
2292
2293    @Override
2294    public Base makeProperty(int hash, String name) throws FHIRException {
2295      switch (hash) {
2296      case -993141291:
2297        return getPropertyElement();
2298      case -887328209:
2299        return getSystemElement();
2300      case 111972721:
2301        return getValueElement();
2302      case 1671764162:
2303        return getDisplayElement();
2304      default:
2305        return super.makeProperty(hash, name);
2306      }
2307
2308    }
2309
2310    @Override
2311    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2312      switch (hash) {
2313      case -993141291:
2314        /* property */ return new String[] { "uri" };
2315      case -887328209:
2316        /* system */ return new String[] { "canonical" };
2317      case 111972721:
2318        /* value */ return new String[] { "string" };
2319      case 1671764162:
2320        /* display */ return new String[] { "string" };
2321      default:
2322        return super.getTypesForProperty(hash, name);
2323      }
2324
2325    }
2326
2327    @Override
2328    public Base addChild(String name) throws FHIRException {
2329      if (name.equals("property")) {
2330        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.property");
2331      } else if (name.equals("system")) {
2332        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.system");
2333      } else if (name.equals("value")) {
2334        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.value");
2335      } else if (name.equals("display")) {
2336        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.display");
2337      } else
2338        return super.addChild(name);
2339    }
2340
2341    public OtherElementComponent copy() {
2342      OtherElementComponent dst = new OtherElementComponent();
2343      copyValues(dst);
2344      return dst;
2345    }
2346
2347    public void copyValues(OtherElementComponent dst) {
2348      super.copyValues(dst);
2349      dst.property = property == null ? null : property.copy();
2350      dst.system = system == null ? null : system.copy();
2351      dst.value = value == null ? null : value.copy();
2352      dst.display = display == null ? null : display.copy();
2353    }
2354
2355    @Override
2356    public boolean equalsDeep(Base other_) {
2357      if (!super.equalsDeep(other_))
2358        return false;
2359      if (!(other_ instanceof OtherElementComponent))
2360        return false;
2361      OtherElementComponent o = (OtherElementComponent) other_;
2362      return compareDeep(property, o.property, true) && compareDeep(system, o.system, true)
2363          && compareDeep(value, o.value, true) && compareDeep(display, o.display, true);
2364    }
2365
2366    @Override
2367    public boolean equalsShallow(Base other_) {
2368      if (!super.equalsShallow(other_))
2369        return false;
2370      if (!(other_ instanceof OtherElementComponent))
2371        return false;
2372      OtherElementComponent o = (OtherElementComponent) other_;
2373      return compareValues(property, o.property, true) && compareValues(value, o.value, true)
2374          && compareValues(display, o.display, true);
2375    }
2376
2377    public boolean isEmpty() {
2378      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(property, system, value, display);
2379    }
2380
2381    public String fhirType() {
2382      return "ConceptMap.group.element.target.dependsOn";
2383
2384    }
2385
2386  }
2387
2388  @Block()
2389  public static class ConceptMapGroupUnmappedComponent extends BackboneElement implements IBaseBackboneElement {
2390    /**
2391     * Defines which action to take if there is no match for the source concept in
2392     * the target system designated for the group. One of 3 actions are possible:
2393     * use the unmapped code (this is useful when doing a mapping between versions,
2394     * and only a few codes have changed), use a fixed code (a default code), or
2395     * alternatively, a reference to a different concept map can be provided (by
2396     * canonical URL).
2397     */
2398    @Child(name = "mode", type = { CodeType.class }, order = 1, min = 1, max = 1, modifier = false, summary = false)
2399    @Description(shortDefinition = "provided | fixed | other-map", formalDefinition = "Defines which action to take if there is no match for the source concept in the target system designated for the group. One of 3 actions are possible: use the unmapped code (this is useful when doing a mapping between versions, and only a few codes have changed), use a fixed code (a default code), or alternatively, a reference to a different concept map can be provided (by canonical URL).")
2400    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/conceptmap-unmapped-mode")
2401    protected Enumeration<ConceptMapGroupUnmappedMode> mode;
2402
2403    /**
2404     * The fixed code to use when the mode = 'fixed' - all unmapped codes are mapped
2405     * to a single fixed code.
2406     */
2407    @Child(name = "code", type = { CodeType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
2408    @Description(shortDefinition = "Fixed code when mode = fixed", formalDefinition = "The fixed code to use when the mode = 'fixed'  - all unmapped codes are mapped to a single fixed code.")
2409    protected CodeType code;
2410
2411    /**
2412     * The display for the code. The display is only provided to help editors when
2413     * editing the concept map.
2414     */
2415    @Child(name = "display", type = {
2416        StringType.class }, order = 3, min = 0, max = 1, modifier = false, summary = false)
2417    @Description(shortDefinition = "Display for the code", formalDefinition = "The display for the code. The display is only provided to help editors when editing the concept map.")
2418    protected StringType display;
2419
2420    /**
2421     * The canonical reference to an additional ConceptMap resource instance to use
2422     * for mapping if this ConceptMap resource contains no matching mapping for the
2423     * source concept.
2424     */
2425    @Child(name = "url", type = { CanonicalType.class }, order = 4, min = 0, max = 1, modifier = false, summary = false)
2426    @Description(shortDefinition = "canonical reference to an additional ConceptMap to use for mapping if the source concept is unmapped", formalDefinition = "The canonical reference to an additional ConceptMap resource instance to use for mapping if this ConceptMap resource contains no matching mapping for the source concept.")
2427    protected CanonicalType url;
2428
2429    private static final long serialVersionUID = 1261364354L;
2430
2431    /**
2432     * Constructor
2433     */
2434    public ConceptMapGroupUnmappedComponent() {
2435      super();
2436    }
2437
2438    /**
2439     * Constructor
2440     */
2441    public ConceptMapGroupUnmappedComponent(Enumeration<ConceptMapGroupUnmappedMode> mode) {
2442      super();
2443      this.mode = mode;
2444    }
2445
2446    /**
2447     * @return {@link #mode} (Defines which action to take if there is no match for
2448     *         the source concept in the target system designated for the group. One
2449     *         of 3 actions are possible: use the unmapped code (this is useful when
2450     *         doing a mapping between versions, and only a few codes have changed),
2451     *         use a fixed code (a default code), or alternatively, a reference to a
2452     *         different concept map can be provided (by canonical URL).). This is
2453     *         the underlying object with id, value and extensions. The accessor
2454     *         "getMode" gives direct access to the value
2455     */
2456    public Enumeration<ConceptMapGroupUnmappedMode> getModeElement() {
2457      if (this.mode == null)
2458        if (Configuration.errorOnAutoCreate())
2459          throw new Error("Attempt to auto-create ConceptMapGroupUnmappedComponent.mode");
2460        else if (Configuration.doAutoCreate())
2461          this.mode = new Enumeration<ConceptMapGroupUnmappedMode>(new ConceptMapGroupUnmappedModeEnumFactory()); // bb
2462      return this.mode;
2463    }
2464
2465    public boolean hasModeElement() {
2466      return this.mode != null && !this.mode.isEmpty();
2467    }
2468
2469    public boolean hasMode() {
2470      return this.mode != null && !this.mode.isEmpty();
2471    }
2472
2473    /**
2474     * @param value {@link #mode} (Defines which action to take if there is no match
2475     *              for the source concept in the target system designated for the
2476     *              group. One of 3 actions are possible: use the unmapped code
2477     *              (this is useful when doing a mapping between versions, and only
2478     *              a few codes have changed), use a fixed code (a default code), or
2479     *              alternatively, a reference to a different concept map can be
2480     *              provided (by canonical URL).). This is the underlying object
2481     *              with id, value and extensions. The accessor "getMode" gives
2482     *              direct access to the value
2483     */
2484    public ConceptMapGroupUnmappedComponent setModeElement(Enumeration<ConceptMapGroupUnmappedMode> value) {
2485      this.mode = value;
2486      return this;
2487    }
2488
2489    /**
2490     * @return Defines which action to take if there is no match for the source
2491     *         concept in the target system designated for the group. One of 3
2492     *         actions are possible: use the unmapped code (this is useful when
2493     *         doing a mapping between versions, and only a few codes have changed),
2494     *         use a fixed code (a default code), or alternatively, a reference to a
2495     *         different concept map can be provided (by canonical URL).
2496     */
2497    public ConceptMapGroupUnmappedMode getMode() {
2498      return this.mode == null ? null : this.mode.getValue();
2499    }
2500
2501    /**
2502     * @param value Defines which action to take if there is no match for the source
2503     *              concept in the target system designated for the group. One of 3
2504     *              actions are possible: use the unmapped code (this is useful when
2505     *              doing a mapping between versions, and only a few codes have
2506     *              changed), use a fixed code (a default code), or alternatively, a
2507     *              reference to a different concept map can be provided (by
2508     *              canonical URL).
2509     */
2510    public ConceptMapGroupUnmappedComponent setMode(ConceptMapGroupUnmappedMode value) {
2511      if (this.mode == null)
2512        this.mode = new Enumeration<ConceptMapGroupUnmappedMode>(new ConceptMapGroupUnmappedModeEnumFactory());
2513      this.mode.setValue(value);
2514      return this;
2515    }
2516
2517    /**
2518     * @return {@link #code} (The fixed code to use when the mode = 'fixed' - all
2519     *         unmapped codes are mapped to a single fixed code.). This is the
2520     *         underlying object with id, value and extensions. The accessor
2521     *         "getCode" gives direct access to the value
2522     */
2523    public CodeType getCodeElement() {
2524      if (this.code == null)
2525        if (Configuration.errorOnAutoCreate())
2526          throw new Error("Attempt to auto-create ConceptMapGroupUnmappedComponent.code");
2527        else if (Configuration.doAutoCreate())
2528          this.code = new CodeType(); // bb
2529      return this.code;
2530    }
2531
2532    public boolean hasCodeElement() {
2533      return this.code != null && !this.code.isEmpty();
2534    }
2535
2536    public boolean hasCode() {
2537      return this.code != null && !this.code.isEmpty();
2538    }
2539
2540    /**
2541     * @param value {@link #code} (The fixed code to use when the mode = 'fixed' -
2542     *              all unmapped codes are mapped to a single fixed code.). This is
2543     *              the underlying object with id, value and extensions. The
2544     *              accessor "getCode" gives direct access to the value
2545     */
2546    public ConceptMapGroupUnmappedComponent setCodeElement(CodeType value) {
2547      this.code = value;
2548      return this;
2549    }
2550
2551    /**
2552     * @return The fixed code to use when the mode = 'fixed' - all unmapped codes
2553     *         are mapped to a single fixed code.
2554     */
2555    public String getCode() {
2556      return this.code == null ? null : this.code.getValue();
2557    }
2558
2559    /**
2560     * @param value The fixed code to use when the mode = 'fixed' - all unmapped
2561     *              codes are mapped to a single fixed code.
2562     */
2563    public ConceptMapGroupUnmappedComponent setCode(String value) {
2564      if (Utilities.noString(value))
2565        this.code = null;
2566      else {
2567        if (this.code == null)
2568          this.code = new CodeType();
2569        this.code.setValue(value);
2570      }
2571      return this;
2572    }
2573
2574    /**
2575     * @return {@link #display} (The display for the code. The display is only
2576     *         provided to help editors when editing the concept map.). This is the
2577     *         underlying object with id, value and extensions. The accessor
2578     *         "getDisplay" gives direct access to the value
2579     */
2580    public StringType getDisplayElement() {
2581      if (this.display == null)
2582        if (Configuration.errorOnAutoCreate())
2583          throw new Error("Attempt to auto-create ConceptMapGroupUnmappedComponent.display");
2584        else if (Configuration.doAutoCreate())
2585          this.display = new StringType(); // bb
2586      return this.display;
2587    }
2588
2589    public boolean hasDisplayElement() {
2590      return this.display != null && !this.display.isEmpty();
2591    }
2592
2593    public boolean hasDisplay() {
2594      return this.display != null && !this.display.isEmpty();
2595    }
2596
2597    /**
2598     * @param value {@link #display} (The display for the code. The display is only
2599     *              provided to help editors when editing the concept map.). This is
2600     *              the underlying object with id, value and extensions. The
2601     *              accessor "getDisplay" gives direct access to the value
2602     */
2603    public ConceptMapGroupUnmappedComponent setDisplayElement(StringType value) {
2604      this.display = value;
2605      return this;
2606    }
2607
2608    /**
2609     * @return The display for the code. The display is only provided to help
2610     *         editors when editing the concept map.
2611     */
2612    public String getDisplay() {
2613      return this.display == null ? null : this.display.getValue();
2614    }
2615
2616    /**
2617     * @param value The display for the code. The display is only provided to help
2618     *              editors when editing the concept map.
2619     */
2620    public ConceptMapGroupUnmappedComponent setDisplay(String value) {
2621      if (Utilities.noString(value))
2622        this.display = null;
2623      else {
2624        if (this.display == null)
2625          this.display = new StringType();
2626        this.display.setValue(value);
2627      }
2628      return this;
2629    }
2630
2631    /**
2632     * @return {@link #url} (The canonical reference to an additional ConceptMap
2633     *         resource instance to use for mapping if this ConceptMap resource
2634     *         contains no matching mapping for the source concept.). This is the
2635     *         underlying object with id, value and extensions. The accessor
2636     *         "getUrl" gives direct access to the value
2637     */
2638    public CanonicalType getUrlElement() {
2639      if (this.url == null)
2640        if (Configuration.errorOnAutoCreate())
2641          throw new Error("Attempt to auto-create ConceptMapGroupUnmappedComponent.url");
2642        else if (Configuration.doAutoCreate())
2643          this.url = new CanonicalType(); // bb
2644      return this.url;
2645    }
2646
2647    public boolean hasUrlElement() {
2648      return this.url != null && !this.url.isEmpty();
2649    }
2650
2651    public boolean hasUrl() {
2652      return this.url != null && !this.url.isEmpty();
2653    }
2654
2655    /**
2656     * @param value {@link #url} (The canonical reference to an additional
2657     *              ConceptMap resource instance to use for mapping if this
2658     *              ConceptMap resource contains no matching mapping for the source
2659     *              concept.). This is the underlying object with id, value and
2660     *              extensions. The accessor "getUrl" gives direct access to the
2661     *              value
2662     */
2663    public ConceptMapGroupUnmappedComponent setUrlElement(CanonicalType value) {
2664      this.url = value;
2665      return this;
2666    }
2667
2668    /**
2669     * @return The canonical reference to an additional ConceptMap resource instance
2670     *         to use for mapping if this ConceptMap resource contains no matching
2671     *         mapping for the source concept.
2672     */
2673    public String getUrl() {
2674      return this.url == null ? null : this.url.getValue();
2675    }
2676
2677    /**
2678     * @param value The canonical reference to an additional ConceptMap resource
2679     *              instance to use for mapping if this ConceptMap resource contains
2680     *              no matching mapping for the source concept.
2681     */
2682    public ConceptMapGroupUnmappedComponent setUrl(String value) {
2683      if (Utilities.noString(value))
2684        this.url = null;
2685      else {
2686        if (this.url == null)
2687          this.url = new CanonicalType();
2688        this.url.setValue(value);
2689      }
2690      return this;
2691    }
2692
2693    protected void listChildren(List<Property> children) {
2694      super.listChildren(children);
2695      children.add(new Property("mode", "code",
2696          "Defines which action to take if there is no match for the source concept in the target system designated for the group. One of 3 actions are possible: use the unmapped code (this is useful when doing a mapping between versions, and only a few codes have changed), use a fixed code (a default code), or alternatively, a reference to a different concept map can be provided (by canonical URL).",
2697          0, 1, mode));
2698      children.add(new Property("code", "code",
2699          "The fixed code to use when the mode = 'fixed'  - all unmapped codes are mapped to a single fixed code.", 0,
2700          1, code));
2701      children.add(new Property("display", "string",
2702          "The display for the code. The display is only provided to help editors when editing the concept map.", 0, 1,
2703          display));
2704      children.add(new Property("url", "canonical(ConceptMap)",
2705          "The canonical reference to an additional ConceptMap resource instance to use for mapping if this ConceptMap resource contains no matching mapping for the source concept.",
2706          0, 1, url));
2707    }
2708
2709    @Override
2710    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2711      switch (_hash) {
2712      case 3357091:
2713        /* mode */ return new Property("mode", "code",
2714            "Defines which action to take if there is no match for the source concept in the target system designated for the group. One of 3 actions are possible: use the unmapped code (this is useful when doing a mapping between versions, and only a few codes have changed), use a fixed code (a default code), or alternatively, a reference to a different concept map can be provided (by canonical URL).",
2715            0, 1, mode);
2716      case 3059181:
2717        /* code */ return new Property("code", "code",
2718            "The fixed code to use when the mode = 'fixed'  - all unmapped codes are mapped to a single fixed code.", 0,
2719            1, code);
2720      case 1671764162:
2721        /* display */ return new Property("display", "string",
2722            "The display for the code. The display is only provided to help editors when editing the concept map.", 0,
2723            1, display);
2724      case 116079:
2725        /* url */ return new Property("url", "canonical(ConceptMap)",
2726            "The canonical reference to an additional ConceptMap resource instance to use for mapping if this ConceptMap resource contains no matching mapping for the source concept.",
2727            0, 1, url);
2728      default:
2729        return super.getNamedProperty(_hash, _name, _checkValid);
2730      }
2731
2732    }
2733
2734    @Override
2735    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2736      switch (hash) {
2737      case 3357091:
2738        /* mode */ return this.mode == null ? new Base[0] : new Base[] { this.mode }; // Enumeration<ConceptMapGroupUnmappedMode>
2739      case 3059181:
2740        /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeType
2741      case 1671764162:
2742        /* display */ return this.display == null ? new Base[0] : new Base[] { this.display }; // StringType
2743      case 116079:
2744        /* url */ return this.url == null ? new Base[0] : new Base[] { this.url }; // CanonicalType
2745      default:
2746        return super.getProperty(hash, name, checkValid);
2747      }
2748
2749    }
2750
2751    @Override
2752    public Base setProperty(int hash, String name, Base value) throws FHIRException {
2753      switch (hash) {
2754      case 3357091: // mode
2755        value = new ConceptMapGroupUnmappedModeEnumFactory().fromType(castToCode(value));
2756        this.mode = (Enumeration) value; // Enumeration<ConceptMapGroupUnmappedMode>
2757        return value;
2758      case 3059181: // code
2759        this.code = castToCode(value); // CodeType
2760        return value;
2761      case 1671764162: // display
2762        this.display = castToString(value); // StringType
2763        return value;
2764      case 116079: // url
2765        this.url = castToCanonical(value); // CanonicalType
2766        return value;
2767      default:
2768        return super.setProperty(hash, name, value);
2769      }
2770
2771    }
2772
2773    @Override
2774    public Base setProperty(String name, Base value) throws FHIRException {
2775      if (name.equals("mode")) {
2776        value = new ConceptMapGroupUnmappedModeEnumFactory().fromType(castToCode(value));
2777        this.mode = (Enumeration) value; // Enumeration<ConceptMapGroupUnmappedMode>
2778      } else if (name.equals("code")) {
2779        this.code = castToCode(value); // CodeType
2780      } else if (name.equals("display")) {
2781        this.display = castToString(value); // StringType
2782      } else if (name.equals("url")) {
2783        this.url = castToCanonical(value); // CanonicalType
2784      } else
2785        return super.setProperty(name, value);
2786      return value;
2787    }
2788
2789  @Override
2790  public void removeChild(String name, Base value) throws FHIRException {
2791      if (name.equals("mode")) {
2792        this.mode = null;
2793      } else if (name.equals("code")) {
2794        this.code = null;
2795      } else if (name.equals("display")) {
2796        this.display = null;
2797      } else if (name.equals("url")) {
2798        this.url = null;
2799      } else
2800        super.removeChild(name, value);
2801      
2802    }
2803
2804    @Override
2805    public Base makeProperty(int hash, String name) throws FHIRException {
2806      switch (hash) {
2807      case 3357091:
2808        return getModeElement();
2809      case 3059181:
2810        return getCodeElement();
2811      case 1671764162:
2812        return getDisplayElement();
2813      case 116079:
2814        return getUrlElement();
2815      default:
2816        return super.makeProperty(hash, name);
2817      }
2818
2819    }
2820
2821    @Override
2822    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2823      switch (hash) {
2824      case 3357091:
2825        /* mode */ return new String[] { "code" };
2826      case 3059181:
2827        /* code */ return new String[] { "code" };
2828      case 1671764162:
2829        /* display */ return new String[] { "string" };
2830      case 116079:
2831        /* url */ return new String[] { "canonical" };
2832      default:
2833        return super.getTypesForProperty(hash, name);
2834      }
2835
2836    }
2837
2838    @Override
2839    public Base addChild(String name) throws FHIRException {
2840      if (name.equals("mode")) {
2841        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.mode");
2842      } else if (name.equals("code")) {
2843        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.code");
2844      } else if (name.equals("display")) {
2845        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.display");
2846      } else if (name.equals("url")) {
2847        throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.url");
2848      } else
2849        return super.addChild(name);
2850    }
2851
2852    public ConceptMapGroupUnmappedComponent copy() {
2853      ConceptMapGroupUnmappedComponent dst = new ConceptMapGroupUnmappedComponent();
2854      copyValues(dst);
2855      return dst;
2856    }
2857
2858    public void copyValues(ConceptMapGroupUnmappedComponent dst) {
2859      super.copyValues(dst);
2860      dst.mode = mode == null ? null : mode.copy();
2861      dst.code = code == null ? null : code.copy();
2862      dst.display = display == null ? null : display.copy();
2863      dst.url = url == null ? null : url.copy();
2864    }
2865
2866    @Override
2867    public boolean equalsDeep(Base other_) {
2868      if (!super.equalsDeep(other_))
2869        return false;
2870      if (!(other_ instanceof ConceptMapGroupUnmappedComponent))
2871        return false;
2872      ConceptMapGroupUnmappedComponent o = (ConceptMapGroupUnmappedComponent) other_;
2873      return compareDeep(mode, o.mode, true) && compareDeep(code, o.code, true) && compareDeep(display, o.display, true)
2874          && compareDeep(url, o.url, true);
2875    }
2876
2877    @Override
2878    public boolean equalsShallow(Base other_) {
2879      if (!super.equalsShallow(other_))
2880        return false;
2881      if (!(other_ instanceof ConceptMapGroupUnmappedComponent))
2882        return false;
2883      ConceptMapGroupUnmappedComponent o = (ConceptMapGroupUnmappedComponent) other_;
2884      return compareValues(mode, o.mode, true) && compareValues(code, o.code, true)
2885          && compareValues(display, o.display, true);
2886    }
2887
2888    public boolean isEmpty() {
2889      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(mode, code, display, url);
2890    }
2891
2892    public String fhirType() {
2893      return "ConceptMap.group.unmapped";
2894
2895    }
2896
2897  }
2898
2899  /**
2900   * A formal identifier that is used to identify this concept map when it is
2901   * represented in other formats, or referenced in a specification, model, design
2902   * or an instance.
2903   */
2904  @Child(name = "identifier", type = {
2905      Identifier.class }, order = 0, min = 0, max = 1, modifier = false, summary = true)
2906  @Description(shortDefinition = "Additional identifier for the concept map", formalDefinition = "A formal identifier that is used to identify this concept map when it is represented in other formats, or referenced in a specification, model, design or an instance.")
2907  protected Identifier identifier;
2908
2909  /**
2910   * Explanation of why this concept map is needed and why it has been designed as
2911   * it has.
2912   */
2913  @Child(name = "purpose", type = {
2914      MarkdownType.class }, order = 1, min = 0, max = 1, modifier = false, summary = false)
2915  @Description(shortDefinition = "Why this concept map is defined", formalDefinition = "Explanation of why this concept map is needed and why it has been designed as it has.")
2916  protected MarkdownType purpose;
2917
2918  /**
2919   * A copyright statement relating to the concept map and/or its contents.
2920   * Copyright statements are generally legal restrictions on the use and
2921   * publishing of the concept map.
2922   */
2923  @Child(name = "copyright", type = {
2924      MarkdownType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
2925  @Description(shortDefinition = "Use and/or publishing restrictions", formalDefinition = "A copyright statement relating to the concept map and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the concept map.")
2926  protected MarkdownType copyright;
2927
2928  /**
2929   * Identifier for the source value set that contains the concepts that are being
2930   * mapped and provides context for the mappings.
2931   */
2932  @Child(name = "source", type = { UriType.class,
2933      CanonicalType.class }, order = 3, min = 0, max = 1, modifier = false, summary = true)
2934  @Description(shortDefinition = "The source value set that contains the concepts that are being mapped", formalDefinition = "Identifier for the source value set that contains the concepts that are being mapped and provides context for the mappings.")
2935  protected Type source;
2936
2937  /**
2938   * The target value set provides context for the mappings. Note that the mapping
2939   * is made between concepts, not between value sets, but the value set provides
2940   * important context about how the concept mapping choices are made.
2941   */
2942  @Child(name = "target", type = { UriType.class,
2943      CanonicalType.class }, order = 4, min = 0, max = 1, modifier = false, summary = true)
2944  @Description(shortDefinition = "The target value set which provides context for the mappings", formalDefinition = "The target value set provides context for the mappings. Note that the mapping is made between concepts, not between value sets, but the value set provides important context about how the concept mapping choices are made.")
2945  protected Type target;
2946
2947  /**
2948   * A group of mappings that all have the same source and target system.
2949   */
2950  @Child(name = "group", type = {}, order = 5, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
2951  @Description(shortDefinition = "Same source and target systems", formalDefinition = "A group of mappings that all have the same source and target system.")
2952  protected List<ConceptMapGroupComponent> group;
2953
2954  private static final long serialVersionUID = -2081872580L;
2955
2956  /**
2957   * Constructor
2958   */
2959  public ConceptMap() {
2960    super();
2961  }
2962
2963  /**
2964   * Constructor
2965   */
2966  public ConceptMap(Enumeration<PublicationStatus> status) {
2967    super();
2968    this.status = status;
2969  }
2970
2971  /**
2972   * @return {@link #url} (An absolute URI that is used to identify this concept
2973   *         map when it is referenced in a specification, model, design or an
2974   *         instance; also called its canonical identifier. This SHOULD be
2975   *         globally unique and SHOULD be a literal address at which at which an
2976   *         authoritative instance of this concept map is (or will be) published.
2977   *         This URL can be the target of a canonical reference. It SHALL remain
2978   *         the same when the concept map is stored on different servers.). This
2979   *         is the underlying object with id, value and extensions. The accessor
2980   *         "getUrl" gives direct access to the value
2981   */
2982  public UriType getUrlElement() {
2983    if (this.url == null)
2984      if (Configuration.errorOnAutoCreate())
2985        throw new Error("Attempt to auto-create ConceptMap.url");
2986      else if (Configuration.doAutoCreate())
2987        this.url = new UriType(); // bb
2988    return this.url;
2989  }
2990
2991  public boolean hasUrlElement() {
2992    return this.url != null && !this.url.isEmpty();
2993  }
2994
2995  public boolean hasUrl() {
2996    return this.url != null && !this.url.isEmpty();
2997  }
2998
2999  /**
3000   * @param value {@link #url} (An absolute URI that is used to identify this
3001   *              concept map when it is referenced in a specification, model,
3002   *              design or an instance; also called its canonical identifier.
3003   *              This SHOULD be globally unique and SHOULD be a literal address
3004   *              at which at which an authoritative instance of this concept map
3005   *              is (or will be) published. This URL can be the target of a
3006   *              canonical reference. It SHALL remain the same when the concept
3007   *              map is stored on different servers.). This is the underlying
3008   *              object with id, value and extensions. The accessor "getUrl"
3009   *              gives direct access to the value
3010   */
3011  public ConceptMap setUrlElement(UriType value) {
3012    this.url = value;
3013    return this;
3014  }
3015
3016  /**
3017   * @return An absolute URI that is used to identify this concept map when it is
3018   *         referenced in a specification, model, design or an instance; also
3019   *         called its canonical identifier. This SHOULD be globally unique and
3020   *         SHOULD be a literal address at which at which an authoritative
3021   *         instance of this concept map is (or will be) published. This URL can
3022   *         be the target of a canonical reference. It SHALL remain the same when
3023   *         the concept map is stored on different servers.
3024   */
3025  public String getUrl() {
3026    return this.url == null ? null : this.url.getValue();
3027  }
3028
3029  /**
3030   * @param value An absolute URI that is used to identify this concept map when
3031   *              it is referenced in a specification, model, design or an
3032   *              instance; also called its canonical identifier. This SHOULD be
3033   *              globally unique and SHOULD be a literal address at which at
3034   *              which an authoritative instance of this concept map is (or will
3035   *              be) published. This URL can be the target of a canonical
3036   *              reference. It SHALL remain the same when the concept map is
3037   *              stored on different servers.
3038   */
3039  public ConceptMap setUrl(String value) {
3040    if (Utilities.noString(value))
3041      this.url = null;
3042    else {
3043      if (this.url == null)
3044        this.url = new UriType();
3045      this.url.setValue(value);
3046    }
3047    return this;
3048  }
3049
3050  /**
3051   * @return {@link #identifier} (A formal identifier that is used to identify
3052   *         this concept map when it is represented in other formats, or
3053   *         referenced in a specification, model, design or an instance.)
3054   */
3055  public Identifier getIdentifier() {
3056    if (this.identifier == null)
3057      if (Configuration.errorOnAutoCreate())
3058        throw new Error("Attempt to auto-create ConceptMap.identifier");
3059      else if (Configuration.doAutoCreate())
3060        this.identifier = new Identifier(); // cc
3061    return this.identifier;
3062  }
3063
3064  public boolean hasIdentifier() {
3065    return this.identifier != null && !this.identifier.isEmpty();
3066  }
3067
3068  /**
3069   * @param value {@link #identifier} (A formal identifier that is used to
3070   *              identify this concept map when it is represented in other
3071   *              formats, or referenced in a specification, model, design or an
3072   *              instance.)
3073   */
3074  public ConceptMap setIdentifier(Identifier value) {
3075    this.identifier = value;
3076    return this;
3077  }
3078
3079  /**
3080   * @return {@link #version} (The identifier that is used to identify this
3081   *         version of the concept map when it is referenced in a specification,
3082   *         model, design or instance. This is an arbitrary value managed by the
3083   *         concept map author and is not expected to be globally unique. For
3084   *         example, it might be a timestamp (e.g. yyyymmdd) if a managed version
3085   *         is not available. There is also no expectation that versions can be
3086   *         placed in a lexicographical sequence.). This is the underlying object
3087   *         with id, value and extensions. The accessor "getVersion" gives direct
3088   *         access to the value
3089   */
3090  public StringType getVersionElement() {
3091    if (this.version == null)
3092      if (Configuration.errorOnAutoCreate())
3093        throw new Error("Attempt to auto-create ConceptMap.version");
3094      else if (Configuration.doAutoCreate())
3095        this.version = new StringType(); // bb
3096    return this.version;
3097  }
3098
3099  public boolean hasVersionElement() {
3100    return this.version != null && !this.version.isEmpty();
3101  }
3102
3103  public boolean hasVersion() {
3104    return this.version != null && !this.version.isEmpty();
3105  }
3106
3107  /**
3108   * @param value {@link #version} (The identifier that is used to identify this
3109   *              version of the concept map when it is referenced in a
3110   *              specification, model, design or instance. This is an arbitrary
3111   *              value managed by the concept map author and is not expected to
3112   *              be globally unique. For example, it might be a timestamp (e.g.
3113   *              yyyymmdd) if a managed version is not available. There is also
3114   *              no expectation that versions can be placed in a lexicographical
3115   *              sequence.). This is the underlying object with id, value and
3116   *              extensions. The accessor "getVersion" gives direct access to the
3117   *              value
3118   */
3119  public ConceptMap setVersionElement(StringType value) {
3120    this.version = value;
3121    return this;
3122  }
3123
3124  /**
3125   * @return The identifier that is used to identify this version of the concept
3126   *         map when it is referenced in a specification, model, design or
3127   *         instance. This is an arbitrary value managed by the concept map
3128   *         author and is not expected to be globally unique. For example, it
3129   *         might be a timestamp (e.g. yyyymmdd) if a managed version is not
3130   *         available. There is also no expectation that versions can be placed
3131   *         in a lexicographical sequence.
3132   */
3133  public String getVersion() {
3134    return this.version == null ? null : this.version.getValue();
3135  }
3136
3137  /**
3138   * @param value The identifier that is used to identify this version of the
3139   *              concept map when it is referenced in a specification, model,
3140   *              design or instance. This is an arbitrary value managed by the
3141   *              concept map author and is not expected to be globally unique.
3142   *              For example, it might be a timestamp (e.g. yyyymmdd) if a
3143   *              managed version is not available. There is also no expectation
3144   *              that versions can be placed in a lexicographical sequence.
3145   */
3146  public ConceptMap setVersion(String value) {
3147    if (Utilities.noString(value))
3148      this.version = null;
3149    else {
3150      if (this.version == null)
3151        this.version = new StringType();
3152      this.version.setValue(value);
3153    }
3154    return this;
3155  }
3156
3157  /**
3158   * @return {@link #name} (A natural language name identifying the concept map.
3159   *         This name should be usable as an identifier for the module by machine
3160   *         processing applications such as code generation.). This is the
3161   *         underlying object with id, value and extensions. The accessor
3162   *         "getName" gives direct access to the value
3163   */
3164  public StringType getNameElement() {
3165    if (this.name == null)
3166      if (Configuration.errorOnAutoCreate())
3167        throw new Error("Attempt to auto-create ConceptMap.name");
3168      else if (Configuration.doAutoCreate())
3169        this.name = new StringType(); // bb
3170    return this.name;
3171  }
3172
3173  public boolean hasNameElement() {
3174    return this.name != null && !this.name.isEmpty();
3175  }
3176
3177  public boolean hasName() {
3178    return this.name != null && !this.name.isEmpty();
3179  }
3180
3181  /**
3182   * @param value {@link #name} (A natural language name identifying the concept
3183   *              map. This name should be usable as an identifier for the module
3184   *              by machine processing applications such as code generation.).
3185   *              This is the underlying object with id, value and extensions. The
3186   *              accessor "getName" gives direct access to the value
3187   */
3188  public ConceptMap setNameElement(StringType value) {
3189    this.name = value;
3190    return this;
3191  }
3192
3193  /**
3194   * @return A natural language name identifying the concept map. This name should
3195   *         be usable as an identifier for the module by machine processing
3196   *         applications such as code generation.
3197   */
3198  public String getName() {
3199    return this.name == null ? null : this.name.getValue();
3200  }
3201
3202  /**
3203   * @param value A natural language name identifying the concept map. This name
3204   *              should be usable as an identifier for the module by machine
3205   *              processing applications such as code generation.
3206   */
3207  public ConceptMap setName(String value) {
3208    if (Utilities.noString(value))
3209      this.name = null;
3210    else {
3211      if (this.name == null)
3212        this.name = new StringType();
3213      this.name.setValue(value);
3214    }
3215    return this;
3216  }
3217
3218  /**
3219   * @return {@link #title} (A short, descriptive, user-friendly title for the
3220   *         concept map.). This is the underlying object with id, value and
3221   *         extensions. The accessor "getTitle" gives direct access to the value
3222   */
3223  public StringType getTitleElement() {
3224    if (this.title == null)
3225      if (Configuration.errorOnAutoCreate())
3226        throw new Error("Attempt to auto-create ConceptMap.title");
3227      else if (Configuration.doAutoCreate())
3228        this.title = new StringType(); // bb
3229    return this.title;
3230  }
3231
3232  public boolean hasTitleElement() {
3233    return this.title != null && !this.title.isEmpty();
3234  }
3235
3236  public boolean hasTitle() {
3237    return this.title != null && !this.title.isEmpty();
3238  }
3239
3240  /**
3241   * @param value {@link #title} (A short, descriptive, user-friendly title for
3242   *              the concept map.). This is the underlying object with id, value
3243   *              and extensions. The accessor "getTitle" gives direct access to
3244   *              the value
3245   */
3246  public ConceptMap setTitleElement(StringType value) {
3247    this.title = value;
3248    return this;
3249  }
3250
3251  /**
3252   * @return A short, descriptive, user-friendly title for the concept map.
3253   */
3254  public String getTitle() {
3255    return this.title == null ? null : this.title.getValue();
3256  }
3257
3258  /**
3259   * @param value A short, descriptive, user-friendly title for the concept map.
3260   */
3261  public ConceptMap setTitle(String value) {
3262    if (Utilities.noString(value))
3263      this.title = null;
3264    else {
3265      if (this.title == null)
3266        this.title = new StringType();
3267      this.title.setValue(value);
3268    }
3269    return this;
3270  }
3271
3272  /**
3273   * @return {@link #status} (The status of this concept map. Enables tracking the
3274   *         life-cycle of the content.). This is the underlying object with id,
3275   *         value and extensions. The accessor "getStatus" gives direct access to
3276   *         the value
3277   */
3278  public Enumeration<PublicationStatus> getStatusElement() {
3279    if (this.status == null)
3280      if (Configuration.errorOnAutoCreate())
3281        throw new Error("Attempt to auto-create ConceptMap.status");
3282      else if (Configuration.doAutoCreate())
3283        this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
3284    return this.status;
3285  }
3286
3287  public boolean hasStatusElement() {
3288    return this.status != null && !this.status.isEmpty();
3289  }
3290
3291  public boolean hasStatus() {
3292    return this.status != null && !this.status.isEmpty();
3293  }
3294
3295  /**
3296   * @param value {@link #status} (The status of this concept map. Enables
3297   *              tracking the life-cycle of the content.). This is the underlying
3298   *              object with id, value and extensions. The accessor "getStatus"
3299   *              gives direct access to the value
3300   */
3301  public ConceptMap setStatusElement(Enumeration<PublicationStatus> value) {
3302    this.status = value;
3303    return this;
3304  }
3305
3306  /**
3307   * @return The status of this concept map. Enables tracking the life-cycle of
3308   *         the content.
3309   */
3310  public PublicationStatus getStatus() {
3311    return this.status == null ? null : this.status.getValue();
3312  }
3313
3314  /**
3315   * @param value The status of this concept map. Enables tracking the life-cycle
3316   *              of the content.
3317   */
3318  public ConceptMap setStatus(PublicationStatus value) {
3319    if (this.status == null)
3320      this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
3321    this.status.setValue(value);
3322    return this;
3323  }
3324
3325  /**
3326   * @return {@link #experimental} (A Boolean value to indicate that this concept
3327   *         map is authored for testing purposes (or
3328   *         education/evaluation/marketing) and is not intended to be used for
3329   *         genuine usage.). This is the underlying object with id, value and
3330   *         extensions. The accessor "getExperimental" gives direct access to the
3331   *         value
3332   */
3333  public BooleanType getExperimentalElement() {
3334    if (this.experimental == null)
3335      if (Configuration.errorOnAutoCreate())
3336        throw new Error("Attempt to auto-create ConceptMap.experimental");
3337      else if (Configuration.doAutoCreate())
3338        this.experimental = new BooleanType(); // bb
3339    return this.experimental;
3340  }
3341
3342  public boolean hasExperimentalElement() {
3343    return this.experimental != null && !this.experimental.isEmpty();
3344  }
3345
3346  public boolean hasExperimental() {
3347    return this.experimental != null && !this.experimental.isEmpty();
3348  }
3349
3350  /**
3351   * @param value {@link #experimental} (A Boolean value to indicate that this
3352   *              concept map is authored for testing purposes (or
3353   *              education/evaluation/marketing) and is not intended to be used
3354   *              for genuine usage.). This is the underlying object with id,
3355   *              value and extensions. The accessor "getExperimental" gives
3356   *              direct access to the value
3357   */
3358  public ConceptMap setExperimentalElement(BooleanType value) {
3359    this.experimental = value;
3360    return this;
3361  }
3362
3363  /**
3364   * @return A Boolean value to indicate that this concept map is authored for
3365   *         testing purposes (or education/evaluation/marketing) and is not
3366   *         intended to be used for genuine usage.
3367   */
3368  public boolean getExperimental() {
3369    return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
3370  }
3371
3372  /**
3373   * @param value A Boolean value to indicate that this concept map is authored
3374   *              for testing purposes (or education/evaluation/marketing) and is
3375   *              not intended to be used for genuine usage.
3376   */
3377  public ConceptMap setExperimental(boolean value) {
3378    if (this.experimental == null)
3379      this.experimental = new BooleanType();
3380    this.experimental.setValue(value);
3381    return this;
3382  }
3383
3384  /**
3385   * @return {@link #date} (The date (and optionally time) when the concept map
3386   *         was published. The date must change when the business version changes
3387   *         and it must change if the status code changes. In addition, it should
3388   *         change when the substantive content of the concept map changes.).
3389   *         This is the underlying object with id, value and extensions. The
3390   *         accessor "getDate" gives direct access to the value
3391   */
3392  public DateTimeType getDateElement() {
3393    if (this.date == null)
3394      if (Configuration.errorOnAutoCreate())
3395        throw new Error("Attempt to auto-create ConceptMap.date");
3396      else if (Configuration.doAutoCreate())
3397        this.date = new DateTimeType(); // bb
3398    return this.date;
3399  }
3400
3401  public boolean hasDateElement() {
3402    return this.date != null && !this.date.isEmpty();
3403  }
3404
3405  public boolean hasDate() {
3406    return this.date != null && !this.date.isEmpty();
3407  }
3408
3409  /**
3410   * @param value {@link #date} (The date (and optionally time) when the concept
3411   *              map was published. The date must change when the business
3412   *              version changes and it must change if the status code changes.
3413   *              In addition, it should change when the substantive content of
3414   *              the concept map changes.). This is the underlying object with
3415   *              id, value and extensions. The accessor "getDate" gives direct
3416   *              access to the value
3417   */
3418  public ConceptMap setDateElement(DateTimeType value) {
3419    this.date = value;
3420    return this;
3421  }
3422
3423  /**
3424   * @return The date (and optionally time) when the concept map was published.
3425   *         The date must change when the business version changes and it must
3426   *         change if the status code changes. In addition, it should change when
3427   *         the substantive content of the concept map changes.
3428   */
3429  public Date getDate() {
3430    return this.date == null ? null : this.date.getValue();
3431  }
3432
3433  /**
3434   * @param value The date (and optionally time) when the concept map was
3435   *              published. The date must change when the business version
3436   *              changes and it must change if the status code changes. In
3437   *              addition, it should change when the substantive content of the
3438   *              concept map changes.
3439   */
3440  public ConceptMap setDate(Date value) {
3441    if (value == null)
3442      this.date = null;
3443    else {
3444      if (this.date == null)
3445        this.date = new DateTimeType();
3446      this.date.setValue(value);
3447    }
3448    return this;
3449  }
3450
3451  /**
3452   * @return {@link #publisher} (The name of the organization or individual that
3453   *         published the concept map.). This is the underlying object with id,
3454   *         value and extensions. The accessor "getPublisher" gives direct access
3455   *         to the value
3456   */
3457  public StringType getPublisherElement() {
3458    if (this.publisher == null)
3459      if (Configuration.errorOnAutoCreate())
3460        throw new Error("Attempt to auto-create ConceptMap.publisher");
3461      else if (Configuration.doAutoCreate())
3462        this.publisher = new StringType(); // bb
3463    return this.publisher;
3464  }
3465
3466  public boolean hasPublisherElement() {
3467    return this.publisher != null && !this.publisher.isEmpty();
3468  }
3469
3470  public boolean hasPublisher() {
3471    return this.publisher != null && !this.publisher.isEmpty();
3472  }
3473
3474  /**
3475   * @param value {@link #publisher} (The name of the organization or individual
3476   *              that published the concept map.). This is the underlying object
3477   *              with id, value and extensions. The accessor "getPublisher" gives
3478   *              direct access to the value
3479   */
3480  public ConceptMap setPublisherElement(StringType value) {
3481    this.publisher = value;
3482    return this;
3483  }
3484
3485  /**
3486   * @return The name of the organization or individual that published the concept
3487   *         map.
3488   */
3489  public String getPublisher() {
3490    return this.publisher == null ? null : this.publisher.getValue();
3491  }
3492
3493  /**
3494   * @param value The name of the organization or individual that published the
3495   *              concept map.
3496   */
3497  public ConceptMap setPublisher(String value) {
3498    if (Utilities.noString(value))
3499      this.publisher = null;
3500    else {
3501      if (this.publisher == null)
3502        this.publisher = new StringType();
3503      this.publisher.setValue(value);
3504    }
3505    return this;
3506  }
3507
3508  /**
3509   * @return {@link #contact} (Contact details to assist a user in finding and
3510   *         communicating with the publisher.)
3511   */
3512  public List<ContactDetail> getContact() {
3513    if (this.contact == null)
3514      this.contact = new ArrayList<ContactDetail>();
3515    return this.contact;
3516  }
3517
3518  /**
3519   * @return Returns a reference to <code>this</code> for easy method chaining
3520   */
3521  public ConceptMap setContact(List<ContactDetail> theContact) {
3522    this.contact = theContact;
3523    return this;
3524  }
3525
3526  public boolean hasContact() {
3527    if (this.contact == null)
3528      return false;
3529    for (ContactDetail item : this.contact)
3530      if (!item.isEmpty())
3531        return true;
3532    return false;
3533  }
3534
3535  public ContactDetail addContact() { // 3
3536    ContactDetail t = new ContactDetail();
3537    if (this.contact == null)
3538      this.contact = new ArrayList<ContactDetail>();
3539    this.contact.add(t);
3540    return t;
3541  }
3542
3543  public ConceptMap addContact(ContactDetail t) { // 3
3544    if (t == null)
3545      return this;
3546    if (this.contact == null)
3547      this.contact = new ArrayList<ContactDetail>();
3548    this.contact.add(t);
3549    return this;
3550  }
3551
3552  /**
3553   * @return The first repetition of repeating field {@link #contact}, creating it
3554   *         if it does not already exist
3555   */
3556  public ContactDetail getContactFirstRep() {
3557    if (getContact().isEmpty()) {
3558      addContact();
3559    }
3560    return getContact().get(0);
3561  }
3562
3563  /**
3564   * @return {@link #description} (A free text natural language description of the
3565   *         concept map from a consumer's perspective.). This is the underlying
3566   *         object with id, value and extensions. The accessor "getDescription"
3567   *         gives direct access to the value
3568   */
3569  public MarkdownType getDescriptionElement() {
3570    if (this.description == null)
3571      if (Configuration.errorOnAutoCreate())
3572        throw new Error("Attempt to auto-create ConceptMap.description");
3573      else if (Configuration.doAutoCreate())
3574        this.description = new MarkdownType(); // bb
3575    return this.description;
3576  }
3577
3578  public boolean hasDescriptionElement() {
3579    return this.description != null && !this.description.isEmpty();
3580  }
3581
3582  public boolean hasDescription() {
3583    return this.description != null && !this.description.isEmpty();
3584  }
3585
3586  /**
3587   * @param value {@link #description} (A free text natural language description
3588   *              of the concept map from a consumer's perspective.). This is the
3589   *              underlying object with id, value and extensions. The accessor
3590   *              "getDescription" gives direct access to the value
3591   */
3592  public ConceptMap setDescriptionElement(MarkdownType value) {
3593    this.description = value;
3594    return this;
3595  }
3596
3597  /**
3598   * @return A free text natural language description of the concept map from a
3599   *         consumer's perspective.
3600   */
3601  public String getDescription() {
3602    return this.description == null ? null : this.description.getValue();
3603  }
3604
3605  /**
3606   * @param value A free text natural language description of the concept map from
3607   *              a consumer's perspective.
3608   */
3609  public ConceptMap setDescription(String value) {
3610    if (value == null)
3611      this.description = null;
3612    else {
3613      if (this.description == null)
3614        this.description = new MarkdownType();
3615      this.description.setValue(value);
3616    }
3617    return this;
3618  }
3619
3620  /**
3621   * @return {@link #useContext} (The content was developed with a focus and
3622   *         intent of supporting the contexts that are listed. These contexts may
3623   *         be general categories (gender, age, ...) or may be references to
3624   *         specific programs (insurance plans, studies, ...) and may be used to
3625   *         assist with indexing and searching for appropriate concept map
3626   *         instances.)
3627   */
3628  public List<UsageContext> getUseContext() {
3629    if (this.useContext == null)
3630      this.useContext = new ArrayList<UsageContext>();
3631    return this.useContext;
3632  }
3633
3634  /**
3635   * @return Returns a reference to <code>this</code> for easy method chaining
3636   */
3637  public ConceptMap setUseContext(List<UsageContext> theUseContext) {
3638    this.useContext = theUseContext;
3639    return this;
3640  }
3641
3642  public boolean hasUseContext() {
3643    if (this.useContext == null)
3644      return false;
3645    for (UsageContext item : this.useContext)
3646      if (!item.isEmpty())
3647        return true;
3648    return false;
3649  }
3650
3651  public UsageContext addUseContext() { // 3
3652    UsageContext t = new UsageContext();
3653    if (this.useContext == null)
3654      this.useContext = new ArrayList<UsageContext>();
3655    this.useContext.add(t);
3656    return t;
3657  }
3658
3659  public ConceptMap addUseContext(UsageContext t) { // 3
3660    if (t == null)
3661      return this;
3662    if (this.useContext == null)
3663      this.useContext = new ArrayList<UsageContext>();
3664    this.useContext.add(t);
3665    return this;
3666  }
3667
3668  /**
3669   * @return The first repetition of repeating field {@link #useContext}, creating
3670   *         it if it does not already exist
3671   */
3672  public UsageContext getUseContextFirstRep() {
3673    if (getUseContext().isEmpty()) {
3674      addUseContext();
3675    }
3676    return getUseContext().get(0);
3677  }
3678
3679  /**
3680   * @return {@link #jurisdiction} (A legal or geographic region in which the
3681   *         concept map is intended to be used.)
3682   */
3683  public List<CodeableConcept> getJurisdiction() {
3684    if (this.jurisdiction == null)
3685      this.jurisdiction = new ArrayList<CodeableConcept>();
3686    return this.jurisdiction;
3687  }
3688
3689  /**
3690   * @return Returns a reference to <code>this</code> for easy method chaining
3691   */
3692  public ConceptMap setJurisdiction(List<CodeableConcept> theJurisdiction) {
3693    this.jurisdiction = theJurisdiction;
3694    return this;
3695  }
3696
3697  public boolean hasJurisdiction() {
3698    if (this.jurisdiction == null)
3699      return false;
3700    for (CodeableConcept item : this.jurisdiction)
3701      if (!item.isEmpty())
3702        return true;
3703    return false;
3704  }
3705
3706  public CodeableConcept addJurisdiction() { // 3
3707    CodeableConcept t = new CodeableConcept();
3708    if (this.jurisdiction == null)
3709      this.jurisdiction = new ArrayList<CodeableConcept>();
3710    this.jurisdiction.add(t);
3711    return t;
3712  }
3713
3714  public ConceptMap addJurisdiction(CodeableConcept t) { // 3
3715    if (t == null)
3716      return this;
3717    if (this.jurisdiction == null)
3718      this.jurisdiction = new ArrayList<CodeableConcept>();
3719    this.jurisdiction.add(t);
3720    return this;
3721  }
3722
3723  /**
3724   * @return The first repetition of repeating field {@link #jurisdiction},
3725   *         creating it if it does not already exist
3726   */
3727  public CodeableConcept getJurisdictionFirstRep() {
3728    if (getJurisdiction().isEmpty()) {
3729      addJurisdiction();
3730    }
3731    return getJurisdiction().get(0);
3732  }
3733
3734  /**
3735   * @return {@link #purpose} (Explanation of why this concept map is needed and
3736   *         why it has been designed as it has.). This is the underlying object
3737   *         with id, value and extensions. The accessor "getPurpose" gives direct
3738   *         access to the value
3739   */
3740  public MarkdownType getPurposeElement() {
3741    if (this.purpose == null)
3742      if (Configuration.errorOnAutoCreate())
3743        throw new Error("Attempt to auto-create ConceptMap.purpose");
3744      else if (Configuration.doAutoCreate())
3745        this.purpose = new MarkdownType(); // bb
3746    return this.purpose;
3747  }
3748
3749  public boolean hasPurposeElement() {
3750    return this.purpose != null && !this.purpose.isEmpty();
3751  }
3752
3753  public boolean hasPurpose() {
3754    return this.purpose != null && !this.purpose.isEmpty();
3755  }
3756
3757  /**
3758   * @param value {@link #purpose} (Explanation of why this concept map is needed
3759   *              and why it has been designed as it has.). This is the underlying
3760   *              object with id, value and extensions. The accessor "getPurpose"
3761   *              gives direct access to the value
3762   */
3763  public ConceptMap setPurposeElement(MarkdownType value) {
3764    this.purpose = value;
3765    return this;
3766  }
3767
3768  /**
3769   * @return Explanation of why this concept map is needed and why it has been
3770   *         designed as it has.
3771   */
3772  public String getPurpose() {
3773    return this.purpose == null ? null : this.purpose.getValue();
3774  }
3775
3776  /**
3777   * @param value Explanation of why this concept map is needed and why it has
3778   *              been designed as it has.
3779   */
3780  public ConceptMap setPurpose(String value) {
3781    if (value == null)
3782      this.purpose = null;
3783    else {
3784      if (this.purpose == null)
3785        this.purpose = new MarkdownType();
3786      this.purpose.setValue(value);
3787    }
3788    return this;
3789  }
3790
3791  /**
3792   * @return {@link #copyright} (A copyright statement relating to the concept map
3793   *         and/or its contents. Copyright statements are generally legal
3794   *         restrictions on the use and publishing of the concept map.). This is
3795   *         the underlying object with id, value and extensions. The accessor
3796   *         "getCopyright" gives direct access to the value
3797   */
3798  public MarkdownType getCopyrightElement() {
3799    if (this.copyright == null)
3800      if (Configuration.errorOnAutoCreate())
3801        throw new Error("Attempt to auto-create ConceptMap.copyright");
3802      else if (Configuration.doAutoCreate())
3803        this.copyright = new MarkdownType(); // bb
3804    return this.copyright;
3805  }
3806
3807  public boolean hasCopyrightElement() {
3808    return this.copyright != null && !this.copyright.isEmpty();
3809  }
3810
3811  public boolean hasCopyright() {
3812    return this.copyright != null && !this.copyright.isEmpty();
3813  }
3814
3815  /**
3816   * @param value {@link #copyright} (A copyright statement relating to the
3817   *              concept map and/or its contents. Copyright statements are
3818   *              generally legal restrictions on the use and publishing of the
3819   *              concept map.). This is the underlying object with id, value and
3820   *              extensions. The accessor "getCopyright" gives direct access to
3821   *              the value
3822   */
3823  public ConceptMap setCopyrightElement(MarkdownType value) {
3824    this.copyright = value;
3825    return this;
3826  }
3827
3828  /**
3829   * @return A copyright statement relating to the concept map and/or its
3830   *         contents. Copyright statements are generally legal restrictions on
3831   *         the use and publishing of the concept map.
3832   */
3833  public String getCopyright() {
3834    return this.copyright == null ? null : this.copyright.getValue();
3835  }
3836
3837  /**
3838   * @param value A copyright statement relating to the concept map and/or its
3839   *              contents. Copyright statements are generally legal restrictions
3840   *              on the use and publishing of the concept map.
3841   */
3842  public ConceptMap setCopyright(String value) {
3843    if (value == null)
3844      this.copyright = null;
3845    else {
3846      if (this.copyright == null)
3847        this.copyright = new MarkdownType();
3848      this.copyright.setValue(value);
3849    }
3850    return this;
3851  }
3852
3853  /**
3854   * @return {@link #source} (Identifier for the source value set that contains
3855   *         the concepts that are being mapped and provides context for the
3856   *         mappings.)
3857   */
3858  public Type getSource() {
3859    return this.source;
3860  }
3861
3862  /**
3863   * @return {@link #source} (Identifier for the source value set that contains
3864   *         the concepts that are being mapped and provides context for the
3865   *         mappings.)
3866   */
3867  public UriType getSourceUriType() throws FHIRException {
3868    if (this.source == null)
3869      this.source = new UriType();
3870    if (!(this.source instanceof UriType))
3871      throw new FHIRException(
3872          "Type mismatch: the type UriType was expected, but " + this.source.getClass().getName() + " was encountered");
3873    return (UriType) this.source;
3874  }
3875
3876  public boolean hasSourceUriType() {
3877    return this != null && this.source instanceof UriType;
3878  }
3879
3880  /**
3881   * @return {@link #source} (Identifier for the source value set that contains
3882   *         the concepts that are being mapped and provides context for the
3883   *         mappings.)
3884   */
3885  public CanonicalType getSourceCanonicalType() throws FHIRException {
3886    if (this.source == null)
3887      this.source = new CanonicalType();
3888    if (!(this.source instanceof CanonicalType))
3889      throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "
3890          + this.source.getClass().getName() + " was encountered");
3891    return (CanonicalType) this.source;
3892  }
3893
3894  public boolean hasSourceCanonicalType() {
3895    return this != null && this.source instanceof CanonicalType;
3896  }
3897
3898  public boolean hasSource() {
3899    return this.source != null && !this.source.isEmpty();
3900  }
3901
3902  /**
3903   * @param value {@link #source} (Identifier for the source value set that
3904   *              contains the concepts that are being mapped and provides context
3905   *              for the mappings.)
3906   */
3907  public ConceptMap setSource(Type value) {
3908    if (value != null && !(value instanceof UriType || value instanceof CanonicalType))
3909      throw new Error("Not the right type for ConceptMap.source[x]: " + value.fhirType());
3910    this.source = value;
3911    return this;
3912  }
3913
3914  /**
3915   * @return {@link #target} (The target value set provides context for the
3916   *         mappings. Note that the mapping is made between concepts, not between
3917   *         value sets, but the value set provides important context about how
3918   *         the concept mapping choices are made.)
3919   */
3920  public Type getTarget() {
3921    return this.target;
3922  }
3923
3924  /**
3925   * @return {@link #target} (The target value set provides context for the
3926   *         mappings. Note that the mapping is made between concepts, not between
3927   *         value sets, but the value set provides important context about how
3928   *         the concept mapping choices are made.)
3929   */
3930  public UriType getTargetUriType() throws FHIRException {
3931    if (this.target == null)
3932      this.target = new UriType();
3933    if (!(this.target instanceof UriType))
3934      throw new FHIRException(
3935          "Type mismatch: the type UriType was expected, but " + this.target.getClass().getName() + " was encountered");
3936    return (UriType) this.target;
3937  }
3938
3939  public boolean hasTargetUriType() {
3940    return this != null && this.target instanceof UriType;
3941  }
3942
3943  /**
3944   * @return {@link #target} (The target value set provides context for the
3945   *         mappings. Note that the mapping is made between concepts, not between
3946   *         value sets, but the value set provides important context about how
3947   *         the concept mapping choices are made.)
3948   */
3949  public CanonicalType getTargetCanonicalType() throws FHIRException {
3950    if (this.target == null)
3951      this.target = new CanonicalType();
3952    if (!(this.target instanceof CanonicalType))
3953      throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "
3954          + this.target.getClass().getName() + " was encountered");
3955    return (CanonicalType) this.target;
3956  }
3957
3958  public boolean hasTargetCanonicalType() {
3959    return this != null && this.target instanceof CanonicalType;
3960  }
3961
3962  public boolean hasTarget() {
3963    return this.target != null && !this.target.isEmpty();
3964  }
3965
3966  /**
3967   * @param value {@link #target} (The target value set provides context for the
3968   *              mappings. Note that the mapping is made between concepts, not
3969   *              between value sets, but the value set provides important context
3970   *              about how the concept mapping choices are made.)
3971   */
3972  public ConceptMap setTarget(Type value) {
3973    if (value != null && !(value instanceof UriType || value instanceof CanonicalType))
3974      throw new Error("Not the right type for ConceptMap.target[x]: " + value.fhirType());
3975    this.target = value;
3976    return this;
3977  }
3978
3979  /**
3980   * @return {@link #group} (A group of mappings that all have the same source and
3981   *         target system.)
3982   */
3983  public List<ConceptMapGroupComponent> getGroup() {
3984    if (this.group == null)
3985      this.group = new ArrayList<ConceptMapGroupComponent>();
3986    return this.group;
3987  }
3988
3989  /**
3990   * @return Returns a reference to <code>this</code> for easy method chaining
3991   */
3992  public ConceptMap setGroup(List<ConceptMapGroupComponent> theGroup) {
3993    this.group = theGroup;
3994    return this;
3995  }
3996
3997  public boolean hasGroup() {
3998    if (this.group == null)
3999      return false;
4000    for (ConceptMapGroupComponent item : this.group)
4001      if (!item.isEmpty())
4002        return true;
4003    return false;
4004  }
4005
4006  public ConceptMapGroupComponent addGroup() { // 3
4007    ConceptMapGroupComponent t = new ConceptMapGroupComponent();
4008    if (this.group == null)
4009      this.group = new ArrayList<ConceptMapGroupComponent>();
4010    this.group.add(t);
4011    return t;
4012  }
4013
4014  public ConceptMap addGroup(ConceptMapGroupComponent t) { // 3
4015    if (t == null)
4016      return this;
4017    if (this.group == null)
4018      this.group = new ArrayList<ConceptMapGroupComponent>();
4019    this.group.add(t);
4020    return this;
4021  }
4022
4023  /**
4024   * @return The first repetition of repeating field {@link #group}, creating it
4025   *         if it does not already exist
4026   */
4027  public ConceptMapGroupComponent getGroupFirstRep() {
4028    if (getGroup().isEmpty()) {
4029      addGroup();
4030    }
4031    return getGroup().get(0);
4032  }
4033
4034  protected void listChildren(List<Property> children) {
4035    super.listChildren(children);
4036    children.add(new Property("url", "uri",
4037        "An absolute URI that is used to identify this concept map when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this concept map is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the concept map is stored on different servers.",
4038        0, 1, url));
4039    children.add(new Property("identifier", "Identifier",
4040        "A formal identifier that is used to identify this concept map when it is represented in other formats, or referenced in a specification, model, design or an instance.",
4041        0, 1, identifier));
4042    children.add(new Property("version", "string",
4043        "The identifier that is used to identify this version of the concept map when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the concept map author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.",
4044        0, 1, version));
4045    children.add(new Property("name", "string",
4046        "A natural language name identifying the concept map. This name should be usable as an identifier for the module by machine processing applications such as code generation.",
4047        0, 1, name));
4048    children.add(
4049        new Property("title", "string", "A short, descriptive, user-friendly title for the concept map.", 0, 1, title));
4050    children.add(new Property("status", "code",
4051        "The status of this concept map. Enables tracking the life-cycle of the content.", 0, 1, status));
4052    children.add(new Property("experimental", "boolean",
4053        "A Boolean value to indicate that this concept map is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.",
4054        0, 1, experimental));
4055    children.add(new Property("date", "dateTime",
4056        "The date  (and optionally time) when the concept map was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the concept map changes.",
4057        0, 1, date));
4058    children.add(new Property("publisher", "string",
4059        "The name of the organization or individual that published the concept map.", 0, 1, publisher));
4060    children.add(new Property("contact", "ContactDetail",
4061        "Contact details to assist a user in finding and communicating with the publisher.", 0,
4062        java.lang.Integer.MAX_VALUE, contact));
4063    children.add(new Property("description", "markdown",
4064        "A free text natural language description of the concept map from a consumer's perspective.", 0, 1,
4065        description));
4066    children.add(new Property("useContext", "UsageContext",
4067        "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate concept map instances.",
4068        0, java.lang.Integer.MAX_VALUE, useContext));
4069    children.add(new Property("jurisdiction", "CodeableConcept",
4070        "A legal or geographic region in which the concept map is intended to be used.", 0, java.lang.Integer.MAX_VALUE,
4071        jurisdiction));
4072    children.add(new Property("purpose", "markdown",
4073        "Explanation of why this concept map is needed and why it has been designed as it has.", 0, 1, purpose));
4074    children.add(new Property("copyright", "markdown",
4075        "A copyright statement relating to the concept map and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the concept map.",
4076        0, 1, copyright));
4077    children.add(new Property("source[x]", "uri|canonical(ValueSet)",
4078        "Identifier for the source value set that contains the concepts that are being mapped and provides context for the mappings.",
4079        0, 1, source));
4080    children.add(new Property("target[x]", "uri|canonical(ValueSet)",
4081        "The target value set provides context for the mappings. Note that the mapping is made between concepts, not between value sets, but the value set provides important context about how the concept mapping choices are made.",
4082        0, 1, target));
4083    children.add(new Property("group", "", "A group of mappings that all have the same source and target system.", 0,
4084        java.lang.Integer.MAX_VALUE, group));
4085  }
4086
4087  @Override
4088  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4089    switch (_hash) {
4090    case 116079:
4091      /* url */ return new Property("url", "uri",
4092          "An absolute URI that is used to identify this concept map when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this concept map is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the concept map is stored on different servers.",
4093          0, 1, url);
4094    case -1618432855:
4095      /* identifier */ return new Property("identifier", "Identifier",
4096          "A formal identifier that is used to identify this concept map when it is represented in other formats, or referenced in a specification, model, design or an instance.",
4097          0, 1, identifier);
4098    case 351608024:
4099      /* version */ return new Property("version", "string",
4100          "The identifier that is used to identify this version of the concept map when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the concept map author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.",
4101          0, 1, version);
4102    case 3373707:
4103      /* name */ return new Property("name", "string",
4104          "A natural language name identifying the concept map. This name should be usable as an identifier for the module by machine processing applications such as code generation.",
4105          0, 1, name);
4106    case 110371416:
4107      /* title */ return new Property("title", "string",
4108          "A short, descriptive, user-friendly title for the concept map.", 0, 1, title);
4109    case -892481550:
4110      /* status */ return new Property("status", "code",
4111          "The status of this concept map. Enables tracking the life-cycle of the content.", 0, 1, status);
4112    case -404562712:
4113      /* experimental */ return new Property("experimental", "boolean",
4114          "A Boolean value to indicate that this concept map is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.",
4115          0, 1, experimental);
4116    case 3076014:
4117      /* date */ return new Property("date", "dateTime",
4118          "The date  (and optionally time) when the concept map was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the concept map changes.",
4119          0, 1, date);
4120    case 1447404028:
4121      /* publisher */ return new Property("publisher", "string",
4122          "The name of the organization or individual that published the concept map.", 0, 1, publisher);
4123    case 951526432:
4124      /* contact */ return new Property("contact", "ContactDetail",
4125          "Contact details to assist a user in finding and communicating with the publisher.", 0,
4126          java.lang.Integer.MAX_VALUE, contact);
4127    case -1724546052:
4128      /* description */ return new Property("description", "markdown",
4129          "A free text natural language description of the concept map from a consumer's perspective.", 0, 1,
4130          description);
4131    case -669707736:
4132      /* useContext */ return new Property("useContext", "UsageContext",
4133          "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate concept map instances.",
4134          0, java.lang.Integer.MAX_VALUE, useContext);
4135    case -507075711:
4136      /* jurisdiction */ return new Property("jurisdiction", "CodeableConcept",
4137          "A legal or geographic region in which the concept map is intended to be used.", 0,
4138          java.lang.Integer.MAX_VALUE, jurisdiction);
4139    case -220463842:
4140      /* purpose */ return new Property("purpose", "markdown",
4141          "Explanation of why this concept map is needed and why it has been designed as it has.", 0, 1, purpose);
4142    case 1522889671:
4143      /* copyright */ return new Property("copyright", "markdown",
4144          "A copyright statement relating to the concept map and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the concept map.",
4145          0, 1, copyright);
4146    case -1698413947:
4147      /* source[x] */ return new Property("source[x]", "uri|canonical(ValueSet)",
4148          "Identifier for the source value set that contains the concepts that are being mapped and provides context for the mappings.",
4149          0, 1, source);
4150    case -896505829:
4151      /* source */ return new Property("source[x]", "uri|canonical(ValueSet)",
4152          "Identifier for the source value set that contains the concepts that are being mapped and provides context for the mappings.",
4153          0, 1, source);
4154    case -1698419887:
4155      /* sourceUri */ return new Property("source[x]", "uri|canonical(ValueSet)",
4156          "Identifier for the source value set that contains the concepts that are being mapped and provides context for the mappings.",
4157          0, 1, source);
4158    case 1509247769:
4159      /* sourceCanonical */ return new Property("source[x]", "uri|canonical(ValueSet)",
4160          "Identifier for the source value set that contains the concepts that are being mapped and provides context for the mappings.",
4161          0, 1, source);
4162    case -815579825:
4163      /* target[x] */ return new Property("target[x]", "uri|canonical(ValueSet)",
4164          "The target value set provides context for the mappings. Note that the mapping is made between concepts, not between value sets, but the value set provides important context about how the concept mapping choices are made.",
4165          0, 1, target);
4166    case -880905839:
4167      /* target */ return new Property("target[x]", "uri|canonical(ValueSet)",
4168          "The target value set provides context for the mappings. Note that the mapping is made between concepts, not between value sets, but the value set provides important context about how the concept mapping choices are made.",
4169          0, 1, target);
4170    case -815585765:
4171      /* targetUri */ return new Property("target[x]", "uri|canonical(ValueSet)",
4172          "The target value set provides context for the mappings. Note that the mapping is made between concepts, not between value sets, but the value set provides important context about how the concept mapping choices are made.",
4173          0, 1, target);
4174    case -1281653149:
4175      /* targetCanonical */ return new Property("target[x]", "uri|canonical(ValueSet)",
4176          "The target value set provides context for the mappings. Note that the mapping is made between concepts, not between value sets, but the value set provides important context about how the concept mapping choices are made.",
4177          0, 1, target);
4178    case 98629247:
4179      /* group */ return new Property("group", "",
4180          "A group of mappings that all have the same source and target system.", 0, java.lang.Integer.MAX_VALUE,
4181          group);
4182    default:
4183      return super.getNamedProperty(_hash, _name, _checkValid);
4184    }
4185
4186  }
4187
4188  @Override
4189  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4190    switch (hash) {
4191    case 116079:
4192      /* url */ return this.url == null ? new Base[0] : new Base[] { this.url }; // UriType
4193    case -1618432855:
4194      /* identifier */ return this.identifier == null ? new Base[0] : new Base[] { this.identifier }; // Identifier
4195    case 351608024:
4196      /* version */ return this.version == null ? new Base[0] : new Base[] { this.version }; // StringType
4197    case 3373707:
4198      /* name */ return this.name == null ? new Base[0] : new Base[] { this.name }; // StringType
4199    case 110371416:
4200      /* title */ return this.title == null ? new Base[0] : new Base[] { this.title }; // StringType
4201    case -892481550:
4202      /* status */ return this.status == null ? new Base[0] : new Base[] { this.status }; // Enumeration<PublicationStatus>
4203    case -404562712:
4204      /* experimental */ return this.experimental == null ? new Base[0] : new Base[] { this.experimental }; // BooleanType
4205    case 3076014:
4206      /* date */ return this.date == null ? new Base[0] : new Base[] { this.date }; // DateTimeType
4207    case 1447404028:
4208      /* publisher */ return this.publisher == null ? new Base[0] : new Base[] { this.publisher }; // StringType
4209    case 951526432:
4210      /* contact */ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
4211    case -1724546052:
4212      /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // MarkdownType
4213    case -669707736:
4214      /* useContext */ return this.useContext == null ? new Base[0]
4215          : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
4216    case -507075711:
4217      /* jurisdiction */ return this.jurisdiction == null ? new Base[0]
4218          : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
4219    case -220463842:
4220      /* purpose */ return this.purpose == null ? new Base[0] : new Base[] { this.purpose }; // MarkdownType
4221    case 1522889671:
4222      /* copyright */ return this.copyright == null ? new Base[0] : new Base[] { this.copyright }; // MarkdownType
4223    case -896505829:
4224      /* source */ return this.source == null ? new Base[0] : new Base[] { this.source }; // Type
4225    case -880905839:
4226      /* target */ return this.target == null ? new Base[0] : new Base[] { this.target }; // Type
4227    case 98629247:
4228      /* group */ return this.group == null ? new Base[0] : this.group.toArray(new Base[this.group.size()]); // ConceptMapGroupComponent
4229    default:
4230      return super.getProperty(hash, name, checkValid);
4231    }
4232
4233  }
4234
4235  @Override
4236  public Base setProperty(int hash, String name, Base value) throws FHIRException {
4237    switch (hash) {
4238    case 116079: // url
4239      this.url = castToUri(value); // UriType
4240      return value;
4241    case -1618432855: // identifier
4242      this.identifier = castToIdentifier(value); // Identifier
4243      return value;
4244    case 351608024: // version
4245      this.version = castToString(value); // StringType
4246      return value;
4247    case 3373707: // name
4248      this.name = castToString(value); // StringType
4249      return value;
4250    case 110371416: // title
4251      this.title = castToString(value); // StringType
4252      return value;
4253    case -892481550: // status
4254      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
4255      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
4256      return value;
4257    case -404562712: // experimental
4258      this.experimental = castToBoolean(value); // BooleanType
4259      return value;
4260    case 3076014: // date
4261      this.date = castToDateTime(value); // DateTimeType
4262      return value;
4263    case 1447404028: // publisher
4264      this.publisher = castToString(value); // StringType
4265      return value;
4266    case 951526432: // contact
4267      this.getContact().add(castToContactDetail(value)); // ContactDetail
4268      return value;
4269    case -1724546052: // description
4270      this.description = castToMarkdown(value); // MarkdownType
4271      return value;
4272    case -669707736: // useContext
4273      this.getUseContext().add(castToUsageContext(value)); // UsageContext
4274      return value;
4275    case -507075711: // jurisdiction
4276      this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
4277      return value;
4278    case -220463842: // purpose
4279      this.purpose = castToMarkdown(value); // MarkdownType
4280      return value;
4281    case 1522889671: // copyright
4282      this.copyright = castToMarkdown(value); // MarkdownType
4283      return value;
4284    case -896505829: // source
4285      this.source = castToType(value); // Type
4286      return value;
4287    case -880905839: // target
4288      this.target = castToType(value); // Type
4289      return value;
4290    case 98629247: // group
4291      this.getGroup().add((ConceptMapGroupComponent) value); // ConceptMapGroupComponent
4292      return value;
4293    default:
4294      return super.setProperty(hash, name, value);
4295    }
4296
4297  }
4298
4299  @Override
4300  public Base setProperty(String name, Base value) throws FHIRException {
4301    if (name.equals("url")) {
4302      this.url = castToUri(value); // UriType
4303    } else if (name.equals("identifier")) {
4304      this.identifier = castToIdentifier(value); // Identifier
4305    } else if (name.equals("version")) {
4306      this.version = castToString(value); // StringType
4307    } else if (name.equals("name")) {
4308      this.name = castToString(value); // StringType
4309    } else if (name.equals("title")) {
4310      this.title = castToString(value); // StringType
4311    } else if (name.equals("status")) {
4312      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
4313      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
4314    } else if (name.equals("experimental")) {
4315      this.experimental = castToBoolean(value); // BooleanType
4316    } else if (name.equals("date")) {
4317      this.date = castToDateTime(value); // DateTimeType
4318    } else if (name.equals("publisher")) {
4319      this.publisher = castToString(value); // StringType
4320    } else if (name.equals("contact")) {
4321      this.getContact().add(castToContactDetail(value));
4322    } else if (name.equals("description")) {
4323      this.description = castToMarkdown(value); // MarkdownType
4324    } else if (name.equals("useContext")) {
4325      this.getUseContext().add(castToUsageContext(value));
4326    } else if (name.equals("jurisdiction")) {
4327      this.getJurisdiction().add(castToCodeableConcept(value));
4328    } else if (name.equals("purpose")) {
4329      this.purpose = castToMarkdown(value); // MarkdownType
4330    } else if (name.equals("copyright")) {
4331      this.copyright = castToMarkdown(value); // MarkdownType
4332    } else if (name.equals("source[x]")) {
4333      this.source = castToType(value); // Type
4334    } else if (name.equals("target[x]")) {
4335      this.target = castToType(value); // Type
4336    } else if (name.equals("group")) {
4337      this.getGroup().add((ConceptMapGroupComponent) value);
4338    } else
4339      return super.setProperty(name, value);
4340    return value;
4341  }
4342
4343  @Override
4344  public void removeChild(String name, Base value) throws FHIRException {
4345    if (name.equals("url")) {
4346      this.url = null;
4347    } else if (name.equals("identifier")) {
4348      this.identifier = null;
4349    } else if (name.equals("version")) {
4350      this.version = null;
4351    } else if (name.equals("name")) {
4352      this.name = null;
4353    } else if (name.equals("title")) {
4354      this.title = null;
4355    } else if (name.equals("status")) {
4356      this.status = null;
4357    } else if (name.equals("experimental")) {
4358      this.experimental = null;
4359    } else if (name.equals("date")) {
4360      this.date = null;
4361    } else if (name.equals("publisher")) {
4362      this.publisher = null;
4363    } else if (name.equals("contact")) {
4364      this.getContact().remove(castToContactDetail(value));
4365    } else if (name.equals("description")) {
4366      this.description = null;
4367    } else if (name.equals("useContext")) {
4368      this.getUseContext().remove(castToUsageContext(value));
4369    } else if (name.equals("jurisdiction")) {
4370      this.getJurisdiction().remove(castToCodeableConcept(value));
4371    } else if (name.equals("purpose")) {
4372      this.purpose = null;
4373    } else if (name.equals("copyright")) {
4374      this.copyright = null;
4375    } else if (name.equals("source[x]")) {
4376      this.source = null;
4377    } else if (name.equals("target[x]")) {
4378      this.target = null;
4379    } else if (name.equals("group")) {
4380      this.getGroup().remove((ConceptMapGroupComponent) value);
4381    } else
4382      super.removeChild(name, value);
4383    
4384  }
4385
4386  @Override
4387  public Base makeProperty(int hash, String name) throws FHIRException {
4388    switch (hash) {
4389    case 116079:
4390      return getUrlElement();
4391    case -1618432855:
4392      return getIdentifier();
4393    case 351608024:
4394      return getVersionElement();
4395    case 3373707:
4396      return getNameElement();
4397    case 110371416:
4398      return getTitleElement();
4399    case -892481550:
4400      return getStatusElement();
4401    case -404562712:
4402      return getExperimentalElement();
4403    case 3076014:
4404      return getDateElement();
4405    case 1447404028:
4406      return getPublisherElement();
4407    case 951526432:
4408      return addContact();
4409    case -1724546052:
4410      return getDescriptionElement();
4411    case -669707736:
4412      return addUseContext();
4413    case -507075711:
4414      return addJurisdiction();
4415    case -220463842:
4416      return getPurposeElement();
4417    case 1522889671:
4418      return getCopyrightElement();
4419    case -1698413947:
4420      return getSource();
4421    case -896505829:
4422      return getSource();
4423    case -815579825:
4424      return getTarget();
4425    case -880905839:
4426      return getTarget();
4427    case 98629247:
4428      return addGroup();
4429    default:
4430      return super.makeProperty(hash, name);
4431    }
4432
4433  }
4434
4435  @Override
4436  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4437    switch (hash) {
4438    case 116079:
4439      /* url */ return new String[] { "uri" };
4440    case -1618432855:
4441      /* identifier */ return new String[] { "Identifier" };
4442    case 351608024:
4443      /* version */ return new String[] { "string" };
4444    case 3373707:
4445      /* name */ return new String[] { "string" };
4446    case 110371416:
4447      /* title */ return new String[] { "string" };
4448    case -892481550:
4449      /* status */ return new String[] { "code" };
4450    case -404562712:
4451      /* experimental */ return new String[] { "boolean" };
4452    case 3076014:
4453      /* date */ return new String[] { "dateTime" };
4454    case 1447404028:
4455      /* publisher */ return new String[] { "string" };
4456    case 951526432:
4457      /* contact */ return new String[] { "ContactDetail" };
4458    case -1724546052:
4459      /* description */ return new String[] { "markdown" };
4460    case -669707736:
4461      /* useContext */ return new String[] { "UsageContext" };
4462    case -507075711:
4463      /* jurisdiction */ return new String[] { "CodeableConcept" };
4464    case -220463842:
4465      /* purpose */ return new String[] { "markdown" };
4466    case 1522889671:
4467      /* copyright */ return new String[] { "markdown" };
4468    case -896505829:
4469      /* source */ return new String[] { "uri", "canonical" };
4470    case -880905839:
4471      /* target */ return new String[] { "uri", "canonical" };
4472    case 98629247:
4473      /* group */ return new String[] {};
4474    default:
4475      return super.getTypesForProperty(hash, name);
4476    }
4477
4478  }
4479
4480  @Override
4481  public Base addChild(String name) throws FHIRException {
4482    if (name.equals("url")) {
4483      throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.url");
4484    } else if (name.equals("identifier")) {
4485      this.identifier = new Identifier();
4486      return this.identifier;
4487    } else if (name.equals("version")) {
4488      throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.version");
4489    } else if (name.equals("name")) {
4490      throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.name");
4491    } else if (name.equals("title")) {
4492      throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.title");
4493    } else if (name.equals("status")) {
4494      throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.status");
4495    } else if (name.equals("experimental")) {
4496      throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.experimental");
4497    } else if (name.equals("date")) {
4498      throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.date");
4499    } else if (name.equals("publisher")) {
4500      throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.publisher");
4501    } else if (name.equals("contact")) {
4502      return addContact();
4503    } else if (name.equals("description")) {
4504      throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.description");
4505    } else if (name.equals("useContext")) {
4506      return addUseContext();
4507    } else if (name.equals("jurisdiction")) {
4508      return addJurisdiction();
4509    } else if (name.equals("purpose")) {
4510      throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.purpose");
4511    } else if (name.equals("copyright")) {
4512      throw new FHIRException("Cannot call addChild on a singleton property ConceptMap.copyright");
4513    } else if (name.equals("sourceUri")) {
4514      this.source = new UriType();
4515      return this.source;
4516    } else if (name.equals("sourceCanonical")) {
4517      this.source = new CanonicalType();
4518      return this.source;
4519    } else if (name.equals("targetUri")) {
4520      this.target = new UriType();
4521      return this.target;
4522    } else if (name.equals("targetCanonical")) {
4523      this.target = new CanonicalType();
4524      return this.target;
4525    } else if (name.equals("group")) {
4526      return addGroup();
4527    } else
4528      return super.addChild(name);
4529  }
4530
4531  public String fhirType() {
4532    return "ConceptMap";
4533
4534  }
4535
4536  public ConceptMap copy() {
4537    ConceptMap dst = new ConceptMap();
4538    copyValues(dst);
4539    return dst;
4540  }
4541
4542  public void copyValues(ConceptMap dst) {
4543    super.copyValues(dst);
4544    dst.url = url == null ? null : url.copy();
4545    dst.identifier = identifier == null ? null : identifier.copy();
4546    dst.version = version == null ? null : version.copy();
4547    dst.name = name == null ? null : name.copy();
4548    dst.title = title == null ? null : title.copy();
4549    dst.status = status == null ? null : status.copy();
4550    dst.experimental = experimental == null ? null : experimental.copy();
4551    dst.date = date == null ? null : date.copy();
4552    dst.publisher = publisher == null ? null : publisher.copy();
4553    if (contact != null) {
4554      dst.contact = new ArrayList<ContactDetail>();
4555      for (ContactDetail i : contact)
4556        dst.contact.add(i.copy());
4557    }
4558    ;
4559    dst.description = description == null ? null : description.copy();
4560    if (useContext != null) {
4561      dst.useContext = new ArrayList<UsageContext>();
4562      for (UsageContext i : useContext)
4563        dst.useContext.add(i.copy());
4564    }
4565    ;
4566    if (jurisdiction != null) {
4567      dst.jurisdiction = new ArrayList<CodeableConcept>();
4568      for (CodeableConcept i : jurisdiction)
4569        dst.jurisdiction.add(i.copy());
4570    }
4571    ;
4572    dst.purpose = purpose == null ? null : purpose.copy();
4573    dst.copyright = copyright == null ? null : copyright.copy();
4574    dst.source = source == null ? null : source.copy();
4575    dst.target = target == null ? null : target.copy();
4576    if (group != null) {
4577      dst.group = new ArrayList<ConceptMapGroupComponent>();
4578      for (ConceptMapGroupComponent i : group)
4579        dst.group.add(i.copy());
4580    }
4581    ;
4582  }
4583
4584  protected ConceptMap typedCopy() {
4585    return copy();
4586  }
4587
4588  @Override
4589  public boolean equalsDeep(Base other_) {
4590    if (!super.equalsDeep(other_))
4591      return false;
4592    if (!(other_ instanceof ConceptMap))
4593      return false;
4594    ConceptMap o = (ConceptMap) other_;
4595    return compareDeep(identifier, o.identifier, true) && compareDeep(purpose, o.purpose, true)
4596        && compareDeep(copyright, o.copyright, true) && compareDeep(source, o.source, true)
4597        && compareDeep(target, o.target, true) && compareDeep(group, o.group, true);
4598  }
4599
4600  @Override
4601  public boolean equalsShallow(Base other_) {
4602    if (!super.equalsShallow(other_))
4603      return false;
4604    if (!(other_ instanceof ConceptMap))
4605      return false;
4606    ConceptMap o = (ConceptMap) other_;
4607    return compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true);
4608  }
4609
4610  public boolean isEmpty() {
4611    return super.isEmpty()
4612        && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, purpose, copyright, source, target, group);
4613  }
4614
4615  @Override
4616  public ResourceType getResourceType() {
4617    return ResourceType.ConceptMap;
4618  }
4619
4620  /**
4621   * Search parameter: <b>date</b>
4622   * <p>
4623   * Description: <b>The concept map publication date</b><br>
4624   * Type: <b>date</b><br>
4625   * Path: <b>ConceptMap.date</b><br>
4626   * </p>
4627   */
4628  @SearchParamDefinition(name = "date", path = "ConceptMap.date", description = "The concept map publication date", type = "date")
4629  public static final String SP_DATE = "date";
4630  /**
4631   * <b>Fluent Client</b> search parameter constant for <b>date</b>
4632   * <p>
4633   * Description: <b>The concept map publication date</b><br>
4634   * Type: <b>date</b><br>
4635   * Path: <b>ConceptMap.date</b><br>
4636   * </p>
4637   */
4638  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(
4639      SP_DATE);
4640
4641  /**
4642   * Search parameter: <b>other</b>
4643   * <p>
4644   * Description: <b>canonical reference to an additional ConceptMap to use for
4645   * mapping if the source concept is unmapped</b><br>
4646   * Type: <b>reference</b><br>
4647   * Path: <b>ConceptMap.group.unmapped.url</b><br>
4648   * </p>
4649   */
4650  @SearchParamDefinition(name = "other", path = "ConceptMap.group.unmapped.url", description = "canonical reference to an additional ConceptMap to use for mapping if the source concept is unmapped", type = "reference", target = {
4651      ConceptMap.class })
4652  public static final String SP_OTHER = "other";
4653  /**
4654   * <b>Fluent Client</b> search parameter constant for <b>other</b>
4655   * <p>
4656   * Description: <b>canonical reference to an additional ConceptMap to use for
4657   * mapping if the source concept is unmapped</b><br>
4658   * Type: <b>reference</b><br>
4659   * Path: <b>ConceptMap.group.unmapped.url</b><br>
4660   * </p>
4661   */
4662  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam OTHER = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
4663      SP_OTHER);
4664
4665  /**
4666   * Constant for fluent queries to be used to add include statements. Specifies
4667   * the path value of "<b>ConceptMap:other</b>".
4668   */
4669  public static final ca.uhn.fhir.model.api.Include INCLUDE_OTHER = new ca.uhn.fhir.model.api.Include(
4670      "ConceptMap:other").toLocked();
4671
4672  /**
4673   * Search parameter: <b>context-type-value</b>
4674   * <p>
4675   * Description: <b>A use context type and value assigned to the concept
4676   * map</b><br>
4677   * Type: <b>composite</b><br>
4678   * Path: <b></b><br>
4679   * </p>
4680   */
4681  @SearchParamDefinition(name = "context-type-value", path = "ConceptMap.useContext", description = "A use context type and value assigned to the concept map", type = "composite", compositeOf = {
4682      "context-type", "context" })
4683  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
4684  /**
4685   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
4686   * <p>
4687   * Description: <b>A use context type and value assigned to the concept
4688   * map</b><br>
4689   * Type: <b>composite</b><br>
4690   * Path: <b></b><br>
4691   * </p>
4692   */
4693  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> CONTEXT_TYPE_VALUE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(
4694      SP_CONTEXT_TYPE_VALUE);
4695
4696  /**
4697   * Search parameter: <b>target-system</b>
4698   * <p>
4699   * Description: <b>Target system that the concepts are to be mapped to</b><br>
4700   * Type: <b>uri</b><br>
4701   * Path: <b>ConceptMap.group.target</b><br>
4702   * </p>
4703   */
4704  @SearchParamDefinition(name = "target-system", path = "ConceptMap.group.target", description = "Target system that the concepts are to be mapped to", type = "uri")
4705  public static final String SP_TARGET_SYSTEM = "target-system";
4706  /**
4707   * <b>Fluent Client</b> search parameter constant for <b>target-system</b>
4708   * <p>
4709   * Description: <b>Target system that the concepts are to be mapped to</b><br>
4710   * Type: <b>uri</b><br>
4711   * Path: <b>ConceptMap.group.target</b><br>
4712   * </p>
4713   */
4714  public static final ca.uhn.fhir.rest.gclient.UriClientParam TARGET_SYSTEM = new ca.uhn.fhir.rest.gclient.UriClientParam(
4715      SP_TARGET_SYSTEM);
4716
4717  /**
4718   * Search parameter: <b>dependson</b>
4719   * <p>
4720   * Description: <b>Reference to property mapping depends on</b><br>
4721   * Type: <b>uri</b><br>
4722   * Path: <b>ConceptMap.group.element.target.dependsOn.property</b><br>
4723   * </p>
4724   */
4725  @SearchParamDefinition(name = "dependson", path = "ConceptMap.group.element.target.dependsOn.property", description = "Reference to property mapping depends on", type = "uri")
4726  public static final String SP_DEPENDSON = "dependson";
4727  /**
4728   * <b>Fluent Client</b> search parameter constant for <b>dependson</b>
4729   * <p>
4730   * Description: <b>Reference to property mapping depends on</b><br>
4731   * Type: <b>uri</b><br>
4732   * Path: <b>ConceptMap.group.element.target.dependsOn.property</b><br>
4733   * </p>
4734   */
4735  public static final ca.uhn.fhir.rest.gclient.UriClientParam DEPENDSON = new ca.uhn.fhir.rest.gclient.UriClientParam(
4736      SP_DEPENDSON);
4737
4738  /**
4739   * Search parameter: <b>jurisdiction</b>
4740   * <p>
4741   * Description: <b>Intended jurisdiction for the concept map</b><br>
4742   * Type: <b>token</b><br>
4743   * Path: <b>ConceptMap.jurisdiction</b><br>
4744   * </p>
4745   */
4746  @SearchParamDefinition(name = "jurisdiction", path = "ConceptMap.jurisdiction", description = "Intended jurisdiction for the concept map", type = "token")
4747  public static final String SP_JURISDICTION = "jurisdiction";
4748  /**
4749   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
4750   * <p>
4751   * Description: <b>Intended jurisdiction for the concept map</b><br>
4752   * Type: <b>token</b><br>
4753   * Path: <b>ConceptMap.jurisdiction</b><br>
4754   * </p>
4755   */
4756  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
4757      SP_JURISDICTION);
4758
4759  /**
4760   * Search parameter: <b>description</b>
4761   * <p>
4762   * Description: <b>The description of the concept map</b><br>
4763   * Type: <b>string</b><br>
4764   * Path: <b>ConceptMap.description</b><br>
4765   * </p>
4766   */
4767  @SearchParamDefinition(name = "description", path = "ConceptMap.description", description = "The description of the concept map", type = "string")
4768  public static final String SP_DESCRIPTION = "description";
4769  /**
4770   * <b>Fluent Client</b> search parameter constant for <b>description</b>
4771   * <p>
4772   * Description: <b>The description of the concept map</b><br>
4773   * Type: <b>string</b><br>
4774   * Path: <b>ConceptMap.description</b><br>
4775   * </p>
4776   */
4777  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(
4778      SP_DESCRIPTION);
4779
4780  /**
4781   * Search parameter: <b>context-type</b>
4782   * <p>
4783   * Description: <b>A type of use context assigned to the concept map</b><br>
4784   * Type: <b>token</b><br>
4785   * Path: <b>ConceptMap.useContext.code</b><br>
4786   * </p>
4787   */
4788  @SearchParamDefinition(name = "context-type", path = "ConceptMap.useContext.code", description = "A type of use context assigned to the concept map", type = "token")
4789  public static final String SP_CONTEXT_TYPE = "context-type";
4790  /**
4791   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
4792   * <p>
4793   * Description: <b>A type of use context assigned to the concept map</b><br>
4794   * Type: <b>token</b><br>
4795   * Path: <b>ConceptMap.useContext.code</b><br>
4796   * </p>
4797   */
4798  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(
4799      SP_CONTEXT_TYPE);
4800
4801  /**
4802   * Search parameter: <b>source</b>
4803   * <p>
4804   * Description: <b>The source value set that contains the concepts that are
4805   * being mapped</b><br>
4806   * Type: <b>reference</b><br>
4807   * Path: <b>ConceptMap.sourceCanonical</b><br>
4808   * </p>
4809   */
4810  @SearchParamDefinition(name = "source", path = "(ConceptMap.source as canonical)", description = "The source value set that contains the concepts that are being mapped", type = "reference", target = {
4811      ValueSet.class })
4812  public static final String SP_SOURCE = "source";
4813  /**
4814   * <b>Fluent Client</b> search parameter constant for <b>source</b>
4815   * <p>
4816   * Description: <b>The source value set that contains the concepts that are
4817   * being mapped</b><br>
4818   * Type: <b>reference</b><br>
4819   * Path: <b>ConceptMap.sourceCanonical</b><br>
4820   * </p>
4821   */
4822  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SOURCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
4823      SP_SOURCE);
4824
4825  /**
4826   * Constant for fluent queries to be used to add include statements. Specifies
4827   * the path value of "<b>ConceptMap:source</b>".
4828   */
4829  public static final ca.uhn.fhir.model.api.Include INCLUDE_SOURCE = new ca.uhn.fhir.model.api.Include(
4830      "ConceptMap:source").toLocked();
4831
4832  /**
4833   * Search parameter: <b>title</b>
4834   * <p>
4835   * Description: <b>The human-friendly name of the concept map</b><br>
4836   * Type: <b>string</b><br>
4837   * Path: <b>ConceptMap.title</b><br>
4838   * </p>
4839   */
4840  @SearchParamDefinition(name = "title", path = "ConceptMap.title", description = "The human-friendly name of the concept map", type = "string")
4841  public static final String SP_TITLE = "title";
4842  /**
4843   * <b>Fluent Client</b> search parameter constant for <b>title</b>
4844   * <p>
4845   * Description: <b>The human-friendly name of the concept map</b><br>
4846   * Type: <b>string</b><br>
4847   * Path: <b>ConceptMap.title</b><br>
4848   * </p>
4849   */
4850  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(
4851      SP_TITLE);
4852
4853  /**
4854   * Search parameter: <b>context-quantity</b>
4855   * <p>
4856   * Description: <b>A quantity- or range-valued use context assigned to the
4857   * concept map</b><br>
4858   * Type: <b>quantity</b><br>
4859   * Path: <b>ConceptMap.useContext.valueQuantity,
4860   * ConceptMap.useContext.valueRange</b><br>
4861   * </p>
4862   */
4863  @SearchParamDefinition(name = "context-quantity", path = "(ConceptMap.useContext.value as Quantity) | (ConceptMap.useContext.value as Range)", description = "A quantity- or range-valued use context assigned to the concept map", type = "quantity")
4864  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
4865  /**
4866   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
4867   * <p>
4868   * Description: <b>A quantity- or range-valued use context assigned to the
4869   * concept map</b><br>
4870   * Type: <b>quantity</b><br>
4871   * Path: <b>ConceptMap.useContext.valueQuantity,
4872   * ConceptMap.useContext.valueRange</b><br>
4873   * </p>
4874   */
4875  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(
4876      SP_CONTEXT_QUANTITY);
4877
4878  /**
4879   * Search parameter: <b>source-uri</b>
4880   * <p>
4881   * Description: <b>The source value set that contains the concepts that are
4882   * being mapped</b><br>
4883   * Type: <b>reference</b><br>
4884   * Path: <b>ConceptMap.sourceUri</b><br>
4885   * </p>
4886   */
4887  @SearchParamDefinition(name = "source-uri", path = "(ConceptMap.source as uri)", description = "The source value set that contains the concepts that are being mapped", type = "reference", target = {
4888      ValueSet.class })
4889  public static final String SP_SOURCE_URI = "source-uri";
4890  /**
4891   * <b>Fluent Client</b> search parameter constant for <b>source-uri</b>
4892   * <p>
4893   * Description: <b>The source value set that contains the concepts that are
4894   * being mapped</b><br>
4895   * Type: <b>reference</b><br>
4896   * Path: <b>ConceptMap.sourceUri</b><br>
4897   * </p>
4898   */
4899  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SOURCE_URI = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
4900      SP_SOURCE_URI);
4901
4902  /**
4903   * Constant for fluent queries to be used to add include statements. Specifies
4904   * the path value of "<b>ConceptMap:source-uri</b>".
4905   */
4906  public static final ca.uhn.fhir.model.api.Include INCLUDE_SOURCE_URI = new ca.uhn.fhir.model.api.Include(
4907      "ConceptMap:source-uri").toLocked();
4908
4909  /**
4910   * Search parameter: <b>context</b>
4911   * <p>
4912   * Description: <b>A use context assigned to the concept map</b><br>
4913   * Type: <b>token</b><br>
4914   * Path: <b>ConceptMap.useContext.valueCodeableConcept</b><br>
4915   * </p>
4916   */
4917  @SearchParamDefinition(name = "context", path = "(ConceptMap.useContext.value as CodeableConcept)", description = "A use context assigned to the concept map", type = "token")
4918  public static final String SP_CONTEXT = "context";
4919  /**
4920   * <b>Fluent Client</b> search parameter constant for <b>context</b>
4921   * <p>
4922   * Description: <b>A use context assigned to the concept map</b><br>
4923   * Type: <b>token</b><br>
4924   * Path: <b>ConceptMap.useContext.valueCodeableConcept</b><br>
4925   * </p>
4926   */
4927  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(
4928      SP_CONTEXT);
4929
4930  /**
4931   * Search parameter: <b>context-type-quantity</b>
4932   * <p>
4933   * Description: <b>A use context type and quantity- or range-based value
4934   * assigned to the concept map</b><br>
4935   * Type: <b>composite</b><br>
4936   * Path: <b></b><br>
4937   * </p>
4938   */
4939  @SearchParamDefinition(name = "context-type-quantity", path = "ConceptMap.useContext", description = "A use context type and quantity- or range-based value assigned to the concept map", type = "composite", compositeOf = {
4940      "context-type", "context-quantity" })
4941  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
4942  /**
4943   * <b>Fluent Client</b> search parameter constant for
4944   * <b>context-type-quantity</b>
4945   * <p>
4946   * Description: <b>A use context type and quantity- or range-based value
4947   * assigned to the concept map</b><br>
4948   * Type: <b>composite</b><br>
4949   * Path: <b></b><br>
4950   * </p>
4951   */
4952  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam> CONTEXT_TYPE_QUANTITY = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam>(
4953      SP_CONTEXT_TYPE_QUANTITY);
4954
4955  /**
4956   * Search parameter: <b>source-system</b>
4957   * <p>
4958   * Description: <b>Source system where concepts to be mapped are defined</b><br>
4959   * Type: <b>uri</b><br>
4960   * Path: <b>ConceptMap.group.source</b><br>
4961   * </p>
4962   */
4963  @SearchParamDefinition(name = "source-system", path = "ConceptMap.group.source", description = "Source system where concepts to be mapped are defined", type = "uri")
4964  public static final String SP_SOURCE_SYSTEM = "source-system";
4965  /**
4966   * <b>Fluent Client</b> search parameter constant for <b>source-system</b>
4967   * <p>
4968   * Description: <b>Source system where concepts to be mapped are defined</b><br>
4969   * Type: <b>uri</b><br>
4970   * Path: <b>ConceptMap.group.source</b><br>
4971   * </p>
4972   */
4973  public static final ca.uhn.fhir.rest.gclient.UriClientParam SOURCE_SYSTEM = new ca.uhn.fhir.rest.gclient.UriClientParam(
4974      SP_SOURCE_SYSTEM);
4975
4976  /**
4977   * Search parameter: <b>target-code</b>
4978   * <p>
4979   * Description: <b>Code that identifies the target element</b><br>
4980   * Type: <b>token</b><br>
4981   * Path: <b>ConceptMap.group.element.target.code</b><br>
4982   * </p>
4983   */
4984  @SearchParamDefinition(name = "target-code", path = "ConceptMap.group.element.target.code", description = "Code that identifies the target element", type = "token")
4985  public static final String SP_TARGET_CODE = "target-code";
4986  /**
4987   * <b>Fluent Client</b> search parameter constant for <b>target-code</b>
4988   * <p>
4989   * Description: <b>Code that identifies the target element</b><br>
4990   * Type: <b>token</b><br>
4991   * Path: <b>ConceptMap.group.element.target.code</b><br>
4992   * </p>
4993   */
4994  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TARGET_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(
4995      SP_TARGET_CODE);
4996
4997  /**
4998   * Search parameter: <b>target-uri</b>
4999   * <p>
5000   * Description: <b>The target value set which provides context for the
5001   * mappings</b><br>
5002   * Type: <b>reference</b><br>
5003   * Path: <b>ConceptMap.targetUri</b><br>
5004   * </p>
5005   */
5006  @SearchParamDefinition(name = "target-uri", path = "(ConceptMap.target as uri)", description = "The target value set which provides context for the mappings", type = "reference", target = {
5007      ValueSet.class })
5008  public static final String SP_TARGET_URI = "target-uri";
5009  /**
5010   * <b>Fluent Client</b> search parameter constant for <b>target-uri</b>
5011   * <p>
5012   * Description: <b>The target value set which provides context for the
5013   * mappings</b><br>
5014   * Type: <b>reference</b><br>
5015   * Path: <b>ConceptMap.targetUri</b><br>
5016   * </p>
5017   */
5018  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam TARGET_URI = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
5019      SP_TARGET_URI);
5020
5021  /**
5022   * Constant for fluent queries to be used to add include statements. Specifies
5023   * the path value of "<b>ConceptMap:target-uri</b>".
5024   */
5025  public static final ca.uhn.fhir.model.api.Include INCLUDE_TARGET_URI = new ca.uhn.fhir.model.api.Include(
5026      "ConceptMap:target-uri").toLocked();
5027
5028  /**
5029   * Search parameter: <b>identifier</b>
5030   * <p>
5031   * Description: <b>External identifier for the concept map</b><br>
5032   * Type: <b>token</b><br>
5033   * Path: <b>ConceptMap.identifier</b><br>
5034   * </p>
5035   */
5036  @SearchParamDefinition(name = "identifier", path = "ConceptMap.identifier", description = "External identifier for the concept map", type = "token")
5037  public static final String SP_IDENTIFIER = "identifier";
5038  /**
5039   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
5040   * <p>
5041   * Description: <b>External identifier for the concept map</b><br>
5042   * Type: <b>token</b><br>
5043   * Path: <b>ConceptMap.identifier</b><br>
5044   * </p>
5045   */
5046  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(
5047      SP_IDENTIFIER);
5048
5049  /**
5050   * Search parameter: <b>product</b>
5051   * <p>
5052   * Description: <b>Reference to property mapping depends on</b><br>
5053   * Type: <b>uri</b><br>
5054   * Path: <b>ConceptMap.group.element.target.product.property</b><br>
5055   * </p>
5056   */
5057  @SearchParamDefinition(name = "product", path = "ConceptMap.group.element.target.product.property", description = "Reference to property mapping depends on", type = "uri")
5058  public static final String SP_PRODUCT = "product";
5059  /**
5060   * <b>Fluent Client</b> search parameter constant for <b>product</b>
5061   * <p>
5062   * Description: <b>Reference to property mapping depends on</b><br>
5063   * Type: <b>uri</b><br>
5064   * Path: <b>ConceptMap.group.element.target.product.property</b><br>
5065   * </p>
5066   */
5067  public static final ca.uhn.fhir.rest.gclient.UriClientParam PRODUCT = new ca.uhn.fhir.rest.gclient.UriClientParam(
5068      SP_PRODUCT);
5069
5070  /**
5071   * Search parameter: <b>version</b>
5072   * <p>
5073   * Description: <b>The business version of the concept map</b><br>
5074   * Type: <b>token</b><br>
5075   * Path: <b>ConceptMap.version</b><br>
5076   * </p>
5077   */
5078  @SearchParamDefinition(name = "version", path = "ConceptMap.version", description = "The business version of the concept map", type = "token")
5079  public static final String SP_VERSION = "version";
5080  /**
5081   * <b>Fluent Client</b> search parameter constant for <b>version</b>
5082   * <p>
5083   * Description: <b>The business version of the concept map</b><br>
5084   * Type: <b>token</b><br>
5085   * Path: <b>ConceptMap.version</b><br>
5086   * </p>
5087   */
5088  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
5089      SP_VERSION);
5090
5091  /**
5092   * Search parameter: <b>url</b>
5093   * <p>
5094   * Description: <b>The uri that identifies the concept map</b><br>
5095   * Type: <b>uri</b><br>
5096   * Path: <b>ConceptMap.url</b><br>
5097   * </p>
5098   */
5099  @SearchParamDefinition(name = "url", path = "ConceptMap.url", description = "The uri that identifies the concept map", type = "uri")
5100  public static final String SP_URL = "url";
5101  /**
5102   * <b>Fluent Client</b> search parameter constant for <b>url</b>
5103   * <p>
5104   * Description: <b>The uri that identifies the concept map</b><br>
5105   * Type: <b>uri</b><br>
5106   * Path: <b>ConceptMap.url</b><br>
5107   * </p>
5108   */
5109  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
5110
5111  /**
5112   * Search parameter: <b>target</b>
5113   * <p>
5114   * Description: <b>The target value set which provides context for the
5115   * mappings</b><br>
5116   * Type: <b>reference</b><br>
5117   * Path: <b>ConceptMap.targetCanonical</b><br>
5118   * </p>
5119   */
5120  @SearchParamDefinition(name = "target", path = "(ConceptMap.target as canonical)", description = "The target value set which provides context for the mappings", type = "reference", target = {
5121      ValueSet.class })
5122  public static final String SP_TARGET = "target";
5123  /**
5124   * <b>Fluent Client</b> search parameter constant for <b>target</b>
5125   * <p>
5126   * Description: <b>The target value set which provides context for the
5127   * mappings</b><br>
5128   * Type: <b>reference</b><br>
5129   * Path: <b>ConceptMap.targetCanonical</b><br>
5130   * </p>
5131   */
5132  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam TARGET = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
5133      SP_TARGET);
5134
5135  /**
5136   * Constant for fluent queries to be used to add include statements. Specifies
5137   * the path value of "<b>ConceptMap:target</b>".
5138   */
5139  public static final ca.uhn.fhir.model.api.Include INCLUDE_TARGET = new ca.uhn.fhir.model.api.Include(
5140      "ConceptMap:target").toLocked();
5141
5142  /**
5143   * Search parameter: <b>source-code</b>
5144   * <p>
5145   * Description: <b>Identifies element being mapped</b><br>
5146   * Type: <b>token</b><br>
5147   * Path: <b>ConceptMap.group.element.code</b><br>
5148   * </p>
5149   */
5150  @SearchParamDefinition(name = "source-code", path = "ConceptMap.group.element.code", description = "Identifies element being mapped", type = "token")
5151  public static final String SP_SOURCE_CODE = "source-code";
5152  /**
5153   * <b>Fluent Client</b> search parameter constant for <b>source-code</b>
5154   * <p>
5155   * Description: <b>Identifies element being mapped</b><br>
5156   * Type: <b>token</b><br>
5157   * Path: <b>ConceptMap.group.element.code</b><br>
5158   * </p>
5159   */
5160  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SOURCE_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(
5161      SP_SOURCE_CODE);
5162
5163  /**
5164   * Search parameter: <b>name</b>
5165   * <p>
5166   * Description: <b>Computationally friendly name of the concept map</b><br>
5167   * Type: <b>string</b><br>
5168   * Path: <b>ConceptMap.name</b><br>
5169   * </p>
5170   */
5171  @SearchParamDefinition(name = "name", path = "ConceptMap.name", description = "Computationally friendly name of the concept map", type = "string")
5172  public static final String SP_NAME = "name";
5173  /**
5174   * <b>Fluent Client</b> search parameter constant for <b>name</b>
5175   * <p>
5176   * Description: <b>Computationally friendly name of the concept map</b><br>
5177   * Type: <b>string</b><br>
5178   * Path: <b>ConceptMap.name</b><br>
5179   * </p>
5180   */
5181  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(
5182      SP_NAME);
5183
5184  /**
5185   * Search parameter: <b>publisher</b>
5186   * <p>
5187   * Description: <b>Name of the publisher of the concept map</b><br>
5188   * Type: <b>string</b><br>
5189   * Path: <b>ConceptMap.publisher</b><br>
5190   * </p>
5191   */
5192  @SearchParamDefinition(name = "publisher", path = "ConceptMap.publisher", description = "Name of the publisher of the concept map", type = "string")
5193  public static final String SP_PUBLISHER = "publisher";
5194  /**
5195   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
5196   * <p>
5197   * Description: <b>Name of the publisher of the concept map</b><br>
5198   * Type: <b>string</b><br>
5199   * Path: <b>ConceptMap.publisher</b><br>
5200   * </p>
5201   */
5202  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(
5203      SP_PUBLISHER);
5204
5205  /**
5206   * Search parameter: <b>status</b>
5207   * <p>
5208   * Description: <b>The current status of the concept map</b><br>
5209   * Type: <b>token</b><br>
5210   * Path: <b>ConceptMap.status</b><br>
5211   * </p>
5212   */
5213  @SearchParamDefinition(name = "status", path = "ConceptMap.status", description = "The current status of the concept map", type = "token")
5214  public static final String SP_STATUS = "status";
5215  /**
5216   * <b>Fluent Client</b> search parameter constant for <b>status</b>
5217   * <p>
5218   * Description: <b>The current status of the concept map</b><br>
5219   * Type: <b>token</b><br>
5220   * Path: <b>ConceptMap.status</b><br>
5221   * </p>
5222   */
5223  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(
5224      SP_STATUS);
5225
5226}