001package org.hl7.fhir.dstu2016may.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Sun, May 8, 2016 03:05+1000 for FHIR v1.4.0
033import java.util.ArrayList;
034import java.util.Date;
035import java.util.List;
036
037import org.hl7.fhir.dstu2016may.model.Enumerations.ConceptMapEquivalence;
038import org.hl7.fhir.dstu2016may.model.Enumerations.ConceptMapEquivalenceEnumFactory;
039import org.hl7.fhir.dstu2016may.model.Enumerations.ConformanceResourceStatus;
040import org.hl7.fhir.dstu2016may.model.Enumerations.ConformanceResourceStatusEnumFactory;
041import org.hl7.fhir.exceptions.FHIRException;
042import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
043import org.hl7.fhir.utilities.Utilities;
044
045import ca.uhn.fhir.model.api.annotation.Block;
046import ca.uhn.fhir.model.api.annotation.Child;
047import ca.uhn.fhir.model.api.annotation.Description;
048import ca.uhn.fhir.model.api.annotation.ResourceDef;
049import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
050/**
051 * A statement of relationships from one set of concepts to one or more other concepts - either code systems or data elements, or classes in class models.
052 */
053@ResourceDef(name="ConceptMap", profile="http://hl7.org/fhir/Profile/ConceptMap")
054public class ConceptMap extends DomainResource {
055
056    @Block()
057    public static class ConceptMapContactComponent extends BackboneElement implements IBaseBackboneElement {
058        /**
059         * The name of an individual to contact regarding the concept map.
060         */
061        @Child(name = "name", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=true)
062        @Description(shortDefinition="Name of an individual to contact", formalDefinition="The name of an individual to contact regarding the concept map." )
063        protected StringType name;
064
065        /**
066         * Contact details for individual (if a name was provided) or the publisher.
067         */
068        @Child(name = "telecom", type = {ContactPoint.class}, order=2, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
069        @Description(shortDefinition="Contact details for individual or publisher", formalDefinition="Contact details for individual (if a name was provided) or the publisher." )
070        protected List<ContactPoint> telecom;
071
072        private static final long serialVersionUID = -1179697803L;
073
074    /**
075     * Constructor
076     */
077      public ConceptMapContactComponent() {
078        super();
079      }
080
081        /**
082         * @return {@link #name} (The name of an individual to contact regarding the concept map.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
083         */
084        public StringType getNameElement() { 
085          if (this.name == null)
086            if (Configuration.errorOnAutoCreate())
087              throw new Error("Attempt to auto-create ConceptMapContactComponent.name");
088            else if (Configuration.doAutoCreate())
089              this.name = new StringType(); // bb
090          return this.name;
091        }
092
093        public boolean hasNameElement() { 
094          return this.name != null && !this.name.isEmpty();
095        }
096
097        public boolean hasName() { 
098          return this.name != null && !this.name.isEmpty();
099        }
100
101        /**
102         * @param value {@link #name} (The name of an individual to contact regarding the concept map.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
103         */
104        public ConceptMapContactComponent setNameElement(StringType value) { 
105          this.name = value;
106          return this;
107        }
108
109        /**
110         * @return The name of an individual to contact regarding the concept map.
111         */
112        public String getName() { 
113          return this.name == null ? null : this.name.getValue();
114        }
115
116        /**
117         * @param value The name of an individual to contact regarding the concept map.
118         */
119        public ConceptMapContactComponent setName(String value) { 
120          if (Utilities.noString(value))
121            this.name = null;
122          else {
123            if (this.name == null)
124              this.name = new StringType();
125            this.name.setValue(value);
126          }
127          return this;
128        }
129
130        /**
131         * @return {@link #telecom} (Contact details for individual (if a name was provided) or the publisher.)
132         */
133        public List<ContactPoint> getTelecom() { 
134          if (this.telecom == null)
135            this.telecom = new ArrayList<ContactPoint>();
136          return this.telecom;
137        }
138
139        public boolean hasTelecom() { 
140          if (this.telecom == null)
141            return false;
142          for (ContactPoint item : this.telecom)
143            if (!item.isEmpty())
144              return true;
145          return false;
146        }
147
148        /**
149         * @return {@link #telecom} (Contact details for individual (if a name was provided) or the publisher.)
150         */
151    // syntactic sugar
152        public ContactPoint addTelecom() { //3
153          ContactPoint t = new ContactPoint();
154          if (this.telecom == null)
155            this.telecom = new ArrayList<ContactPoint>();
156          this.telecom.add(t);
157          return t;
158        }
159
160    // syntactic sugar
161        public ConceptMapContactComponent addTelecom(ContactPoint t) { //3
162          if (t == null)
163            return this;
164          if (this.telecom == null)
165            this.telecom = new ArrayList<ContactPoint>();
166          this.telecom.add(t);
167          return this;
168        }
169
170        protected void listChildren(List<Property> childrenList) {
171          super.listChildren(childrenList);
172          childrenList.add(new Property("name", "string", "The name of an individual to contact regarding the concept map.", 0, java.lang.Integer.MAX_VALUE, name));
173          childrenList.add(new Property("telecom", "ContactPoint", "Contact details for individual (if a name was provided) or the publisher.", 0, java.lang.Integer.MAX_VALUE, telecom));
174        }
175
176      @Override
177      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
178        switch (hash) {
179        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
180        case -1429363305: /*telecom*/ return this.telecom == null ? new Base[0] : this.telecom.toArray(new Base[this.telecom.size()]); // ContactPoint
181        default: return super.getProperty(hash, name, checkValid);
182        }
183
184      }
185
186      @Override
187      public void setProperty(int hash, String name, Base value) throws FHIRException {
188        switch (hash) {
189        case 3373707: // name
190          this.name = castToString(value); // StringType
191          break;
192        case -1429363305: // telecom
193          this.getTelecom().add(castToContactPoint(value)); // ContactPoint
194          break;
195        default: super.setProperty(hash, name, value);
196        }
197
198      }
199
200      @Override
201      public void setProperty(String name, Base value) throws FHIRException {
202        if (name.equals("name"))
203          this.name = castToString(value); // StringType
204        else if (name.equals("telecom"))
205          this.getTelecom().add(castToContactPoint(value));
206        else
207          super.setProperty(name, value);
208      }
209
210      @Override
211      public Base makeProperty(int hash, String name) throws FHIRException {
212        switch (hash) {
213        case 3373707: throw new FHIRException("Cannot make property name as it is not a complex type"); // StringType
214        case -1429363305:  return addTelecom(); // ContactPoint
215        default: return super.makeProperty(hash, name);
216        }
217
218      }
219
220      @Override
221      public Base addChild(String name) throws FHIRException {
222        if (name.equals("name")) {
223          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.name");
224        }
225        else if (name.equals("telecom")) {
226          return addTelecom();
227        }
228        else
229          return super.addChild(name);
230      }
231
232      public ConceptMapContactComponent copy() {
233        ConceptMapContactComponent dst = new ConceptMapContactComponent();
234        copyValues(dst);
235        dst.name = name == null ? null : name.copy();
236        if (telecom != null) {
237          dst.telecom = new ArrayList<ContactPoint>();
238          for (ContactPoint i : telecom)
239            dst.telecom.add(i.copy());
240        };
241        return dst;
242      }
243
244      @Override
245      public boolean equalsDeep(Base other) {
246        if (!super.equalsDeep(other))
247          return false;
248        if (!(other instanceof ConceptMapContactComponent))
249          return false;
250        ConceptMapContactComponent o = (ConceptMapContactComponent) other;
251        return compareDeep(name, o.name, true) && compareDeep(telecom, o.telecom, true);
252      }
253
254      @Override
255      public boolean equalsShallow(Base other) {
256        if (!super.equalsShallow(other))
257          return false;
258        if (!(other instanceof ConceptMapContactComponent))
259          return false;
260        ConceptMapContactComponent o = (ConceptMapContactComponent) other;
261        return compareValues(name, o.name, true);
262      }
263
264      public boolean isEmpty() {
265        return super.isEmpty() && (name == null || name.isEmpty()) && (telecom == null || telecom.isEmpty())
266          ;
267      }
268
269  public String fhirType() {
270    return "ConceptMap.contact";
271
272  }
273
274  }
275
276    @Block()
277    public static class SourceElementComponent extends BackboneElement implements IBaseBackboneElement {
278        /**
279         * An absolute URI that identifies the Code System (if the source is a value set that crosses more than one code system).
280         */
281        @Child(name = "system", type = {UriType.class}, order=1, min=0, max=1, modifier=false, summary=false)
282        @Description(shortDefinition="Code System (if value set crosses code systems)", formalDefinition="An absolute URI that identifies the Code System (if the source is a value set that crosses more than one code system)." )
283        protected UriType system;
284
285        /**
286         * The specific version of the code system, as determined by the code system authority.
287         */
288        @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
289        @Description(shortDefinition="Specific version of the  code system", formalDefinition="The specific version of the code system, as determined by the code system authority." )
290        protected StringType version;
291
292        /**
293         * Identity (code or path) or the element/item being mapped.
294         */
295        @Child(name = "code", type = {CodeType.class}, order=3, min=0, max=1, modifier=false, summary=false)
296        @Description(shortDefinition="Identifies element being mapped", formalDefinition="Identity (code or path) or the element/item being mapped." )
297        protected CodeType code;
298
299        /**
300         * A concept from the target value set that this concept maps to.
301         */
302        @Child(name = "target", type = {}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
303        @Description(shortDefinition="Concept in target system for element", formalDefinition="A concept from the target value set that this concept maps to." )
304        protected List<TargetElementComponent> target;
305
306        private static final long serialVersionUID = -387093487L;
307
308    /**
309     * Constructor
310     */
311      public SourceElementComponent() {
312        super();
313      }
314
315        /**
316         * @return {@link #system} (An absolute URI that identifies the Code System (if the source is a value set that crosses more than one code system).). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
317         */
318        public UriType getSystemElement() { 
319          if (this.system == null)
320            if (Configuration.errorOnAutoCreate())
321              throw new Error("Attempt to auto-create SourceElementComponent.system");
322            else if (Configuration.doAutoCreate())
323              this.system = new UriType(); // bb
324          return this.system;
325        }
326
327        public boolean hasSystemElement() { 
328          return this.system != null && !this.system.isEmpty();
329        }
330
331        public boolean hasSystem() { 
332          return this.system != null && !this.system.isEmpty();
333        }
334
335        /**
336         * @param value {@link #system} (An absolute URI that identifies the Code System (if the source is a value set that crosses more than one code system).). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
337         */
338        public SourceElementComponent setSystemElement(UriType value) { 
339          this.system = value;
340          return this;
341        }
342
343        /**
344         * @return An absolute URI that identifies the Code System (if the source is a value set that crosses more than one code system).
345         */
346        public String getSystem() { 
347          return this.system == null ? null : this.system.getValue();
348        }
349
350        /**
351         * @param value An absolute URI that identifies the Code System (if the source is a value set that crosses more than one code system).
352         */
353        public SourceElementComponent setSystem(String value) { 
354          if (Utilities.noString(value))
355            this.system = null;
356          else {
357            if (this.system == null)
358              this.system = new UriType();
359            this.system.setValue(value);
360          }
361          return this;
362        }
363
364        /**
365         * @return {@link #version} (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 "getVersion" gives direct access to the value
366         */
367        public StringType getVersionElement() { 
368          if (this.version == null)
369            if (Configuration.errorOnAutoCreate())
370              throw new Error("Attempt to auto-create SourceElementComponent.version");
371            else if (Configuration.doAutoCreate())
372              this.version = new StringType(); // bb
373          return this.version;
374        }
375
376        public boolean hasVersionElement() { 
377          return this.version != null && !this.version.isEmpty();
378        }
379
380        public boolean hasVersion() { 
381          return this.version != null && !this.version.isEmpty();
382        }
383
384        /**
385         * @param value {@link #version} (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 "getVersion" gives direct access to the value
386         */
387        public SourceElementComponent setVersionElement(StringType value) { 
388          this.version = 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 getVersion() { 
396          return this.version == null ? null : this.version.getValue();
397        }
398
399        /**
400         * @param value The specific version of the code system, as determined by the code system authority.
401         */
402        public SourceElementComponent setVersion(String value) { 
403          if (Utilities.noString(value))
404            this.version = null;
405          else {
406            if (this.version == null)
407              this.version = new StringType();
408            this.version.setValue(value);
409          }
410          return this;
411        }
412
413        /**
414         * @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
415         */
416        public CodeType getCodeElement() { 
417          if (this.code == null)
418            if (Configuration.errorOnAutoCreate())
419              throw new Error("Attempt to auto-create SourceElementComponent.code");
420            else if (Configuration.doAutoCreate())
421              this.code = new CodeType(); // bb
422          return this.code;
423        }
424
425        public boolean hasCodeElement() { 
426          return this.code != null && !this.code.isEmpty();
427        }
428
429        public boolean hasCode() { 
430          return this.code != null && !this.code.isEmpty();
431        }
432
433        /**
434         * @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
435         */
436        public SourceElementComponent setCodeElement(CodeType value) { 
437          this.code = value;
438          return this;
439        }
440
441        /**
442         * @return Identity (code or path) or the element/item being mapped.
443         */
444        public String getCode() { 
445          return this.code == null ? null : this.code.getValue();
446        }
447
448        /**
449         * @param value Identity (code or path) or the element/item being mapped.
450         */
451        public SourceElementComponent setCode(String value) { 
452          if (Utilities.noString(value))
453            this.code = null;
454          else {
455            if (this.code == null)
456              this.code = new CodeType();
457            this.code.setValue(value);
458          }
459          return this;
460        }
461
462        /**
463         * @return {@link #target} (A concept from the target value set that this concept maps to.)
464         */
465        public List<TargetElementComponent> getTarget() { 
466          if (this.target == null)
467            this.target = new ArrayList<TargetElementComponent>();
468          return this.target;
469        }
470
471        public boolean hasTarget() { 
472          if (this.target == null)
473            return false;
474          for (TargetElementComponent item : this.target)
475            if (!item.isEmpty())
476              return true;
477          return false;
478        }
479
480        /**
481         * @return {@link #target} (A concept from the target value set that this concept maps to.)
482         */
483    // syntactic sugar
484        public TargetElementComponent addTarget() { //3
485          TargetElementComponent t = new TargetElementComponent();
486          if (this.target == null)
487            this.target = new ArrayList<TargetElementComponent>();
488          this.target.add(t);
489          return t;
490        }
491
492    // syntactic sugar
493        public SourceElementComponent addTarget(TargetElementComponent t) { //3
494          if (t == null)
495            return this;
496          if (this.target == null)
497            this.target = new ArrayList<TargetElementComponent>();
498          this.target.add(t);
499          return this;
500        }
501
502        protected void listChildren(List<Property> childrenList) {
503          super.listChildren(childrenList);
504          childrenList.add(new Property("system", "uri", "An absolute URI that identifies the Code System (if the source is a value set that crosses more than one code system).", 0, java.lang.Integer.MAX_VALUE, system));
505          childrenList.add(new Property("version", "string", "The specific version of the code system, as determined by the code system authority.", 0, java.lang.Integer.MAX_VALUE, version));
506          childrenList.add(new Property("code", "code", "Identity (code or path) or the element/item being mapped.", 0, java.lang.Integer.MAX_VALUE, code));
507          childrenList.add(new Property("target", "", "A concept from the target value set that this concept maps to.", 0, java.lang.Integer.MAX_VALUE, target));
508        }
509
510      @Override
511      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
512        switch (hash) {
513        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
514        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
515        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
516        case -880905839: /*target*/ return this.target == null ? new Base[0] : this.target.toArray(new Base[this.target.size()]); // TargetElementComponent
517        default: return super.getProperty(hash, name, checkValid);
518        }
519
520      }
521
522      @Override
523      public void setProperty(int hash, String name, Base value) throws FHIRException {
524        switch (hash) {
525        case -887328209: // system
526          this.system = castToUri(value); // UriType
527          break;
528        case 351608024: // version
529          this.version = castToString(value); // StringType
530          break;
531        case 3059181: // code
532          this.code = castToCode(value); // CodeType
533          break;
534        case -880905839: // target
535          this.getTarget().add((TargetElementComponent) value); // TargetElementComponent
536          break;
537        default: super.setProperty(hash, name, value);
538        }
539
540      }
541
542      @Override
543      public void setProperty(String name, Base value) throws FHIRException {
544        if (name.equals("system"))
545          this.system = castToUri(value); // UriType
546        else if (name.equals("version"))
547          this.version = castToString(value); // StringType
548        else if (name.equals("code"))
549          this.code = castToCode(value); // CodeType
550        else if (name.equals("target"))
551          this.getTarget().add((TargetElementComponent) value);
552        else
553          super.setProperty(name, value);
554      }
555
556      @Override
557      public Base makeProperty(int hash, String name) throws FHIRException {
558        switch (hash) {
559        case -887328209: throw new FHIRException("Cannot make property system as it is not a complex type"); // UriType
560        case 351608024: throw new FHIRException("Cannot make property version as it is not a complex type"); // StringType
561        case 3059181: throw new FHIRException("Cannot make property code as it is not a complex type"); // CodeType
562        case -880905839:  return addTarget(); // TargetElementComponent
563        default: return super.makeProperty(hash, name);
564        }
565
566      }
567
568      @Override
569      public Base addChild(String name) throws FHIRException {
570        if (name.equals("system")) {
571          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.system");
572        }
573        else if (name.equals("version")) {
574          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.version");
575        }
576        else if (name.equals("code")) {
577          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.code");
578        }
579        else if (name.equals("target")) {
580          return addTarget();
581        }
582        else
583          return super.addChild(name);
584      }
585
586      public SourceElementComponent copy() {
587        SourceElementComponent dst = new SourceElementComponent();
588        copyValues(dst);
589        dst.system = system == null ? null : system.copy();
590        dst.version = version == null ? null : version.copy();
591        dst.code = code == null ? null : code.copy();
592        if (target != null) {
593          dst.target = new ArrayList<TargetElementComponent>();
594          for (TargetElementComponent i : target)
595            dst.target.add(i.copy());
596        };
597        return dst;
598      }
599
600      @Override
601      public boolean equalsDeep(Base other) {
602        if (!super.equalsDeep(other))
603          return false;
604        if (!(other instanceof SourceElementComponent))
605          return false;
606        SourceElementComponent o = (SourceElementComponent) other;
607        return compareDeep(system, o.system, true) && compareDeep(version, o.version, true) && compareDeep(code, o.code, true)
608           && compareDeep(target, o.target, true);
609      }
610
611      @Override
612      public boolean equalsShallow(Base other) {
613        if (!super.equalsShallow(other))
614          return false;
615        if (!(other instanceof SourceElementComponent))
616          return false;
617        SourceElementComponent o = (SourceElementComponent) other;
618        return compareValues(system, o.system, true) && compareValues(version, o.version, true) && compareValues(code, o.code, true)
619          ;
620      }
621
622      public boolean isEmpty() {
623        return super.isEmpty() && (system == null || system.isEmpty()) && (version == null || version.isEmpty())
624           && (code == null || code.isEmpty()) && (target == null || target.isEmpty());
625      }
626
627  public String fhirType() {
628    return "ConceptMap.element";
629
630  }
631
632  }
633
634    @Block()
635    public static class TargetElementComponent extends BackboneElement implements IBaseBackboneElement {
636        /**
637         * An absolute URI that identifies the code system of the target code (if the target is a value set that cross code systems).
638         */
639        @Child(name = "system", type = {UriType.class}, order=1, min=0, max=1, modifier=false, summary=false)
640        @Description(shortDefinition="System of the target (if necessary)", formalDefinition="An absolute URI that identifies the code system of the target code (if the target is a value set that cross code systems)." )
641        protected UriType system;
642
643        /**
644         * The specific version of the code system, as determined by the code system authority.
645         */
646        @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
647        @Description(shortDefinition="Specific version of the  code system", formalDefinition="The specific version of the code system, as determined by the code system authority." )
648        protected StringType version;
649
650        /**
651         * Identity (code or path) or the element/item that the map refers to.
652         */
653        @Child(name = "code", type = {CodeType.class}, order=3, min=0, max=1, modifier=false, summary=false)
654        @Description(shortDefinition="Code that identifies the target element", formalDefinition="Identity (code or path) or the element/item that the map refers to." )
655        protected CodeType code;
656
657        /**
658         * 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).
659         */
660        @Child(name = "equivalence", type = {CodeType.class}, order=4, min=1, max=1, modifier=true, summary=false)
661        @Description(shortDefinition="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)." )
662        protected Enumeration<ConceptMapEquivalence> equivalence;
663
664        /**
665         * A description of status/issues in mapping that conveys additional information not represented in  the structured data.
666         */
667        @Child(name = "comments", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=false)
668        @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." )
669        protected StringType comments;
670
671        /**
672         * 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.
673         */
674        @Child(name = "dependsOn", type = {}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
675        @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." )
676        protected List<OtherElementComponent> dependsOn;
677
678        /**
679         * 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.
680         */
681        @Child(name = "product", type = {OtherElementComponent.class}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
682        @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." )
683        protected List<OtherElementComponent> product;
684
685        private static final long serialVersionUID = 2147112127L;
686
687    /**
688     * Constructor
689     */
690      public TargetElementComponent() {
691        super();
692      }
693
694    /**
695     * Constructor
696     */
697      public TargetElementComponent(Enumeration<ConceptMapEquivalence> equivalence) {
698        super();
699        this.equivalence = equivalence;
700      }
701
702        /**
703         * @return {@link #system} (An absolute URI that identifies the code system of the target code (if the target is a value set that cross code systems).). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
704         */
705        public UriType getSystemElement() { 
706          if (this.system == null)
707            if (Configuration.errorOnAutoCreate())
708              throw new Error("Attempt to auto-create TargetElementComponent.system");
709            else if (Configuration.doAutoCreate())
710              this.system = new UriType(); // bb
711          return this.system;
712        }
713
714        public boolean hasSystemElement() { 
715          return this.system != null && !this.system.isEmpty();
716        }
717
718        public boolean hasSystem() { 
719          return this.system != null && !this.system.isEmpty();
720        }
721
722        /**
723         * @param value {@link #system} (An absolute URI that identifies the code system of the target code (if the target is a value set that cross code systems).). This is the underlying object with id, value and extensions. The accessor "getSystem" gives direct access to the value
724         */
725        public TargetElementComponent setSystemElement(UriType value) { 
726          this.system = value;
727          return this;
728        }
729
730        /**
731         * @return An absolute URI that identifies the code system of the target code (if the target is a value set that cross code systems).
732         */
733        public String getSystem() { 
734          return this.system == null ? null : this.system.getValue();
735        }
736
737        /**
738         * @param value An absolute URI that identifies the code system of the target code (if the target is a value set that cross code systems).
739         */
740        public TargetElementComponent setSystem(String value) { 
741          if (Utilities.noString(value))
742            this.system = null;
743          else {
744            if (this.system == null)
745              this.system = new UriType();
746            this.system.setValue(value);
747          }
748          return this;
749        }
750
751        /**
752         * @return {@link #version} (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 "getVersion" gives direct access to the value
753         */
754        public StringType getVersionElement() { 
755          if (this.version == null)
756            if (Configuration.errorOnAutoCreate())
757              throw new Error("Attempt to auto-create TargetElementComponent.version");
758            else if (Configuration.doAutoCreate())
759              this.version = new StringType(); // bb
760          return this.version;
761        }
762
763        public boolean hasVersionElement() { 
764          return this.version != null && !this.version.isEmpty();
765        }
766
767        public boolean hasVersion() { 
768          return this.version != null && !this.version.isEmpty();
769        }
770
771        /**
772         * @param value {@link #version} (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 "getVersion" gives direct access to the value
773         */
774        public TargetElementComponent setVersionElement(StringType value) { 
775          this.version = value;
776          return this;
777        }
778
779        /**
780         * @return The specific version of the code system, as determined by the code system authority.
781         */
782        public String getVersion() { 
783          return this.version == null ? null : this.version.getValue();
784        }
785
786        /**
787         * @param value The specific version of the code system, as determined by the code system authority.
788         */
789        public TargetElementComponent setVersion(String value) { 
790          if (Utilities.noString(value))
791            this.version = null;
792          else {
793            if (this.version == null)
794              this.version = new StringType();
795            this.version.setValue(value);
796          }
797          return this;
798        }
799
800        /**
801         * @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
802         */
803        public CodeType getCodeElement() { 
804          if (this.code == null)
805            if (Configuration.errorOnAutoCreate())
806              throw new Error("Attempt to auto-create TargetElementComponent.code");
807            else if (Configuration.doAutoCreate())
808              this.code = new CodeType(); // bb
809          return this.code;
810        }
811
812        public boolean hasCodeElement() { 
813          return this.code != null && !this.code.isEmpty();
814        }
815
816        public boolean hasCode() { 
817          return this.code != null && !this.code.isEmpty();
818        }
819
820        /**
821         * @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
822         */
823        public TargetElementComponent setCodeElement(CodeType value) { 
824          this.code = value;
825          return this;
826        }
827
828        /**
829         * @return Identity (code or path) or the element/item that the map refers to.
830         */
831        public String getCode() { 
832          return this.code == null ? null : this.code.getValue();
833        }
834
835        /**
836         * @param value Identity (code or path) or the element/item that the map refers to.
837         */
838        public TargetElementComponent setCode(String value) { 
839          if (Utilities.noString(value))
840            this.code = null;
841          else {
842            if (this.code == null)
843              this.code = new CodeType();
844            this.code.setValue(value);
845          }
846          return this;
847        }
848
849        /**
850         * @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
851         */
852        public Enumeration<ConceptMapEquivalence> getEquivalenceElement() { 
853          if (this.equivalence == null)
854            if (Configuration.errorOnAutoCreate())
855              throw new Error("Attempt to auto-create TargetElementComponent.equivalence");
856            else if (Configuration.doAutoCreate())
857              this.equivalence = new Enumeration<ConceptMapEquivalence>(new ConceptMapEquivalenceEnumFactory()); // bb
858          return this.equivalence;
859        }
860
861        public boolean hasEquivalenceElement() { 
862          return this.equivalence != null && !this.equivalence.isEmpty();
863        }
864
865        public boolean hasEquivalence() { 
866          return this.equivalence != null && !this.equivalence.isEmpty();
867        }
868
869        /**
870         * @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
871         */
872        public TargetElementComponent setEquivalenceElement(Enumeration<ConceptMapEquivalence> value) { 
873          this.equivalence = value;
874          return this;
875        }
876
877        /**
878         * @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).
879         */
880        public ConceptMapEquivalence getEquivalence() { 
881          return this.equivalence == null ? null : this.equivalence.getValue();
882        }
883
884        /**
885         * @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).
886         */
887        public TargetElementComponent setEquivalence(ConceptMapEquivalence value) { 
888            if (this.equivalence == null)
889              this.equivalence = new Enumeration<ConceptMapEquivalence>(new ConceptMapEquivalenceEnumFactory());
890            this.equivalence.setValue(value);
891          return this;
892        }
893
894        /**
895         * @return {@link #comments} (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 "getComments" gives direct access to the value
896         */
897        public StringType getCommentsElement() { 
898          if (this.comments == null)
899            if (Configuration.errorOnAutoCreate())
900              throw new Error("Attempt to auto-create TargetElementComponent.comments");
901            else if (Configuration.doAutoCreate())
902              this.comments = new StringType(); // bb
903          return this.comments;
904        }
905
906        public boolean hasCommentsElement() { 
907          return this.comments != null && !this.comments.isEmpty();
908        }
909
910        public boolean hasComments() { 
911          return this.comments != null && !this.comments.isEmpty();
912        }
913
914        /**
915         * @param value {@link #comments} (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 "getComments" gives direct access to the value
916         */
917        public TargetElementComponent setCommentsElement(StringType value) { 
918          this.comments = value;
919          return this;
920        }
921
922        /**
923         * @return A description of status/issues in mapping that conveys additional information not represented in  the structured data.
924         */
925        public String getComments() { 
926          return this.comments == null ? null : this.comments.getValue();
927        }
928
929        /**
930         * @param value A description of status/issues in mapping that conveys additional information not represented in  the structured data.
931         */
932        public TargetElementComponent setComments(String value) { 
933          if (Utilities.noString(value))
934            this.comments = null;
935          else {
936            if (this.comments == null)
937              this.comments = new StringType();
938            this.comments.setValue(value);
939          }
940          return this;
941        }
942
943        /**
944         * @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.)
945         */
946        public List<OtherElementComponent> getDependsOn() { 
947          if (this.dependsOn == null)
948            this.dependsOn = new ArrayList<OtherElementComponent>();
949          return this.dependsOn;
950        }
951
952        public boolean hasDependsOn() { 
953          if (this.dependsOn == null)
954            return false;
955          for (OtherElementComponent item : this.dependsOn)
956            if (!item.isEmpty())
957              return true;
958          return false;
959        }
960
961        /**
962         * @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.)
963         */
964    // syntactic sugar
965        public OtherElementComponent addDependsOn() { //3
966          OtherElementComponent t = new OtherElementComponent();
967          if (this.dependsOn == null)
968            this.dependsOn = new ArrayList<OtherElementComponent>();
969          this.dependsOn.add(t);
970          return t;
971        }
972
973    // syntactic sugar
974        public TargetElementComponent addDependsOn(OtherElementComponent t) { //3
975          if (t == null)
976            return this;
977          if (this.dependsOn == null)
978            this.dependsOn = new ArrayList<OtherElementComponent>();
979          this.dependsOn.add(t);
980          return this;
981        }
982
983        /**
984         * @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.)
985         */
986        public List<OtherElementComponent> getProduct() { 
987          if (this.product == null)
988            this.product = new ArrayList<OtherElementComponent>();
989          return this.product;
990        }
991
992        public boolean hasProduct() { 
993          if (this.product == null)
994            return false;
995          for (OtherElementComponent item : this.product)
996            if (!item.isEmpty())
997              return true;
998          return false;
999        }
1000
1001        /**
1002         * @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.)
1003         */
1004    // syntactic sugar
1005        public OtherElementComponent addProduct() { //3
1006          OtherElementComponent t = new OtherElementComponent();
1007          if (this.product == null)
1008            this.product = new ArrayList<OtherElementComponent>();
1009          this.product.add(t);
1010          return t;
1011        }
1012
1013    // syntactic sugar
1014        public TargetElementComponent addProduct(OtherElementComponent t) { //3
1015          if (t == null)
1016            return this;
1017          if (this.product == null)
1018            this.product = new ArrayList<OtherElementComponent>();
1019          this.product.add(t);
1020          return this;
1021        }
1022
1023        protected void listChildren(List<Property> childrenList) {
1024          super.listChildren(childrenList);
1025          childrenList.add(new Property("system", "uri", "An absolute URI that identifies the code system of the target code (if the target is a value set that cross code systems).", 0, java.lang.Integer.MAX_VALUE, system));
1026          childrenList.add(new Property("version", "string", "The specific version of the code system, as determined by the code system authority.", 0, java.lang.Integer.MAX_VALUE, version));
1027          childrenList.add(new Property("code", "code", "Identity (code or path) or the element/item that the map refers to.", 0, java.lang.Integer.MAX_VALUE, code));
1028          childrenList.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, java.lang.Integer.MAX_VALUE, equivalence));
1029          childrenList.add(new Property("comments", "string", "A description of status/issues in mapping that conveys additional information not represented in  the structured data.", 0, java.lang.Integer.MAX_VALUE, comments));
1030          childrenList.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));
1031          childrenList.add(new Property("product", "@ConceptMap.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));
1032        }
1033
1034      @Override
1035      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1036        switch (hash) {
1037        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
1038        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
1039        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeType
1040        case -15828692: /*equivalence*/ return this.equivalence == null ? new Base[0] : new Base[] {this.equivalence}; // Enumeration<ConceptMapEquivalence>
1041        case -602415628: /*comments*/ return this.comments == null ? new Base[0] : new Base[] {this.comments}; // StringType
1042        case -1109214266: /*dependsOn*/ return this.dependsOn == null ? new Base[0] : this.dependsOn.toArray(new Base[this.dependsOn.size()]); // OtherElementComponent
1043        case -309474065: /*product*/ return this.product == null ? new Base[0] : this.product.toArray(new Base[this.product.size()]); // OtherElementComponent
1044        default: return super.getProperty(hash, name, checkValid);
1045        }
1046
1047      }
1048
1049      @Override
1050      public void setProperty(int hash, String name, Base value) throws FHIRException {
1051        switch (hash) {
1052        case -887328209: // system
1053          this.system = castToUri(value); // UriType
1054          break;
1055        case 351608024: // version
1056          this.version = castToString(value); // StringType
1057          break;
1058        case 3059181: // code
1059          this.code = castToCode(value); // CodeType
1060          break;
1061        case -15828692: // equivalence
1062          this.equivalence = new ConceptMapEquivalenceEnumFactory().fromType(value); // Enumeration<ConceptMapEquivalence>
1063          break;
1064        case -602415628: // comments
1065          this.comments = castToString(value); // StringType
1066          break;
1067        case -1109214266: // dependsOn
1068          this.getDependsOn().add((OtherElementComponent) value); // OtherElementComponent
1069          break;
1070        case -309474065: // product
1071          this.getProduct().add((OtherElementComponent) value); // OtherElementComponent
1072          break;
1073        default: super.setProperty(hash, name, value);
1074        }
1075
1076      }
1077
1078      @Override
1079      public void setProperty(String name, Base value) throws FHIRException {
1080        if (name.equals("system"))
1081          this.system = castToUri(value); // UriType
1082        else if (name.equals("version"))
1083          this.version = castToString(value); // StringType
1084        else if (name.equals("code"))
1085          this.code = castToCode(value); // CodeType
1086        else if (name.equals("equivalence"))
1087          this.equivalence = new ConceptMapEquivalenceEnumFactory().fromType(value); // Enumeration<ConceptMapEquivalence>
1088        else if (name.equals("comments"))
1089          this.comments = castToString(value); // StringType
1090        else if (name.equals("dependsOn"))
1091          this.getDependsOn().add((OtherElementComponent) value);
1092        else if (name.equals("product"))
1093          this.getProduct().add((OtherElementComponent) value);
1094        else
1095          super.setProperty(name, value);
1096      }
1097
1098      @Override
1099      public Base makeProperty(int hash, String name) throws FHIRException {
1100        switch (hash) {
1101        case -887328209: throw new FHIRException("Cannot make property system as it is not a complex type"); // UriType
1102        case 351608024: throw new FHIRException("Cannot make property version as it is not a complex type"); // StringType
1103        case 3059181: throw new FHIRException("Cannot make property code as it is not a complex type"); // CodeType
1104        case -15828692: throw new FHIRException("Cannot make property equivalence as it is not a complex type"); // Enumeration<ConceptMapEquivalence>
1105        case -602415628: throw new FHIRException("Cannot make property comments as it is not a complex type"); // StringType
1106        case -1109214266:  return addDependsOn(); // OtherElementComponent
1107        case -309474065:  return addProduct(); // OtherElementComponent
1108        default: return super.makeProperty(hash, name);
1109        }
1110
1111      }
1112
1113      @Override
1114      public Base addChild(String name) throws FHIRException {
1115        if (name.equals("system")) {
1116          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.system");
1117        }
1118        else if (name.equals("version")) {
1119          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.version");
1120        }
1121        else if (name.equals("code")) {
1122          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.code");
1123        }
1124        else if (name.equals("equivalence")) {
1125          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.equivalence");
1126        }
1127        else if (name.equals("comments")) {
1128          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.comments");
1129        }
1130        else if (name.equals("dependsOn")) {
1131          return addDependsOn();
1132        }
1133        else if (name.equals("product")) {
1134          return addProduct();
1135        }
1136        else
1137          return super.addChild(name);
1138      }
1139
1140      public TargetElementComponent copy() {
1141        TargetElementComponent dst = new TargetElementComponent();
1142        copyValues(dst);
1143        dst.system = system == null ? null : system.copy();
1144        dst.version = version == null ? null : version.copy();
1145        dst.code = code == null ? null : code.copy();
1146        dst.equivalence = equivalence == null ? null : equivalence.copy();
1147        dst.comments = comments == null ? null : comments.copy();
1148        if (dependsOn != null) {
1149          dst.dependsOn = new ArrayList<OtherElementComponent>();
1150          for (OtherElementComponent i : dependsOn)
1151            dst.dependsOn.add(i.copy());
1152        };
1153        if (product != null) {
1154          dst.product = new ArrayList<OtherElementComponent>();
1155          for (OtherElementComponent i : product)
1156            dst.product.add(i.copy());
1157        };
1158        return dst;
1159      }
1160
1161      @Override
1162      public boolean equalsDeep(Base other) {
1163        if (!super.equalsDeep(other))
1164          return false;
1165        if (!(other instanceof TargetElementComponent))
1166          return false;
1167        TargetElementComponent o = (TargetElementComponent) other;
1168        return compareDeep(system, o.system, true) && compareDeep(version, o.version, true) && compareDeep(code, o.code, true)
1169           && compareDeep(equivalence, o.equivalence, true) && compareDeep(comments, o.comments, true) && compareDeep(dependsOn, o.dependsOn, true)
1170           && compareDeep(product, o.product, true);
1171      }
1172
1173      @Override
1174      public boolean equalsShallow(Base other) {
1175        if (!super.equalsShallow(other))
1176          return false;
1177        if (!(other instanceof TargetElementComponent))
1178          return false;
1179        TargetElementComponent o = (TargetElementComponent) other;
1180        return compareValues(system, o.system, true) && compareValues(version, o.version, true) && compareValues(code, o.code, true)
1181           && compareValues(equivalence, o.equivalence, true) && compareValues(comments, o.comments, true);
1182      }
1183
1184      public boolean isEmpty() {
1185        return super.isEmpty() && (system == null || system.isEmpty()) && (version == null || version.isEmpty())
1186           && (code == null || code.isEmpty()) && (equivalence == null || equivalence.isEmpty()) && (comments == null || comments.isEmpty())
1187           && (dependsOn == null || dependsOn.isEmpty()) && (product == null || product.isEmpty());
1188      }
1189
1190  public String fhirType() {
1191    return "ConceptMap.element.target";
1192
1193  }
1194
1195  }
1196
1197    @Block()
1198    public static class OtherElementComponent extends BackboneElement implements IBaseBackboneElement {
1199        /**
1200         * A reference to a specific concept that holds a coded value. This can be an element in a FHIR resource, or a specific reference to a data element in a different specification (e.g. HL7 v2) or a general reference to a kind of data field, or a reference to a value set with an appropriately narrow definition.
1201         */
1202        @Child(name = "element", type = {UriType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1203        @Description(shortDefinition="Reference to element/field/ValueSet mapping depends on", formalDefinition="A reference to a specific concept that holds a coded value. This can be an element in a FHIR resource, or a specific reference to a data element in a different specification (e.g. HL7 v2) or a general reference to a kind of data field, or a reference to a value set with an appropriately narrow definition." )
1204        protected UriType element;
1205
1206        /**
1207         * An absolute URI that identifies the code system of the dependency code (if the source/dependency is a value set that crosses code systems).
1208         */
1209        @Child(name = "system", type = {UriType.class}, order=2, min=1, max=1, modifier=false, summary=false)
1210        @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)." )
1211        protected UriType system;
1212
1213        /**
1214         * Identity (code or path) or the element/item/ValueSet that the map depends on / refers to.
1215         */
1216        @Child(name = "code", type = {StringType.class}, order=3, min=1, max=1, modifier=false, summary=false)
1217        @Description(shortDefinition="Value of the referenced element", formalDefinition="Identity (code or path) or the element/item/ValueSet that the map depends on / refers to." )
1218        protected StringType code;
1219
1220        private static final long serialVersionUID = 1365816253L;
1221
1222    /**
1223     * Constructor
1224     */
1225      public OtherElementComponent() {
1226        super();
1227      }
1228
1229    /**
1230     * Constructor
1231     */
1232      public OtherElementComponent(UriType element, UriType system, StringType code) {
1233        super();
1234        this.element = element;
1235        this.system = system;
1236        this.code = code;
1237      }
1238
1239        /**
1240         * @return {@link #element} (A reference to a specific concept that holds a coded value. This can be an element in a FHIR resource, or a specific reference to a data element in a different specification (e.g. HL7 v2) or a general reference to a kind of data field, or a reference to a value set with an appropriately narrow definition.). This is the underlying object with id, value and extensions. The accessor "getElement" gives direct access to the value
1241         */
1242        public UriType getElementElement() { 
1243          if (this.element == null)
1244            if (Configuration.errorOnAutoCreate())
1245              throw new Error("Attempt to auto-create OtherElementComponent.element");
1246            else if (Configuration.doAutoCreate())
1247              this.element = new UriType(); // bb
1248          return this.element;
1249        }
1250
1251        public boolean hasElementElement() { 
1252          return this.element != null && !this.element.isEmpty();
1253        }
1254
1255        public boolean hasElement() { 
1256          return this.element != null && !this.element.isEmpty();
1257        }
1258
1259        /**
1260         * @param value {@link #element} (A reference to a specific concept that holds a coded value. This can be an element in a FHIR resource, or a specific reference to a data element in a different specification (e.g. HL7 v2) or a general reference to a kind of data field, or a reference to a value set with an appropriately narrow definition.). This is the underlying object with id, value and extensions. The accessor "getElement" gives direct access to the value
1261         */
1262        public OtherElementComponent setElementElement(UriType value) { 
1263          this.element = value;
1264          return this;
1265        }
1266
1267        /**
1268         * @return A reference to a specific concept that holds a coded value. This can be an element in a FHIR resource, or a specific reference to a data element in a different specification (e.g. HL7 v2) or a general reference to a kind of data field, or a reference to a value set with an appropriately narrow definition.
1269         */
1270        public String getElement() { 
1271          return this.element == null ? null : this.element.getValue();
1272        }
1273
1274        /**
1275         * @param value A reference to a specific concept that holds a coded value. This can be an element in a FHIR resource, or a specific reference to a data element in a different specification (e.g. HL7 v2) or a general reference to a kind of data field, or a reference to a value set with an appropriately narrow definition.
1276         */
1277        public OtherElementComponent setElement(String value) { 
1278            if (this.element == null)
1279              this.element = new UriType();
1280            this.element.setValue(value);
1281          return this;
1282        }
1283
1284        /**
1285         * @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
1286         */
1287        public UriType getSystemElement() { 
1288          if (this.system == null)
1289            if (Configuration.errorOnAutoCreate())
1290              throw new Error("Attempt to auto-create OtherElementComponent.system");
1291            else if (Configuration.doAutoCreate())
1292              this.system = new UriType(); // bb
1293          return this.system;
1294        }
1295
1296        public boolean hasSystemElement() { 
1297          return this.system != null && !this.system.isEmpty();
1298        }
1299
1300        public boolean hasSystem() { 
1301          return this.system != null && !this.system.isEmpty();
1302        }
1303
1304        /**
1305         * @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
1306         */
1307        public OtherElementComponent setSystemElement(UriType value) { 
1308          this.system = value;
1309          return this;
1310        }
1311
1312        /**
1313         * @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).
1314         */
1315        public String getSystem() { 
1316          return this.system == null ? null : this.system.getValue();
1317        }
1318
1319        /**
1320         * @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).
1321         */
1322        public OtherElementComponent setSystem(String value) { 
1323            if (this.system == null)
1324              this.system = new UriType();
1325            this.system.setValue(value);
1326          return this;
1327        }
1328
1329        /**
1330         * @return {@link #code} (Identity (code or path) or the element/item/ValueSet that the map depends on / refers to.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1331         */
1332        public StringType getCodeElement() { 
1333          if (this.code == null)
1334            if (Configuration.errorOnAutoCreate())
1335              throw new Error("Attempt to auto-create OtherElementComponent.code");
1336            else if (Configuration.doAutoCreate())
1337              this.code = new StringType(); // bb
1338          return this.code;
1339        }
1340
1341        public boolean hasCodeElement() { 
1342          return this.code != null && !this.code.isEmpty();
1343        }
1344
1345        public boolean hasCode() { 
1346          return this.code != null && !this.code.isEmpty();
1347        }
1348
1349        /**
1350         * @param value {@link #code} (Identity (code or path) or the element/item/ValueSet that the map depends on / refers to.). This is the underlying object with id, value and extensions. The accessor "getCode" gives direct access to the value
1351         */
1352        public OtherElementComponent setCodeElement(StringType value) { 
1353          this.code = value;
1354          return this;
1355        }
1356
1357        /**
1358         * @return Identity (code or path) or the element/item/ValueSet that the map depends on / refers to.
1359         */
1360        public String getCode() { 
1361          return this.code == null ? null : this.code.getValue();
1362        }
1363
1364        /**
1365         * @param value Identity (code or path) or the element/item/ValueSet that the map depends on / refers to.
1366         */
1367        public OtherElementComponent setCode(String value) { 
1368            if (this.code == null)
1369              this.code = new StringType();
1370            this.code.setValue(value);
1371          return this;
1372        }
1373
1374        protected void listChildren(List<Property> childrenList) {
1375          super.listChildren(childrenList);
1376          childrenList.add(new Property("element", "uri", "A reference to a specific concept that holds a coded value. This can be an element in a FHIR resource, or a specific reference to a data element in a different specification (e.g. HL7 v2) or a general reference to a kind of data field, or a reference to a value set with an appropriately narrow definition.", 0, java.lang.Integer.MAX_VALUE, element));
1377          childrenList.add(new Property("system", "uri", "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, java.lang.Integer.MAX_VALUE, system));
1378          childrenList.add(new Property("code", "string", "Identity (code or path) or the element/item/ValueSet that the map depends on / refers to.", 0, java.lang.Integer.MAX_VALUE, code));
1379        }
1380
1381      @Override
1382      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1383        switch (hash) {
1384        case -1662836996: /*element*/ return this.element == null ? new Base[0] : new Base[] {this.element}; // UriType
1385        case -887328209: /*system*/ return this.system == null ? new Base[0] : new Base[] {this.system}; // UriType
1386        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // StringType
1387        default: return super.getProperty(hash, name, checkValid);
1388        }
1389
1390      }
1391
1392      @Override
1393      public void setProperty(int hash, String name, Base value) throws FHIRException {
1394        switch (hash) {
1395        case -1662836996: // element
1396          this.element = castToUri(value); // UriType
1397          break;
1398        case -887328209: // system
1399          this.system = castToUri(value); // UriType
1400          break;
1401        case 3059181: // code
1402          this.code = castToString(value); // StringType
1403          break;
1404        default: super.setProperty(hash, name, value);
1405        }
1406
1407      }
1408
1409      @Override
1410      public void setProperty(String name, Base value) throws FHIRException {
1411        if (name.equals("element"))
1412          this.element = castToUri(value); // UriType
1413        else if (name.equals("system"))
1414          this.system = castToUri(value); // UriType
1415        else if (name.equals("code"))
1416          this.code = castToString(value); // StringType
1417        else
1418          super.setProperty(name, value);
1419      }
1420
1421      @Override
1422      public Base makeProperty(int hash, String name) throws FHIRException {
1423        switch (hash) {
1424        case -1662836996: throw new FHIRException("Cannot make property element as it is not a complex type"); // UriType
1425        case -887328209: throw new FHIRException("Cannot make property system as it is not a complex type"); // UriType
1426        case 3059181: throw new FHIRException("Cannot make property code as it is not a complex type"); // StringType
1427        default: return super.makeProperty(hash, name);
1428        }
1429
1430      }
1431
1432      @Override
1433      public Base addChild(String name) throws FHIRException {
1434        if (name.equals("element")) {
1435          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.element");
1436        }
1437        else if (name.equals("system")) {
1438          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.system");
1439        }
1440        else if (name.equals("code")) {
1441          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.code");
1442        }
1443        else
1444          return super.addChild(name);
1445      }
1446
1447      public OtherElementComponent copy() {
1448        OtherElementComponent dst = new OtherElementComponent();
1449        copyValues(dst);
1450        dst.element = element == null ? null : element.copy();
1451        dst.system = system == null ? null : system.copy();
1452        dst.code = code == null ? null : code.copy();
1453        return dst;
1454      }
1455
1456      @Override
1457      public boolean equalsDeep(Base other) {
1458        if (!super.equalsDeep(other))
1459          return false;
1460        if (!(other instanceof OtherElementComponent))
1461          return false;
1462        OtherElementComponent o = (OtherElementComponent) other;
1463        return compareDeep(element, o.element, true) && compareDeep(system, o.system, true) && compareDeep(code, o.code, true)
1464          ;
1465      }
1466
1467      @Override
1468      public boolean equalsShallow(Base other) {
1469        if (!super.equalsShallow(other))
1470          return false;
1471        if (!(other instanceof OtherElementComponent))
1472          return false;
1473        OtherElementComponent o = (OtherElementComponent) other;
1474        return compareValues(element, o.element, true) && compareValues(system, o.system, true) && compareValues(code, o.code, true)
1475          ;
1476      }
1477
1478      public boolean isEmpty() {
1479        return super.isEmpty() && (element == null || element.isEmpty()) && (system == null || system.isEmpty())
1480           && (code == null || code.isEmpty());
1481      }
1482
1483  public String fhirType() {
1484    return "ConceptMap.element.target.dependsOn";
1485
1486  }
1487
1488  }
1489
1490    /**
1491     * An absolute URL that is used to identify this concept map when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this concept map is (or will be) published.
1492     */
1493    @Child(name = "url", type = {UriType.class}, order=0, min=0, max=1, modifier=false, summary=true)
1494    @Description(shortDefinition="Globally unique logical id for concept map", formalDefinition="An absolute URL that is used to identify this concept map when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this concept map is (or will be) published." )
1495    protected UriType url;
1496
1497    /**
1498     * 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.
1499     */
1500    @Child(name = "identifier", type = {Identifier.class}, order=1, min=0, max=1, modifier=false, summary=true)
1501    @Description(shortDefinition="Additional identifier for the concept map", formalDefinition="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." )
1502    protected Identifier identifier;
1503
1504    /**
1505     * 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 profile author manually and the value should be a timestamp.
1506     */
1507    @Child(name = "version", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=true)
1508    @Description(shortDefinition="Logical id for this version of the concept map", formalDefinition="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 profile author manually and the value should be a timestamp." )
1509    protected StringType version;
1510
1511    /**
1512     * A free text natural language name describing the concept map.
1513     */
1514    @Child(name = "name", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=true)
1515    @Description(shortDefinition="Informal name for this concept map", formalDefinition="A free text natural language name describing the concept map." )
1516    protected StringType name;
1517
1518    /**
1519     * The status of the concept map.
1520     */
1521    @Child(name = "status", type = {CodeType.class}, order=4, min=1, max=1, modifier=true, summary=true)
1522    @Description(shortDefinition="draft | active | retired", formalDefinition="The status of the concept map." )
1523    protected Enumeration<ConformanceResourceStatus> status;
1524
1525    /**
1526     * This ConceptMap was authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
1527     */
1528    @Child(name = "experimental", type = {BooleanType.class}, order=5, min=0, max=1, modifier=false, summary=true)
1529    @Description(shortDefinition="If for testing purposes, not real usage", formalDefinition="This ConceptMap was authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage." )
1530    protected BooleanType experimental;
1531
1532    /**
1533     * The name of the individual or organization that published the concept map.
1534     */
1535    @Child(name = "publisher", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=true)
1536    @Description(shortDefinition="Name of the publisher (organization or individual)", formalDefinition="The name of the individual or organization that published the concept map." )
1537    protected StringType publisher;
1538
1539    /**
1540     * Contacts to assist a user in finding and communicating with the publisher.
1541     */
1542    @Child(name = "contact", type = {}, order=7, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1543    @Description(shortDefinition="Contact details of the publisher", formalDefinition="Contacts to assist a user in finding and communicating with the publisher." )
1544    protected List<ConceptMapContactComponent> contact;
1545
1546    /**
1547     * The date this version of the concept map was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the concept map changes.
1548     */
1549    @Child(name = "date", type = {DateTimeType.class}, order=8, min=0, max=1, modifier=false, summary=true)
1550    @Description(shortDefinition="Date for given status", formalDefinition="The date this version of the concept map was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the concept map changes." )
1551    protected DateTimeType date;
1552
1553    /**
1554     * A free text natural language description of the use of the concept map - reason for definition, conditions of use, etc.
1555     */
1556    @Child(name = "description", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=true)
1557    @Description(shortDefinition="Human language description of the concept map", formalDefinition="A free text natural language description of the use of the concept map - reason for definition, conditions of use, etc." )
1558    protected StringType description;
1559
1560    /**
1561     * The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching of concept map instances.
1562     */
1563    @Child(name = "useContext", type = {CodeableConcept.class}, order=10, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
1564    @Description(shortDefinition="Content intends to support these contexts", formalDefinition="The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching of concept map instances." )
1565    protected List<CodeableConcept> useContext;
1566
1567    /**
1568     * Explains why this concept map is needed and why it has been constrained as it has.
1569     */
1570    @Child(name = "requirements", type = {StringType.class}, order=11, min=0, max=1, modifier=false, summary=false)
1571    @Description(shortDefinition="Why needed", formalDefinition="Explains why this concept map is needed and why it has been constrained as it has." )
1572    protected StringType requirements;
1573
1574    /**
1575     * A copyright statement relating to the concept map and/or its contents.
1576     */
1577    @Child(name = "copyright", type = {StringType.class}, order=12, min=0, max=1, modifier=false, summary=false)
1578    @Description(shortDefinition="Use and/or publishing restrictions", formalDefinition="A copyright statement relating to the concept map and/or its contents." )
1579    protected StringType copyright;
1580
1581    /**
1582     * The source value set that specifies the concepts that are being mapped.
1583     */
1584    @Child(name = "source", type = {UriType.class, ValueSet.class, StructureDefinition.class}, order=13, min=1, max=1, modifier=false, summary=true)
1585    @Description(shortDefinition="Identifies the source of the concepts which are being mapped", formalDefinition="The source value set that specifies the concepts that are being mapped." )
1586    protected Type source;
1587
1588    /**
1589     * The target value set provides context to 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.
1590     */
1591    @Child(name = "target", type = {UriType.class, ValueSet.class, StructureDefinition.class}, order=14, min=1, max=1, modifier=false, summary=true)
1592    @Description(shortDefinition="Provides context to the mappings", formalDefinition="The target value set provides context to 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." )
1593    protected Type target;
1594
1595    /**
1596     * Mappings for an individual concept in the source to one or more concepts in the target.
1597     */
1598    @Child(name = "element", type = {}, order=15, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
1599    @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." )
1600    protected List<SourceElementComponent> element;
1601
1602    private static final long serialVersionUID = 1687563642L;
1603
1604  /**
1605   * Constructor
1606   */
1607    public ConceptMap() {
1608      super();
1609    }
1610
1611  /**
1612   * Constructor
1613   */
1614    public ConceptMap(Enumeration<ConformanceResourceStatus> status, Type source, Type target) {
1615      super();
1616      this.status = status;
1617      this.source = source;
1618      this.target = target;
1619    }
1620
1621    /**
1622     * @return {@link #url} (An absolute URL that is used to identify this concept map when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this concept map is (or will be) published.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1623     */
1624    public UriType getUrlElement() { 
1625      if (this.url == null)
1626        if (Configuration.errorOnAutoCreate())
1627          throw new Error("Attempt to auto-create ConceptMap.url");
1628        else if (Configuration.doAutoCreate())
1629          this.url = new UriType(); // bb
1630      return this.url;
1631    }
1632
1633    public boolean hasUrlElement() { 
1634      return this.url != null && !this.url.isEmpty();
1635    }
1636
1637    public boolean hasUrl() { 
1638      return this.url != null && !this.url.isEmpty();
1639    }
1640
1641    /**
1642     * @param value {@link #url} (An absolute URL that is used to identify this concept map when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this concept map is (or will be) published.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1643     */
1644    public ConceptMap setUrlElement(UriType value) { 
1645      this.url = value;
1646      return this;
1647    }
1648
1649    /**
1650     * @return An absolute URL that is used to identify this concept map when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this concept map is (or will be) published.
1651     */
1652    public String getUrl() { 
1653      return this.url == null ? null : this.url.getValue();
1654    }
1655
1656    /**
1657     * @param value An absolute URL that is used to identify this concept map when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this concept map is (or will be) published.
1658     */
1659    public ConceptMap setUrl(String value) { 
1660      if (Utilities.noString(value))
1661        this.url = null;
1662      else {
1663        if (this.url == null)
1664          this.url = new UriType();
1665        this.url.setValue(value);
1666      }
1667      return this;
1668    }
1669
1670    /**
1671     * @return {@link #identifier} (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.)
1672     */
1673    public Identifier getIdentifier() { 
1674      if (this.identifier == null)
1675        if (Configuration.errorOnAutoCreate())
1676          throw new Error("Attempt to auto-create ConceptMap.identifier");
1677        else if (Configuration.doAutoCreate())
1678          this.identifier = new Identifier(); // cc
1679      return this.identifier;
1680    }
1681
1682    public boolean hasIdentifier() { 
1683      return this.identifier != null && !this.identifier.isEmpty();
1684    }
1685
1686    /**
1687     * @param value {@link #identifier} (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.)
1688     */
1689    public ConceptMap setIdentifier(Identifier value) { 
1690      this.identifier = value;
1691      return this;
1692    }
1693
1694    /**
1695     * @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 profile author manually and the value should be a timestamp.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
1696     */
1697    public StringType getVersionElement() { 
1698      if (this.version == null)
1699        if (Configuration.errorOnAutoCreate())
1700          throw new Error("Attempt to auto-create ConceptMap.version");
1701        else if (Configuration.doAutoCreate())
1702          this.version = new StringType(); // bb
1703      return this.version;
1704    }
1705
1706    public boolean hasVersionElement() { 
1707      return this.version != null && !this.version.isEmpty();
1708    }
1709
1710    public boolean hasVersion() { 
1711      return this.version != null && !this.version.isEmpty();
1712    }
1713
1714    /**
1715     * @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 profile author manually and the value should be a timestamp.). This is the underlying object with id, value and extensions. The accessor "getVersion" gives direct access to the value
1716     */
1717    public ConceptMap setVersionElement(StringType value) { 
1718      this.version = value;
1719      return this;
1720    }
1721
1722    /**
1723     * @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 profile author manually and the value should be a timestamp.
1724     */
1725    public String getVersion() { 
1726      return this.version == null ? null : this.version.getValue();
1727    }
1728
1729    /**
1730     * @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 profile author manually and the value should be a timestamp.
1731     */
1732    public ConceptMap setVersion(String value) { 
1733      if (Utilities.noString(value))
1734        this.version = null;
1735      else {
1736        if (this.version == null)
1737          this.version = new StringType();
1738        this.version.setValue(value);
1739      }
1740      return this;
1741    }
1742
1743    /**
1744     * @return {@link #name} (A free text natural language name describing the concept map.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1745     */
1746    public StringType getNameElement() { 
1747      if (this.name == null)
1748        if (Configuration.errorOnAutoCreate())
1749          throw new Error("Attempt to auto-create ConceptMap.name");
1750        else if (Configuration.doAutoCreate())
1751          this.name = new StringType(); // bb
1752      return this.name;
1753    }
1754
1755    public boolean hasNameElement() { 
1756      return this.name != null && !this.name.isEmpty();
1757    }
1758
1759    public boolean hasName() { 
1760      return this.name != null && !this.name.isEmpty();
1761    }
1762
1763    /**
1764     * @param value {@link #name} (A free text natural language name describing the concept map.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
1765     */
1766    public ConceptMap setNameElement(StringType value) { 
1767      this.name = value;
1768      return this;
1769    }
1770
1771    /**
1772     * @return A free text natural language name describing the concept map.
1773     */
1774    public String getName() { 
1775      return this.name == null ? null : this.name.getValue();
1776    }
1777
1778    /**
1779     * @param value A free text natural language name describing the concept map.
1780     */
1781    public ConceptMap setName(String value) { 
1782      if (Utilities.noString(value))
1783        this.name = null;
1784      else {
1785        if (this.name == null)
1786          this.name = new StringType();
1787        this.name.setValue(value);
1788      }
1789      return this;
1790    }
1791
1792    /**
1793     * @return {@link #status} (The status of the concept map.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1794     */
1795    public Enumeration<ConformanceResourceStatus> getStatusElement() { 
1796      if (this.status == null)
1797        if (Configuration.errorOnAutoCreate())
1798          throw new Error("Attempt to auto-create ConceptMap.status");
1799        else if (Configuration.doAutoCreate())
1800          this.status = new Enumeration<ConformanceResourceStatus>(new ConformanceResourceStatusEnumFactory()); // bb
1801      return this.status;
1802    }
1803
1804    public boolean hasStatusElement() { 
1805      return this.status != null && !this.status.isEmpty();
1806    }
1807
1808    public boolean hasStatus() { 
1809      return this.status != null && !this.status.isEmpty();
1810    }
1811
1812    /**
1813     * @param value {@link #status} (The status of the concept map.). This is the underlying object with id, value and extensions. The accessor "getStatus" gives direct access to the value
1814     */
1815    public ConceptMap setStatusElement(Enumeration<ConformanceResourceStatus> value) { 
1816      this.status = value;
1817      return this;
1818    }
1819
1820    /**
1821     * @return The status of the concept map.
1822     */
1823    public ConformanceResourceStatus getStatus() { 
1824      return this.status == null ? null : this.status.getValue();
1825    }
1826
1827    /**
1828     * @param value The status of the concept map.
1829     */
1830    public ConceptMap setStatus(ConformanceResourceStatus value) { 
1831        if (this.status == null)
1832          this.status = new Enumeration<ConformanceResourceStatus>(new ConformanceResourceStatusEnumFactory());
1833        this.status.setValue(value);
1834      return this;
1835    }
1836
1837    /**
1838     * @return {@link #experimental} (This ConceptMap was 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
1839     */
1840    public BooleanType getExperimentalElement() { 
1841      if (this.experimental == null)
1842        if (Configuration.errorOnAutoCreate())
1843          throw new Error("Attempt to auto-create ConceptMap.experimental");
1844        else if (Configuration.doAutoCreate())
1845          this.experimental = new BooleanType(); // bb
1846      return this.experimental;
1847    }
1848
1849    public boolean hasExperimentalElement() { 
1850      return this.experimental != null && !this.experimental.isEmpty();
1851    }
1852
1853    public boolean hasExperimental() { 
1854      return this.experimental != null && !this.experimental.isEmpty();
1855    }
1856
1857    /**
1858     * @param value {@link #experimental} (This ConceptMap was 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
1859     */
1860    public ConceptMap setExperimentalElement(BooleanType value) { 
1861      this.experimental = value;
1862      return this;
1863    }
1864
1865    /**
1866     * @return This ConceptMap was authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
1867     */
1868    public boolean getExperimental() { 
1869      return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
1870    }
1871
1872    /**
1873     * @param value This ConceptMap was authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.
1874     */
1875    public ConceptMap setExperimental(boolean value) { 
1876        if (this.experimental == null)
1877          this.experimental = new BooleanType();
1878        this.experimental.setValue(value);
1879      return this;
1880    }
1881
1882    /**
1883     * @return {@link #publisher} (The name of the individual or organization that published the concept map.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
1884     */
1885    public StringType getPublisherElement() { 
1886      if (this.publisher == null)
1887        if (Configuration.errorOnAutoCreate())
1888          throw new Error("Attempt to auto-create ConceptMap.publisher");
1889        else if (Configuration.doAutoCreate())
1890          this.publisher = new StringType(); // bb
1891      return this.publisher;
1892    }
1893
1894    public boolean hasPublisherElement() { 
1895      return this.publisher != null && !this.publisher.isEmpty();
1896    }
1897
1898    public boolean hasPublisher() { 
1899      return this.publisher != null && !this.publisher.isEmpty();
1900    }
1901
1902    /**
1903     * @param value {@link #publisher} (The name of the individual or organization that published the concept map.). This is the underlying object with id, value and extensions. The accessor "getPublisher" gives direct access to the value
1904     */
1905    public ConceptMap setPublisherElement(StringType value) { 
1906      this.publisher = value;
1907      return this;
1908    }
1909
1910    /**
1911     * @return The name of the individual or organization that published the concept map.
1912     */
1913    public String getPublisher() { 
1914      return this.publisher == null ? null : this.publisher.getValue();
1915    }
1916
1917    /**
1918     * @param value The name of the individual or organization that published the concept map.
1919     */
1920    public ConceptMap setPublisher(String value) { 
1921      if (Utilities.noString(value))
1922        this.publisher = null;
1923      else {
1924        if (this.publisher == null)
1925          this.publisher = new StringType();
1926        this.publisher.setValue(value);
1927      }
1928      return this;
1929    }
1930
1931    /**
1932     * @return {@link #contact} (Contacts to assist a user in finding and communicating with the publisher.)
1933     */
1934    public List<ConceptMapContactComponent> getContact() { 
1935      if (this.contact == null)
1936        this.contact = new ArrayList<ConceptMapContactComponent>();
1937      return this.contact;
1938    }
1939
1940    public boolean hasContact() { 
1941      if (this.contact == null)
1942        return false;
1943      for (ConceptMapContactComponent item : this.contact)
1944        if (!item.isEmpty())
1945          return true;
1946      return false;
1947    }
1948
1949    /**
1950     * @return {@link #contact} (Contacts to assist a user in finding and communicating with the publisher.)
1951     */
1952    // syntactic sugar
1953    public ConceptMapContactComponent addContact() { //3
1954      ConceptMapContactComponent t = new ConceptMapContactComponent();
1955      if (this.contact == null)
1956        this.contact = new ArrayList<ConceptMapContactComponent>();
1957      this.contact.add(t);
1958      return t;
1959    }
1960
1961    // syntactic sugar
1962    public ConceptMap addContact(ConceptMapContactComponent t) { //3
1963      if (t == null)
1964        return this;
1965      if (this.contact == null)
1966        this.contact = new ArrayList<ConceptMapContactComponent>();
1967      this.contact.add(t);
1968      return this;
1969    }
1970
1971    /**
1972     * @return {@link #date} (The date this version of the concept map was published. The date must change when the business version changes, if it does, 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
1973     */
1974    public DateTimeType getDateElement() { 
1975      if (this.date == null)
1976        if (Configuration.errorOnAutoCreate())
1977          throw new Error("Attempt to auto-create ConceptMap.date");
1978        else if (Configuration.doAutoCreate())
1979          this.date = new DateTimeType(); // bb
1980      return this.date;
1981    }
1982
1983    public boolean hasDateElement() { 
1984      return this.date != null && !this.date.isEmpty();
1985    }
1986
1987    public boolean hasDate() { 
1988      return this.date != null && !this.date.isEmpty();
1989    }
1990
1991    /**
1992     * @param value {@link #date} (The date this version of the concept map was published. The date must change when the business version changes, if it does, 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
1993     */
1994    public ConceptMap setDateElement(DateTimeType value) { 
1995      this.date = value;
1996      return this;
1997    }
1998
1999    /**
2000     * @return The date this version of the concept map was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the concept map changes.
2001     */
2002    public Date getDate() { 
2003      return this.date == null ? null : this.date.getValue();
2004    }
2005
2006    /**
2007     * @param value The date this version of the concept map was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the concept map changes.
2008     */
2009    public ConceptMap setDate(Date value) { 
2010      if (value == null)
2011        this.date = null;
2012      else {
2013        if (this.date == null)
2014          this.date = new DateTimeType();
2015        this.date.setValue(value);
2016      }
2017      return this;
2018    }
2019
2020    /**
2021     * @return {@link #description} (A free text natural language description of the use of the concept map - reason for definition, conditions of use, etc.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2022     */
2023    public StringType getDescriptionElement() { 
2024      if (this.description == null)
2025        if (Configuration.errorOnAutoCreate())
2026          throw new Error("Attempt to auto-create ConceptMap.description");
2027        else if (Configuration.doAutoCreate())
2028          this.description = new StringType(); // bb
2029      return this.description;
2030    }
2031
2032    public boolean hasDescriptionElement() { 
2033      return this.description != null && !this.description.isEmpty();
2034    }
2035
2036    public boolean hasDescription() { 
2037      return this.description != null && !this.description.isEmpty();
2038    }
2039
2040    /**
2041     * @param value {@link #description} (A free text natural language description of the use of the concept map - reason for definition, conditions of use, etc.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2042     */
2043    public ConceptMap setDescriptionElement(StringType value) { 
2044      this.description = value;
2045      return this;
2046    }
2047
2048    /**
2049     * @return A free text natural language description of the use of the concept map - reason for definition, conditions of use, etc.
2050     */
2051    public String getDescription() { 
2052      return this.description == null ? null : this.description.getValue();
2053    }
2054
2055    /**
2056     * @param value A free text natural language description of the use of the concept map - reason for definition, conditions of use, etc.
2057     */
2058    public ConceptMap setDescription(String value) { 
2059      if (Utilities.noString(value))
2060        this.description = null;
2061      else {
2062        if (this.description == null)
2063          this.description = new StringType();
2064        this.description.setValue(value);
2065      }
2066      return this;
2067    }
2068
2069    /**
2070     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching of concept map instances.)
2071     */
2072    public List<CodeableConcept> getUseContext() { 
2073      if (this.useContext == null)
2074        this.useContext = new ArrayList<CodeableConcept>();
2075      return this.useContext;
2076    }
2077
2078    public boolean hasUseContext() { 
2079      if (this.useContext == null)
2080        return false;
2081      for (CodeableConcept item : this.useContext)
2082        if (!item.isEmpty())
2083          return true;
2084      return false;
2085    }
2086
2087    /**
2088     * @return {@link #useContext} (The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching of concept map instances.)
2089     */
2090    // syntactic sugar
2091    public CodeableConcept addUseContext() { //3
2092      CodeableConcept t = new CodeableConcept();
2093      if (this.useContext == null)
2094        this.useContext = new ArrayList<CodeableConcept>();
2095      this.useContext.add(t);
2096      return t;
2097    }
2098
2099    // syntactic sugar
2100    public ConceptMap addUseContext(CodeableConcept t) { //3
2101      if (t == null)
2102        return this;
2103      if (this.useContext == null)
2104        this.useContext = new ArrayList<CodeableConcept>();
2105      this.useContext.add(t);
2106      return this;
2107    }
2108
2109    /**
2110     * @return {@link #requirements} (Explains why this concept map is needed and why it has been constrained as it has.). This is the underlying object with id, value and extensions. The accessor "getRequirements" gives direct access to the value
2111     */
2112    public StringType getRequirementsElement() { 
2113      if (this.requirements == null)
2114        if (Configuration.errorOnAutoCreate())
2115          throw new Error("Attempt to auto-create ConceptMap.requirements");
2116        else if (Configuration.doAutoCreate())
2117          this.requirements = new StringType(); // bb
2118      return this.requirements;
2119    }
2120
2121    public boolean hasRequirementsElement() { 
2122      return this.requirements != null && !this.requirements.isEmpty();
2123    }
2124
2125    public boolean hasRequirements() { 
2126      return this.requirements != null && !this.requirements.isEmpty();
2127    }
2128
2129    /**
2130     * @param value {@link #requirements} (Explains why this concept map is needed and why it has been constrained as it has.). This is the underlying object with id, value and extensions. The accessor "getRequirements" gives direct access to the value
2131     */
2132    public ConceptMap setRequirementsElement(StringType value) { 
2133      this.requirements = value;
2134      return this;
2135    }
2136
2137    /**
2138     * @return Explains why this concept map is needed and why it has been constrained as it has.
2139     */
2140    public String getRequirements() { 
2141      return this.requirements == null ? null : this.requirements.getValue();
2142    }
2143
2144    /**
2145     * @param value Explains why this concept map is needed and why it has been constrained as it has.
2146     */
2147    public ConceptMap setRequirements(String value) { 
2148      if (Utilities.noString(value))
2149        this.requirements = null;
2150      else {
2151        if (this.requirements == null)
2152          this.requirements = new StringType();
2153        this.requirements.setValue(value);
2154      }
2155      return this;
2156    }
2157
2158    /**
2159     * @return {@link #copyright} (A copyright statement relating to the concept map and/or its contents.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
2160     */
2161    public StringType getCopyrightElement() { 
2162      if (this.copyright == null)
2163        if (Configuration.errorOnAutoCreate())
2164          throw new Error("Attempt to auto-create ConceptMap.copyright");
2165        else if (Configuration.doAutoCreate())
2166          this.copyright = new StringType(); // bb
2167      return this.copyright;
2168    }
2169
2170    public boolean hasCopyrightElement() { 
2171      return this.copyright != null && !this.copyright.isEmpty();
2172    }
2173
2174    public boolean hasCopyright() { 
2175      return this.copyright != null && !this.copyright.isEmpty();
2176    }
2177
2178    /**
2179     * @param value {@link #copyright} (A copyright statement relating to the concept map and/or its contents.). This is the underlying object with id, value and extensions. The accessor "getCopyright" gives direct access to the value
2180     */
2181    public ConceptMap setCopyrightElement(StringType value) { 
2182      this.copyright = value;
2183      return this;
2184    }
2185
2186    /**
2187     * @return A copyright statement relating to the concept map and/or its contents.
2188     */
2189    public String getCopyright() { 
2190      return this.copyright == null ? null : this.copyright.getValue();
2191    }
2192
2193    /**
2194     * @param value A copyright statement relating to the concept map and/or its contents.
2195     */
2196    public ConceptMap setCopyright(String value) { 
2197      if (Utilities.noString(value))
2198        this.copyright = null;
2199      else {
2200        if (this.copyright == null)
2201          this.copyright = new StringType();
2202        this.copyright.setValue(value);
2203      }
2204      return this;
2205    }
2206
2207    /**
2208     * @return {@link #source} (The source value set that specifies the concepts that are being mapped.)
2209     */
2210    public Type getSource() { 
2211      return this.source;
2212    }
2213
2214    /**
2215     * @return {@link #source} (The source value set that specifies the concepts that are being mapped.)
2216     */
2217    public UriType getSourceUriType() throws FHIRException { 
2218      if (!(this.source instanceof UriType))
2219        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.source.getClass().getName()+" was encountered");
2220      return (UriType) this.source;
2221    }
2222
2223    public boolean hasSourceUriType() { 
2224      return this.source instanceof UriType;
2225    }
2226
2227    /**
2228     * @return {@link #source} (The source value set that specifies the concepts that are being mapped.)
2229     */
2230    public Reference getSourceReference() throws FHIRException { 
2231      if (!(this.source instanceof Reference))
2232        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.source.getClass().getName()+" was encountered");
2233      return (Reference) this.source;
2234    }
2235
2236    public boolean hasSourceReference() { 
2237      return this.source instanceof Reference;
2238    }
2239
2240    public boolean hasSource() { 
2241      return this.source != null && !this.source.isEmpty();
2242    }
2243
2244    /**
2245     * @param value {@link #source} (The source value set that specifies the concepts that are being mapped.)
2246     */
2247    public ConceptMap setSource(Type value) { 
2248      this.source = value;
2249      return this;
2250    }
2251
2252    /**
2253     * @return {@link #target} (The target value set provides context to 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.)
2254     */
2255    public Type getTarget() { 
2256      return this.target;
2257    }
2258
2259    /**
2260     * @return {@link #target} (The target value set provides context to 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.)
2261     */
2262    public UriType getTargetUriType() throws FHIRException { 
2263      if (!(this.target instanceof UriType))
2264        throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.target.getClass().getName()+" was encountered");
2265      return (UriType) this.target;
2266    }
2267
2268    public boolean hasTargetUriType() { 
2269      return this.target instanceof UriType;
2270    }
2271
2272    /**
2273     * @return {@link #target} (The target value set provides context to 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.)
2274     */
2275    public Reference getTargetReference() throws FHIRException { 
2276      if (!(this.target instanceof Reference))
2277        throw new FHIRException("Type mismatch: the type Reference was expected, but "+this.target.getClass().getName()+" was encountered");
2278      return (Reference) this.target;
2279    }
2280
2281    public boolean hasTargetReference() { 
2282      return this.target instanceof Reference;
2283    }
2284
2285    public boolean hasTarget() { 
2286      return this.target != null && !this.target.isEmpty();
2287    }
2288
2289    /**
2290     * @param value {@link #target} (The target value set provides context to 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.)
2291     */
2292    public ConceptMap setTarget(Type value) { 
2293      this.target = value;
2294      return this;
2295    }
2296
2297    /**
2298     * @return {@link #element} (Mappings for an individual concept in the source to one or more concepts in the target.)
2299     */
2300    public List<SourceElementComponent> getElement() { 
2301      if (this.element == null)
2302        this.element = new ArrayList<SourceElementComponent>();
2303      return this.element;
2304    }
2305
2306    public boolean hasElement() { 
2307      if (this.element == null)
2308        return false;
2309      for (SourceElementComponent item : this.element)
2310        if (!item.isEmpty())
2311          return true;
2312      return false;
2313    }
2314
2315    /**
2316     * @return {@link #element} (Mappings for an individual concept in the source to one or more concepts in the target.)
2317     */
2318    // syntactic sugar
2319    public SourceElementComponent addElement() { //3
2320      SourceElementComponent t = new SourceElementComponent();
2321      if (this.element == null)
2322        this.element = new ArrayList<SourceElementComponent>();
2323      this.element.add(t);
2324      return t;
2325    }
2326
2327    // syntactic sugar
2328    public ConceptMap addElement(SourceElementComponent t) { //3
2329      if (t == null)
2330        return this;
2331      if (this.element == null)
2332        this.element = new ArrayList<SourceElementComponent>();
2333      this.element.add(t);
2334      return this;
2335    }
2336
2337      protected void listChildren(List<Property> childrenList) {
2338        super.listChildren(childrenList);
2339        childrenList.add(new Property("url", "uri", "An absolute URL that is used to identify this concept map when it is referenced in a specification, model, design or an instance. This SHALL be a URL, SHOULD be globally unique, and SHOULD be an address at which this concept map is (or will be) published.", 0, java.lang.Integer.MAX_VALUE, url));
2340        childrenList.add(new Property("identifier", "Identifier", "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, java.lang.Integer.MAX_VALUE, identifier));
2341        childrenList.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 profile author manually and the value should be a timestamp.", 0, java.lang.Integer.MAX_VALUE, version));
2342        childrenList.add(new Property("name", "string", "A free text natural language name describing the concept map.", 0, java.lang.Integer.MAX_VALUE, name));
2343        childrenList.add(new Property("status", "code", "The status of the concept map.", 0, java.lang.Integer.MAX_VALUE, status));
2344        childrenList.add(new Property("experimental", "boolean", "This ConceptMap was authored for testing purposes (or education/evaluation/marketing), and is not intended to be used for genuine usage.", 0, java.lang.Integer.MAX_VALUE, experimental));
2345        childrenList.add(new Property("publisher", "string", "The name of the individual or organization that published the concept map.", 0, java.lang.Integer.MAX_VALUE, publisher));
2346        childrenList.add(new Property("contact", "", "Contacts to assist a user in finding and communicating with the publisher.", 0, java.lang.Integer.MAX_VALUE, contact));
2347        childrenList.add(new Property("date", "dateTime", "The date this version of the concept map was published. The date must change when the business version changes, if it does, and it must change if the status code changes. In addition, it should change when the substantive content of the concept map changes.", 0, java.lang.Integer.MAX_VALUE, date));
2348        childrenList.add(new Property("description", "string", "A free text natural language description of the use of the concept map - reason for definition, conditions of use, etc.", 0, java.lang.Integer.MAX_VALUE, description));
2349        childrenList.add(new Property("useContext", "CodeableConcept", "The content was developed with a focus and intent of supporting the contexts that are listed. These terms may be used to assist with indexing and searching of concept map instances.", 0, java.lang.Integer.MAX_VALUE, useContext));
2350        childrenList.add(new Property("requirements", "string", "Explains why this concept map is needed and why it has been constrained as it has.", 0, java.lang.Integer.MAX_VALUE, requirements));
2351        childrenList.add(new Property("copyright", "string", "A copyright statement relating to the concept map and/or its contents.", 0, java.lang.Integer.MAX_VALUE, copyright));
2352        childrenList.add(new Property("source[x]", "uri|Reference(ValueSet|StructureDefinition)", "The source value set that specifies the concepts that are being mapped.", 0, java.lang.Integer.MAX_VALUE, source));
2353        childrenList.add(new Property("target[x]", "uri|Reference(ValueSet|StructureDefinition)", "The target value set provides context to 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, java.lang.Integer.MAX_VALUE, target));
2354        childrenList.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));
2355      }
2356
2357      @Override
2358      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2359        switch (hash) {
2360        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
2361        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : new Base[] {this.identifier}; // Identifier
2362        case 351608024: /*version*/ return this.version == null ? new Base[0] : new Base[] {this.version}; // StringType
2363        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
2364        case -892481550: /*status*/ return this.status == null ? new Base[0] : new Base[] {this.status}; // Enumeration<ConformanceResourceStatus>
2365        case -404562712: /*experimental*/ return this.experimental == null ? new Base[0] : new Base[] {this.experimental}; // BooleanType
2366        case 1447404028: /*publisher*/ return this.publisher == null ? new Base[0] : new Base[] {this.publisher}; // StringType
2367        case 951526432: /*contact*/ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ConceptMapContactComponent
2368        case 3076014: /*date*/ return this.date == null ? new Base[0] : new Base[] {this.date}; // DateTimeType
2369        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
2370        case -669707736: /*useContext*/ return this.useContext == null ? new Base[0] : this.useContext.toArray(new Base[this.useContext.size()]); // CodeableConcept
2371        case -1619874672: /*requirements*/ return this.requirements == null ? new Base[0] : new Base[] {this.requirements}; // StringType
2372        case 1522889671: /*copyright*/ return this.copyright == null ? new Base[0] : new Base[] {this.copyright}; // StringType
2373        case -896505829: /*source*/ return this.source == null ? new Base[0] : new Base[] {this.source}; // Type
2374        case -880905839: /*target*/ return this.target == null ? new Base[0] : new Base[] {this.target}; // Type
2375        case -1662836996: /*element*/ return this.element == null ? new Base[0] : this.element.toArray(new Base[this.element.size()]); // SourceElementComponent
2376        default: return super.getProperty(hash, name, checkValid);
2377        }
2378
2379      }
2380
2381      @Override
2382      public void setProperty(int hash, String name, Base value) throws FHIRException {
2383        switch (hash) {
2384        case 116079: // url
2385          this.url = castToUri(value); // UriType
2386          break;
2387        case -1618432855: // identifier
2388          this.identifier = castToIdentifier(value); // Identifier
2389          break;
2390        case 351608024: // version
2391          this.version = castToString(value); // StringType
2392          break;
2393        case 3373707: // name
2394          this.name = castToString(value); // StringType
2395          break;
2396        case -892481550: // status
2397          this.status = new ConformanceResourceStatusEnumFactory().fromType(value); // Enumeration<ConformanceResourceStatus>
2398          break;
2399        case -404562712: // experimental
2400          this.experimental = castToBoolean(value); // BooleanType
2401          break;
2402        case 1447404028: // publisher
2403          this.publisher = castToString(value); // StringType
2404          break;
2405        case 951526432: // contact
2406          this.getContact().add((ConceptMapContactComponent) value); // ConceptMapContactComponent
2407          break;
2408        case 3076014: // date
2409          this.date = castToDateTime(value); // DateTimeType
2410          break;
2411        case -1724546052: // description
2412          this.description = castToString(value); // StringType
2413          break;
2414        case -669707736: // useContext
2415          this.getUseContext().add(castToCodeableConcept(value)); // CodeableConcept
2416          break;
2417        case -1619874672: // requirements
2418          this.requirements = castToString(value); // StringType
2419          break;
2420        case 1522889671: // copyright
2421          this.copyright = castToString(value); // StringType
2422          break;
2423        case -896505829: // source
2424          this.source = (Type) value; // Type
2425          break;
2426        case -880905839: // target
2427          this.target = (Type) value; // Type
2428          break;
2429        case -1662836996: // element
2430          this.getElement().add((SourceElementComponent) value); // SourceElementComponent
2431          break;
2432        default: super.setProperty(hash, name, value);
2433        }
2434
2435      }
2436
2437      @Override
2438      public void setProperty(String name, Base value) throws FHIRException {
2439        if (name.equals("url"))
2440          this.url = castToUri(value); // UriType
2441        else if (name.equals("identifier"))
2442          this.identifier = castToIdentifier(value); // Identifier
2443        else if (name.equals("version"))
2444          this.version = castToString(value); // StringType
2445        else if (name.equals("name"))
2446          this.name = castToString(value); // StringType
2447        else if (name.equals("status"))
2448          this.status = new ConformanceResourceStatusEnumFactory().fromType(value); // Enumeration<ConformanceResourceStatus>
2449        else if (name.equals("experimental"))
2450          this.experimental = castToBoolean(value); // BooleanType
2451        else if (name.equals("publisher"))
2452          this.publisher = castToString(value); // StringType
2453        else if (name.equals("contact"))
2454          this.getContact().add((ConceptMapContactComponent) value);
2455        else if (name.equals("date"))
2456          this.date = castToDateTime(value); // DateTimeType
2457        else if (name.equals("description"))
2458          this.description = castToString(value); // StringType
2459        else if (name.equals("useContext"))
2460          this.getUseContext().add(castToCodeableConcept(value));
2461        else if (name.equals("requirements"))
2462          this.requirements = castToString(value); // StringType
2463        else if (name.equals("copyright"))
2464          this.copyright = castToString(value); // StringType
2465        else if (name.equals("source[x]"))
2466          this.source = (Type) value; // Type
2467        else if (name.equals("target[x]"))
2468          this.target = (Type) value; // Type
2469        else if (name.equals("element"))
2470          this.getElement().add((SourceElementComponent) value);
2471        else
2472          super.setProperty(name, value);
2473      }
2474
2475      @Override
2476      public Base makeProperty(int hash, String name) throws FHIRException {
2477        switch (hash) {
2478        case 116079: throw new FHIRException("Cannot make property url as it is not a complex type"); // UriType
2479        case -1618432855:  return getIdentifier(); // Identifier
2480        case 351608024: throw new FHIRException("Cannot make property version as it is not a complex type"); // StringType
2481        case 3373707: throw new FHIRException("Cannot make property name as it is not a complex type"); // StringType
2482        case -892481550: throw new FHIRException("Cannot make property status as it is not a complex type"); // Enumeration<ConformanceResourceStatus>
2483        case -404562712: throw new FHIRException("Cannot make property experimental as it is not a complex type"); // BooleanType
2484        case 1447404028: throw new FHIRException("Cannot make property publisher as it is not a complex type"); // StringType
2485        case 951526432:  return addContact(); // ConceptMapContactComponent
2486        case 3076014: throw new FHIRException("Cannot make property date as it is not a complex type"); // DateTimeType
2487        case -1724546052: throw new FHIRException("Cannot make property description as it is not a complex type"); // StringType
2488        case -669707736:  return addUseContext(); // CodeableConcept
2489        case -1619874672: throw new FHIRException("Cannot make property requirements as it is not a complex type"); // StringType
2490        case 1522889671: throw new FHIRException("Cannot make property copyright as it is not a complex type"); // StringType
2491        case -1698413947:  return getSource(); // Type
2492        case -815579825:  return getTarget(); // Type
2493        case -1662836996:  return addElement(); // SourceElementComponent
2494        default: return super.makeProperty(hash, name);
2495        }
2496
2497      }
2498
2499      @Override
2500      public Base addChild(String name) throws FHIRException {
2501        if (name.equals("url")) {
2502          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.url");
2503        }
2504        else if (name.equals("identifier")) {
2505          this.identifier = new Identifier();
2506          return this.identifier;
2507        }
2508        else if (name.equals("version")) {
2509          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.version");
2510        }
2511        else if (name.equals("name")) {
2512          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.name");
2513        }
2514        else if (name.equals("status")) {
2515          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.status");
2516        }
2517        else if (name.equals("experimental")) {
2518          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.experimental");
2519        }
2520        else if (name.equals("publisher")) {
2521          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.publisher");
2522        }
2523        else if (name.equals("contact")) {
2524          return addContact();
2525        }
2526        else if (name.equals("date")) {
2527          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.date");
2528        }
2529        else if (name.equals("description")) {
2530          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.description");
2531        }
2532        else if (name.equals("useContext")) {
2533          return addUseContext();
2534        }
2535        else if (name.equals("requirements")) {
2536          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.requirements");
2537        }
2538        else if (name.equals("copyright")) {
2539          throw new FHIRException("Cannot call addChild on a primitive type ConceptMap.copyright");
2540        }
2541        else if (name.equals("sourceUri")) {
2542          this.source = new UriType();
2543          return this.source;
2544        }
2545        else if (name.equals("sourceReference")) {
2546          this.source = new Reference();
2547          return this.source;
2548        }
2549        else if (name.equals("targetUri")) {
2550          this.target = new UriType();
2551          return this.target;
2552        }
2553        else if (name.equals("targetReference")) {
2554          this.target = new Reference();
2555          return this.target;
2556        }
2557        else if (name.equals("element")) {
2558          return addElement();
2559        }
2560        else
2561          return super.addChild(name);
2562      }
2563
2564  public String fhirType() {
2565    return "ConceptMap";
2566
2567  }
2568
2569      public ConceptMap copy() {
2570        ConceptMap dst = new ConceptMap();
2571        copyValues(dst);
2572        dst.url = url == null ? null : url.copy();
2573        dst.identifier = identifier == null ? null : identifier.copy();
2574        dst.version = version == null ? null : version.copy();
2575        dst.name = name == null ? null : name.copy();
2576        dst.status = status == null ? null : status.copy();
2577        dst.experimental = experimental == null ? null : experimental.copy();
2578        dst.publisher = publisher == null ? null : publisher.copy();
2579        if (contact != null) {
2580          dst.contact = new ArrayList<ConceptMapContactComponent>();
2581          for (ConceptMapContactComponent i : contact)
2582            dst.contact.add(i.copy());
2583        };
2584        dst.date = date == null ? null : date.copy();
2585        dst.description = description == null ? null : description.copy();
2586        if (useContext != null) {
2587          dst.useContext = new ArrayList<CodeableConcept>();
2588          for (CodeableConcept i : useContext)
2589            dst.useContext.add(i.copy());
2590        };
2591        dst.requirements = requirements == null ? null : requirements.copy();
2592        dst.copyright = copyright == null ? null : copyright.copy();
2593        dst.source = source == null ? null : source.copy();
2594        dst.target = target == null ? null : target.copy();
2595        if (element != null) {
2596          dst.element = new ArrayList<SourceElementComponent>();
2597          for (SourceElementComponent i : element)
2598            dst.element.add(i.copy());
2599        };
2600        return dst;
2601      }
2602
2603      protected ConceptMap typedCopy() {
2604        return copy();
2605      }
2606
2607      @Override
2608      public boolean equalsDeep(Base other) {
2609        if (!super.equalsDeep(other))
2610          return false;
2611        if (!(other instanceof ConceptMap))
2612          return false;
2613        ConceptMap o = (ConceptMap) other;
2614        return compareDeep(url, o.url, true) && compareDeep(identifier, o.identifier, true) && compareDeep(version, o.version, true)
2615           && compareDeep(name, o.name, true) && compareDeep(status, o.status, true) && compareDeep(experimental, o.experimental, true)
2616           && compareDeep(publisher, o.publisher, true) && compareDeep(contact, o.contact, true) && compareDeep(date, o.date, true)
2617           && compareDeep(description, o.description, true) && compareDeep(useContext, o.useContext, true)
2618           && compareDeep(requirements, o.requirements, true) && compareDeep(copyright, o.copyright, true)
2619           && compareDeep(source, o.source, true) && compareDeep(target, o.target, true) && compareDeep(element, o.element, true)
2620          ;
2621      }
2622
2623      @Override
2624      public boolean equalsShallow(Base other) {
2625        if (!super.equalsShallow(other))
2626          return false;
2627        if (!(other instanceof ConceptMap))
2628          return false;
2629        ConceptMap o = (ConceptMap) other;
2630        return compareValues(url, o.url, true) && compareValues(version, o.version, true) && compareValues(name, o.name, true)
2631           && compareValues(status, o.status, true) && compareValues(experimental, o.experimental, true) && compareValues(publisher, o.publisher, true)
2632           && compareValues(date, o.date, true) && compareValues(description, o.description, true) && compareValues(requirements, o.requirements, true)
2633           && compareValues(copyright, o.copyright, true);
2634      }
2635
2636      public boolean isEmpty() {
2637        return super.isEmpty() && (url == null || url.isEmpty()) && (identifier == null || identifier.isEmpty())
2638           && (version == null || version.isEmpty()) && (name == null || name.isEmpty()) && (status == null || status.isEmpty())
2639           && (experimental == null || experimental.isEmpty()) && (publisher == null || publisher.isEmpty())
2640           && (contact == null || contact.isEmpty()) && (date == null || date.isEmpty()) && (description == null || description.isEmpty())
2641           && (useContext == null || useContext.isEmpty()) && (requirements == null || requirements.isEmpty())
2642           && (copyright == null || copyright.isEmpty()) && (source == null || source.isEmpty()) && (target == null || target.isEmpty())
2643           && (element == null || element.isEmpty());
2644      }
2645
2646  @Override
2647  public ResourceType getResourceType() {
2648    return ResourceType.ConceptMap;
2649   }
2650
2651 /**
2652   * Search parameter: <b>source-system</b>
2653   * <p>
2654   * Description: <b>Code System (if value set crosses code systems)</b><br>
2655   * Type: <b>uri</b><br>
2656   * Path: <b>ConceptMap.element.system</b><br>
2657   * </p>
2658   */
2659  @SearchParamDefinition(name="source-system", path="ConceptMap.element.system", description="Code System (if value set crosses code systems)", type="uri" )
2660  public static final String SP_SOURCE_SYSTEM = "source-system";
2661 /**
2662   * <b>Fluent Client</b> search parameter constant for <b>source-system</b>
2663   * <p>
2664   * Description: <b>Code System (if value set crosses code systems)</b><br>
2665   * Type: <b>uri</b><br>
2666   * Path: <b>ConceptMap.element.system</b><br>
2667   * </p>
2668   */
2669  public static final ca.uhn.fhir.rest.gclient.UriClientParam SOURCE_SYSTEM = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_SOURCE_SYSTEM);
2670
2671 /**
2672   * Search parameter: <b>dependson</b>
2673   * <p>
2674   * Description: <b>Reference to element/field/ValueSet mapping depends on</b><br>
2675   * Type: <b>uri</b><br>
2676   * Path: <b>ConceptMap.element.target.dependsOn.element</b><br>
2677   * </p>
2678   */
2679  @SearchParamDefinition(name="dependson", path="ConceptMap.element.target.dependsOn.element", description="Reference to element/field/ValueSet mapping depends on", type="uri" )
2680  public static final String SP_DEPENDSON = "dependson";
2681 /**
2682   * <b>Fluent Client</b> search parameter constant for <b>dependson</b>
2683   * <p>
2684   * Description: <b>Reference to element/field/ValueSet mapping depends on</b><br>
2685   * Type: <b>uri</b><br>
2686   * Path: <b>ConceptMap.element.target.dependsOn.element</b><br>
2687   * </p>
2688   */
2689  public static final ca.uhn.fhir.rest.gclient.UriClientParam DEPENDSON = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_DEPENDSON);
2690
2691 /**
2692   * Search parameter: <b>status</b>
2693   * <p>
2694   * Description: <b>Status of the concept map</b><br>
2695   * Type: <b>token</b><br>
2696   * Path: <b>ConceptMap.status</b><br>
2697   * </p>
2698   */
2699  @SearchParamDefinition(name="status", path="ConceptMap.status", description="Status of the concept map", type="token" )
2700  public static final String SP_STATUS = "status";
2701 /**
2702   * <b>Fluent Client</b> search parameter constant for <b>status</b>
2703   * <p>
2704   * Description: <b>Status of the concept map</b><br>
2705   * Type: <b>token</b><br>
2706   * Path: <b>ConceptMap.status</b><br>
2707   * </p>
2708   */
2709  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_STATUS);
2710
2711 /**
2712   * Search parameter: <b>date</b>
2713   * <p>
2714   * Description: <b>The concept map publication date</b><br>
2715   * Type: <b>date</b><br>
2716   * Path: <b>ConceptMap.date</b><br>
2717   * </p>
2718   */
2719  @SearchParamDefinition(name="date", path="ConceptMap.date", description="The concept map publication date", type="date" )
2720  public static final String SP_DATE = "date";
2721 /**
2722   * <b>Fluent Client</b> search parameter constant for <b>date</b>
2723   * <p>
2724   * Description: <b>The concept map publication date</b><br>
2725   * Type: <b>date</b><br>
2726   * Path: <b>ConceptMap.date</b><br>
2727   * </p>
2728   */
2729  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_DATE);
2730
2731 /**
2732   * Search parameter: <b>url</b>
2733   * <p>
2734   * Description: <b>The URL of the concept map</b><br>
2735   * Type: <b>uri</b><br>
2736   * Path: <b>ConceptMap.url</b><br>
2737   * </p>
2738   */
2739  @SearchParamDefinition(name="url", path="ConceptMap.url", description="The URL of the concept map", type="uri" )
2740  public static final String SP_URL = "url";
2741 /**
2742   * <b>Fluent Client</b> search parameter constant for <b>url</b>
2743   * <p>
2744   * Description: <b>The URL of the concept map</b><br>
2745   * Type: <b>uri</b><br>
2746   * Path: <b>ConceptMap.url</b><br>
2747   * </p>
2748   */
2749  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
2750
2751 /**
2752   * Search parameter: <b>target-code</b>
2753   * <p>
2754   * Description: <b>Code that identifies the target element</b><br>
2755   * Type: <b>token</b><br>
2756   * Path: <b>ConceptMap.element.target.code</b><br>
2757   * </p>
2758   */
2759  @SearchParamDefinition(name="target-code", path="ConceptMap.element.target.code", description="Code that identifies the target element", type="token" )
2760  public static final String SP_TARGET_CODE = "target-code";
2761 /**
2762   * <b>Fluent Client</b> search parameter constant for <b>target-code</b>
2763   * <p>
2764   * Description: <b>Code that identifies the target element</b><br>
2765   * Type: <b>token</b><br>
2766   * Path: <b>ConceptMap.element.target.code</b><br>
2767   * </p>
2768   */
2769  public static final ca.uhn.fhir.rest.gclient.TokenClientParam TARGET_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_TARGET_CODE);
2770
2771 /**
2772   * Search parameter: <b>version</b>
2773   * <p>
2774   * Description: <b>The version identifier of the concept map</b><br>
2775   * Type: <b>token</b><br>
2776   * Path: <b>ConceptMap.version</b><br>
2777   * </p>
2778   */
2779  @SearchParamDefinition(name="version", path="ConceptMap.version", description="The version identifier of the concept map", type="token" )
2780  public static final String SP_VERSION = "version";
2781 /**
2782   * <b>Fluent Client</b> search parameter constant for <b>version</b>
2783   * <p>
2784   * Description: <b>The version identifier of the concept map</b><br>
2785   * Type: <b>token</b><br>
2786   * Path: <b>ConceptMap.version</b><br>
2787   * </p>
2788   */
2789  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_VERSION);
2790
2791 /**
2792   * Search parameter: <b>publisher</b>
2793   * <p>
2794   * Description: <b>Name of the publisher of the concept map</b><br>
2795   * Type: <b>string</b><br>
2796   * Path: <b>ConceptMap.publisher</b><br>
2797   * </p>
2798   */
2799  @SearchParamDefinition(name="publisher", path="ConceptMap.publisher", description="Name of the publisher of the concept map", type="string" )
2800  public static final String SP_PUBLISHER = "publisher";
2801 /**
2802   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
2803   * <p>
2804   * Description: <b>Name of the publisher of the concept map</b><br>
2805   * Type: <b>string</b><br>
2806   * Path: <b>ConceptMap.publisher</b><br>
2807   * </p>
2808   */
2809  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_PUBLISHER);
2810
2811 /**
2812   * Search parameter: <b>product</b>
2813   * <p>
2814   * Description: <b>Reference to element/field/ValueSet mapping depends on</b><br>
2815   * Type: <b>uri</b><br>
2816   * Path: <b>ConceptMap.element.target.product.element</b><br>
2817   * </p>
2818   */
2819  @SearchParamDefinition(name="product", path="ConceptMap.element.target.product.element", description="Reference to element/field/ValueSet mapping depends on", type="uri" )
2820  public static final String SP_PRODUCT = "product";
2821 /**
2822   * <b>Fluent Client</b> search parameter constant for <b>product</b>
2823   * <p>
2824   * Description: <b>Reference to element/field/ValueSet mapping depends on</b><br>
2825   * Type: <b>uri</b><br>
2826   * Path: <b>ConceptMap.element.target.product.element</b><br>
2827   * </p>
2828   */
2829  public static final ca.uhn.fhir.rest.gclient.UriClientParam PRODUCT = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_PRODUCT);
2830
2831 /**
2832   * Search parameter: <b>source-code</b>
2833   * <p>
2834   * Description: <b>Identifies element being mapped</b><br>
2835   * Type: <b>token</b><br>
2836   * Path: <b>ConceptMap.element.code</b><br>
2837   * </p>
2838   */
2839  @SearchParamDefinition(name="source-code", path="ConceptMap.element.code", description="Identifies element being mapped", type="token" )
2840  public static final String SP_SOURCE_CODE = "source-code";
2841 /**
2842   * <b>Fluent Client</b> search parameter constant for <b>source-code</b>
2843   * <p>
2844   * Description: <b>Identifies element being mapped</b><br>
2845   * Type: <b>token</b><br>
2846   * Path: <b>ConceptMap.element.code</b><br>
2847   * </p>
2848   */
2849  public static final ca.uhn.fhir.rest.gclient.TokenClientParam SOURCE_CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_SOURCE_CODE);
2850
2851 /**
2852   * Search parameter: <b>source-uri</b>
2853   * <p>
2854   * Description: <b>Identifies the source of the concepts which are being mapped</b><br>
2855   * Type: <b>reference</b><br>
2856   * Path: <b>ConceptMap.sourceUri</b><br>
2857   * </p>
2858   */
2859  @SearchParamDefinition(name="source-uri", path="ConceptMap.source.as(Uri)", description="Identifies the source of the concepts which are being mapped", type="reference" )
2860  public static final String SP_SOURCE_URI = "source-uri";
2861 /**
2862   * <b>Fluent Client</b> search parameter constant for <b>source-uri</b>
2863   * <p>
2864   * Description: <b>Identifies the source of the concepts which are being mapped</b><br>
2865   * Type: <b>reference</b><br>
2866   * Path: <b>ConceptMap.sourceUri</b><br>
2867   * </p>
2868   */
2869  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SOURCE_URI = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SOURCE_URI);
2870
2871/**
2872   * Constant for fluent queries to be used to add include statements. Specifies
2873   * the path value of "<b>ConceptMap:source-uri</b>".
2874   */
2875  public static final ca.uhn.fhir.model.api.Include INCLUDE_SOURCE_URI = new ca.uhn.fhir.model.api.Include("ConceptMap:source-uri").toLocked();
2876
2877 /**
2878   * Search parameter: <b>source</b>
2879   * <p>
2880   * Description: <b>Identifies the source of the concepts which are being mapped</b><br>
2881   * Type: <b>reference</b><br>
2882   * Path: <b>ConceptMap.sourceReference</b><br>
2883   * </p>
2884   */
2885  @SearchParamDefinition(name="source", path="ConceptMap.source.as(Reference)", description="Identifies the source of the concepts which are being mapped", type="reference" )
2886  public static final String SP_SOURCE = "source";
2887 /**
2888   * <b>Fluent Client</b> search parameter constant for <b>source</b>
2889   * <p>
2890   * Description: <b>Identifies the source of the concepts which are being mapped</b><br>
2891   * Type: <b>reference</b><br>
2892   * Path: <b>ConceptMap.sourceReference</b><br>
2893   * </p>
2894   */
2895  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SOURCE = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SOURCE);
2896
2897/**
2898   * Constant for fluent queries to be used to add include statements. Specifies
2899   * the path value of "<b>ConceptMap:source</b>".
2900   */
2901  public static final ca.uhn.fhir.model.api.Include INCLUDE_SOURCE = new ca.uhn.fhir.model.api.Include("ConceptMap:source").toLocked();
2902
2903 /**
2904   * Search parameter: <b>description</b>
2905   * <p>
2906   * Description: <b>Text search in the description of the concept map</b><br>
2907   * Type: <b>string</b><br>
2908   * Path: <b>ConceptMap.description</b><br>
2909   * </p>
2910   */
2911  @SearchParamDefinition(name="description", path="ConceptMap.description", description="Text search in the description of the concept map", type="string" )
2912  public static final String SP_DESCRIPTION = "description";
2913 /**
2914   * <b>Fluent Client</b> search parameter constant for <b>description</b>
2915   * <p>
2916   * Description: <b>Text search in the description of the concept map</b><br>
2917   * Type: <b>string</b><br>
2918   * Path: <b>ConceptMap.description</b><br>
2919   * </p>
2920   */
2921  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_DESCRIPTION);
2922
2923 /**
2924   * Search parameter: <b>name</b>
2925   * <p>
2926   * Description: <b>Name of the concept map</b><br>
2927   * Type: <b>string</b><br>
2928   * Path: <b>ConceptMap.name</b><br>
2929   * </p>
2930   */
2931  @SearchParamDefinition(name="name", path="ConceptMap.name", description="Name of the concept map", type="string" )
2932  public static final String SP_NAME = "name";
2933 /**
2934   * <b>Fluent Client</b> search parameter constant for <b>name</b>
2935   * <p>
2936   * Description: <b>Name of the concept map</b><br>
2937   * Type: <b>string</b><br>
2938   * Path: <b>ConceptMap.name</b><br>
2939   * </p>
2940   */
2941  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(SP_NAME);
2942
2943 /**
2944   * Search parameter: <b>context</b>
2945   * <p>
2946   * Description: <b>A use context assigned to the concept map</b><br>
2947   * Type: <b>token</b><br>
2948   * Path: <b>ConceptMap.useContext</b><br>
2949   * </p>
2950   */
2951  @SearchParamDefinition(name="context", path="ConceptMap.useContext", description="A use context assigned to the concept map", type="token" )
2952  public static final String SP_CONTEXT = "context";
2953 /**
2954   * <b>Fluent Client</b> search parameter constant for <b>context</b>
2955   * <p>
2956   * Description: <b>A use context assigned to the concept map</b><br>
2957   * Type: <b>token</b><br>
2958   * Path: <b>ConceptMap.useContext</b><br>
2959   * </p>
2960   */
2961  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CONTEXT);
2962
2963 /**
2964   * Search parameter: <b>target</b>
2965   * <p>
2966   * Description: <b>Provides context to the mappings</b><br>
2967   * Type: <b>reference</b><br>
2968   * Path: <b>ConceptMap.target[x]</b><br>
2969   * </p>
2970   */
2971  @SearchParamDefinition(name="target", path="ConceptMap.target", description="Provides context to the mappings", type="reference" )
2972  public static final String SP_TARGET = "target";
2973 /**
2974   * <b>Fluent Client</b> search parameter constant for <b>target</b>
2975   * <p>
2976   * Description: <b>Provides context to the mappings</b><br>
2977   * Type: <b>reference</b><br>
2978   * Path: <b>ConceptMap.target[x]</b><br>
2979   * </p>
2980   */
2981  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam TARGET = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_TARGET);
2982
2983/**
2984   * Constant for fluent queries to be used to add include statements. Specifies
2985   * the path value of "<b>ConceptMap:target</b>".
2986   */
2987  public static final ca.uhn.fhir.model.api.Include INCLUDE_TARGET = new ca.uhn.fhir.model.api.Include("ConceptMap:target").toLocked();
2988
2989 /**
2990   * Search parameter: <b>identifier</b>
2991   * <p>
2992   * Description: <b>Additional identifier for the concept map</b><br>
2993   * Type: <b>token</b><br>
2994   * Path: <b>ConceptMap.identifier</b><br>
2995   * </p>
2996   */
2997  @SearchParamDefinition(name="identifier", path="ConceptMap.identifier", description="Additional identifier for the concept map", type="token" )
2998  public static final String SP_IDENTIFIER = "identifier";
2999 /**
3000   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3001   * <p>
3002   * Description: <b>Additional identifier for the concept map</b><br>
3003   * Type: <b>token</b><br>
3004   * Path: <b>ConceptMap.identifier</b><br>
3005   * </p>
3006   */
3007  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
3008
3009 /**
3010   * Search parameter: <b>target-system</b>
3011   * <p>
3012   * Description: <b>System of the target (if necessary)</b><br>
3013   * Type: <b>uri</b><br>
3014   * Path: <b>ConceptMap.element.target.system</b><br>
3015   * </p>
3016   */
3017  @SearchParamDefinition(name="target-system", path="ConceptMap.element.target.system", description="System of the target (if necessary)", type="uri" )
3018  public static final String SP_TARGET_SYSTEM = "target-system";
3019 /**
3020   * <b>Fluent Client</b> search parameter constant for <b>target-system</b>
3021   * <p>
3022   * Description: <b>System of the target (if necessary)</b><br>
3023   * Type: <b>uri</b><br>
3024   * Path: <b>ConceptMap.element.target.system</b><br>
3025   * </p>
3026   */
3027  public static final ca.uhn.fhir.rest.gclient.UriClientParam TARGET_SYSTEM = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_TARGET_SYSTEM);
3028
3029
3030}
3031