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