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