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