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