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