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 structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.
052 */
053@ResourceDef(name="TestScript", profile="http://hl7.org/fhir/StructureDefinition/TestScript")
054public class TestScript extends CanonicalResource {
055
056    public enum AssertionDirectionType {
057        /**
058         * The assertion is evaluated on the response. This is the default value.
059         */
060        RESPONSE, 
061        /**
062         * The assertion is evaluated on the request.
063         */
064        REQUEST, 
065        /**
066         * added to help the parsers with the generic types
067         */
068        NULL;
069        public static AssertionDirectionType fromCode(String codeString) throws FHIRException {
070            if (codeString == null || "".equals(codeString))
071                return null;
072        if ("response".equals(codeString))
073          return RESPONSE;
074        if ("request".equals(codeString))
075          return REQUEST;
076        if (Configuration.isAcceptInvalidEnums())
077          return null;
078        else
079          throw new FHIRException("Unknown AssertionDirectionType code '"+codeString+"'");
080        }
081        public String toCode() {
082          switch (this) {
083            case RESPONSE: return "response";
084            case REQUEST: return "request";
085            case NULL: return null;
086            default: return "?";
087          }
088        }
089        public String getSystem() {
090          switch (this) {
091            case RESPONSE: return "http://hl7.org/fhir/assert-direction-codes";
092            case REQUEST: return "http://hl7.org/fhir/assert-direction-codes";
093            case NULL: return null;
094            default: return "?";
095          }
096        }
097        public String getDefinition() {
098          switch (this) {
099            case RESPONSE: return "The assertion is evaluated on the response. This is the default value.";
100            case REQUEST: return "The assertion is evaluated on the request.";
101            case NULL: return null;
102            default: return "?";
103          }
104        }
105        public String getDisplay() {
106          switch (this) {
107            case RESPONSE: return "response";
108            case REQUEST: return "request";
109            case NULL: return null;
110            default: return "?";
111          }
112        }
113    }
114
115  public static class AssertionDirectionTypeEnumFactory implements EnumFactory<AssertionDirectionType> {
116    public AssertionDirectionType fromCode(String codeString) throws IllegalArgumentException {
117      if (codeString == null || "".equals(codeString))
118            if (codeString == null || "".equals(codeString))
119                return null;
120        if ("response".equals(codeString))
121          return AssertionDirectionType.RESPONSE;
122        if ("request".equals(codeString))
123          return AssertionDirectionType.REQUEST;
124        throw new IllegalArgumentException("Unknown AssertionDirectionType code '"+codeString+"'");
125        }
126        public Enumeration<AssertionDirectionType> fromType(PrimitiveType<?> code) throws FHIRException {
127          if (code == null)
128            return null;
129          if (code.isEmpty())
130            return new Enumeration<AssertionDirectionType>(this, AssertionDirectionType.NULL, code);
131          String codeString = ((PrimitiveType) code).asStringValue();
132          if (codeString == null || "".equals(codeString))
133            return new Enumeration<AssertionDirectionType>(this, AssertionDirectionType.NULL, code);
134        if ("response".equals(codeString))
135          return new Enumeration<AssertionDirectionType>(this, AssertionDirectionType.RESPONSE, code);
136        if ("request".equals(codeString))
137          return new Enumeration<AssertionDirectionType>(this, AssertionDirectionType.REQUEST, code);
138        throw new FHIRException("Unknown AssertionDirectionType code '"+codeString+"'");
139        }
140    public String toCode(AssertionDirectionType code) {
141       if (code == AssertionDirectionType.NULL)
142           return null;
143       if (code == AssertionDirectionType.RESPONSE)
144        return "response";
145      if (code == AssertionDirectionType.REQUEST)
146        return "request";
147      return "?";
148   }
149    public String toSystem(AssertionDirectionType code) {
150      return code.getSystem();
151      }
152    }
153
154    public enum AssertionManualCompletionType {
155        /**
156         * Mark the currently waiting test failed and proceed with the next assert if the stopTestOnFail is false or the next test in the TestScript if the stopTestOnFail is true.
157         */
158        FAIL, 
159        /**
160         * Mark the currently waiting test passed (if the test is not failed already) and proceed with the next action in the TestScript.
161         */
162        PASS, 
163        /**
164         * Mark this assert as skipped and proceed with the next action in the TestScript.
165         */
166        SKIP, 
167        /**
168         * Stop execution of this TestScript. The overall status of this TestScript is evaluated based on the status of the completed tests.
169         */
170        STOP, 
171        /**
172         * added to help the parsers with the generic types
173         */
174        NULL;
175        public static AssertionManualCompletionType fromCode(String codeString) throws FHIRException {
176            if (codeString == null || "".equals(codeString))
177                return null;
178        if ("fail".equals(codeString))
179          return FAIL;
180        if ("pass".equals(codeString))
181          return PASS;
182        if ("skip".equals(codeString))
183          return SKIP;
184        if ("stop".equals(codeString))
185          return STOP;
186        if (Configuration.isAcceptInvalidEnums())
187          return null;
188        else
189          throw new FHIRException("Unknown AssertionManualCompletionType code '"+codeString+"'");
190        }
191        public String toCode() {
192          switch (this) {
193            case FAIL: return "fail";
194            case PASS: return "pass";
195            case SKIP: return "skip";
196            case STOP: return "stop";
197            case NULL: return null;
198            default: return "?";
199          }
200        }
201        public String getSystem() {
202          switch (this) {
203            case FAIL: return "http://hl7.org/fhir/assert-manual-completion-codes";
204            case PASS: return "http://hl7.org/fhir/assert-manual-completion-codes";
205            case SKIP: return "http://hl7.org/fhir/assert-manual-completion-codes";
206            case STOP: return "http://hl7.org/fhir/assert-manual-completion-codes";
207            case NULL: return null;
208            default: return "?";
209          }
210        }
211        public String getDefinition() {
212          switch (this) {
213            case FAIL: return "Mark the currently waiting test failed and proceed with the next assert if the stopTestOnFail is false or the next test in the TestScript if the stopTestOnFail is true.";
214            case PASS: return "Mark the currently waiting test passed (if the test is not failed already) and proceed with the next action in the TestScript.";
215            case SKIP: return "Mark this assert as skipped and proceed with the next action in the TestScript.";
216            case STOP: return "Stop execution of this TestScript. The overall status of this TestScript is evaluated based on the status of the completed tests.";
217            case NULL: return null;
218            default: return "?";
219          }
220        }
221        public String getDisplay() {
222          switch (this) {
223            case FAIL: return "Fail";
224            case PASS: return "Pass";
225            case SKIP: return "Skip";
226            case STOP: return "Stop";
227            case NULL: return null;
228            default: return "?";
229          }
230        }
231    }
232
233  public static class AssertionManualCompletionTypeEnumFactory implements EnumFactory<AssertionManualCompletionType> {
234    public AssertionManualCompletionType fromCode(String codeString) throws IllegalArgumentException {
235      if (codeString == null || "".equals(codeString))
236            if (codeString == null || "".equals(codeString))
237                return null;
238        if ("fail".equals(codeString))
239          return AssertionManualCompletionType.FAIL;
240        if ("pass".equals(codeString))
241          return AssertionManualCompletionType.PASS;
242        if ("skip".equals(codeString))
243          return AssertionManualCompletionType.SKIP;
244        if ("stop".equals(codeString))
245          return AssertionManualCompletionType.STOP;
246        throw new IllegalArgumentException("Unknown AssertionManualCompletionType code '"+codeString+"'");
247        }
248        public Enumeration<AssertionManualCompletionType> fromType(PrimitiveType<?> code) throws FHIRException {
249          if (code == null)
250            return null;
251          if (code.isEmpty())
252            return new Enumeration<AssertionManualCompletionType>(this, AssertionManualCompletionType.NULL, code);
253          String codeString = ((PrimitiveType) code).asStringValue();
254          if (codeString == null || "".equals(codeString))
255            return new Enumeration<AssertionManualCompletionType>(this, AssertionManualCompletionType.NULL, code);
256        if ("fail".equals(codeString))
257          return new Enumeration<AssertionManualCompletionType>(this, AssertionManualCompletionType.FAIL, code);
258        if ("pass".equals(codeString))
259          return new Enumeration<AssertionManualCompletionType>(this, AssertionManualCompletionType.PASS, code);
260        if ("skip".equals(codeString))
261          return new Enumeration<AssertionManualCompletionType>(this, AssertionManualCompletionType.SKIP, code);
262        if ("stop".equals(codeString))
263          return new Enumeration<AssertionManualCompletionType>(this, AssertionManualCompletionType.STOP, code);
264        throw new FHIRException("Unknown AssertionManualCompletionType code '"+codeString+"'");
265        }
266    public String toCode(AssertionManualCompletionType code) {
267       if (code == AssertionManualCompletionType.NULL)
268           return null;
269       if (code == AssertionManualCompletionType.FAIL)
270        return "fail";
271      if (code == AssertionManualCompletionType.PASS)
272        return "pass";
273      if (code == AssertionManualCompletionType.SKIP)
274        return "skip";
275      if (code == AssertionManualCompletionType.STOP)
276        return "stop";
277      return "?";
278   }
279    public String toSystem(AssertionManualCompletionType code) {
280      return code.getSystem();
281      }
282    }
283
284    public enum AssertionOperatorType {
285        /**
286         * Default value. Equals comparison.
287         */
288        EQUALS, 
289        /**
290         * Not equals comparison.
291         */
292        NOTEQUALS, 
293        /**
294         * Compare value within a known set of values.
295         */
296        IN, 
297        /**
298         * Compare value not within a known set of values.
299         */
300        NOTIN, 
301        /**
302         * Compare value to be greater than a known value.
303         */
304        GREATERTHAN, 
305        /**
306         * Compare value to be less than a known value.
307         */
308        LESSTHAN, 
309        /**
310         * Compare value is empty.
311         */
312        EMPTY, 
313        /**
314         * Compare value is not empty.
315         */
316        NOTEMPTY, 
317        /**
318         * Compare value string contains a known value.
319         */
320        CONTAINS, 
321        /**
322         * Compare value string does not contain a known value.
323         */
324        NOTCONTAINS, 
325        /**
326         * Evaluate the FHIRPath expression as a boolean condition.
327         */
328        EVAL, 
329        /**
330         * Manually evaluate the condition described by this assert. The test engine SHALL pause and provide an input mechanism to set the outcome of this assert to 'pass', 'fail', 'skip' or 'stop'.
331         */
332        MANUALEVAL, 
333        /**
334         * added to help the parsers with the generic types
335         */
336        NULL;
337        public static AssertionOperatorType fromCode(String codeString) throws FHIRException {
338            if (codeString == null || "".equals(codeString))
339                return null;
340        if ("equals".equals(codeString))
341          return EQUALS;
342        if ("notEquals".equals(codeString))
343          return NOTEQUALS;
344        if ("in".equals(codeString))
345          return IN;
346        if ("notIn".equals(codeString))
347          return NOTIN;
348        if ("greaterThan".equals(codeString))
349          return GREATERTHAN;
350        if ("lessThan".equals(codeString))
351          return LESSTHAN;
352        if ("empty".equals(codeString))
353          return EMPTY;
354        if ("notEmpty".equals(codeString))
355          return NOTEMPTY;
356        if ("contains".equals(codeString))
357          return CONTAINS;
358        if ("notContains".equals(codeString))
359          return NOTCONTAINS;
360        if ("eval".equals(codeString))
361          return EVAL;
362        if ("manualEval".equals(codeString))
363          return MANUALEVAL;
364        if (Configuration.isAcceptInvalidEnums())
365          return null;
366        else
367          throw new FHIRException("Unknown AssertionOperatorType code '"+codeString+"'");
368        }
369        public String toCode() {
370          switch (this) {
371            case EQUALS: return "equals";
372            case NOTEQUALS: return "notEquals";
373            case IN: return "in";
374            case NOTIN: return "notIn";
375            case GREATERTHAN: return "greaterThan";
376            case LESSTHAN: return "lessThan";
377            case EMPTY: return "empty";
378            case NOTEMPTY: return "notEmpty";
379            case CONTAINS: return "contains";
380            case NOTCONTAINS: return "notContains";
381            case EVAL: return "eval";
382            case MANUALEVAL: return "manualEval";
383            case NULL: return null;
384            default: return "?";
385          }
386        }
387        public String getSystem() {
388          switch (this) {
389            case EQUALS: return "http://hl7.org/fhir/assert-operator-codes";
390            case NOTEQUALS: return "http://hl7.org/fhir/assert-operator-codes";
391            case IN: return "http://hl7.org/fhir/assert-operator-codes";
392            case NOTIN: return "http://hl7.org/fhir/assert-operator-codes";
393            case GREATERTHAN: return "http://hl7.org/fhir/assert-operator-codes";
394            case LESSTHAN: return "http://hl7.org/fhir/assert-operator-codes";
395            case EMPTY: return "http://hl7.org/fhir/assert-operator-codes";
396            case NOTEMPTY: return "http://hl7.org/fhir/assert-operator-codes";
397            case CONTAINS: return "http://hl7.org/fhir/assert-operator-codes";
398            case NOTCONTAINS: return "http://hl7.org/fhir/assert-operator-codes";
399            case EVAL: return "http://hl7.org/fhir/assert-operator-codes";
400            case MANUALEVAL: return "http://hl7.org/fhir/assert-operator-codes";
401            case NULL: return null;
402            default: return "?";
403          }
404        }
405        public String getDefinition() {
406          switch (this) {
407            case EQUALS: return "Default value. Equals comparison.";
408            case NOTEQUALS: return "Not equals comparison.";
409            case IN: return "Compare value within a known set of values.";
410            case NOTIN: return "Compare value not within a known set of values.";
411            case GREATERTHAN: return "Compare value to be greater than a known value.";
412            case LESSTHAN: return "Compare value to be less than a known value.";
413            case EMPTY: return "Compare value is empty.";
414            case NOTEMPTY: return "Compare value is not empty.";
415            case CONTAINS: return "Compare value string contains a known value.";
416            case NOTCONTAINS: return "Compare value string does not contain a known value.";
417            case EVAL: return "Evaluate the FHIRPath expression as a boolean condition.";
418            case MANUALEVAL: return "Manually evaluate the condition described by this assert. The test engine SHALL pause and provide an input mechanism to set the outcome of this assert to 'pass', 'fail', 'skip' or 'stop'.";
419            case NULL: return null;
420            default: return "?";
421          }
422        }
423        public String getDisplay() {
424          switch (this) {
425            case EQUALS: return "equals";
426            case NOTEQUALS: return "notEquals";
427            case IN: return "in";
428            case NOTIN: return "notIn";
429            case GREATERTHAN: return "greaterThan";
430            case LESSTHAN: return "lessThan";
431            case EMPTY: return "empty";
432            case NOTEMPTY: return "notEmpty";
433            case CONTAINS: return "contains";
434            case NOTCONTAINS: return "notContains";
435            case EVAL: return "evaluate";
436            case MANUALEVAL: return "manualEvaluate";
437            case NULL: return null;
438            default: return "?";
439          }
440        }
441    }
442
443  public static class AssertionOperatorTypeEnumFactory implements EnumFactory<AssertionOperatorType> {
444    public AssertionOperatorType fromCode(String codeString) throws IllegalArgumentException {
445      if (codeString == null || "".equals(codeString))
446            if (codeString == null || "".equals(codeString))
447                return null;
448        if ("equals".equals(codeString))
449          return AssertionOperatorType.EQUALS;
450        if ("notEquals".equals(codeString))
451          return AssertionOperatorType.NOTEQUALS;
452        if ("in".equals(codeString))
453          return AssertionOperatorType.IN;
454        if ("notIn".equals(codeString))
455          return AssertionOperatorType.NOTIN;
456        if ("greaterThan".equals(codeString))
457          return AssertionOperatorType.GREATERTHAN;
458        if ("lessThan".equals(codeString))
459          return AssertionOperatorType.LESSTHAN;
460        if ("empty".equals(codeString))
461          return AssertionOperatorType.EMPTY;
462        if ("notEmpty".equals(codeString))
463          return AssertionOperatorType.NOTEMPTY;
464        if ("contains".equals(codeString))
465          return AssertionOperatorType.CONTAINS;
466        if ("notContains".equals(codeString))
467          return AssertionOperatorType.NOTCONTAINS;
468        if ("eval".equals(codeString))
469          return AssertionOperatorType.EVAL;
470        if ("manualEval".equals(codeString))
471          return AssertionOperatorType.MANUALEVAL;
472        throw new IllegalArgumentException("Unknown AssertionOperatorType code '"+codeString+"'");
473        }
474        public Enumeration<AssertionOperatorType> fromType(PrimitiveType<?> code) throws FHIRException {
475          if (code == null)
476            return null;
477          if (code.isEmpty())
478            return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.NULL, code);
479          String codeString = ((PrimitiveType) code).asStringValue();
480          if (codeString == null || "".equals(codeString))
481            return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.NULL, code);
482        if ("equals".equals(codeString))
483          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.EQUALS, code);
484        if ("notEquals".equals(codeString))
485          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.NOTEQUALS, code);
486        if ("in".equals(codeString))
487          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.IN, code);
488        if ("notIn".equals(codeString))
489          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.NOTIN, code);
490        if ("greaterThan".equals(codeString))
491          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.GREATERTHAN, code);
492        if ("lessThan".equals(codeString))
493          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.LESSTHAN, code);
494        if ("empty".equals(codeString))
495          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.EMPTY, code);
496        if ("notEmpty".equals(codeString))
497          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.NOTEMPTY, code);
498        if ("contains".equals(codeString))
499          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.CONTAINS, code);
500        if ("notContains".equals(codeString))
501          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.NOTCONTAINS, code);
502        if ("eval".equals(codeString))
503          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.EVAL, code);
504        if ("manualEval".equals(codeString))
505          return new Enumeration<AssertionOperatorType>(this, AssertionOperatorType.MANUALEVAL, code);
506        throw new FHIRException("Unknown AssertionOperatorType code '"+codeString+"'");
507        }
508    public String toCode(AssertionOperatorType code) {
509       if (code == AssertionOperatorType.NULL)
510           return null;
511       if (code == AssertionOperatorType.EQUALS)
512        return "equals";
513      if (code == AssertionOperatorType.NOTEQUALS)
514        return "notEquals";
515      if (code == AssertionOperatorType.IN)
516        return "in";
517      if (code == AssertionOperatorType.NOTIN)
518        return "notIn";
519      if (code == AssertionOperatorType.GREATERTHAN)
520        return "greaterThan";
521      if (code == AssertionOperatorType.LESSTHAN)
522        return "lessThan";
523      if (code == AssertionOperatorType.EMPTY)
524        return "empty";
525      if (code == AssertionOperatorType.NOTEMPTY)
526        return "notEmpty";
527      if (code == AssertionOperatorType.CONTAINS)
528        return "contains";
529      if (code == AssertionOperatorType.NOTCONTAINS)
530        return "notContains";
531      if (code == AssertionOperatorType.EVAL)
532        return "eval";
533      if (code == AssertionOperatorType.MANUALEVAL)
534        return "manualEval";
535      return "?";
536   }
537    public String toSystem(AssertionOperatorType code) {
538      return code.getSystem();
539      }
540    }
541
542    public enum AssertionResponseTypes {
543        /**
544         * Response code is 100.
545         */
546        CONTINUE, 
547        /**
548         * Response code is 101.
549         */
550        SWITCHINGPROTOCOLS, 
551        /**
552         * Response code is 200.
553         */
554        OKAY, 
555        /**
556         * Response code is 201.
557         */
558        CREATED, 
559        /**
560         * Response code is 202.
561         */
562        ACCEPTED, 
563        /**
564         * Response code is 203.
565         */
566        NONAUTHORITATIVEINFORMATION, 
567        /**
568         * Response code is 204.
569         */
570        NOCONTENT, 
571        /**
572         * Response code is 205.
573         */
574        RESETCONTENT, 
575        /**
576         * Response code is 206.
577         */
578        PARTIALCONTENT, 
579        /**
580         * Response code is 300.
581         */
582        MULTIPLECHOICES, 
583        /**
584         * Response code is 301.
585         */
586        MOVEDPERMANENTLY, 
587        /**
588         * Response code is 302.
589         */
590        FOUND, 
591        /**
592         * Response code is 303.
593         */
594        SEEOTHER, 
595        /**
596         * Response code is 304.
597         */
598        NOTMODIFIED, 
599        /**
600         * Response code is 305.
601         */
602        USEPROXY, 
603        /**
604         * Response code is 307.
605         */
606        TEMPORARYREDIRECT, 
607        /**
608         * Response code is 308.
609         */
610        PERMANENTREDIRECT, 
611        /**
612         * Response code is 400.
613         */
614        BADREQUEST, 
615        /**
616         * Response code is 401.
617         */
618        UNAUTHORIZED, 
619        /**
620         * Response code is 402.
621         */
622        PAYMENTREQUIRED, 
623        /**
624         * Response code is 403.
625         */
626        FORBIDDEN, 
627        /**
628         * Response code is 404.
629         */
630        NOTFOUND, 
631        /**
632         * Response code is 405.
633         */
634        METHODNOTALLOWED, 
635        /**
636         * Response code is 406.
637         */
638        NOTACCEPTABLE, 
639        /**
640         * Response code is 407.
641         */
642        PROXYAUTHENTICATIONREQUIRED, 
643        /**
644         * Response code is 408.
645         */
646        REQUESTTIMEOUT, 
647        /**
648         * Response code is 409.
649         */
650        CONFLICT, 
651        /**
652         * Response code is 410.
653         */
654        GONE, 
655        /**
656         * Response code is 411.
657         */
658        LENGTHREQUIRED, 
659        /**
660         * Response code is 412.
661         */
662        PRECONDITIONFAILED, 
663        /**
664         * Response code is 413.
665         */
666        CONTENTTOOLARGE, 
667        /**
668         * Response code is 414.
669         */
670        URITOOLONG, 
671        /**
672         * Response code is 415.
673         */
674        UNSUPPORTEDMEDIATYPE, 
675        /**
676         * Response code is 416.
677         */
678        RANGENOTSATISFIABLE, 
679        /**
680         * Response code is 417.
681         */
682        EXPECTATIONFAILED, 
683        /**
684         * Response code is 421.
685         */
686        MISDIRECTEDREQUEST, 
687        /**
688         * Response code is 422.
689         */
690        UNPROCESSABLECONTENT, 
691        /**
692         * Response code is 426.
693         */
694        UPGRADEREQUIRED, 
695        /**
696         * Response code is 500.
697         */
698        INTERNALSERVERERROR, 
699        /**
700         * Response code is 501.
701         */
702        NOTIMPLEMENTED, 
703        /**
704         * Response code is 502.
705         */
706        BADGATEWAY, 
707        /**
708         * Response code is 503.
709         */
710        SERVICEUNAVAILABLE, 
711        /**
712         * Response code is 504.
713         */
714        GATEWAYTIMEOUT, 
715        /**
716         * Response code is 505.
717         */
718        HTTPVERSIONNOTSUPPORTED, 
719        /**
720         * added to help the parsers with the generic types
721         */
722        NULL;
723        public static AssertionResponseTypes fromCode(String codeString) throws FHIRException {
724            if (codeString == null || "".equals(codeString))
725                return null;
726        if ("continue".equals(codeString))
727          return CONTINUE;
728        if ("switchingProtocols".equals(codeString))
729          return SWITCHINGPROTOCOLS;
730        if ("okay".equals(codeString))
731          return OKAY;
732        if ("created".equals(codeString))
733          return CREATED;
734        if ("accepted".equals(codeString))
735          return ACCEPTED;
736        if ("nonAuthoritativeInformation".equals(codeString))
737          return NONAUTHORITATIVEINFORMATION;
738        if ("noContent".equals(codeString))
739          return NOCONTENT;
740        if ("resetContent".equals(codeString))
741          return RESETCONTENT;
742        if ("partialContent".equals(codeString))
743          return PARTIALCONTENT;
744        if ("multipleChoices".equals(codeString))
745          return MULTIPLECHOICES;
746        if ("movedPermanently".equals(codeString))
747          return MOVEDPERMANENTLY;
748        if ("found".equals(codeString))
749          return FOUND;
750        if ("seeOther".equals(codeString))
751          return SEEOTHER;
752        if ("notModified".equals(codeString))
753          return NOTMODIFIED;
754        if ("useProxy".equals(codeString))
755          return USEPROXY;
756        if ("temporaryRedirect".equals(codeString))
757          return TEMPORARYREDIRECT;
758        if ("permanentRedirect".equals(codeString))
759          return PERMANENTREDIRECT;
760        if ("badRequest".equals(codeString))
761          return BADREQUEST;
762        if ("unauthorized".equals(codeString))
763          return UNAUTHORIZED;
764        if ("paymentRequired".equals(codeString))
765          return PAYMENTREQUIRED;
766        if ("forbidden".equals(codeString))
767          return FORBIDDEN;
768        if ("notFound".equals(codeString))
769          return NOTFOUND;
770        if ("methodNotAllowed".equals(codeString))
771          return METHODNOTALLOWED;
772        if ("notAcceptable".equals(codeString))
773          return NOTACCEPTABLE;
774        if ("proxyAuthenticationRequired".equals(codeString))
775          return PROXYAUTHENTICATIONREQUIRED;
776        if ("requestTimeout".equals(codeString))
777          return REQUESTTIMEOUT;
778        if ("conflict".equals(codeString))
779          return CONFLICT;
780        if ("gone".equals(codeString))
781          return GONE;
782        if ("lengthRequired".equals(codeString))
783          return LENGTHREQUIRED;
784        if ("preconditionFailed".equals(codeString))
785          return PRECONDITIONFAILED;
786        if ("contentTooLarge".equals(codeString))
787          return CONTENTTOOLARGE;
788        if ("uriTooLong".equals(codeString))
789          return URITOOLONG;
790        if ("unsupportedMediaType".equals(codeString))
791          return UNSUPPORTEDMEDIATYPE;
792        if ("rangeNotSatisfiable".equals(codeString))
793          return RANGENOTSATISFIABLE;
794        if ("expectationFailed".equals(codeString))
795          return EXPECTATIONFAILED;
796        if ("misdirectedRequest".equals(codeString))
797          return MISDIRECTEDREQUEST;
798        if ("unprocessableContent".equals(codeString))
799          return UNPROCESSABLECONTENT;
800        if ("upgradeRequired".equals(codeString))
801          return UPGRADEREQUIRED;
802        if ("internalServerError".equals(codeString))
803          return INTERNALSERVERERROR;
804        if ("notImplemented".equals(codeString))
805          return NOTIMPLEMENTED;
806        if ("badGateway".equals(codeString))
807          return BADGATEWAY;
808        if ("serviceUnavailable".equals(codeString))
809          return SERVICEUNAVAILABLE;
810        if ("gatewayTimeout".equals(codeString))
811          return GATEWAYTIMEOUT;
812        if ("httpVersionNotSupported".equals(codeString))
813          return HTTPVERSIONNOTSUPPORTED;
814        if (Configuration.isAcceptInvalidEnums())
815          return null;
816        else
817          throw new FHIRException("Unknown AssertionResponseTypes code '"+codeString+"'");
818        }
819        public String toCode() {
820          switch (this) {
821            case CONTINUE: return "continue";
822            case SWITCHINGPROTOCOLS: return "switchingProtocols";
823            case OKAY: return "okay";
824            case CREATED: return "created";
825            case ACCEPTED: return "accepted";
826            case NONAUTHORITATIVEINFORMATION: return "nonAuthoritativeInformation";
827            case NOCONTENT: return "noContent";
828            case RESETCONTENT: return "resetContent";
829            case PARTIALCONTENT: return "partialContent";
830            case MULTIPLECHOICES: return "multipleChoices";
831            case MOVEDPERMANENTLY: return "movedPermanently";
832            case FOUND: return "found";
833            case SEEOTHER: return "seeOther";
834            case NOTMODIFIED: return "notModified";
835            case USEPROXY: return "useProxy";
836            case TEMPORARYREDIRECT: return "temporaryRedirect";
837            case PERMANENTREDIRECT: return "permanentRedirect";
838            case BADREQUEST: return "badRequest";
839            case UNAUTHORIZED: return "unauthorized";
840            case PAYMENTREQUIRED: return "paymentRequired";
841            case FORBIDDEN: return "forbidden";
842            case NOTFOUND: return "notFound";
843            case METHODNOTALLOWED: return "methodNotAllowed";
844            case NOTACCEPTABLE: return "notAcceptable";
845            case PROXYAUTHENTICATIONREQUIRED: return "proxyAuthenticationRequired";
846            case REQUESTTIMEOUT: return "requestTimeout";
847            case CONFLICT: return "conflict";
848            case GONE: return "gone";
849            case LENGTHREQUIRED: return "lengthRequired";
850            case PRECONDITIONFAILED: return "preconditionFailed";
851            case CONTENTTOOLARGE: return "contentTooLarge";
852            case URITOOLONG: return "uriTooLong";
853            case UNSUPPORTEDMEDIATYPE: return "unsupportedMediaType";
854            case RANGENOTSATISFIABLE: return "rangeNotSatisfiable";
855            case EXPECTATIONFAILED: return "expectationFailed";
856            case MISDIRECTEDREQUEST: return "misdirectedRequest";
857            case UNPROCESSABLECONTENT: return "unprocessableContent";
858            case UPGRADEREQUIRED: return "upgradeRequired";
859            case INTERNALSERVERERROR: return "internalServerError";
860            case NOTIMPLEMENTED: return "notImplemented";
861            case BADGATEWAY: return "badGateway";
862            case SERVICEUNAVAILABLE: return "serviceUnavailable";
863            case GATEWAYTIMEOUT: return "gatewayTimeout";
864            case HTTPVERSIONNOTSUPPORTED: return "httpVersionNotSupported";
865            case NULL: return null;
866            default: return "?";
867          }
868        }
869        public String getSystem() {
870          switch (this) {
871            case CONTINUE: return "http://hl7.org/fhir/assert-response-code-types";
872            case SWITCHINGPROTOCOLS: return "http://hl7.org/fhir/assert-response-code-types";
873            case OKAY: return "http://hl7.org/fhir/assert-response-code-types";
874            case CREATED: return "http://hl7.org/fhir/assert-response-code-types";
875            case ACCEPTED: return "http://hl7.org/fhir/assert-response-code-types";
876            case NONAUTHORITATIVEINFORMATION: return "http://hl7.org/fhir/assert-response-code-types";
877            case NOCONTENT: return "http://hl7.org/fhir/assert-response-code-types";
878            case RESETCONTENT: return "http://hl7.org/fhir/assert-response-code-types";
879            case PARTIALCONTENT: return "http://hl7.org/fhir/assert-response-code-types";
880            case MULTIPLECHOICES: return "http://hl7.org/fhir/assert-response-code-types";
881            case MOVEDPERMANENTLY: return "http://hl7.org/fhir/assert-response-code-types";
882            case FOUND: return "http://hl7.org/fhir/assert-response-code-types";
883            case SEEOTHER: return "http://hl7.org/fhir/assert-response-code-types";
884            case NOTMODIFIED: return "http://hl7.org/fhir/assert-response-code-types";
885            case USEPROXY: return "http://hl7.org/fhir/assert-response-code-types";
886            case TEMPORARYREDIRECT: return "http://hl7.org/fhir/assert-response-code-types";
887            case PERMANENTREDIRECT: return "http://hl7.org/fhir/assert-response-code-types";
888            case BADREQUEST: return "http://hl7.org/fhir/assert-response-code-types";
889            case UNAUTHORIZED: return "http://hl7.org/fhir/assert-response-code-types";
890            case PAYMENTREQUIRED: return "http://hl7.org/fhir/assert-response-code-types";
891            case FORBIDDEN: return "http://hl7.org/fhir/assert-response-code-types";
892            case NOTFOUND: return "http://hl7.org/fhir/assert-response-code-types";
893            case METHODNOTALLOWED: return "http://hl7.org/fhir/assert-response-code-types";
894            case NOTACCEPTABLE: return "http://hl7.org/fhir/assert-response-code-types";
895            case PROXYAUTHENTICATIONREQUIRED: return "http://hl7.org/fhir/assert-response-code-types";
896            case REQUESTTIMEOUT: return "http://hl7.org/fhir/assert-response-code-types";
897            case CONFLICT: return "http://hl7.org/fhir/assert-response-code-types";
898            case GONE: return "http://hl7.org/fhir/assert-response-code-types";
899            case LENGTHREQUIRED: return "http://hl7.org/fhir/assert-response-code-types";
900            case PRECONDITIONFAILED: return "http://hl7.org/fhir/assert-response-code-types";
901            case CONTENTTOOLARGE: return "http://hl7.org/fhir/assert-response-code-types";
902            case URITOOLONG: return "http://hl7.org/fhir/assert-response-code-types";
903            case UNSUPPORTEDMEDIATYPE: return "http://hl7.org/fhir/assert-response-code-types";
904            case RANGENOTSATISFIABLE: return "http://hl7.org/fhir/assert-response-code-types";
905            case EXPECTATIONFAILED: return "http://hl7.org/fhir/assert-response-code-types";
906            case MISDIRECTEDREQUEST: return "http://hl7.org/fhir/assert-response-code-types";
907            case UNPROCESSABLECONTENT: return "http://hl7.org/fhir/assert-response-code-types";
908            case UPGRADEREQUIRED: return "http://hl7.org/fhir/assert-response-code-types";
909            case INTERNALSERVERERROR: return "http://hl7.org/fhir/assert-response-code-types";
910            case NOTIMPLEMENTED: return "http://hl7.org/fhir/assert-response-code-types";
911            case BADGATEWAY: return "http://hl7.org/fhir/assert-response-code-types";
912            case SERVICEUNAVAILABLE: return "http://hl7.org/fhir/assert-response-code-types";
913            case GATEWAYTIMEOUT: return "http://hl7.org/fhir/assert-response-code-types";
914            case HTTPVERSIONNOTSUPPORTED: return "http://hl7.org/fhir/assert-response-code-types";
915            case NULL: return null;
916            default: return "?";
917          }
918        }
919        public String getDefinition() {
920          switch (this) {
921            case CONTINUE: return "Response code is 100.";
922            case SWITCHINGPROTOCOLS: return "Response code is 101.";
923            case OKAY: return "Response code is 200.";
924            case CREATED: return "Response code is 201.";
925            case ACCEPTED: return "Response code is 202.";
926            case NONAUTHORITATIVEINFORMATION: return "Response code is 203.";
927            case NOCONTENT: return "Response code is 204.";
928            case RESETCONTENT: return "Response code is 205.";
929            case PARTIALCONTENT: return "Response code is 206.";
930            case MULTIPLECHOICES: return "Response code is 300.";
931            case MOVEDPERMANENTLY: return "Response code is 301.";
932            case FOUND: return "Response code is 302.";
933            case SEEOTHER: return "Response code is 303.";
934            case NOTMODIFIED: return "Response code is 304.";
935            case USEPROXY: return "Response code is 305.";
936            case TEMPORARYREDIRECT: return "Response code is 307.";
937            case PERMANENTREDIRECT: return "Response code is 308.";
938            case BADREQUEST: return "Response code is 400.";
939            case UNAUTHORIZED: return "Response code is 401.";
940            case PAYMENTREQUIRED: return "Response code is 402.";
941            case FORBIDDEN: return "Response code is 403.";
942            case NOTFOUND: return "Response code is 404.";
943            case METHODNOTALLOWED: return "Response code is 405.";
944            case NOTACCEPTABLE: return "Response code is 406.";
945            case PROXYAUTHENTICATIONREQUIRED: return "Response code is 407.";
946            case REQUESTTIMEOUT: return "Response code is 408.";
947            case CONFLICT: return "Response code is 409.";
948            case GONE: return "Response code is 410.";
949            case LENGTHREQUIRED: return "Response code is 411.";
950            case PRECONDITIONFAILED: return "Response code is 412.";
951            case CONTENTTOOLARGE: return "Response code is 413.";
952            case URITOOLONG: return "Response code is 414.";
953            case UNSUPPORTEDMEDIATYPE: return "Response code is 415.";
954            case RANGENOTSATISFIABLE: return "Response code is 416.";
955            case EXPECTATIONFAILED: return "Response code is 417.";
956            case MISDIRECTEDREQUEST: return "Response code is 421.";
957            case UNPROCESSABLECONTENT: return "Response code is 422.";
958            case UPGRADEREQUIRED: return "Response code is 426.";
959            case INTERNALSERVERERROR: return "Response code is 500.";
960            case NOTIMPLEMENTED: return "Response code is 501.";
961            case BADGATEWAY: return "Response code is 502.";
962            case SERVICEUNAVAILABLE: return "Response code is 503.";
963            case GATEWAYTIMEOUT: return "Response code is 504.";
964            case HTTPVERSIONNOTSUPPORTED: return "Response code is 505.";
965            case NULL: return null;
966            default: return "?";
967          }
968        }
969        public String getDisplay() {
970          switch (this) {
971            case CONTINUE: return "Continue";
972            case SWITCHINGPROTOCOLS: return "Switching Protocols";
973            case OKAY: return "OK";
974            case CREATED: return "Created";
975            case ACCEPTED: return "Accepted";
976            case NONAUTHORITATIVEINFORMATION: return "Non-Authoritative Information";
977            case NOCONTENT: return "No Content";
978            case RESETCONTENT: return "Reset Content";
979            case PARTIALCONTENT: return "Partial Content";
980            case MULTIPLECHOICES: return "Multiple Choices";
981            case MOVEDPERMANENTLY: return "Moved Permanently";
982            case FOUND: return "Found";
983            case SEEOTHER: return "See Other";
984            case NOTMODIFIED: return "Not Modified";
985            case USEPROXY: return "Use Proxy";
986            case TEMPORARYREDIRECT: return "Temporary Redirect";
987            case PERMANENTREDIRECT: return "Permanent Redirect";
988            case BADREQUEST: return "Bad Request";
989            case UNAUTHORIZED: return "Unauthorized";
990            case PAYMENTREQUIRED: return "Payment Required";
991            case FORBIDDEN: return "Forbidden";
992            case NOTFOUND: return "Not Found";
993            case METHODNOTALLOWED: return "Method Not Allowed";
994            case NOTACCEPTABLE: return "Not Acceptable";
995            case PROXYAUTHENTICATIONREQUIRED: return "Proxy Authentication Required";
996            case REQUESTTIMEOUT: return "Request Timeout";
997            case CONFLICT: return "Conflict";
998            case GONE: return "Gone";
999            case LENGTHREQUIRED: return "Length Required";
1000            case PRECONDITIONFAILED: return "Precondition Failed";
1001            case CONTENTTOOLARGE: return "Content Too Large";
1002            case URITOOLONG: return "URI Too Long";
1003            case UNSUPPORTEDMEDIATYPE: return "Unsupported Media Type";
1004            case RANGENOTSATISFIABLE: return "Range Not Satisfiable";
1005            case EXPECTATIONFAILED: return "Expectation Failed";
1006            case MISDIRECTEDREQUEST: return "Misdirected Request";
1007            case UNPROCESSABLECONTENT: return "Unprocessable Content";
1008            case UPGRADEREQUIRED: return "Upgrade Required";
1009            case INTERNALSERVERERROR: return "Internal Server Error";
1010            case NOTIMPLEMENTED: return "Not Implemented";
1011            case BADGATEWAY: return "Bad Gateway";
1012            case SERVICEUNAVAILABLE: return "Service Unavailable";
1013            case GATEWAYTIMEOUT: return "Gateway Timeout";
1014            case HTTPVERSIONNOTSUPPORTED: return "HTTP Version Not Supported";
1015            case NULL: return null;
1016            default: return "?";
1017          }
1018        }
1019    }
1020
1021  public static class AssertionResponseTypesEnumFactory implements EnumFactory<AssertionResponseTypes> {
1022    public AssertionResponseTypes fromCode(String codeString) throws IllegalArgumentException {
1023      if (codeString == null || "".equals(codeString))
1024            if (codeString == null || "".equals(codeString))
1025                return null;
1026        if ("continue".equals(codeString))
1027          return AssertionResponseTypes.CONTINUE;
1028        if ("switchingProtocols".equals(codeString))
1029          return AssertionResponseTypes.SWITCHINGPROTOCOLS;
1030        if ("okay".equals(codeString))
1031          return AssertionResponseTypes.OKAY;
1032        if ("created".equals(codeString))
1033          return AssertionResponseTypes.CREATED;
1034        if ("accepted".equals(codeString))
1035          return AssertionResponseTypes.ACCEPTED;
1036        if ("nonAuthoritativeInformation".equals(codeString))
1037          return AssertionResponseTypes.NONAUTHORITATIVEINFORMATION;
1038        if ("noContent".equals(codeString))
1039          return AssertionResponseTypes.NOCONTENT;
1040        if ("resetContent".equals(codeString))
1041          return AssertionResponseTypes.RESETCONTENT;
1042        if ("partialContent".equals(codeString))
1043          return AssertionResponseTypes.PARTIALCONTENT;
1044        if ("multipleChoices".equals(codeString))
1045          return AssertionResponseTypes.MULTIPLECHOICES;
1046        if ("movedPermanently".equals(codeString))
1047          return AssertionResponseTypes.MOVEDPERMANENTLY;
1048        if ("found".equals(codeString))
1049          return AssertionResponseTypes.FOUND;
1050        if ("seeOther".equals(codeString))
1051          return AssertionResponseTypes.SEEOTHER;
1052        if ("notModified".equals(codeString))
1053          return AssertionResponseTypes.NOTMODIFIED;
1054        if ("useProxy".equals(codeString))
1055          return AssertionResponseTypes.USEPROXY;
1056        if ("temporaryRedirect".equals(codeString))
1057          return AssertionResponseTypes.TEMPORARYREDIRECT;
1058        if ("permanentRedirect".equals(codeString))
1059          return AssertionResponseTypes.PERMANENTREDIRECT;
1060        if ("badRequest".equals(codeString))
1061          return AssertionResponseTypes.BADREQUEST;
1062        if ("unauthorized".equals(codeString))
1063          return AssertionResponseTypes.UNAUTHORIZED;
1064        if ("paymentRequired".equals(codeString))
1065          return AssertionResponseTypes.PAYMENTREQUIRED;
1066        if ("forbidden".equals(codeString))
1067          return AssertionResponseTypes.FORBIDDEN;
1068        if ("notFound".equals(codeString))
1069          return AssertionResponseTypes.NOTFOUND;
1070        if ("methodNotAllowed".equals(codeString))
1071          return AssertionResponseTypes.METHODNOTALLOWED;
1072        if ("notAcceptable".equals(codeString))
1073          return AssertionResponseTypes.NOTACCEPTABLE;
1074        if ("proxyAuthenticationRequired".equals(codeString))
1075          return AssertionResponseTypes.PROXYAUTHENTICATIONREQUIRED;
1076        if ("requestTimeout".equals(codeString))
1077          return AssertionResponseTypes.REQUESTTIMEOUT;
1078        if ("conflict".equals(codeString))
1079          return AssertionResponseTypes.CONFLICT;
1080        if ("gone".equals(codeString))
1081          return AssertionResponseTypes.GONE;
1082        if ("lengthRequired".equals(codeString))
1083          return AssertionResponseTypes.LENGTHREQUIRED;
1084        if ("preconditionFailed".equals(codeString))
1085          return AssertionResponseTypes.PRECONDITIONFAILED;
1086        if ("contentTooLarge".equals(codeString))
1087          return AssertionResponseTypes.CONTENTTOOLARGE;
1088        if ("uriTooLong".equals(codeString))
1089          return AssertionResponseTypes.URITOOLONG;
1090        if ("unsupportedMediaType".equals(codeString))
1091          return AssertionResponseTypes.UNSUPPORTEDMEDIATYPE;
1092        if ("rangeNotSatisfiable".equals(codeString))
1093          return AssertionResponseTypes.RANGENOTSATISFIABLE;
1094        if ("expectationFailed".equals(codeString))
1095          return AssertionResponseTypes.EXPECTATIONFAILED;
1096        if ("misdirectedRequest".equals(codeString))
1097          return AssertionResponseTypes.MISDIRECTEDREQUEST;
1098        if ("unprocessableContent".equals(codeString))
1099          return AssertionResponseTypes.UNPROCESSABLECONTENT;
1100        if ("upgradeRequired".equals(codeString))
1101          return AssertionResponseTypes.UPGRADEREQUIRED;
1102        if ("internalServerError".equals(codeString))
1103          return AssertionResponseTypes.INTERNALSERVERERROR;
1104        if ("notImplemented".equals(codeString))
1105          return AssertionResponseTypes.NOTIMPLEMENTED;
1106        if ("badGateway".equals(codeString))
1107          return AssertionResponseTypes.BADGATEWAY;
1108        if ("serviceUnavailable".equals(codeString))
1109          return AssertionResponseTypes.SERVICEUNAVAILABLE;
1110        if ("gatewayTimeout".equals(codeString))
1111          return AssertionResponseTypes.GATEWAYTIMEOUT;
1112        if ("httpVersionNotSupported".equals(codeString))
1113          return AssertionResponseTypes.HTTPVERSIONNOTSUPPORTED;
1114        throw new IllegalArgumentException("Unknown AssertionResponseTypes code '"+codeString+"'");
1115        }
1116        public Enumeration<AssertionResponseTypes> fromType(PrimitiveType<?> code) throws FHIRException {
1117          if (code == null)
1118            return null;
1119          if (code.isEmpty())
1120            return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.NULL, code);
1121          String codeString = ((PrimitiveType) code).asStringValue();
1122          if (codeString == null || "".equals(codeString))
1123            return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.NULL, code);
1124        if ("continue".equals(codeString))
1125          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.CONTINUE, code);
1126        if ("switchingProtocols".equals(codeString))
1127          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.SWITCHINGPROTOCOLS, code);
1128        if ("okay".equals(codeString))
1129          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.OKAY, code);
1130        if ("created".equals(codeString))
1131          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.CREATED, code);
1132        if ("accepted".equals(codeString))
1133          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.ACCEPTED, code);
1134        if ("nonAuthoritativeInformation".equals(codeString))
1135          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.NONAUTHORITATIVEINFORMATION, code);
1136        if ("noContent".equals(codeString))
1137          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.NOCONTENT, code);
1138        if ("resetContent".equals(codeString))
1139          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.RESETCONTENT, code);
1140        if ("partialContent".equals(codeString))
1141          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.PARTIALCONTENT, code);
1142        if ("multipleChoices".equals(codeString))
1143          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.MULTIPLECHOICES, code);
1144        if ("movedPermanently".equals(codeString))
1145          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.MOVEDPERMANENTLY, code);
1146        if ("found".equals(codeString))
1147          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.FOUND, code);
1148        if ("seeOther".equals(codeString))
1149          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.SEEOTHER, code);
1150        if ("notModified".equals(codeString))
1151          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.NOTMODIFIED, code);
1152        if ("useProxy".equals(codeString))
1153          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.USEPROXY, code);
1154        if ("temporaryRedirect".equals(codeString))
1155          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.TEMPORARYREDIRECT, code);
1156        if ("permanentRedirect".equals(codeString))
1157          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.PERMANENTREDIRECT, code);
1158        if ("badRequest".equals(codeString))
1159          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.BADREQUEST, code);
1160        if ("unauthorized".equals(codeString))
1161          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.UNAUTHORIZED, code);
1162        if ("paymentRequired".equals(codeString))
1163          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.PAYMENTREQUIRED, code);
1164        if ("forbidden".equals(codeString))
1165          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.FORBIDDEN, code);
1166        if ("notFound".equals(codeString))
1167          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.NOTFOUND, code);
1168        if ("methodNotAllowed".equals(codeString))
1169          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.METHODNOTALLOWED, code);
1170        if ("notAcceptable".equals(codeString))
1171          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.NOTACCEPTABLE, code);
1172        if ("proxyAuthenticationRequired".equals(codeString))
1173          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.PROXYAUTHENTICATIONREQUIRED, code);
1174        if ("requestTimeout".equals(codeString))
1175          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.REQUESTTIMEOUT, code);
1176        if ("conflict".equals(codeString))
1177          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.CONFLICT, code);
1178        if ("gone".equals(codeString))
1179          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.GONE, code);
1180        if ("lengthRequired".equals(codeString))
1181          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.LENGTHREQUIRED, code);
1182        if ("preconditionFailed".equals(codeString))
1183          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.PRECONDITIONFAILED, code);
1184        if ("contentTooLarge".equals(codeString))
1185          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.CONTENTTOOLARGE, code);
1186        if ("uriTooLong".equals(codeString))
1187          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.URITOOLONG, code);
1188        if ("unsupportedMediaType".equals(codeString))
1189          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.UNSUPPORTEDMEDIATYPE, code);
1190        if ("rangeNotSatisfiable".equals(codeString))
1191          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.RANGENOTSATISFIABLE, code);
1192        if ("expectationFailed".equals(codeString))
1193          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.EXPECTATIONFAILED, code);
1194        if ("misdirectedRequest".equals(codeString))
1195          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.MISDIRECTEDREQUEST, code);
1196        if ("unprocessableContent".equals(codeString))
1197          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.UNPROCESSABLECONTENT, code);
1198        if ("upgradeRequired".equals(codeString))
1199          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.UPGRADEREQUIRED, code);
1200        if ("internalServerError".equals(codeString))
1201          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.INTERNALSERVERERROR, code);
1202        if ("notImplemented".equals(codeString))
1203          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.NOTIMPLEMENTED, code);
1204        if ("badGateway".equals(codeString))
1205          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.BADGATEWAY, code);
1206        if ("serviceUnavailable".equals(codeString))
1207          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.SERVICEUNAVAILABLE, code);
1208        if ("gatewayTimeout".equals(codeString))
1209          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.GATEWAYTIMEOUT, code);
1210        if ("httpVersionNotSupported".equals(codeString))
1211          return new Enumeration<AssertionResponseTypes>(this, AssertionResponseTypes.HTTPVERSIONNOTSUPPORTED, code);
1212        throw new FHIRException("Unknown AssertionResponseTypes code '"+codeString+"'");
1213        }
1214    public String toCode(AssertionResponseTypes code) {
1215       if (code == AssertionResponseTypes.NULL)
1216           return null;
1217       if (code == AssertionResponseTypes.CONTINUE)
1218        return "continue";
1219      if (code == AssertionResponseTypes.SWITCHINGPROTOCOLS)
1220        return "switchingProtocols";
1221      if (code == AssertionResponseTypes.OKAY)
1222        return "okay";
1223      if (code == AssertionResponseTypes.CREATED)
1224        return "created";
1225      if (code == AssertionResponseTypes.ACCEPTED)
1226        return "accepted";
1227      if (code == AssertionResponseTypes.NONAUTHORITATIVEINFORMATION)
1228        return "nonAuthoritativeInformation";
1229      if (code == AssertionResponseTypes.NOCONTENT)
1230        return "noContent";
1231      if (code == AssertionResponseTypes.RESETCONTENT)
1232        return "resetContent";
1233      if (code == AssertionResponseTypes.PARTIALCONTENT)
1234        return "partialContent";
1235      if (code == AssertionResponseTypes.MULTIPLECHOICES)
1236        return "multipleChoices";
1237      if (code == AssertionResponseTypes.MOVEDPERMANENTLY)
1238        return "movedPermanently";
1239      if (code == AssertionResponseTypes.FOUND)
1240        return "found";
1241      if (code == AssertionResponseTypes.SEEOTHER)
1242        return "seeOther";
1243      if (code == AssertionResponseTypes.NOTMODIFIED)
1244        return "notModified";
1245      if (code == AssertionResponseTypes.USEPROXY)
1246        return "useProxy";
1247      if (code == AssertionResponseTypes.TEMPORARYREDIRECT)
1248        return "temporaryRedirect";
1249      if (code == AssertionResponseTypes.PERMANENTREDIRECT)
1250        return "permanentRedirect";
1251      if (code == AssertionResponseTypes.BADREQUEST)
1252        return "badRequest";
1253      if (code == AssertionResponseTypes.UNAUTHORIZED)
1254        return "unauthorized";
1255      if (code == AssertionResponseTypes.PAYMENTREQUIRED)
1256        return "paymentRequired";
1257      if (code == AssertionResponseTypes.FORBIDDEN)
1258        return "forbidden";
1259      if (code == AssertionResponseTypes.NOTFOUND)
1260        return "notFound";
1261      if (code == AssertionResponseTypes.METHODNOTALLOWED)
1262        return "methodNotAllowed";
1263      if (code == AssertionResponseTypes.NOTACCEPTABLE)
1264        return "notAcceptable";
1265      if (code == AssertionResponseTypes.PROXYAUTHENTICATIONREQUIRED)
1266        return "proxyAuthenticationRequired";
1267      if (code == AssertionResponseTypes.REQUESTTIMEOUT)
1268        return "requestTimeout";
1269      if (code == AssertionResponseTypes.CONFLICT)
1270        return "conflict";
1271      if (code == AssertionResponseTypes.GONE)
1272        return "gone";
1273      if (code == AssertionResponseTypes.LENGTHREQUIRED)
1274        return "lengthRequired";
1275      if (code == AssertionResponseTypes.PRECONDITIONFAILED)
1276        return "preconditionFailed";
1277      if (code == AssertionResponseTypes.CONTENTTOOLARGE)
1278        return "contentTooLarge";
1279      if (code == AssertionResponseTypes.URITOOLONG)
1280        return "uriTooLong";
1281      if (code == AssertionResponseTypes.UNSUPPORTEDMEDIATYPE)
1282        return "unsupportedMediaType";
1283      if (code == AssertionResponseTypes.RANGENOTSATISFIABLE)
1284        return "rangeNotSatisfiable";
1285      if (code == AssertionResponseTypes.EXPECTATIONFAILED)
1286        return "expectationFailed";
1287      if (code == AssertionResponseTypes.MISDIRECTEDREQUEST)
1288        return "misdirectedRequest";
1289      if (code == AssertionResponseTypes.UNPROCESSABLECONTENT)
1290        return "unprocessableContent";
1291      if (code == AssertionResponseTypes.UPGRADEREQUIRED)
1292        return "upgradeRequired";
1293      if (code == AssertionResponseTypes.INTERNALSERVERERROR)
1294        return "internalServerError";
1295      if (code == AssertionResponseTypes.NOTIMPLEMENTED)
1296        return "notImplemented";
1297      if (code == AssertionResponseTypes.BADGATEWAY)
1298        return "badGateway";
1299      if (code == AssertionResponseTypes.SERVICEUNAVAILABLE)
1300        return "serviceUnavailable";
1301      if (code == AssertionResponseTypes.GATEWAYTIMEOUT)
1302        return "gatewayTimeout";
1303      if (code == AssertionResponseTypes.HTTPVERSIONNOTSUPPORTED)
1304        return "httpVersionNotSupported";
1305      return "?";
1306   }
1307    public String toSystem(AssertionResponseTypes code) {
1308      return code.getSystem();
1309      }
1310    }
1311
1312    public enum TestScriptRequestMethodCode {
1313        /**
1314         * HTTP DELETE operation.
1315         */
1316        DELETE, 
1317        /**
1318         * HTTP GET operation.
1319         */
1320        GET, 
1321        /**
1322         * HTTP OPTIONS operation.
1323         */
1324        OPTIONS, 
1325        /**
1326         * HTTP PATCH operation.
1327         */
1328        PATCH, 
1329        /**
1330         * HTTP POST operation.
1331         */
1332        POST, 
1333        /**
1334         * HTTP PUT operation.
1335         */
1336        PUT, 
1337        /**
1338         * HTTP HEAD operation.
1339         */
1340        HEAD, 
1341        /**
1342         * added to help the parsers with the generic types
1343         */
1344        NULL;
1345        public static TestScriptRequestMethodCode fromCode(String codeString) throws FHIRException {
1346            if (codeString == null || "".equals(codeString))
1347                return null;
1348        if ("delete".equals(codeString))
1349          return DELETE;
1350        if ("get".equals(codeString))
1351          return GET;
1352        if ("options".equals(codeString))
1353          return OPTIONS;
1354        if ("patch".equals(codeString))
1355          return PATCH;
1356        if ("post".equals(codeString))
1357          return POST;
1358        if ("put".equals(codeString))
1359          return PUT;
1360        if ("head".equals(codeString))
1361          return HEAD;
1362        if (Configuration.isAcceptInvalidEnums())
1363          return null;
1364        else
1365          throw new FHIRException("Unknown TestScriptRequestMethodCode code '"+codeString+"'");
1366        }
1367        public String toCode() {
1368          switch (this) {
1369            case DELETE: return "delete";
1370            case GET: return "get";
1371            case OPTIONS: return "options";
1372            case PATCH: return "patch";
1373            case POST: return "post";
1374            case PUT: return "put";
1375            case HEAD: return "head";
1376            case NULL: return null;
1377            default: return "?";
1378          }
1379        }
1380        public String getSystem() {
1381          switch (this) {
1382            case DELETE: return "http://hl7.org/fhir/http-operations";
1383            case GET: return "http://hl7.org/fhir/http-operations";
1384            case OPTIONS: return "http://hl7.org/fhir/http-operations";
1385            case PATCH: return "http://hl7.org/fhir/http-operations";
1386            case POST: return "http://hl7.org/fhir/http-operations";
1387            case PUT: return "http://hl7.org/fhir/http-operations";
1388            case HEAD: return "http://hl7.org/fhir/http-operations";
1389            case NULL: return null;
1390            default: return "?";
1391          }
1392        }
1393        public String getDefinition() {
1394          switch (this) {
1395            case DELETE: return "HTTP DELETE operation.";
1396            case GET: return "HTTP GET operation.";
1397            case OPTIONS: return "HTTP OPTIONS operation.";
1398            case PATCH: return "HTTP PATCH operation.";
1399            case POST: return "HTTP POST operation.";
1400            case PUT: return "HTTP PUT operation.";
1401            case HEAD: return "HTTP HEAD operation.";
1402            case NULL: return null;
1403            default: return "?";
1404          }
1405        }
1406        public String getDisplay() {
1407          switch (this) {
1408            case DELETE: return "DELETE";
1409            case GET: return "GET";
1410            case OPTIONS: return "OPTIONS";
1411            case PATCH: return "PATCH";
1412            case POST: return "POST";
1413            case PUT: return "PUT";
1414            case HEAD: return "HEAD";
1415            case NULL: return null;
1416            default: return "?";
1417          }
1418        }
1419    }
1420
1421  public static class TestScriptRequestMethodCodeEnumFactory implements EnumFactory<TestScriptRequestMethodCode> {
1422    public TestScriptRequestMethodCode fromCode(String codeString) throws IllegalArgumentException {
1423      if (codeString == null || "".equals(codeString))
1424            if (codeString == null || "".equals(codeString))
1425                return null;
1426        if ("delete".equals(codeString))
1427          return TestScriptRequestMethodCode.DELETE;
1428        if ("get".equals(codeString))
1429          return TestScriptRequestMethodCode.GET;
1430        if ("options".equals(codeString))
1431          return TestScriptRequestMethodCode.OPTIONS;
1432        if ("patch".equals(codeString))
1433          return TestScriptRequestMethodCode.PATCH;
1434        if ("post".equals(codeString))
1435          return TestScriptRequestMethodCode.POST;
1436        if ("put".equals(codeString))
1437          return TestScriptRequestMethodCode.PUT;
1438        if ("head".equals(codeString))
1439          return TestScriptRequestMethodCode.HEAD;
1440        throw new IllegalArgumentException("Unknown TestScriptRequestMethodCode code '"+codeString+"'");
1441        }
1442        public Enumeration<TestScriptRequestMethodCode> fromType(PrimitiveType<?> code) throws FHIRException {
1443          if (code == null)
1444            return null;
1445          if (code.isEmpty())
1446            return new Enumeration<TestScriptRequestMethodCode>(this, TestScriptRequestMethodCode.NULL, code);
1447          String codeString = ((PrimitiveType) code).asStringValue();
1448          if (codeString == null || "".equals(codeString))
1449            return new Enumeration<TestScriptRequestMethodCode>(this, TestScriptRequestMethodCode.NULL, code);
1450        if ("delete".equals(codeString))
1451          return new Enumeration<TestScriptRequestMethodCode>(this, TestScriptRequestMethodCode.DELETE, code);
1452        if ("get".equals(codeString))
1453          return new Enumeration<TestScriptRequestMethodCode>(this, TestScriptRequestMethodCode.GET, code);
1454        if ("options".equals(codeString))
1455          return new Enumeration<TestScriptRequestMethodCode>(this, TestScriptRequestMethodCode.OPTIONS, code);
1456        if ("patch".equals(codeString))
1457          return new Enumeration<TestScriptRequestMethodCode>(this, TestScriptRequestMethodCode.PATCH, code);
1458        if ("post".equals(codeString))
1459          return new Enumeration<TestScriptRequestMethodCode>(this, TestScriptRequestMethodCode.POST, code);
1460        if ("put".equals(codeString))
1461          return new Enumeration<TestScriptRequestMethodCode>(this, TestScriptRequestMethodCode.PUT, code);
1462        if ("head".equals(codeString))
1463          return new Enumeration<TestScriptRequestMethodCode>(this, TestScriptRequestMethodCode.HEAD, code);
1464        throw new FHIRException("Unknown TestScriptRequestMethodCode code '"+codeString+"'");
1465        }
1466    public String toCode(TestScriptRequestMethodCode code) {
1467       if (code == TestScriptRequestMethodCode.NULL)
1468           return null;
1469       if (code == TestScriptRequestMethodCode.DELETE)
1470        return "delete";
1471      if (code == TestScriptRequestMethodCode.GET)
1472        return "get";
1473      if (code == TestScriptRequestMethodCode.OPTIONS)
1474        return "options";
1475      if (code == TestScriptRequestMethodCode.PATCH)
1476        return "patch";
1477      if (code == TestScriptRequestMethodCode.POST)
1478        return "post";
1479      if (code == TestScriptRequestMethodCode.PUT)
1480        return "put";
1481      if (code == TestScriptRequestMethodCode.HEAD)
1482        return "head";
1483      return "?";
1484   }
1485    public String toSystem(TestScriptRequestMethodCode code) {
1486      return code.getSystem();
1487      }
1488    }
1489
1490    @Block()
1491    public static class TestScriptOriginComponent extends BackboneElement implements IBaseBackboneElement {
1492        /**
1493         * Abstract name given to an origin server in this test script.  The name is provided as a number starting at 1.
1494         */
1495        @Child(name = "index", type = {IntegerType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1496        @Description(shortDefinition="The index of the abstract origin server starting at 1", formalDefinition="Abstract name given to an origin server in this test script.  The name is provided as a number starting at 1." )
1497        protected IntegerType index;
1498
1499        /**
1500         * The type of origin profile the test system supports.
1501         */
1502        @Child(name = "profile", type = {Coding.class}, order=2, min=1, max=1, modifier=false, summary=false)
1503        @Description(shortDefinition="FHIR-Client | FHIR-SDC-FormFiller", formalDefinition="The type of origin profile the test system supports." )
1504        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/testscript-profile-origin-types")
1505        protected Coding profile;
1506
1507        /**
1508         * The explicit url path of the origin server used in this test script.
1509         */
1510        @Child(name = "url", type = {UrlType.class}, order=3, min=0, max=1, modifier=false, summary=false)
1511        @Description(shortDefinition="The url path of the origin server", formalDefinition="The explicit url path of the origin server used in this test script." )
1512        protected UrlType url;
1513
1514        private static final long serialVersionUID = -188072923L;
1515
1516    /**
1517     * Constructor
1518     */
1519      public TestScriptOriginComponent() {
1520        super();
1521      }
1522
1523    /**
1524     * Constructor
1525     */
1526      public TestScriptOriginComponent(int index, Coding profile) {
1527        super();
1528        this.setIndex(index);
1529        this.setProfile(profile);
1530      }
1531
1532        /**
1533         * @return {@link #index} (Abstract name given to an origin server in this test script.  The name is provided as a number starting at 1.). This is the underlying object with id, value and extensions. The accessor "getIndex" gives direct access to the value
1534         */
1535        public IntegerType getIndexElement() { 
1536          if (this.index == null)
1537            if (Configuration.errorOnAutoCreate())
1538              throw new Error("Attempt to auto-create TestScriptOriginComponent.index");
1539            else if (Configuration.doAutoCreate())
1540              this.index = new IntegerType(); // bb
1541          return this.index;
1542        }
1543
1544        public boolean hasIndexElement() { 
1545          return this.index != null && !this.index.isEmpty();
1546        }
1547
1548        public boolean hasIndex() { 
1549          return this.index != null && !this.index.isEmpty();
1550        }
1551
1552        /**
1553         * @param value {@link #index} (Abstract name given to an origin server in this test script.  The name is provided as a number starting at 1.). This is the underlying object with id, value and extensions. The accessor "getIndex" gives direct access to the value
1554         */
1555        public TestScriptOriginComponent setIndexElement(IntegerType value) { 
1556          this.index = value;
1557          return this;
1558        }
1559
1560        /**
1561         * @return Abstract name given to an origin server in this test script.  The name is provided as a number starting at 1.
1562         */
1563        public int getIndex() { 
1564          return this.index == null || this.index.isEmpty() ? 0 : this.index.getValue();
1565        }
1566
1567        /**
1568         * @param value Abstract name given to an origin server in this test script.  The name is provided as a number starting at 1.
1569         */
1570        public TestScriptOriginComponent setIndex(int value) { 
1571            if (this.index == null)
1572              this.index = new IntegerType();
1573            this.index.setValue(value);
1574          return this;
1575        }
1576
1577        /**
1578         * @return {@link #profile} (The type of origin profile the test system supports.)
1579         */
1580        public Coding getProfile() { 
1581          if (this.profile == null)
1582            if (Configuration.errorOnAutoCreate())
1583              throw new Error("Attempt to auto-create TestScriptOriginComponent.profile");
1584            else if (Configuration.doAutoCreate())
1585              this.profile = new Coding(); // cc
1586          return this.profile;
1587        }
1588
1589        public boolean hasProfile() { 
1590          return this.profile != null && !this.profile.isEmpty();
1591        }
1592
1593        /**
1594         * @param value {@link #profile} (The type of origin profile the test system supports.)
1595         */
1596        public TestScriptOriginComponent setProfile(Coding value) { 
1597          this.profile = value;
1598          return this;
1599        }
1600
1601        /**
1602         * @return {@link #url} (The explicit url path of the origin server used in this test script.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1603         */
1604        public UrlType getUrlElement() { 
1605          if (this.url == null)
1606            if (Configuration.errorOnAutoCreate())
1607              throw new Error("Attempt to auto-create TestScriptOriginComponent.url");
1608            else if (Configuration.doAutoCreate())
1609              this.url = new UrlType(); // bb
1610          return this.url;
1611        }
1612
1613        public boolean hasUrlElement() { 
1614          return this.url != null && !this.url.isEmpty();
1615        }
1616
1617        public boolean hasUrl() { 
1618          return this.url != null && !this.url.isEmpty();
1619        }
1620
1621        /**
1622         * @param value {@link #url} (The explicit url path of the origin server used in this test script.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1623         */
1624        public TestScriptOriginComponent setUrlElement(UrlType value) { 
1625          this.url = value;
1626          return this;
1627        }
1628
1629        /**
1630         * @return The explicit url path of the origin server used in this test script.
1631         */
1632        public String getUrl() { 
1633          return this.url == null ? null : this.url.getValue();
1634        }
1635
1636        /**
1637         * @param value The explicit url path of the origin server used in this test script.
1638         */
1639        public TestScriptOriginComponent setUrl(String value) { 
1640          if (Utilities.noString(value))
1641            this.url = null;
1642          else {
1643            if (this.url == null)
1644              this.url = new UrlType();
1645            this.url.setValue(value);
1646          }
1647          return this;
1648        }
1649
1650        protected void listChildren(List<Property> children) {
1651          super.listChildren(children);
1652          children.add(new Property("index", "integer", "Abstract name given to an origin server in this test script.  The name is provided as a number starting at 1.", 0, 1, index));
1653          children.add(new Property("profile", "Coding", "The type of origin profile the test system supports.", 0, 1, profile));
1654          children.add(new Property("url", "url", "The explicit url path of the origin server used in this test script.", 0, 1, url));
1655        }
1656
1657        @Override
1658        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1659          switch (_hash) {
1660          case 100346066: /*index*/  return new Property("index", "integer", "Abstract name given to an origin server in this test script.  The name is provided as a number starting at 1.", 0, 1, index);
1661          case -309425751: /*profile*/  return new Property("profile", "Coding", "The type of origin profile the test system supports.", 0, 1, profile);
1662          case 116079: /*url*/  return new Property("url", "url", "The explicit url path of the origin server used in this test script.", 0, 1, url);
1663          default: return super.getNamedProperty(_hash, _name, _checkValid);
1664          }
1665
1666        }
1667
1668      @Override
1669      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1670        switch (hash) {
1671        case 100346066: /*index*/ return this.index == null ? new Base[0] : new Base[] {this.index}; // IntegerType
1672        case -309425751: /*profile*/ return this.profile == null ? new Base[0] : new Base[] {this.profile}; // Coding
1673        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UrlType
1674        default: return super.getProperty(hash, name, checkValid);
1675        }
1676
1677      }
1678
1679      @Override
1680      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1681        switch (hash) {
1682        case 100346066: // index
1683          this.index = TypeConvertor.castToInteger(value); // IntegerType
1684          return value;
1685        case -309425751: // profile
1686          this.profile = TypeConvertor.castToCoding(value); // Coding
1687          return value;
1688        case 116079: // url
1689          this.url = TypeConvertor.castToUrl(value); // UrlType
1690          return value;
1691        default: return super.setProperty(hash, name, value);
1692        }
1693
1694      }
1695
1696      @Override
1697      public Base setProperty(String name, Base value) throws FHIRException {
1698        if (name.equals("index")) {
1699          this.index = TypeConvertor.castToInteger(value); // IntegerType
1700        } else if (name.equals("profile")) {
1701          this.profile = TypeConvertor.castToCoding(value); // Coding
1702        } else if (name.equals("url")) {
1703          this.url = TypeConvertor.castToUrl(value); // UrlType
1704        } else
1705          return super.setProperty(name, value);
1706        return value;
1707      }
1708
1709  @Override
1710  public void removeChild(String name, Base value) throws FHIRException {
1711        if (name.equals("index")) {
1712          this.index = null;
1713        } else if (name.equals("profile")) {
1714          this.profile = null;
1715        } else if (name.equals("url")) {
1716          this.url = null;
1717        } else
1718          super.removeChild(name, value);
1719        
1720      }
1721
1722      @Override
1723      public Base makeProperty(int hash, String name) throws FHIRException {
1724        switch (hash) {
1725        case 100346066:  return getIndexElement();
1726        case -309425751:  return getProfile();
1727        case 116079:  return getUrlElement();
1728        default: return super.makeProperty(hash, name);
1729        }
1730
1731      }
1732
1733      @Override
1734      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1735        switch (hash) {
1736        case 100346066: /*index*/ return new String[] {"integer"};
1737        case -309425751: /*profile*/ return new String[] {"Coding"};
1738        case 116079: /*url*/ return new String[] {"url"};
1739        default: return super.getTypesForProperty(hash, name);
1740        }
1741
1742      }
1743
1744      @Override
1745      public Base addChild(String name) throws FHIRException {
1746        if (name.equals("index")) {
1747          throw new FHIRException("Cannot call addChild on a singleton property TestScript.origin.index");
1748        }
1749        else if (name.equals("profile")) {
1750          this.profile = new Coding();
1751          return this.profile;
1752        }
1753        else if (name.equals("url")) {
1754          throw new FHIRException("Cannot call addChild on a singleton property TestScript.origin.url");
1755        }
1756        else
1757          return super.addChild(name);
1758      }
1759
1760      public TestScriptOriginComponent copy() {
1761        TestScriptOriginComponent dst = new TestScriptOriginComponent();
1762        copyValues(dst);
1763        return dst;
1764      }
1765
1766      public void copyValues(TestScriptOriginComponent dst) {
1767        super.copyValues(dst);
1768        dst.index = index == null ? null : index.copy();
1769        dst.profile = profile == null ? null : profile.copy();
1770        dst.url = url == null ? null : url.copy();
1771      }
1772
1773      @Override
1774      public boolean equalsDeep(Base other_) {
1775        if (!super.equalsDeep(other_))
1776          return false;
1777        if (!(other_ instanceof TestScriptOriginComponent))
1778          return false;
1779        TestScriptOriginComponent o = (TestScriptOriginComponent) other_;
1780        return compareDeep(index, o.index, true) && compareDeep(profile, o.profile, true) && compareDeep(url, o.url, true)
1781          ;
1782      }
1783
1784      @Override
1785      public boolean equalsShallow(Base other_) {
1786        if (!super.equalsShallow(other_))
1787          return false;
1788        if (!(other_ instanceof TestScriptOriginComponent))
1789          return false;
1790        TestScriptOriginComponent o = (TestScriptOriginComponent) other_;
1791        return compareValues(index, o.index, true) && compareValues(url, o.url, true);
1792      }
1793
1794      public boolean isEmpty() {
1795        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(index, profile, url);
1796      }
1797
1798  public String fhirType() {
1799    return "TestScript.origin";
1800
1801  }
1802
1803  }
1804
1805    @Block()
1806    public static class TestScriptDestinationComponent extends BackboneElement implements IBaseBackboneElement {
1807        /**
1808         * Abstract name given to a destination server in this test script.  The name is provided as a number starting at 1.
1809         */
1810        @Child(name = "index", type = {IntegerType.class}, order=1, min=1, max=1, modifier=false, summary=false)
1811        @Description(shortDefinition="The index of the abstract destination server starting at 1", formalDefinition="Abstract name given to a destination server in this test script.  The name is provided as a number starting at 1." )
1812        protected IntegerType index;
1813
1814        /**
1815         * The type of destination profile the test system supports.
1816         */
1817        @Child(name = "profile", type = {Coding.class}, order=2, min=1, max=1, modifier=false, summary=false)
1818        @Description(shortDefinition="FHIR-Server | FHIR-SDC-FormManager | FHIR-SDC-FormReceiver | FHIR-SDC-FormProcessor", formalDefinition="The type of destination profile the test system supports." )
1819        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/testscript-profile-destination-types")
1820        protected Coding profile;
1821
1822        /**
1823         * The explicit url path of the destination server used in this test script.
1824         */
1825        @Child(name = "url", type = {UrlType.class}, order=3, min=0, max=1, modifier=false, summary=false)
1826        @Description(shortDefinition="The url path of the destination server", formalDefinition="The explicit url path of the destination server used in this test script." )
1827        protected UrlType url;
1828
1829        private static final long serialVersionUID = -188072923L;
1830
1831    /**
1832     * Constructor
1833     */
1834      public TestScriptDestinationComponent() {
1835        super();
1836      }
1837
1838    /**
1839     * Constructor
1840     */
1841      public TestScriptDestinationComponent(int index, Coding profile) {
1842        super();
1843        this.setIndex(index);
1844        this.setProfile(profile);
1845      }
1846
1847        /**
1848         * @return {@link #index} (Abstract name given to a destination server in this test script.  The name is provided as a number starting at 1.). This is the underlying object with id, value and extensions. The accessor "getIndex" gives direct access to the value
1849         */
1850        public IntegerType getIndexElement() { 
1851          if (this.index == null)
1852            if (Configuration.errorOnAutoCreate())
1853              throw new Error("Attempt to auto-create TestScriptDestinationComponent.index");
1854            else if (Configuration.doAutoCreate())
1855              this.index = new IntegerType(); // bb
1856          return this.index;
1857        }
1858
1859        public boolean hasIndexElement() { 
1860          return this.index != null && !this.index.isEmpty();
1861        }
1862
1863        public boolean hasIndex() { 
1864          return this.index != null && !this.index.isEmpty();
1865        }
1866
1867        /**
1868         * @param value {@link #index} (Abstract name given to a destination server in this test script.  The name is provided as a number starting at 1.). This is the underlying object with id, value and extensions. The accessor "getIndex" gives direct access to the value
1869         */
1870        public TestScriptDestinationComponent setIndexElement(IntegerType value) { 
1871          this.index = value;
1872          return this;
1873        }
1874
1875        /**
1876         * @return Abstract name given to a destination server in this test script.  The name is provided as a number starting at 1.
1877         */
1878        public int getIndex() { 
1879          return this.index == null || this.index.isEmpty() ? 0 : this.index.getValue();
1880        }
1881
1882        /**
1883         * @param value Abstract name given to a destination server in this test script.  The name is provided as a number starting at 1.
1884         */
1885        public TestScriptDestinationComponent setIndex(int value) { 
1886            if (this.index == null)
1887              this.index = new IntegerType();
1888            this.index.setValue(value);
1889          return this;
1890        }
1891
1892        /**
1893         * @return {@link #profile} (The type of destination profile the test system supports.)
1894         */
1895        public Coding getProfile() { 
1896          if (this.profile == null)
1897            if (Configuration.errorOnAutoCreate())
1898              throw new Error("Attempt to auto-create TestScriptDestinationComponent.profile");
1899            else if (Configuration.doAutoCreate())
1900              this.profile = new Coding(); // cc
1901          return this.profile;
1902        }
1903
1904        public boolean hasProfile() { 
1905          return this.profile != null && !this.profile.isEmpty();
1906        }
1907
1908        /**
1909         * @param value {@link #profile} (The type of destination profile the test system supports.)
1910         */
1911        public TestScriptDestinationComponent setProfile(Coding value) { 
1912          this.profile = value;
1913          return this;
1914        }
1915
1916        /**
1917         * @return {@link #url} (The explicit url path of the destination server used in this test script.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1918         */
1919        public UrlType getUrlElement() { 
1920          if (this.url == null)
1921            if (Configuration.errorOnAutoCreate())
1922              throw new Error("Attempt to auto-create TestScriptDestinationComponent.url");
1923            else if (Configuration.doAutoCreate())
1924              this.url = new UrlType(); // bb
1925          return this.url;
1926        }
1927
1928        public boolean hasUrlElement() { 
1929          return this.url != null && !this.url.isEmpty();
1930        }
1931
1932        public boolean hasUrl() { 
1933          return this.url != null && !this.url.isEmpty();
1934        }
1935
1936        /**
1937         * @param value {@link #url} (The explicit url path of the destination server used in this test script.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
1938         */
1939        public TestScriptDestinationComponent setUrlElement(UrlType value) { 
1940          this.url = value;
1941          return this;
1942        }
1943
1944        /**
1945         * @return The explicit url path of the destination server used in this test script.
1946         */
1947        public String getUrl() { 
1948          return this.url == null ? null : this.url.getValue();
1949        }
1950
1951        /**
1952         * @param value The explicit url path of the destination server used in this test script.
1953         */
1954        public TestScriptDestinationComponent setUrl(String value) { 
1955          if (Utilities.noString(value))
1956            this.url = null;
1957          else {
1958            if (this.url == null)
1959              this.url = new UrlType();
1960            this.url.setValue(value);
1961          }
1962          return this;
1963        }
1964
1965        protected void listChildren(List<Property> children) {
1966          super.listChildren(children);
1967          children.add(new Property("index", "integer", "Abstract name given to a destination server in this test script.  The name is provided as a number starting at 1.", 0, 1, index));
1968          children.add(new Property("profile", "Coding", "The type of destination profile the test system supports.", 0, 1, profile));
1969          children.add(new Property("url", "url", "The explicit url path of the destination server used in this test script.", 0, 1, url));
1970        }
1971
1972        @Override
1973        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1974          switch (_hash) {
1975          case 100346066: /*index*/  return new Property("index", "integer", "Abstract name given to a destination server in this test script.  The name is provided as a number starting at 1.", 0, 1, index);
1976          case -309425751: /*profile*/  return new Property("profile", "Coding", "The type of destination profile the test system supports.", 0, 1, profile);
1977          case 116079: /*url*/  return new Property("url", "url", "The explicit url path of the destination server used in this test script.", 0, 1, url);
1978          default: return super.getNamedProperty(_hash, _name, _checkValid);
1979          }
1980
1981        }
1982
1983      @Override
1984      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1985        switch (hash) {
1986        case 100346066: /*index*/ return this.index == null ? new Base[0] : new Base[] {this.index}; // IntegerType
1987        case -309425751: /*profile*/ return this.profile == null ? new Base[0] : new Base[] {this.profile}; // Coding
1988        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UrlType
1989        default: return super.getProperty(hash, name, checkValid);
1990        }
1991
1992      }
1993
1994      @Override
1995      public Base setProperty(int hash, String name, Base value) throws FHIRException {
1996        switch (hash) {
1997        case 100346066: // index
1998          this.index = TypeConvertor.castToInteger(value); // IntegerType
1999          return value;
2000        case -309425751: // profile
2001          this.profile = TypeConvertor.castToCoding(value); // Coding
2002          return value;
2003        case 116079: // url
2004          this.url = TypeConvertor.castToUrl(value); // UrlType
2005          return value;
2006        default: return super.setProperty(hash, name, value);
2007        }
2008
2009      }
2010
2011      @Override
2012      public Base setProperty(String name, Base value) throws FHIRException {
2013        if (name.equals("index")) {
2014          this.index = TypeConvertor.castToInteger(value); // IntegerType
2015        } else if (name.equals("profile")) {
2016          this.profile = TypeConvertor.castToCoding(value); // Coding
2017        } else if (name.equals("url")) {
2018          this.url = TypeConvertor.castToUrl(value); // UrlType
2019        } else
2020          return super.setProperty(name, value);
2021        return value;
2022      }
2023
2024  @Override
2025  public void removeChild(String name, Base value) throws FHIRException {
2026        if (name.equals("index")) {
2027          this.index = null;
2028        } else if (name.equals("profile")) {
2029          this.profile = null;
2030        } else if (name.equals("url")) {
2031          this.url = null;
2032        } else
2033          super.removeChild(name, value);
2034        
2035      }
2036
2037      @Override
2038      public Base makeProperty(int hash, String name) throws FHIRException {
2039        switch (hash) {
2040        case 100346066:  return getIndexElement();
2041        case -309425751:  return getProfile();
2042        case 116079:  return getUrlElement();
2043        default: return super.makeProperty(hash, name);
2044        }
2045
2046      }
2047
2048      @Override
2049      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2050        switch (hash) {
2051        case 100346066: /*index*/ return new String[] {"integer"};
2052        case -309425751: /*profile*/ return new String[] {"Coding"};
2053        case 116079: /*url*/ return new String[] {"url"};
2054        default: return super.getTypesForProperty(hash, name);
2055        }
2056
2057      }
2058
2059      @Override
2060      public Base addChild(String name) throws FHIRException {
2061        if (name.equals("index")) {
2062          throw new FHIRException("Cannot call addChild on a singleton property TestScript.destination.index");
2063        }
2064        else if (name.equals("profile")) {
2065          this.profile = new Coding();
2066          return this.profile;
2067        }
2068        else if (name.equals("url")) {
2069          throw new FHIRException("Cannot call addChild on a singleton property TestScript.destination.url");
2070        }
2071        else
2072          return super.addChild(name);
2073      }
2074
2075      public TestScriptDestinationComponent copy() {
2076        TestScriptDestinationComponent dst = new TestScriptDestinationComponent();
2077        copyValues(dst);
2078        return dst;
2079      }
2080
2081      public void copyValues(TestScriptDestinationComponent dst) {
2082        super.copyValues(dst);
2083        dst.index = index == null ? null : index.copy();
2084        dst.profile = profile == null ? null : profile.copy();
2085        dst.url = url == null ? null : url.copy();
2086      }
2087
2088      @Override
2089      public boolean equalsDeep(Base other_) {
2090        if (!super.equalsDeep(other_))
2091          return false;
2092        if (!(other_ instanceof TestScriptDestinationComponent))
2093          return false;
2094        TestScriptDestinationComponent o = (TestScriptDestinationComponent) other_;
2095        return compareDeep(index, o.index, true) && compareDeep(profile, o.profile, true) && compareDeep(url, o.url, true)
2096          ;
2097      }
2098
2099      @Override
2100      public boolean equalsShallow(Base other_) {
2101        if (!super.equalsShallow(other_))
2102          return false;
2103        if (!(other_ instanceof TestScriptDestinationComponent))
2104          return false;
2105        TestScriptDestinationComponent o = (TestScriptDestinationComponent) other_;
2106        return compareValues(index, o.index, true) && compareValues(url, o.url, true);
2107      }
2108
2109      public boolean isEmpty() {
2110        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(index, profile, url);
2111      }
2112
2113  public String fhirType() {
2114    return "TestScript.destination";
2115
2116  }
2117
2118  }
2119
2120    @Block()
2121    public static class TestScriptMetadataComponent extends BackboneElement implements IBaseBackboneElement {
2122        /**
2123         * A link to the FHIR specification that this test is covering.
2124         */
2125        @Child(name = "link", type = {}, order=1, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2126        @Description(shortDefinition="Links to the FHIR specification", formalDefinition="A link to the FHIR specification that this test is covering." )
2127        protected List<TestScriptMetadataLinkComponent> link;
2128
2129        /**
2130         * Capabilities that must exist and are assumed to function correctly on the FHIR server being tested.
2131         */
2132        @Child(name = "capability", type = {}, order=2, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2133        @Description(shortDefinition="Capabilities  that are assumed to function correctly on the FHIR server being tested", formalDefinition="Capabilities that must exist and are assumed to function correctly on the FHIR server being tested." )
2134        protected List<TestScriptMetadataCapabilityComponent> capability;
2135
2136        private static final long serialVersionUID = 745183328L;
2137
2138    /**
2139     * Constructor
2140     */
2141      public TestScriptMetadataComponent() {
2142        super();
2143      }
2144
2145    /**
2146     * Constructor
2147     */
2148      public TestScriptMetadataComponent(TestScriptMetadataCapabilityComponent capability) {
2149        super();
2150        this.addCapability(capability);
2151      }
2152
2153        /**
2154         * @return {@link #link} (A link to the FHIR specification that this test is covering.)
2155         */
2156        public List<TestScriptMetadataLinkComponent> getLink() { 
2157          if (this.link == null)
2158            this.link = new ArrayList<TestScriptMetadataLinkComponent>();
2159          return this.link;
2160        }
2161
2162        /**
2163         * @return Returns a reference to <code>this</code> for easy method chaining
2164         */
2165        public TestScriptMetadataComponent setLink(List<TestScriptMetadataLinkComponent> theLink) { 
2166          this.link = theLink;
2167          return this;
2168        }
2169
2170        public boolean hasLink() { 
2171          if (this.link == null)
2172            return false;
2173          for (TestScriptMetadataLinkComponent item : this.link)
2174            if (!item.isEmpty())
2175              return true;
2176          return false;
2177        }
2178
2179        public TestScriptMetadataLinkComponent addLink() { //3
2180          TestScriptMetadataLinkComponent t = new TestScriptMetadataLinkComponent();
2181          if (this.link == null)
2182            this.link = new ArrayList<TestScriptMetadataLinkComponent>();
2183          this.link.add(t);
2184          return t;
2185        }
2186
2187        public TestScriptMetadataComponent addLink(TestScriptMetadataLinkComponent t) { //3
2188          if (t == null)
2189            return this;
2190          if (this.link == null)
2191            this.link = new ArrayList<TestScriptMetadataLinkComponent>();
2192          this.link.add(t);
2193          return this;
2194        }
2195
2196        /**
2197         * @return The first repetition of repeating field {@link #link}, creating it if it does not already exist {3}
2198         */
2199        public TestScriptMetadataLinkComponent getLinkFirstRep() { 
2200          if (getLink().isEmpty()) {
2201            addLink();
2202          }
2203          return getLink().get(0);
2204        }
2205
2206        /**
2207         * @return {@link #capability} (Capabilities that must exist and are assumed to function correctly on the FHIR server being tested.)
2208         */
2209        public List<TestScriptMetadataCapabilityComponent> getCapability() { 
2210          if (this.capability == null)
2211            this.capability = new ArrayList<TestScriptMetadataCapabilityComponent>();
2212          return this.capability;
2213        }
2214
2215        /**
2216         * @return Returns a reference to <code>this</code> for easy method chaining
2217         */
2218        public TestScriptMetadataComponent setCapability(List<TestScriptMetadataCapabilityComponent> theCapability) { 
2219          this.capability = theCapability;
2220          return this;
2221        }
2222
2223        public boolean hasCapability() { 
2224          if (this.capability == null)
2225            return false;
2226          for (TestScriptMetadataCapabilityComponent item : this.capability)
2227            if (!item.isEmpty())
2228              return true;
2229          return false;
2230        }
2231
2232        public TestScriptMetadataCapabilityComponent addCapability() { //3
2233          TestScriptMetadataCapabilityComponent t = new TestScriptMetadataCapabilityComponent();
2234          if (this.capability == null)
2235            this.capability = new ArrayList<TestScriptMetadataCapabilityComponent>();
2236          this.capability.add(t);
2237          return t;
2238        }
2239
2240        public TestScriptMetadataComponent addCapability(TestScriptMetadataCapabilityComponent t) { //3
2241          if (t == null)
2242            return this;
2243          if (this.capability == null)
2244            this.capability = new ArrayList<TestScriptMetadataCapabilityComponent>();
2245          this.capability.add(t);
2246          return this;
2247        }
2248
2249        /**
2250         * @return The first repetition of repeating field {@link #capability}, creating it if it does not already exist {3}
2251         */
2252        public TestScriptMetadataCapabilityComponent getCapabilityFirstRep() { 
2253          if (getCapability().isEmpty()) {
2254            addCapability();
2255          }
2256          return getCapability().get(0);
2257        }
2258
2259        protected void listChildren(List<Property> children) {
2260          super.listChildren(children);
2261          children.add(new Property("link", "", "A link to the FHIR specification that this test is covering.", 0, java.lang.Integer.MAX_VALUE, link));
2262          children.add(new Property("capability", "", "Capabilities that must exist and are assumed to function correctly on the FHIR server being tested.", 0, java.lang.Integer.MAX_VALUE, capability));
2263        }
2264
2265        @Override
2266        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2267          switch (_hash) {
2268          case 3321850: /*link*/  return new Property("link", "", "A link to the FHIR specification that this test is covering.", 0, java.lang.Integer.MAX_VALUE, link);
2269          case -783669992: /*capability*/  return new Property("capability", "", "Capabilities that must exist and are assumed to function correctly on the FHIR server being tested.", 0, java.lang.Integer.MAX_VALUE, capability);
2270          default: return super.getNamedProperty(_hash, _name, _checkValid);
2271          }
2272
2273        }
2274
2275      @Override
2276      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2277        switch (hash) {
2278        case 3321850: /*link*/ return this.link == null ? new Base[0] : this.link.toArray(new Base[this.link.size()]); // TestScriptMetadataLinkComponent
2279        case -783669992: /*capability*/ return this.capability == null ? new Base[0] : this.capability.toArray(new Base[this.capability.size()]); // TestScriptMetadataCapabilityComponent
2280        default: return super.getProperty(hash, name, checkValid);
2281        }
2282
2283      }
2284
2285      @Override
2286      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2287        switch (hash) {
2288        case 3321850: // link
2289          this.getLink().add((TestScriptMetadataLinkComponent) value); // TestScriptMetadataLinkComponent
2290          return value;
2291        case -783669992: // capability
2292          this.getCapability().add((TestScriptMetadataCapabilityComponent) value); // TestScriptMetadataCapabilityComponent
2293          return value;
2294        default: return super.setProperty(hash, name, value);
2295        }
2296
2297      }
2298
2299      @Override
2300      public Base setProperty(String name, Base value) throws FHIRException {
2301        if (name.equals("link")) {
2302          this.getLink().add((TestScriptMetadataLinkComponent) value);
2303        } else if (name.equals("capability")) {
2304          this.getCapability().add((TestScriptMetadataCapabilityComponent) value);
2305        } else
2306          return super.setProperty(name, value);
2307        return value;
2308      }
2309
2310  @Override
2311  public void removeChild(String name, Base value) throws FHIRException {
2312        if (name.equals("link")) {
2313          this.getLink().remove((TestScriptMetadataLinkComponent) value);
2314        } else if (name.equals("capability")) {
2315          this.getCapability().remove((TestScriptMetadataCapabilityComponent) value);
2316        } else
2317          super.removeChild(name, value);
2318        
2319      }
2320
2321      @Override
2322      public Base makeProperty(int hash, String name) throws FHIRException {
2323        switch (hash) {
2324        case 3321850:  return addLink(); 
2325        case -783669992:  return addCapability(); 
2326        default: return super.makeProperty(hash, name);
2327        }
2328
2329      }
2330
2331      @Override
2332      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2333        switch (hash) {
2334        case 3321850: /*link*/ return new String[] {};
2335        case -783669992: /*capability*/ return new String[] {};
2336        default: return super.getTypesForProperty(hash, name);
2337        }
2338
2339      }
2340
2341      @Override
2342      public Base addChild(String name) throws FHIRException {
2343        if (name.equals("link")) {
2344          return addLink();
2345        }
2346        else if (name.equals("capability")) {
2347          return addCapability();
2348        }
2349        else
2350          return super.addChild(name);
2351      }
2352
2353      public TestScriptMetadataComponent copy() {
2354        TestScriptMetadataComponent dst = new TestScriptMetadataComponent();
2355        copyValues(dst);
2356        return dst;
2357      }
2358
2359      public void copyValues(TestScriptMetadataComponent dst) {
2360        super.copyValues(dst);
2361        if (link != null) {
2362          dst.link = new ArrayList<TestScriptMetadataLinkComponent>();
2363          for (TestScriptMetadataLinkComponent i : link)
2364            dst.link.add(i.copy());
2365        };
2366        if (capability != null) {
2367          dst.capability = new ArrayList<TestScriptMetadataCapabilityComponent>();
2368          for (TestScriptMetadataCapabilityComponent i : capability)
2369            dst.capability.add(i.copy());
2370        };
2371      }
2372
2373      @Override
2374      public boolean equalsDeep(Base other_) {
2375        if (!super.equalsDeep(other_))
2376          return false;
2377        if (!(other_ instanceof TestScriptMetadataComponent))
2378          return false;
2379        TestScriptMetadataComponent o = (TestScriptMetadataComponent) other_;
2380        return compareDeep(link, o.link, true) && compareDeep(capability, o.capability, true);
2381      }
2382
2383      @Override
2384      public boolean equalsShallow(Base other_) {
2385        if (!super.equalsShallow(other_))
2386          return false;
2387        if (!(other_ instanceof TestScriptMetadataComponent))
2388          return false;
2389        TestScriptMetadataComponent o = (TestScriptMetadataComponent) other_;
2390        return true;
2391      }
2392
2393      public boolean isEmpty() {
2394        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(link, capability);
2395      }
2396
2397  public String fhirType() {
2398    return "TestScript.metadata";
2399
2400  }
2401
2402  }
2403
2404    @Block()
2405    public static class TestScriptMetadataLinkComponent extends BackboneElement implements IBaseBackboneElement {
2406        /**
2407         * URL to a particular requirement or feature within the FHIR specification.
2408         */
2409        @Child(name = "url", type = {UriType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2410        @Description(shortDefinition="URL to the specification", formalDefinition="URL to a particular requirement or feature within the FHIR specification." )
2411        protected UriType url;
2412
2413        /**
2414         * Short description of the link.
2415         */
2416        @Child(name = "description", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
2417        @Description(shortDefinition="Short description", formalDefinition="Short description of the link." )
2418        protected StringType description;
2419
2420        private static final long serialVersionUID = 213372298L;
2421
2422    /**
2423     * Constructor
2424     */
2425      public TestScriptMetadataLinkComponent() {
2426        super();
2427      }
2428
2429    /**
2430     * Constructor
2431     */
2432      public TestScriptMetadataLinkComponent(String url) {
2433        super();
2434        this.setUrl(url);
2435      }
2436
2437        /**
2438         * @return {@link #url} (URL to a particular requirement or feature within the FHIR specification.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2439         */
2440        public UriType getUrlElement() { 
2441          if (this.url == null)
2442            if (Configuration.errorOnAutoCreate())
2443              throw new Error("Attempt to auto-create TestScriptMetadataLinkComponent.url");
2444            else if (Configuration.doAutoCreate())
2445              this.url = new UriType(); // bb
2446          return this.url;
2447        }
2448
2449        public boolean hasUrlElement() { 
2450          return this.url != null && !this.url.isEmpty();
2451        }
2452
2453        public boolean hasUrl() { 
2454          return this.url != null && !this.url.isEmpty();
2455        }
2456
2457        /**
2458         * @param value {@link #url} (URL to a particular requirement or feature within the FHIR specification.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
2459         */
2460        public TestScriptMetadataLinkComponent setUrlElement(UriType value) { 
2461          this.url = value;
2462          return this;
2463        }
2464
2465        /**
2466         * @return URL to a particular requirement or feature within the FHIR specification.
2467         */
2468        public String getUrl() { 
2469          return this.url == null ? null : this.url.getValue();
2470        }
2471
2472        /**
2473         * @param value URL to a particular requirement or feature within the FHIR specification.
2474         */
2475        public TestScriptMetadataLinkComponent setUrl(String value) { 
2476            if (this.url == null)
2477              this.url = new UriType();
2478            this.url.setValue(value);
2479          return this;
2480        }
2481
2482        /**
2483         * @return {@link #description} (Short description of the link.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2484         */
2485        public StringType getDescriptionElement() { 
2486          if (this.description == null)
2487            if (Configuration.errorOnAutoCreate())
2488              throw new Error("Attempt to auto-create TestScriptMetadataLinkComponent.description");
2489            else if (Configuration.doAutoCreate())
2490              this.description = new StringType(); // bb
2491          return this.description;
2492        }
2493
2494        public boolean hasDescriptionElement() { 
2495          return this.description != null && !this.description.isEmpty();
2496        }
2497
2498        public boolean hasDescription() { 
2499          return this.description != null && !this.description.isEmpty();
2500        }
2501
2502        /**
2503         * @param value {@link #description} (Short description of the link.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2504         */
2505        public TestScriptMetadataLinkComponent setDescriptionElement(StringType value) { 
2506          this.description = value;
2507          return this;
2508        }
2509
2510        /**
2511         * @return Short description of the link.
2512         */
2513        public String getDescription() { 
2514          return this.description == null ? null : this.description.getValue();
2515        }
2516
2517        /**
2518         * @param value Short description of the link.
2519         */
2520        public TestScriptMetadataLinkComponent setDescription(String value) { 
2521          if (Utilities.noString(value))
2522            this.description = null;
2523          else {
2524            if (this.description == null)
2525              this.description = new StringType();
2526            this.description.setValue(value);
2527          }
2528          return this;
2529        }
2530
2531        protected void listChildren(List<Property> children) {
2532          super.listChildren(children);
2533          children.add(new Property("url", "uri", "URL to a particular requirement or feature within the FHIR specification.", 0, 1, url));
2534          children.add(new Property("description", "string", "Short description of the link.", 0, 1, description));
2535        }
2536
2537        @Override
2538        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2539          switch (_hash) {
2540          case 116079: /*url*/  return new Property("url", "uri", "URL to a particular requirement or feature within the FHIR specification.", 0, 1, url);
2541          case -1724546052: /*description*/  return new Property("description", "string", "Short description of the link.", 0, 1, description);
2542          default: return super.getNamedProperty(_hash, _name, _checkValid);
2543          }
2544
2545        }
2546
2547      @Override
2548      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2549        switch (hash) {
2550        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // UriType
2551        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
2552        default: return super.getProperty(hash, name, checkValid);
2553        }
2554
2555      }
2556
2557      @Override
2558      public Base setProperty(int hash, String name, Base value) throws FHIRException {
2559        switch (hash) {
2560        case 116079: // url
2561          this.url = TypeConvertor.castToUri(value); // UriType
2562          return value;
2563        case -1724546052: // description
2564          this.description = TypeConvertor.castToString(value); // StringType
2565          return value;
2566        default: return super.setProperty(hash, name, value);
2567        }
2568
2569      }
2570
2571      @Override
2572      public Base setProperty(String name, Base value) throws FHIRException {
2573        if (name.equals("url")) {
2574          this.url = TypeConvertor.castToUri(value); // UriType
2575        } else if (name.equals("description")) {
2576          this.description = TypeConvertor.castToString(value); // StringType
2577        } else
2578          return super.setProperty(name, value);
2579        return value;
2580      }
2581
2582  @Override
2583  public void removeChild(String name, Base value) throws FHIRException {
2584        if (name.equals("url")) {
2585          this.url = null;
2586        } else if (name.equals("description")) {
2587          this.description = null;
2588        } else
2589          super.removeChild(name, value);
2590        
2591      }
2592
2593      @Override
2594      public Base makeProperty(int hash, String name) throws FHIRException {
2595        switch (hash) {
2596        case 116079:  return getUrlElement();
2597        case -1724546052:  return getDescriptionElement();
2598        default: return super.makeProperty(hash, name);
2599        }
2600
2601      }
2602
2603      @Override
2604      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
2605        switch (hash) {
2606        case 116079: /*url*/ return new String[] {"uri"};
2607        case -1724546052: /*description*/ return new String[] {"string"};
2608        default: return super.getTypesForProperty(hash, name);
2609        }
2610
2611      }
2612
2613      @Override
2614      public Base addChild(String name) throws FHIRException {
2615        if (name.equals("url")) {
2616          throw new FHIRException("Cannot call addChild on a singleton property TestScript.metadata.link.url");
2617        }
2618        else if (name.equals("description")) {
2619          throw new FHIRException("Cannot call addChild on a singleton property TestScript.metadata.link.description");
2620        }
2621        else
2622          return super.addChild(name);
2623      }
2624
2625      public TestScriptMetadataLinkComponent copy() {
2626        TestScriptMetadataLinkComponent dst = new TestScriptMetadataLinkComponent();
2627        copyValues(dst);
2628        return dst;
2629      }
2630
2631      public void copyValues(TestScriptMetadataLinkComponent dst) {
2632        super.copyValues(dst);
2633        dst.url = url == null ? null : url.copy();
2634        dst.description = description == null ? null : description.copy();
2635      }
2636
2637      @Override
2638      public boolean equalsDeep(Base other_) {
2639        if (!super.equalsDeep(other_))
2640          return false;
2641        if (!(other_ instanceof TestScriptMetadataLinkComponent))
2642          return false;
2643        TestScriptMetadataLinkComponent o = (TestScriptMetadataLinkComponent) other_;
2644        return compareDeep(url, o.url, true) && compareDeep(description, o.description, true);
2645      }
2646
2647      @Override
2648      public boolean equalsShallow(Base other_) {
2649        if (!super.equalsShallow(other_))
2650          return false;
2651        if (!(other_ instanceof TestScriptMetadataLinkComponent))
2652          return false;
2653        TestScriptMetadataLinkComponent o = (TestScriptMetadataLinkComponent) other_;
2654        return compareValues(url, o.url, true) && compareValues(description, o.description, true);
2655      }
2656
2657      public boolean isEmpty() {
2658        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(url, description);
2659      }
2660
2661  public String fhirType() {
2662    return "TestScript.metadata.link";
2663
2664  }
2665
2666  }
2667
2668    @Block()
2669    public static class TestScriptMetadataCapabilityComponent extends BackboneElement implements IBaseBackboneElement {
2670        /**
2671         * Whether or not the test execution will require the given capabilities of the server in order for this test script to execute.
2672         */
2673        @Child(name = "required", type = {BooleanType.class}, order=1, min=1, max=1, modifier=false, summary=false)
2674        @Description(shortDefinition="Are the capabilities required?", formalDefinition="Whether or not the test execution will require the given capabilities of the server in order for this test script to execute." )
2675        protected BooleanType required;
2676
2677        /**
2678         * Whether or not the test execution will validate the given capabilities of the server in order for this test script to execute.
2679         */
2680        @Child(name = "validated", type = {BooleanType.class}, order=2, min=1, max=1, modifier=false, summary=false)
2681        @Description(shortDefinition="Are the capabilities validated?", formalDefinition="Whether or not the test execution will validate the given capabilities of the server in order for this test script to execute." )
2682        protected BooleanType validated;
2683
2684        /**
2685         * Description of the capabilities that this test script is requiring the server to support.
2686         */
2687        @Child(name = "description", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
2688        @Description(shortDefinition="The expected capabilities of the server", formalDefinition="Description of the capabilities that this test script is requiring the server to support." )
2689        protected StringType description;
2690
2691        /**
2692         * Which origin server these requirements apply to.
2693         */
2694        @Child(name = "origin", type = {IntegerType.class}, order=4, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2695        @Description(shortDefinition="Which origin server these requirements apply to", formalDefinition="Which origin server these requirements apply to." )
2696        protected List<IntegerType> origin;
2697
2698        /**
2699         * Which server these requirements apply to.
2700         */
2701        @Child(name = "destination", type = {IntegerType.class}, order=5, min=0, max=1, modifier=false, summary=false)
2702        @Description(shortDefinition="Which server these requirements apply to", formalDefinition="Which server these requirements apply to." )
2703        protected IntegerType destination;
2704
2705        /**
2706         * Links to the FHIR specification that describes this interaction and the resources involved in more detail.
2707         */
2708        @Child(name = "link", type = {UriType.class}, order=6, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
2709        @Description(shortDefinition="Links to the FHIR specification", formalDefinition="Links to the FHIR specification that describes this interaction and the resources involved in more detail." )
2710        protected List<UriType> link;
2711
2712        /**
2713         * Minimum capabilities required of server for test script to execute successfully.   If server does not meet at a minimum the referenced capability statement, then all tests in this script are skipped.
2714         */
2715        @Child(name = "capabilities", type = {CanonicalType.class}, order=7, min=1, max=1, modifier=false, summary=false)
2716        @Description(shortDefinition="Required Capability Statement", formalDefinition="Minimum capabilities required of server for test script to execute successfully.   If server does not meet at a minimum the referenced capability statement, then all tests in this script are skipped." )
2717        protected CanonicalType capabilities;
2718
2719        private static final long serialVersionUID = -1368199288L;
2720
2721    /**
2722     * Constructor
2723     */
2724      public TestScriptMetadataCapabilityComponent() {
2725        super();
2726      }
2727
2728    /**
2729     * Constructor
2730     */
2731      public TestScriptMetadataCapabilityComponent(boolean required, boolean validated, String capabilities) {
2732        super();
2733        this.setRequired(required);
2734        this.setValidated(validated);
2735        this.setCapabilities(capabilities);
2736      }
2737
2738        /**
2739         * @return {@link #required} (Whether or not the test execution will require the given capabilities of the server in order for this test script to execute.). This is the underlying object with id, value and extensions. The accessor "getRequired" gives direct access to the value
2740         */
2741        public BooleanType getRequiredElement() { 
2742          if (this.required == null)
2743            if (Configuration.errorOnAutoCreate())
2744              throw new Error("Attempt to auto-create TestScriptMetadataCapabilityComponent.required");
2745            else if (Configuration.doAutoCreate())
2746              this.required = new BooleanType(); // bb
2747          return this.required;
2748        }
2749
2750        public boolean hasRequiredElement() { 
2751          return this.required != null && !this.required.isEmpty();
2752        }
2753
2754        public boolean hasRequired() { 
2755          return this.required != null && !this.required.isEmpty();
2756        }
2757
2758        /**
2759         * @param value {@link #required} (Whether or not the test execution will require the given capabilities of the server in order for this test script to execute.). This is the underlying object with id, value and extensions. The accessor "getRequired" gives direct access to the value
2760         */
2761        public TestScriptMetadataCapabilityComponent setRequiredElement(BooleanType value) { 
2762          this.required = value;
2763          return this;
2764        }
2765
2766        /**
2767         * @return Whether or not the test execution will require the given capabilities of the server in order for this test script to execute.
2768         */
2769        public boolean getRequired() { 
2770          return this.required == null || this.required.isEmpty() ? false : this.required.getValue();
2771        }
2772
2773        /**
2774         * @param value Whether or not the test execution will require the given capabilities of the server in order for this test script to execute.
2775         */
2776        public TestScriptMetadataCapabilityComponent setRequired(boolean value) { 
2777            if (this.required == null)
2778              this.required = new BooleanType();
2779            this.required.setValue(value);
2780          return this;
2781        }
2782
2783        /**
2784         * @return {@link #validated} (Whether or not the test execution will validate the given capabilities of the server in order for this test script to execute.). This is the underlying object with id, value and extensions. The accessor "getValidated" gives direct access to the value
2785         */
2786        public BooleanType getValidatedElement() { 
2787          if (this.validated == null)
2788            if (Configuration.errorOnAutoCreate())
2789              throw new Error("Attempt to auto-create TestScriptMetadataCapabilityComponent.validated");
2790            else if (Configuration.doAutoCreate())
2791              this.validated = new BooleanType(); // bb
2792          return this.validated;
2793        }
2794
2795        public boolean hasValidatedElement() { 
2796          return this.validated != null && !this.validated.isEmpty();
2797        }
2798
2799        public boolean hasValidated() { 
2800          return this.validated != null && !this.validated.isEmpty();
2801        }
2802
2803        /**
2804         * @param value {@link #validated} (Whether or not the test execution will validate the given capabilities of the server in order for this test script to execute.). This is the underlying object with id, value and extensions. The accessor "getValidated" gives direct access to the value
2805         */
2806        public TestScriptMetadataCapabilityComponent setValidatedElement(BooleanType value) { 
2807          this.validated = value;
2808          return this;
2809        }
2810
2811        /**
2812         * @return Whether or not the test execution will validate the given capabilities of the server in order for this test script to execute.
2813         */
2814        public boolean getValidated() { 
2815          return this.validated == null || this.validated.isEmpty() ? false : this.validated.getValue();
2816        }
2817
2818        /**
2819         * @param value Whether or not the test execution will validate the given capabilities of the server in order for this test script to execute.
2820         */
2821        public TestScriptMetadataCapabilityComponent setValidated(boolean value) { 
2822            if (this.validated == null)
2823              this.validated = new BooleanType();
2824            this.validated.setValue(value);
2825          return this;
2826        }
2827
2828        /**
2829         * @return {@link #description} (Description of the capabilities that this test script is requiring the server to support.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2830         */
2831        public StringType getDescriptionElement() { 
2832          if (this.description == null)
2833            if (Configuration.errorOnAutoCreate())
2834              throw new Error("Attempt to auto-create TestScriptMetadataCapabilityComponent.description");
2835            else if (Configuration.doAutoCreate())
2836              this.description = new StringType(); // bb
2837          return this.description;
2838        }
2839
2840        public boolean hasDescriptionElement() { 
2841          return this.description != null && !this.description.isEmpty();
2842        }
2843
2844        public boolean hasDescription() { 
2845          return this.description != null && !this.description.isEmpty();
2846        }
2847
2848        /**
2849         * @param value {@link #description} (Description of the capabilities that this test script is requiring the server to support.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
2850         */
2851        public TestScriptMetadataCapabilityComponent setDescriptionElement(StringType value) { 
2852          this.description = value;
2853          return this;
2854        }
2855
2856        /**
2857         * @return Description of the capabilities that this test script is requiring the server to support.
2858         */
2859        public String getDescription() { 
2860          return this.description == null ? null : this.description.getValue();
2861        }
2862
2863        /**
2864         * @param value Description of the capabilities that this test script is requiring the server to support.
2865         */
2866        public TestScriptMetadataCapabilityComponent setDescription(String value) { 
2867          if (Utilities.noString(value))
2868            this.description = null;
2869          else {
2870            if (this.description == null)
2871              this.description = new StringType();
2872            this.description.setValue(value);
2873          }
2874          return this;
2875        }
2876
2877        /**
2878         * @return {@link #origin} (Which origin server these requirements apply to.)
2879         */
2880        public List<IntegerType> getOrigin() { 
2881          if (this.origin == null)
2882            this.origin = new ArrayList<IntegerType>();
2883          return this.origin;
2884        }
2885
2886        /**
2887         * @return Returns a reference to <code>this</code> for easy method chaining
2888         */
2889        public TestScriptMetadataCapabilityComponent setOrigin(List<IntegerType> theOrigin) { 
2890          this.origin = theOrigin;
2891          return this;
2892        }
2893
2894        public boolean hasOrigin() { 
2895          if (this.origin == null)
2896            return false;
2897          for (IntegerType item : this.origin)
2898            if (!item.isEmpty())
2899              return true;
2900          return false;
2901        }
2902
2903        /**
2904         * @return {@link #origin} (Which origin server these requirements apply to.)
2905         */
2906        public IntegerType addOriginElement() {//2 
2907          IntegerType t = new IntegerType();
2908          if (this.origin == null)
2909            this.origin = new ArrayList<IntegerType>();
2910          this.origin.add(t);
2911          return t;
2912        }
2913
2914        /**
2915         * @param value {@link #origin} (Which origin server these requirements apply to.)
2916         */
2917        public TestScriptMetadataCapabilityComponent addOrigin(int value) { //1
2918          IntegerType t = new IntegerType();
2919          t.setValue(value);
2920          if (this.origin == null)
2921            this.origin = new ArrayList<IntegerType>();
2922          this.origin.add(t);
2923          return this;
2924        }
2925
2926        /**
2927         * @param value {@link #origin} (Which origin server these requirements apply to.)
2928         */
2929        public boolean hasOrigin(int value) { 
2930          if (this.origin == null)
2931            return false;
2932          for (IntegerType v : this.origin)
2933            if (v.getValue().equals(value)) // integer
2934              return true;
2935          return false;
2936        }
2937
2938        /**
2939         * @return {@link #destination} (Which server these requirements apply to.). This is the underlying object with id, value and extensions. The accessor "getDestination" gives direct access to the value
2940         */
2941        public IntegerType getDestinationElement() { 
2942          if (this.destination == null)
2943            if (Configuration.errorOnAutoCreate())
2944              throw new Error("Attempt to auto-create TestScriptMetadataCapabilityComponent.destination");
2945            else if (Configuration.doAutoCreate())
2946              this.destination = new IntegerType(); // bb
2947          return this.destination;
2948        }
2949
2950        public boolean hasDestinationElement() { 
2951          return this.destination != null && !this.destination.isEmpty();
2952        }
2953
2954        public boolean hasDestination() { 
2955          return this.destination != null && !this.destination.isEmpty();
2956        }
2957
2958        /**
2959         * @param value {@link #destination} (Which server these requirements apply to.). This is the underlying object with id, value and extensions. The accessor "getDestination" gives direct access to the value
2960         */
2961        public TestScriptMetadataCapabilityComponent setDestinationElement(IntegerType value) { 
2962          this.destination = value;
2963          return this;
2964        }
2965
2966        /**
2967         * @return Which server these requirements apply to.
2968         */
2969        public int getDestination() { 
2970          return this.destination == null || this.destination.isEmpty() ? 0 : this.destination.getValue();
2971        }
2972
2973        /**
2974         * @param value Which server these requirements apply to.
2975         */
2976        public TestScriptMetadataCapabilityComponent setDestination(int value) { 
2977            if (this.destination == null)
2978              this.destination = new IntegerType();
2979            this.destination.setValue(value);
2980          return this;
2981        }
2982
2983        /**
2984         * @return {@link #link} (Links to the FHIR specification that describes this interaction and the resources involved in more detail.)
2985         */
2986        public List<UriType> getLink() { 
2987          if (this.link == null)
2988            this.link = new ArrayList<UriType>();
2989          return this.link;
2990        }
2991
2992        /**
2993         * @return Returns a reference to <code>this</code> for easy method chaining
2994         */
2995        public TestScriptMetadataCapabilityComponent setLink(List<UriType> theLink) { 
2996          this.link = theLink;
2997          return this;
2998        }
2999
3000        public boolean hasLink() { 
3001          if (this.link == null)
3002            return false;
3003          for (UriType item : this.link)
3004            if (!item.isEmpty())
3005              return true;
3006          return false;
3007        }
3008
3009        /**
3010         * @return {@link #link} (Links to the FHIR specification that describes this interaction and the resources involved in more detail.)
3011         */
3012        public UriType addLinkElement() {//2 
3013          UriType t = new UriType();
3014          if (this.link == null)
3015            this.link = new ArrayList<UriType>();
3016          this.link.add(t);
3017          return t;
3018        }
3019
3020        /**
3021         * @param value {@link #link} (Links to the FHIR specification that describes this interaction and the resources involved in more detail.)
3022         */
3023        public TestScriptMetadataCapabilityComponent addLink(String value) { //1
3024          UriType t = new UriType();
3025          t.setValue(value);
3026          if (this.link == null)
3027            this.link = new ArrayList<UriType>();
3028          this.link.add(t);
3029          return this;
3030        }
3031
3032        /**
3033         * @param value {@link #link} (Links to the FHIR specification that describes this interaction and the resources involved in more detail.)
3034         */
3035        public boolean hasLink(String value) { 
3036          if (this.link == null)
3037            return false;
3038          for (UriType v : this.link)
3039            if (v.getValue().equals(value)) // uri
3040              return true;
3041          return false;
3042        }
3043
3044        /**
3045         * @return {@link #capabilities} (Minimum capabilities required of server for test script to execute successfully.   If server does not meet at a minimum the referenced capability statement, then all tests in this script are skipped.). This is the underlying object with id, value and extensions. The accessor "getCapabilities" gives direct access to the value
3046         */
3047        public CanonicalType getCapabilitiesElement() { 
3048          if (this.capabilities == null)
3049            if (Configuration.errorOnAutoCreate())
3050              throw new Error("Attempt to auto-create TestScriptMetadataCapabilityComponent.capabilities");
3051            else if (Configuration.doAutoCreate())
3052              this.capabilities = new CanonicalType(); // bb
3053          return this.capabilities;
3054        }
3055
3056        public boolean hasCapabilitiesElement() { 
3057          return this.capabilities != null && !this.capabilities.isEmpty();
3058        }
3059
3060        public boolean hasCapabilities() { 
3061          return this.capabilities != null && !this.capabilities.isEmpty();
3062        }
3063
3064        /**
3065         * @param value {@link #capabilities} (Minimum capabilities required of server for test script to execute successfully.   If server does not meet at a minimum the referenced capability statement, then all tests in this script are skipped.). This is the underlying object with id, value and extensions. The accessor "getCapabilities" gives direct access to the value
3066         */
3067        public TestScriptMetadataCapabilityComponent setCapabilitiesElement(CanonicalType value) { 
3068          this.capabilities = value;
3069          return this;
3070        }
3071
3072        /**
3073         * @return Minimum capabilities required of server for test script to execute successfully.   If server does not meet at a minimum the referenced capability statement, then all tests in this script are skipped.
3074         */
3075        public String getCapabilities() { 
3076          return this.capabilities == null ? null : this.capabilities.getValue();
3077        }
3078
3079        /**
3080         * @param value Minimum capabilities required of server for test script to execute successfully.   If server does not meet at a minimum the referenced capability statement, then all tests in this script are skipped.
3081         */
3082        public TestScriptMetadataCapabilityComponent setCapabilities(String value) { 
3083            if (this.capabilities == null)
3084              this.capabilities = new CanonicalType();
3085            this.capabilities.setValue(value);
3086          return this;
3087        }
3088
3089        protected void listChildren(List<Property> children) {
3090          super.listChildren(children);
3091          children.add(new Property("required", "boolean", "Whether or not the test execution will require the given capabilities of the server in order for this test script to execute.", 0, 1, required));
3092          children.add(new Property("validated", "boolean", "Whether or not the test execution will validate the given capabilities of the server in order for this test script to execute.", 0, 1, validated));
3093          children.add(new Property("description", "string", "Description of the capabilities that this test script is requiring the server to support.", 0, 1, description));
3094          children.add(new Property("origin", "integer", "Which origin server these requirements apply to.", 0, java.lang.Integer.MAX_VALUE, origin));
3095          children.add(new Property("destination", "integer", "Which server these requirements apply to.", 0, 1, destination));
3096          children.add(new Property("link", "uri", "Links to the FHIR specification that describes this interaction and the resources involved in more detail.", 0, java.lang.Integer.MAX_VALUE, link));
3097          children.add(new Property("capabilities", "canonical(CapabilityStatement)", "Minimum capabilities required of server for test script to execute successfully.   If server does not meet at a minimum the referenced capability statement, then all tests in this script are skipped.", 0, 1, capabilities));
3098        }
3099
3100        @Override
3101        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3102          switch (_hash) {
3103          case -393139297: /*required*/  return new Property("required", "boolean", "Whether or not the test execution will require the given capabilities of the server in order for this test script to execute.", 0, 1, required);
3104          case -1109784050: /*validated*/  return new Property("validated", "boolean", "Whether or not the test execution will validate the given capabilities of the server in order for this test script to execute.", 0, 1, validated);
3105          case -1724546052: /*description*/  return new Property("description", "string", "Description of the capabilities that this test script is requiring the server to support.", 0, 1, description);
3106          case -1008619738: /*origin*/  return new Property("origin", "integer", "Which origin server these requirements apply to.", 0, java.lang.Integer.MAX_VALUE, origin);
3107          case -1429847026: /*destination*/  return new Property("destination", "integer", "Which server these requirements apply to.", 0, 1, destination);
3108          case 3321850: /*link*/  return new Property("link", "uri", "Links to the FHIR specification that describes this interaction and the resources involved in more detail.", 0, java.lang.Integer.MAX_VALUE, link);
3109          case -1487597642: /*capabilities*/  return new Property("capabilities", "canonical(CapabilityStatement)", "Minimum capabilities required of server for test script to execute successfully.   If server does not meet at a minimum the referenced capability statement, then all tests in this script are skipped.", 0, 1, capabilities);
3110          default: return super.getNamedProperty(_hash, _name, _checkValid);
3111          }
3112
3113        }
3114
3115      @Override
3116      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3117        switch (hash) {
3118        case -393139297: /*required*/ return this.required == null ? new Base[0] : new Base[] {this.required}; // BooleanType
3119        case -1109784050: /*validated*/ return this.validated == null ? new Base[0] : new Base[] {this.validated}; // BooleanType
3120        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
3121        case -1008619738: /*origin*/ return this.origin == null ? new Base[0] : this.origin.toArray(new Base[this.origin.size()]); // IntegerType
3122        case -1429847026: /*destination*/ return this.destination == null ? new Base[0] : new Base[] {this.destination}; // IntegerType
3123        case 3321850: /*link*/ return this.link == null ? new Base[0] : this.link.toArray(new Base[this.link.size()]); // UriType
3124        case -1487597642: /*capabilities*/ return this.capabilities == null ? new Base[0] : new Base[] {this.capabilities}; // CanonicalType
3125        default: return super.getProperty(hash, name, checkValid);
3126        }
3127
3128      }
3129
3130      @Override
3131      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3132        switch (hash) {
3133        case -393139297: // required
3134          this.required = TypeConvertor.castToBoolean(value); // BooleanType
3135          return value;
3136        case -1109784050: // validated
3137          this.validated = TypeConvertor.castToBoolean(value); // BooleanType
3138          return value;
3139        case -1724546052: // description
3140          this.description = TypeConvertor.castToString(value); // StringType
3141          return value;
3142        case -1008619738: // origin
3143          this.getOrigin().add(TypeConvertor.castToInteger(value)); // IntegerType
3144          return value;
3145        case -1429847026: // destination
3146          this.destination = TypeConvertor.castToInteger(value); // IntegerType
3147          return value;
3148        case 3321850: // link
3149          this.getLink().add(TypeConvertor.castToUri(value)); // UriType
3150          return value;
3151        case -1487597642: // capabilities
3152          this.capabilities = TypeConvertor.castToCanonical(value); // CanonicalType
3153          return value;
3154        default: return super.setProperty(hash, name, value);
3155        }
3156
3157      }
3158
3159      @Override
3160      public Base setProperty(String name, Base value) throws FHIRException {
3161        if (name.equals("required")) {
3162          this.required = TypeConvertor.castToBoolean(value); // BooleanType
3163        } else if (name.equals("validated")) {
3164          this.validated = TypeConvertor.castToBoolean(value); // BooleanType
3165        } else if (name.equals("description")) {
3166          this.description = TypeConvertor.castToString(value); // StringType
3167        } else if (name.equals("origin")) {
3168          this.getOrigin().add(TypeConvertor.castToInteger(value));
3169        } else if (name.equals("destination")) {
3170          this.destination = TypeConvertor.castToInteger(value); // IntegerType
3171        } else if (name.equals("link")) {
3172          this.getLink().add(TypeConvertor.castToUri(value));
3173        } else if (name.equals("capabilities")) {
3174          this.capabilities = TypeConvertor.castToCanonical(value); // CanonicalType
3175        } else
3176          return super.setProperty(name, value);
3177        return value;
3178      }
3179
3180  @Override
3181  public void removeChild(String name, Base value) throws FHIRException {
3182        if (name.equals("required")) {
3183          this.required = null;
3184        } else if (name.equals("validated")) {
3185          this.validated = null;
3186        } else if (name.equals("description")) {
3187          this.description = null;
3188        } else if (name.equals("origin")) {
3189          this.getOrigin().remove(value);
3190        } else if (name.equals("destination")) {
3191          this.destination = null;
3192        } else if (name.equals("link")) {
3193          this.getLink().remove(value);
3194        } else if (name.equals("capabilities")) {
3195          this.capabilities = null;
3196        } else
3197          super.removeChild(name, value);
3198        
3199      }
3200
3201      @Override
3202      public Base makeProperty(int hash, String name) throws FHIRException {
3203        switch (hash) {
3204        case -393139297:  return getRequiredElement();
3205        case -1109784050:  return getValidatedElement();
3206        case -1724546052:  return getDescriptionElement();
3207        case -1008619738:  return addOriginElement();
3208        case -1429847026:  return getDestinationElement();
3209        case 3321850:  return addLinkElement();
3210        case -1487597642:  return getCapabilitiesElement();
3211        default: return super.makeProperty(hash, name);
3212        }
3213
3214      }
3215
3216      @Override
3217      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3218        switch (hash) {
3219        case -393139297: /*required*/ return new String[] {"boolean"};
3220        case -1109784050: /*validated*/ return new String[] {"boolean"};
3221        case -1724546052: /*description*/ return new String[] {"string"};
3222        case -1008619738: /*origin*/ return new String[] {"integer"};
3223        case -1429847026: /*destination*/ return new String[] {"integer"};
3224        case 3321850: /*link*/ return new String[] {"uri"};
3225        case -1487597642: /*capabilities*/ return new String[] {"canonical"};
3226        default: return super.getTypesForProperty(hash, name);
3227        }
3228
3229      }
3230
3231      @Override
3232      public Base addChild(String name) throws FHIRException {
3233        if (name.equals("required")) {
3234          throw new FHIRException("Cannot call addChild on a singleton property TestScript.metadata.capability.required");
3235        }
3236        else if (name.equals("validated")) {
3237          throw new FHIRException("Cannot call addChild on a singleton property TestScript.metadata.capability.validated");
3238        }
3239        else if (name.equals("description")) {
3240          throw new FHIRException("Cannot call addChild on a singleton property TestScript.metadata.capability.description");
3241        }
3242        else if (name.equals("origin")) {
3243          throw new FHIRException("Cannot call addChild on a singleton property TestScript.metadata.capability.origin");
3244        }
3245        else if (name.equals("destination")) {
3246          throw new FHIRException("Cannot call addChild on a singleton property TestScript.metadata.capability.destination");
3247        }
3248        else if (name.equals("link")) {
3249          throw new FHIRException("Cannot call addChild on a singleton property TestScript.metadata.capability.link");
3250        }
3251        else if (name.equals("capabilities")) {
3252          throw new FHIRException("Cannot call addChild on a singleton property TestScript.metadata.capability.capabilities");
3253        }
3254        else
3255          return super.addChild(name);
3256      }
3257
3258      public TestScriptMetadataCapabilityComponent copy() {
3259        TestScriptMetadataCapabilityComponent dst = new TestScriptMetadataCapabilityComponent();
3260        copyValues(dst);
3261        return dst;
3262      }
3263
3264      public void copyValues(TestScriptMetadataCapabilityComponent dst) {
3265        super.copyValues(dst);
3266        dst.required = required == null ? null : required.copy();
3267        dst.validated = validated == null ? null : validated.copy();
3268        dst.description = description == null ? null : description.copy();
3269        if (origin != null) {
3270          dst.origin = new ArrayList<IntegerType>();
3271          for (IntegerType i : origin)
3272            dst.origin.add(i.copy());
3273        };
3274        dst.destination = destination == null ? null : destination.copy();
3275        if (link != null) {
3276          dst.link = new ArrayList<UriType>();
3277          for (UriType i : link)
3278            dst.link.add(i.copy());
3279        };
3280        dst.capabilities = capabilities == null ? null : capabilities.copy();
3281      }
3282
3283      @Override
3284      public boolean equalsDeep(Base other_) {
3285        if (!super.equalsDeep(other_))
3286          return false;
3287        if (!(other_ instanceof TestScriptMetadataCapabilityComponent))
3288          return false;
3289        TestScriptMetadataCapabilityComponent o = (TestScriptMetadataCapabilityComponent) other_;
3290        return compareDeep(required, o.required, true) && compareDeep(validated, o.validated, true) && compareDeep(description, o.description, true)
3291           && compareDeep(origin, o.origin, true) && compareDeep(destination, o.destination, true) && compareDeep(link, o.link, true)
3292           && compareDeep(capabilities, o.capabilities, true);
3293      }
3294
3295      @Override
3296      public boolean equalsShallow(Base other_) {
3297        if (!super.equalsShallow(other_))
3298          return false;
3299        if (!(other_ instanceof TestScriptMetadataCapabilityComponent))
3300          return false;
3301        TestScriptMetadataCapabilityComponent o = (TestScriptMetadataCapabilityComponent) other_;
3302        return compareValues(required, o.required, true) && compareValues(validated, o.validated, true) && compareValues(description, o.description, true)
3303           && compareValues(origin, o.origin, true) && compareValues(destination, o.destination, true) && compareValues(link, o.link, true)
3304           && compareValues(capabilities, o.capabilities, true);
3305      }
3306
3307      public boolean isEmpty() {
3308        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(required, validated, description
3309          , origin, destination, link, capabilities);
3310      }
3311
3312  public String fhirType() {
3313    return "TestScript.metadata.capability";
3314
3315  }
3316
3317  }
3318
3319    @Block()
3320    public static class TestScriptScopeComponent extends BackboneElement implements IBaseBackboneElement {
3321        /**
3322         * The specific conformance artifact being tested. The canonical reference can be version-specific.
3323         */
3324        @Child(name = "artifact", type = {CanonicalType.class}, order=1, min=1, max=1, modifier=false, summary=false)
3325        @Description(shortDefinition="The specific conformance artifact being tested", formalDefinition="The specific conformance artifact being tested. The canonical reference can be version-specific." )
3326        protected CanonicalType artifact;
3327
3328        /**
3329         * The expectation of whether the test must pass for the system to be considered conformant with the artifact: required - all tests are expected to pass, optional - all test are expected to pass but non-pass status may be allowed, strict - all tests are expected to pass and warnings are treated as a failure.
3330         */
3331        @Child(name = "conformance", type = {CodeableConcept.class}, order=2, min=0, max=1, modifier=false, summary=false)
3332        @Description(shortDefinition="required | optional | strict", formalDefinition="The expectation of whether the test must pass for the system to be considered conformant with the artifact: required - all tests are expected to pass, optional - all test are expected to pass but non-pass status may be allowed, strict - all tests are expected to pass and warnings are treated as a failure." )
3333        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/testscript-scope-conformance-codes")
3334        protected CodeableConcept conformance;
3335
3336        /**
3337         * The phase of testing for this artifact: unit - development / implementation phase, integration - internal system to system phase, production - live system to system phase (Note, this may involve pii/phi data).
3338         */
3339        @Child(name = "phase", type = {CodeableConcept.class}, order=3, min=0, max=1, modifier=false, summary=false)
3340        @Description(shortDefinition="unit | integration | production", formalDefinition="The phase of testing for this artifact: unit - development / implementation phase, integration - internal system to system phase, production - live system to system phase (Note, this may involve pii/phi data)." )
3341        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/testscript-scope-phase-codes")
3342        protected CodeableConcept phase;
3343
3344        private static final long serialVersionUID = 1236847076L;
3345
3346    /**
3347     * Constructor
3348     */
3349      public TestScriptScopeComponent() {
3350        super();
3351      }
3352
3353    /**
3354     * Constructor
3355     */
3356      public TestScriptScopeComponent(String artifact) {
3357        super();
3358        this.setArtifact(artifact);
3359      }
3360
3361        /**
3362         * @return {@link #artifact} (The specific conformance artifact being tested. The canonical reference can be version-specific.). This is the underlying object with id, value and extensions. The accessor "getArtifact" gives direct access to the value
3363         */
3364        public CanonicalType getArtifactElement() { 
3365          if (this.artifact == null)
3366            if (Configuration.errorOnAutoCreate())
3367              throw new Error("Attempt to auto-create TestScriptScopeComponent.artifact");
3368            else if (Configuration.doAutoCreate())
3369              this.artifact = new CanonicalType(); // bb
3370          return this.artifact;
3371        }
3372
3373        public boolean hasArtifactElement() { 
3374          return this.artifact != null && !this.artifact.isEmpty();
3375        }
3376
3377        public boolean hasArtifact() { 
3378          return this.artifact != null && !this.artifact.isEmpty();
3379        }
3380
3381        /**
3382         * @param value {@link #artifact} (The specific conformance artifact being tested. The canonical reference can be version-specific.). This is the underlying object with id, value and extensions. The accessor "getArtifact" gives direct access to the value
3383         */
3384        public TestScriptScopeComponent setArtifactElement(CanonicalType value) { 
3385          this.artifact = value;
3386          return this;
3387        }
3388
3389        /**
3390         * @return The specific conformance artifact being tested. The canonical reference can be version-specific.
3391         */
3392        public String getArtifact() { 
3393          return this.artifact == null ? null : this.artifact.getValue();
3394        }
3395
3396        /**
3397         * @param value The specific conformance artifact being tested. The canonical reference can be version-specific.
3398         */
3399        public TestScriptScopeComponent setArtifact(String value) { 
3400            if (this.artifact == null)
3401              this.artifact = new CanonicalType();
3402            this.artifact.setValue(value);
3403          return this;
3404        }
3405
3406        /**
3407         * @return {@link #conformance} (The expectation of whether the test must pass for the system to be considered conformant with the artifact: required - all tests are expected to pass, optional - all test are expected to pass but non-pass status may be allowed, strict - all tests are expected to pass and warnings are treated as a failure.)
3408         */
3409        public CodeableConcept getConformance() { 
3410          if (this.conformance == null)
3411            if (Configuration.errorOnAutoCreate())
3412              throw new Error("Attempt to auto-create TestScriptScopeComponent.conformance");
3413            else if (Configuration.doAutoCreate())
3414              this.conformance = new CodeableConcept(); // cc
3415          return this.conformance;
3416        }
3417
3418        public boolean hasConformance() { 
3419          return this.conformance != null && !this.conformance.isEmpty();
3420        }
3421
3422        /**
3423         * @param value {@link #conformance} (The expectation of whether the test must pass for the system to be considered conformant with the artifact: required - all tests are expected to pass, optional - all test are expected to pass but non-pass status may be allowed, strict - all tests are expected to pass and warnings are treated as a failure.)
3424         */
3425        public TestScriptScopeComponent setConformance(CodeableConcept value) { 
3426          this.conformance = value;
3427          return this;
3428        }
3429
3430        /**
3431         * @return {@link #phase} (The phase of testing for this artifact: unit - development / implementation phase, integration - internal system to system phase, production - live system to system phase (Note, this may involve pii/phi data).)
3432         */
3433        public CodeableConcept getPhase() { 
3434          if (this.phase == null)
3435            if (Configuration.errorOnAutoCreate())
3436              throw new Error("Attempt to auto-create TestScriptScopeComponent.phase");
3437            else if (Configuration.doAutoCreate())
3438              this.phase = new CodeableConcept(); // cc
3439          return this.phase;
3440        }
3441
3442        public boolean hasPhase() { 
3443          return this.phase != null && !this.phase.isEmpty();
3444        }
3445
3446        /**
3447         * @param value {@link #phase} (The phase of testing for this artifact: unit - development / implementation phase, integration - internal system to system phase, production - live system to system phase (Note, this may involve pii/phi data).)
3448         */
3449        public TestScriptScopeComponent setPhase(CodeableConcept value) { 
3450          this.phase = value;
3451          return this;
3452        }
3453
3454        protected void listChildren(List<Property> children) {
3455          super.listChildren(children);
3456          children.add(new Property("artifact", "canonical(Any)", "The specific conformance artifact being tested. The canonical reference can be version-specific.", 0, 1, artifact));
3457          children.add(new Property("conformance", "CodeableConcept", "The expectation of whether the test must pass for the system to be considered conformant with the artifact: required - all tests are expected to pass, optional - all test are expected to pass but non-pass status may be allowed, strict - all tests are expected to pass and warnings are treated as a failure.", 0, 1, conformance));
3458          children.add(new Property("phase", "CodeableConcept", "The phase of testing for this artifact: unit - development / implementation phase, integration - internal system to system phase, production - live system to system phase (Note, this may involve pii/phi data).", 0, 1, phase));
3459        }
3460
3461        @Override
3462        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3463          switch (_hash) {
3464          case -1228798510: /*artifact*/  return new Property("artifact", "canonical(Any)", "The specific conformance artifact being tested. The canonical reference can be version-specific.", 0, 1, artifact);
3465          case 1374858133: /*conformance*/  return new Property("conformance", "CodeableConcept", "The expectation of whether the test must pass for the system to be considered conformant with the artifact: required - all tests are expected to pass, optional - all test are expected to pass but non-pass status may be allowed, strict - all tests are expected to pass and warnings are treated as a failure.", 0, 1, conformance);
3466          case 106629499: /*phase*/  return new Property("phase", "CodeableConcept", "The phase of testing for this artifact: unit - development / implementation phase, integration - internal system to system phase, production - live system to system phase (Note, this may involve pii/phi data).", 0, 1, phase);
3467          default: return super.getNamedProperty(_hash, _name, _checkValid);
3468          }
3469
3470        }
3471
3472      @Override
3473      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3474        switch (hash) {
3475        case -1228798510: /*artifact*/ return this.artifact == null ? new Base[0] : new Base[] {this.artifact}; // CanonicalType
3476        case 1374858133: /*conformance*/ return this.conformance == null ? new Base[0] : new Base[] {this.conformance}; // CodeableConcept
3477        case 106629499: /*phase*/ return this.phase == null ? new Base[0] : new Base[] {this.phase}; // CodeableConcept
3478        default: return super.getProperty(hash, name, checkValid);
3479        }
3480
3481      }
3482
3483      @Override
3484      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3485        switch (hash) {
3486        case -1228798510: // artifact
3487          this.artifact = TypeConvertor.castToCanonical(value); // CanonicalType
3488          return value;
3489        case 1374858133: // conformance
3490          this.conformance = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3491          return value;
3492        case 106629499: // phase
3493          this.phase = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3494          return value;
3495        default: return super.setProperty(hash, name, value);
3496        }
3497
3498      }
3499
3500      @Override
3501      public Base setProperty(String name, Base value) throws FHIRException {
3502        if (name.equals("artifact")) {
3503          this.artifact = TypeConvertor.castToCanonical(value); // CanonicalType
3504        } else if (name.equals("conformance")) {
3505          this.conformance = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3506        } else if (name.equals("phase")) {
3507          this.phase = TypeConvertor.castToCodeableConcept(value); // CodeableConcept
3508        } else
3509          return super.setProperty(name, value);
3510        return value;
3511      }
3512
3513  @Override
3514  public void removeChild(String name, Base value) throws FHIRException {
3515        if (name.equals("artifact")) {
3516          this.artifact = null;
3517        } else if (name.equals("conformance")) {
3518          this.conformance = null;
3519        } else if (name.equals("phase")) {
3520          this.phase = null;
3521        } else
3522          super.removeChild(name, value);
3523        
3524      }
3525
3526      @Override
3527      public Base makeProperty(int hash, String name) throws FHIRException {
3528        switch (hash) {
3529        case -1228798510:  return getArtifactElement();
3530        case 1374858133:  return getConformance();
3531        case 106629499:  return getPhase();
3532        default: return super.makeProperty(hash, name);
3533        }
3534
3535      }
3536
3537      @Override
3538      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3539        switch (hash) {
3540        case -1228798510: /*artifact*/ return new String[] {"canonical"};
3541        case 1374858133: /*conformance*/ return new String[] {"CodeableConcept"};
3542        case 106629499: /*phase*/ return new String[] {"CodeableConcept"};
3543        default: return super.getTypesForProperty(hash, name);
3544        }
3545
3546      }
3547
3548      @Override
3549      public Base addChild(String name) throws FHIRException {
3550        if (name.equals("artifact")) {
3551          throw new FHIRException("Cannot call addChild on a singleton property TestScript.scope.artifact");
3552        }
3553        else if (name.equals("conformance")) {
3554          this.conformance = new CodeableConcept();
3555          return this.conformance;
3556        }
3557        else if (name.equals("phase")) {
3558          this.phase = new CodeableConcept();
3559          return this.phase;
3560        }
3561        else
3562          return super.addChild(name);
3563      }
3564
3565      public TestScriptScopeComponent copy() {
3566        TestScriptScopeComponent dst = new TestScriptScopeComponent();
3567        copyValues(dst);
3568        return dst;
3569      }
3570
3571      public void copyValues(TestScriptScopeComponent dst) {
3572        super.copyValues(dst);
3573        dst.artifact = artifact == null ? null : artifact.copy();
3574        dst.conformance = conformance == null ? null : conformance.copy();
3575        dst.phase = phase == null ? null : phase.copy();
3576      }
3577
3578      @Override
3579      public boolean equalsDeep(Base other_) {
3580        if (!super.equalsDeep(other_))
3581          return false;
3582        if (!(other_ instanceof TestScriptScopeComponent))
3583          return false;
3584        TestScriptScopeComponent o = (TestScriptScopeComponent) other_;
3585        return compareDeep(artifact, o.artifact, true) && compareDeep(conformance, o.conformance, true)
3586           && compareDeep(phase, o.phase, true);
3587      }
3588
3589      @Override
3590      public boolean equalsShallow(Base other_) {
3591        if (!super.equalsShallow(other_))
3592          return false;
3593        if (!(other_ instanceof TestScriptScopeComponent))
3594          return false;
3595        TestScriptScopeComponent o = (TestScriptScopeComponent) other_;
3596        return compareValues(artifact, o.artifact, true);
3597      }
3598
3599      public boolean isEmpty() {
3600        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(artifact, conformance, phase
3601          );
3602      }
3603
3604  public String fhirType() {
3605    return "TestScript.scope";
3606
3607  }
3608
3609  }
3610
3611    @Block()
3612    public static class TestScriptFixtureComponent extends BackboneElement implements IBaseBackboneElement {
3613        /**
3614         * Whether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup section.
3615         */
3616        @Child(name = "autocreate", type = {BooleanType.class}, order=1, min=1, max=1, modifier=false, summary=false)
3617        @Description(shortDefinition="Whether or not to implicitly create the fixture during setup", formalDefinition="Whether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup section." )
3618        protected BooleanType autocreate;
3619
3620        /**
3621         * Whether or not to implicitly delete the fixture during teardown. If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown section.
3622         */
3623        @Child(name = "autodelete", type = {BooleanType.class}, order=2, min=1, max=1, modifier=false, summary=false)
3624        @Description(shortDefinition="Whether or not to implicitly delete the fixture during teardown", formalDefinition="Whether or not to implicitly delete the fixture during teardown. If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown section." )
3625        protected BooleanType autodelete;
3626
3627        /**
3628         * Reference to the resource (containing the contents of the resource needed for operations). This is allowed to be a Parameters resource.
3629         */
3630        @Child(name = "resource", type = {Reference.class}, order=3, min=0, max=1, modifier=false, summary=false)
3631        @Description(shortDefinition="Reference of the resource", formalDefinition="Reference to the resource (containing the contents of the resource needed for operations). This is allowed to be a Parameters resource." )
3632        protected Reference resource;
3633
3634        private static final long serialVersionUID = 672117234L;
3635
3636    /**
3637     * Constructor
3638     */
3639      public TestScriptFixtureComponent() {
3640        super();
3641      }
3642
3643    /**
3644     * Constructor
3645     */
3646      public TestScriptFixtureComponent(boolean autocreate, boolean autodelete) {
3647        super();
3648        this.setAutocreate(autocreate);
3649        this.setAutodelete(autodelete);
3650      }
3651
3652        /**
3653         * @return {@link #autocreate} (Whether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup section.). This is the underlying object with id, value and extensions. The accessor "getAutocreate" gives direct access to the value
3654         */
3655        public BooleanType getAutocreateElement() { 
3656          if (this.autocreate == null)
3657            if (Configuration.errorOnAutoCreate())
3658              throw new Error("Attempt to auto-create TestScriptFixtureComponent.autocreate");
3659            else if (Configuration.doAutoCreate())
3660              this.autocreate = new BooleanType(); // bb
3661          return this.autocreate;
3662        }
3663
3664        public boolean hasAutocreateElement() { 
3665          return this.autocreate != null && !this.autocreate.isEmpty();
3666        }
3667
3668        public boolean hasAutocreate() { 
3669          return this.autocreate != null && !this.autocreate.isEmpty();
3670        }
3671
3672        /**
3673         * @param value {@link #autocreate} (Whether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup section.). This is the underlying object with id, value and extensions. The accessor "getAutocreate" gives direct access to the value
3674         */
3675        public TestScriptFixtureComponent setAutocreateElement(BooleanType value) { 
3676          this.autocreate = value;
3677          return this;
3678        }
3679
3680        /**
3681         * @return Whether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup section.
3682         */
3683        public boolean getAutocreate() { 
3684          return this.autocreate == null || this.autocreate.isEmpty() ? false : this.autocreate.getValue();
3685        }
3686
3687        /**
3688         * @param value Whether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup section.
3689         */
3690        public TestScriptFixtureComponent setAutocreate(boolean value) { 
3691            if (this.autocreate == null)
3692              this.autocreate = new BooleanType();
3693            this.autocreate.setValue(value);
3694          return this;
3695        }
3696
3697        /**
3698         * @return {@link #autodelete} (Whether or not to implicitly delete the fixture during teardown. If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown section.). This is the underlying object with id, value and extensions. The accessor "getAutodelete" gives direct access to the value
3699         */
3700        public BooleanType getAutodeleteElement() { 
3701          if (this.autodelete == null)
3702            if (Configuration.errorOnAutoCreate())
3703              throw new Error("Attempt to auto-create TestScriptFixtureComponent.autodelete");
3704            else if (Configuration.doAutoCreate())
3705              this.autodelete = new BooleanType(); // bb
3706          return this.autodelete;
3707        }
3708
3709        public boolean hasAutodeleteElement() { 
3710          return this.autodelete != null && !this.autodelete.isEmpty();
3711        }
3712
3713        public boolean hasAutodelete() { 
3714          return this.autodelete != null && !this.autodelete.isEmpty();
3715        }
3716
3717        /**
3718         * @param value {@link #autodelete} (Whether or not to implicitly delete the fixture during teardown. If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown section.). This is the underlying object with id, value and extensions. The accessor "getAutodelete" gives direct access to the value
3719         */
3720        public TestScriptFixtureComponent setAutodeleteElement(BooleanType value) { 
3721          this.autodelete = value;
3722          return this;
3723        }
3724
3725        /**
3726         * @return Whether or not to implicitly delete the fixture during teardown. If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown section.
3727         */
3728        public boolean getAutodelete() { 
3729          return this.autodelete == null || this.autodelete.isEmpty() ? false : this.autodelete.getValue();
3730        }
3731
3732        /**
3733         * @param value Whether or not to implicitly delete the fixture during teardown. If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown section.
3734         */
3735        public TestScriptFixtureComponent setAutodelete(boolean value) { 
3736            if (this.autodelete == null)
3737              this.autodelete = new BooleanType();
3738            this.autodelete.setValue(value);
3739          return this;
3740        }
3741
3742        /**
3743         * @return {@link #resource} (Reference to the resource (containing the contents of the resource needed for operations). This is allowed to be a Parameters resource.)
3744         */
3745        public Reference getResource() { 
3746          if (this.resource == null)
3747            if (Configuration.errorOnAutoCreate())
3748              throw new Error("Attempt to auto-create TestScriptFixtureComponent.resource");
3749            else if (Configuration.doAutoCreate())
3750              this.resource = new Reference(); // cc
3751          return this.resource;
3752        }
3753
3754        public boolean hasResource() { 
3755          return this.resource != null && !this.resource.isEmpty();
3756        }
3757
3758        /**
3759         * @param value {@link #resource} (Reference to the resource (containing the contents of the resource needed for operations). This is allowed to be a Parameters resource.)
3760         */
3761        public TestScriptFixtureComponent setResource(Reference value) { 
3762          this.resource = value;
3763          return this;
3764        }
3765
3766        protected void listChildren(List<Property> children) {
3767          super.listChildren(children);
3768          children.add(new Property("autocreate", "boolean", "Whether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup section.", 0, 1, autocreate));
3769          children.add(new Property("autodelete", "boolean", "Whether or not to implicitly delete the fixture during teardown. If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown section.", 0, 1, autodelete));
3770          children.add(new Property("resource", "Reference(Any)", "Reference to the resource (containing the contents of the resource needed for operations). This is allowed to be a Parameters resource.", 0, 1, resource));
3771        }
3772
3773        @Override
3774        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
3775          switch (_hash) {
3776          case 73154411: /*autocreate*/  return new Property("autocreate", "boolean", "Whether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup section.", 0, 1, autocreate);
3777          case 89990170: /*autodelete*/  return new Property("autodelete", "boolean", "Whether or not to implicitly delete the fixture during teardown. If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown section.", 0, 1, autodelete);
3778          case -341064690: /*resource*/  return new Property("resource", "Reference(Any)", "Reference to the resource (containing the contents of the resource needed for operations). This is allowed to be a Parameters resource.", 0, 1, resource);
3779          default: return super.getNamedProperty(_hash, _name, _checkValid);
3780          }
3781
3782        }
3783
3784      @Override
3785      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
3786        switch (hash) {
3787        case 73154411: /*autocreate*/ return this.autocreate == null ? new Base[0] : new Base[] {this.autocreate}; // BooleanType
3788        case 89990170: /*autodelete*/ return this.autodelete == null ? new Base[0] : new Base[] {this.autodelete}; // BooleanType
3789        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : new Base[] {this.resource}; // Reference
3790        default: return super.getProperty(hash, name, checkValid);
3791        }
3792
3793      }
3794
3795      @Override
3796      public Base setProperty(int hash, String name, Base value) throws FHIRException {
3797        switch (hash) {
3798        case 73154411: // autocreate
3799          this.autocreate = TypeConvertor.castToBoolean(value); // BooleanType
3800          return value;
3801        case 89990170: // autodelete
3802          this.autodelete = TypeConvertor.castToBoolean(value); // BooleanType
3803          return value;
3804        case -341064690: // resource
3805          this.resource = TypeConvertor.castToReference(value); // Reference
3806          return value;
3807        default: return super.setProperty(hash, name, value);
3808        }
3809
3810      }
3811
3812      @Override
3813      public Base setProperty(String name, Base value) throws FHIRException {
3814        if (name.equals("autocreate")) {
3815          this.autocreate = TypeConvertor.castToBoolean(value); // BooleanType
3816        } else if (name.equals("autodelete")) {
3817          this.autodelete = TypeConvertor.castToBoolean(value); // BooleanType
3818        } else if (name.equals("resource")) {
3819          this.resource = TypeConvertor.castToReference(value); // Reference
3820        } else
3821          return super.setProperty(name, value);
3822        return value;
3823      }
3824
3825  @Override
3826  public void removeChild(String name, Base value) throws FHIRException {
3827        if (name.equals("autocreate")) {
3828          this.autocreate = null;
3829        } else if (name.equals("autodelete")) {
3830          this.autodelete = null;
3831        } else if (name.equals("resource")) {
3832          this.resource = null;
3833        } else
3834          super.removeChild(name, value);
3835        
3836      }
3837
3838      @Override
3839      public Base makeProperty(int hash, String name) throws FHIRException {
3840        switch (hash) {
3841        case 73154411:  return getAutocreateElement();
3842        case 89990170:  return getAutodeleteElement();
3843        case -341064690:  return getResource();
3844        default: return super.makeProperty(hash, name);
3845        }
3846
3847      }
3848
3849      @Override
3850      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3851        switch (hash) {
3852        case 73154411: /*autocreate*/ return new String[] {"boolean"};
3853        case 89990170: /*autodelete*/ return new String[] {"boolean"};
3854        case -341064690: /*resource*/ return new String[] {"Reference"};
3855        default: return super.getTypesForProperty(hash, name);
3856        }
3857
3858      }
3859
3860      @Override
3861      public Base addChild(String name) throws FHIRException {
3862        if (name.equals("autocreate")) {
3863          throw new FHIRException("Cannot call addChild on a singleton property TestScript.fixture.autocreate");
3864        }
3865        else if (name.equals("autodelete")) {
3866          throw new FHIRException("Cannot call addChild on a singleton property TestScript.fixture.autodelete");
3867        }
3868        else if (name.equals("resource")) {
3869          this.resource = new Reference();
3870          return this.resource;
3871        }
3872        else
3873          return super.addChild(name);
3874      }
3875
3876      public TestScriptFixtureComponent copy() {
3877        TestScriptFixtureComponent dst = new TestScriptFixtureComponent();
3878        copyValues(dst);
3879        return dst;
3880      }
3881
3882      public void copyValues(TestScriptFixtureComponent dst) {
3883        super.copyValues(dst);
3884        dst.autocreate = autocreate == null ? null : autocreate.copy();
3885        dst.autodelete = autodelete == null ? null : autodelete.copy();
3886        dst.resource = resource == null ? null : resource.copy();
3887      }
3888
3889      @Override
3890      public boolean equalsDeep(Base other_) {
3891        if (!super.equalsDeep(other_))
3892          return false;
3893        if (!(other_ instanceof TestScriptFixtureComponent))
3894          return false;
3895        TestScriptFixtureComponent o = (TestScriptFixtureComponent) other_;
3896        return compareDeep(autocreate, o.autocreate, true) && compareDeep(autodelete, o.autodelete, true)
3897           && compareDeep(resource, o.resource, true);
3898      }
3899
3900      @Override
3901      public boolean equalsShallow(Base other_) {
3902        if (!super.equalsShallow(other_))
3903          return false;
3904        if (!(other_ instanceof TestScriptFixtureComponent))
3905          return false;
3906        TestScriptFixtureComponent o = (TestScriptFixtureComponent) other_;
3907        return compareValues(autocreate, o.autocreate, true) && compareValues(autodelete, o.autodelete, true)
3908          ;
3909      }
3910
3911      public boolean isEmpty() {
3912        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(autocreate, autodelete, resource
3913          );
3914      }
3915
3916  public String fhirType() {
3917    return "TestScript.fixture";
3918
3919  }
3920
3921  }
3922
3923    @Block()
3924    public static class TestScriptVariableComponent extends BackboneElement implements IBaseBackboneElement {
3925        /**
3926         * Descriptive name for this variable.
3927         */
3928        @Child(name = "name", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
3929        @Description(shortDefinition="Descriptive name for this variable", formalDefinition="Descriptive name for this variable." )
3930        protected StringType name;
3931
3932        /**
3933         * A default, hard-coded, or user-defined value for this variable.
3934         */
3935        @Child(name = "defaultValue", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
3936        @Description(shortDefinition="Default, hard-coded, or user-defined value for this variable", formalDefinition="A default, hard-coded, or user-defined value for this variable." )
3937        protected StringType defaultValue;
3938
3939        /**
3940         * A free text natural language description of the variable and its purpose.
3941         */
3942        @Child(name = "description", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
3943        @Description(shortDefinition="Natural language description of the variable", formalDefinition="A free text natural language description of the variable and its purpose." )
3944        protected StringType description;
3945
3946        /**
3947         * The FHIRPath expression for a specific value to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified.
3948         */
3949        @Child(name = "expression", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
3950        @Description(shortDefinition="The FHIRPath expression against the fixture body", formalDefinition="The FHIRPath expression for a specific value to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified." )
3951        protected StringType expression;
3952
3953        /**
3954         * Will be used to grab the HTTP header field value from the headers that sourceId is pointing to.
3955         */
3956        @Child(name = "headerField", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=false)
3957        @Description(shortDefinition="HTTP header field name for source", formalDefinition="Will be used to grab the HTTP header field value from the headers that sourceId is pointing to." )
3958        protected StringType headerField;
3959
3960        /**
3961         * Displayable text string with hint help information to the user when entering a default value.
3962         */
3963        @Child(name = "hint", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
3964        @Description(shortDefinition="Hint help text for default value to enter", formalDefinition="Displayable text string with hint help information to the user when entering a default value." )
3965        protected StringType hint;
3966
3967        /**
3968         * XPath or JSONPath to evaluate against the fixture body.  When variables are defined, only one of either expression, headerField or path must be specified.
3969         */
3970        @Child(name = "path", type = {StringType.class}, order=7, min=0, max=1, modifier=false, summary=false)
3971        @Description(shortDefinition="XPath or JSONPath against the fixture body", formalDefinition="XPath or JSONPath to evaluate against the fixture body.  When variables are defined, only one of either expression, headerField or path must be specified." )
3972        protected StringType path;
3973
3974        /**
3975         * Fixture to evaluate the XPath/JSONPath expression or the headerField  against within this variable.
3976         */
3977        @Child(name = "sourceId", type = {IdType.class}, order=8, min=0, max=1, modifier=false, summary=false)
3978        @Description(shortDefinition="Fixture Id of source expression or headerField within this variable", formalDefinition="Fixture to evaluate the XPath/JSONPath expression or the headerField  against within this variable." )
3979        protected IdType sourceId;
3980
3981        private static final long serialVersionUID = -1592325432L;
3982
3983    /**
3984     * Constructor
3985     */
3986      public TestScriptVariableComponent() {
3987        super();
3988      }
3989
3990    /**
3991     * Constructor
3992     */
3993      public TestScriptVariableComponent(String name) {
3994        super();
3995        this.setName(name);
3996      }
3997
3998        /**
3999         * @return {@link #name} (Descriptive name for this variable.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
4000         */
4001        public StringType getNameElement() { 
4002          if (this.name == null)
4003            if (Configuration.errorOnAutoCreate())
4004              throw new Error("Attempt to auto-create TestScriptVariableComponent.name");
4005            else if (Configuration.doAutoCreate())
4006              this.name = new StringType(); // bb
4007          return this.name;
4008        }
4009
4010        public boolean hasNameElement() { 
4011          return this.name != null && !this.name.isEmpty();
4012        }
4013
4014        public boolean hasName() { 
4015          return this.name != null && !this.name.isEmpty();
4016        }
4017
4018        /**
4019         * @param value {@link #name} (Descriptive name for this variable.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
4020         */
4021        public TestScriptVariableComponent setNameElement(StringType value) { 
4022          this.name = value;
4023          return this;
4024        }
4025
4026        /**
4027         * @return Descriptive name for this variable.
4028         */
4029        public String getName() { 
4030          return this.name == null ? null : this.name.getValue();
4031        }
4032
4033        /**
4034         * @param value Descriptive name for this variable.
4035         */
4036        public TestScriptVariableComponent setName(String value) { 
4037            if (this.name == null)
4038              this.name = new StringType();
4039            this.name.setValue(value);
4040          return this;
4041        }
4042
4043        /**
4044         * @return {@link #defaultValue} (A default, hard-coded, or user-defined value for this variable.). This is the underlying object with id, value and extensions. The accessor "getDefaultValue" gives direct access to the value
4045         */
4046        public StringType getDefaultValueElement() { 
4047          if (this.defaultValue == null)
4048            if (Configuration.errorOnAutoCreate())
4049              throw new Error("Attempt to auto-create TestScriptVariableComponent.defaultValue");
4050            else if (Configuration.doAutoCreate())
4051              this.defaultValue = new StringType(); // bb
4052          return this.defaultValue;
4053        }
4054
4055        public boolean hasDefaultValueElement() { 
4056          return this.defaultValue != null && !this.defaultValue.isEmpty();
4057        }
4058
4059        public boolean hasDefaultValue() { 
4060          return this.defaultValue != null && !this.defaultValue.isEmpty();
4061        }
4062
4063        /**
4064         * @param value {@link #defaultValue} (A default, hard-coded, or user-defined value for this variable.). This is the underlying object with id, value and extensions. The accessor "getDefaultValue" gives direct access to the value
4065         */
4066        public TestScriptVariableComponent setDefaultValueElement(StringType value) { 
4067          this.defaultValue = value;
4068          return this;
4069        }
4070
4071        /**
4072         * @return A default, hard-coded, or user-defined value for this variable.
4073         */
4074        public String getDefaultValue() { 
4075          return this.defaultValue == null ? null : this.defaultValue.getValue();
4076        }
4077
4078        /**
4079         * @param value A default, hard-coded, or user-defined value for this variable.
4080         */
4081        public TestScriptVariableComponent setDefaultValue(String value) { 
4082          if (Utilities.noString(value))
4083            this.defaultValue = null;
4084          else {
4085            if (this.defaultValue == null)
4086              this.defaultValue = new StringType();
4087            this.defaultValue.setValue(value);
4088          }
4089          return this;
4090        }
4091
4092        /**
4093         * @return {@link #description} (A free text natural language description of the variable and its purpose.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
4094         */
4095        public StringType getDescriptionElement() { 
4096          if (this.description == null)
4097            if (Configuration.errorOnAutoCreate())
4098              throw new Error("Attempt to auto-create TestScriptVariableComponent.description");
4099            else if (Configuration.doAutoCreate())
4100              this.description = new StringType(); // bb
4101          return this.description;
4102        }
4103
4104        public boolean hasDescriptionElement() { 
4105          return this.description != null && !this.description.isEmpty();
4106        }
4107
4108        public boolean hasDescription() { 
4109          return this.description != null && !this.description.isEmpty();
4110        }
4111
4112        /**
4113         * @param value {@link #description} (A free text natural language description of the variable and its purpose.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
4114         */
4115        public TestScriptVariableComponent setDescriptionElement(StringType value) { 
4116          this.description = value;
4117          return this;
4118        }
4119
4120        /**
4121         * @return A free text natural language description of the variable and its purpose.
4122         */
4123        public String getDescription() { 
4124          return this.description == null ? null : this.description.getValue();
4125        }
4126
4127        /**
4128         * @param value A free text natural language description of the variable and its purpose.
4129         */
4130        public TestScriptVariableComponent setDescription(String value) { 
4131          if (Utilities.noString(value))
4132            this.description = null;
4133          else {
4134            if (this.description == null)
4135              this.description = new StringType();
4136            this.description.setValue(value);
4137          }
4138          return this;
4139        }
4140
4141        /**
4142         * @return {@link #expression} (The FHIRPath expression for a specific value to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
4143         */
4144        public StringType getExpressionElement() { 
4145          if (this.expression == null)
4146            if (Configuration.errorOnAutoCreate())
4147              throw new Error("Attempt to auto-create TestScriptVariableComponent.expression");
4148            else if (Configuration.doAutoCreate())
4149              this.expression = new StringType(); // bb
4150          return this.expression;
4151        }
4152
4153        public boolean hasExpressionElement() { 
4154          return this.expression != null && !this.expression.isEmpty();
4155        }
4156
4157        public boolean hasExpression() { 
4158          return this.expression != null && !this.expression.isEmpty();
4159        }
4160
4161        /**
4162         * @param value {@link #expression} (The FHIRPath expression for a specific value to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
4163         */
4164        public TestScriptVariableComponent setExpressionElement(StringType value) { 
4165          this.expression = value;
4166          return this;
4167        }
4168
4169        /**
4170         * @return The FHIRPath expression for a specific value to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified.
4171         */
4172        public String getExpression() { 
4173          return this.expression == null ? null : this.expression.getValue();
4174        }
4175
4176        /**
4177         * @param value The FHIRPath expression for a specific value to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified.
4178         */
4179        public TestScriptVariableComponent setExpression(String value) { 
4180          if (Utilities.noString(value))
4181            this.expression = null;
4182          else {
4183            if (this.expression == null)
4184              this.expression = new StringType();
4185            this.expression.setValue(value);
4186          }
4187          return this;
4188        }
4189
4190        /**
4191         * @return {@link #headerField} (Will be used to grab the HTTP header field value from the headers that sourceId is pointing to.). This is the underlying object with id, value and extensions. The accessor "getHeaderField" gives direct access to the value
4192         */
4193        public StringType getHeaderFieldElement() { 
4194          if (this.headerField == null)
4195            if (Configuration.errorOnAutoCreate())
4196              throw new Error("Attempt to auto-create TestScriptVariableComponent.headerField");
4197            else if (Configuration.doAutoCreate())
4198              this.headerField = new StringType(); // bb
4199          return this.headerField;
4200        }
4201
4202        public boolean hasHeaderFieldElement() { 
4203          return this.headerField != null && !this.headerField.isEmpty();
4204        }
4205
4206        public boolean hasHeaderField() { 
4207          return this.headerField != null && !this.headerField.isEmpty();
4208        }
4209
4210        /**
4211         * @param value {@link #headerField} (Will be used to grab the HTTP header field value from the headers that sourceId is pointing to.). This is the underlying object with id, value and extensions. The accessor "getHeaderField" gives direct access to the value
4212         */
4213        public TestScriptVariableComponent setHeaderFieldElement(StringType value) { 
4214          this.headerField = value;
4215          return this;
4216        }
4217
4218        /**
4219         * @return Will be used to grab the HTTP header field value from the headers that sourceId is pointing to.
4220         */
4221        public String getHeaderField() { 
4222          return this.headerField == null ? null : this.headerField.getValue();
4223        }
4224
4225        /**
4226         * @param value Will be used to grab the HTTP header field value from the headers that sourceId is pointing to.
4227         */
4228        public TestScriptVariableComponent setHeaderField(String value) { 
4229          if (Utilities.noString(value))
4230            this.headerField = null;
4231          else {
4232            if (this.headerField == null)
4233              this.headerField = new StringType();
4234            this.headerField.setValue(value);
4235          }
4236          return this;
4237        }
4238
4239        /**
4240         * @return {@link #hint} (Displayable text string with hint help information to the user when entering a default value.). This is the underlying object with id, value and extensions. The accessor "getHint" gives direct access to the value
4241         */
4242        public StringType getHintElement() { 
4243          if (this.hint == null)
4244            if (Configuration.errorOnAutoCreate())
4245              throw new Error("Attempt to auto-create TestScriptVariableComponent.hint");
4246            else if (Configuration.doAutoCreate())
4247              this.hint = new StringType(); // bb
4248          return this.hint;
4249        }
4250
4251        public boolean hasHintElement() { 
4252          return this.hint != null && !this.hint.isEmpty();
4253        }
4254
4255        public boolean hasHint() { 
4256          return this.hint != null && !this.hint.isEmpty();
4257        }
4258
4259        /**
4260         * @param value {@link #hint} (Displayable text string with hint help information to the user when entering a default value.). This is the underlying object with id, value and extensions. The accessor "getHint" gives direct access to the value
4261         */
4262        public TestScriptVariableComponent setHintElement(StringType value) { 
4263          this.hint = value;
4264          return this;
4265        }
4266
4267        /**
4268         * @return Displayable text string with hint help information to the user when entering a default value.
4269         */
4270        public String getHint() { 
4271          return this.hint == null ? null : this.hint.getValue();
4272        }
4273
4274        /**
4275         * @param value Displayable text string with hint help information to the user when entering a default value.
4276         */
4277        public TestScriptVariableComponent setHint(String value) { 
4278          if (Utilities.noString(value))
4279            this.hint = null;
4280          else {
4281            if (this.hint == null)
4282              this.hint = new StringType();
4283            this.hint.setValue(value);
4284          }
4285          return this;
4286        }
4287
4288        /**
4289         * @return {@link #path} (XPath or JSONPath to evaluate against the fixture body.  When variables are defined, only one of either expression, headerField or path must be specified.). This is the underlying object with id, value and extensions. The accessor "getPath" gives direct access to the value
4290         */
4291        public StringType getPathElement() { 
4292          if (this.path == null)
4293            if (Configuration.errorOnAutoCreate())
4294              throw new Error("Attempt to auto-create TestScriptVariableComponent.path");
4295            else if (Configuration.doAutoCreate())
4296              this.path = new StringType(); // bb
4297          return this.path;
4298        }
4299
4300        public boolean hasPathElement() { 
4301          return this.path != null && !this.path.isEmpty();
4302        }
4303
4304        public boolean hasPath() { 
4305          return this.path != null && !this.path.isEmpty();
4306        }
4307
4308        /**
4309         * @param value {@link #path} (XPath or JSONPath to evaluate against the fixture body.  When variables are defined, only one of either expression, headerField or path must be specified.). This is the underlying object with id, value and extensions. The accessor "getPath" gives direct access to the value
4310         */
4311        public TestScriptVariableComponent setPathElement(StringType value) { 
4312          this.path = value;
4313          return this;
4314        }
4315
4316        /**
4317         * @return XPath or JSONPath to evaluate against the fixture body.  When variables are defined, only one of either expression, headerField or path must be specified.
4318         */
4319        public String getPath() { 
4320          return this.path == null ? null : this.path.getValue();
4321        }
4322
4323        /**
4324         * @param value XPath or JSONPath to evaluate against the fixture body.  When variables are defined, only one of either expression, headerField or path must be specified.
4325         */
4326        public TestScriptVariableComponent setPath(String value) { 
4327          if (Utilities.noString(value))
4328            this.path = null;
4329          else {
4330            if (this.path == null)
4331              this.path = new StringType();
4332            this.path.setValue(value);
4333          }
4334          return this;
4335        }
4336
4337        /**
4338         * @return {@link #sourceId} (Fixture to evaluate the XPath/JSONPath expression or the headerField  against within this variable.). This is the underlying object with id, value and extensions. The accessor "getSourceId" gives direct access to the value
4339         */
4340        public IdType getSourceIdElement() { 
4341          if (this.sourceId == null)
4342            if (Configuration.errorOnAutoCreate())
4343              throw new Error("Attempt to auto-create TestScriptVariableComponent.sourceId");
4344            else if (Configuration.doAutoCreate())
4345              this.sourceId = new IdType(); // bb
4346          return this.sourceId;
4347        }
4348
4349        public boolean hasSourceIdElement() { 
4350          return this.sourceId != null && !this.sourceId.isEmpty();
4351        }
4352
4353        public boolean hasSourceId() { 
4354          return this.sourceId != null && !this.sourceId.isEmpty();
4355        }
4356
4357        /**
4358         * @param value {@link #sourceId} (Fixture to evaluate the XPath/JSONPath expression or the headerField  against within this variable.). This is the underlying object with id, value and extensions. The accessor "getSourceId" gives direct access to the value
4359         */
4360        public TestScriptVariableComponent setSourceIdElement(IdType value) { 
4361          this.sourceId = value;
4362          return this;
4363        }
4364
4365        /**
4366         * @return Fixture to evaluate the XPath/JSONPath expression or the headerField  against within this variable.
4367         */
4368        public String getSourceId() { 
4369          return this.sourceId == null ? null : this.sourceId.getValue();
4370        }
4371
4372        /**
4373         * @param value Fixture to evaluate the XPath/JSONPath expression or the headerField  against within this variable.
4374         */
4375        public TestScriptVariableComponent setSourceId(String value) { 
4376          if (Utilities.noString(value))
4377            this.sourceId = null;
4378          else {
4379            if (this.sourceId == null)
4380              this.sourceId = new IdType();
4381            this.sourceId.setValue(value);
4382          }
4383          return this;
4384        }
4385
4386        protected void listChildren(List<Property> children) {
4387          super.listChildren(children);
4388          children.add(new Property("name", "string", "Descriptive name for this variable.", 0, 1, name));
4389          children.add(new Property("defaultValue", "string", "A default, hard-coded, or user-defined value for this variable.", 0, 1, defaultValue));
4390          children.add(new Property("description", "string", "A free text natural language description of the variable and its purpose.", 0, 1, description));
4391          children.add(new Property("expression", "string", "The FHIRPath expression for a specific value to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified.", 0, 1, expression));
4392          children.add(new Property("headerField", "string", "Will be used to grab the HTTP header field value from the headers that sourceId is pointing to.", 0, 1, headerField));
4393          children.add(new Property("hint", "string", "Displayable text string with hint help information to the user when entering a default value.", 0, 1, hint));
4394          children.add(new Property("path", "string", "XPath or JSONPath to evaluate against the fixture body.  When variables are defined, only one of either expression, headerField or path must be specified.", 0, 1, path));
4395          children.add(new Property("sourceId", "id", "Fixture to evaluate the XPath/JSONPath expression or the headerField  against within this variable.", 0, 1, sourceId));
4396        }
4397
4398        @Override
4399        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4400          switch (_hash) {
4401          case 3373707: /*name*/  return new Property("name", "string", "Descriptive name for this variable.", 0, 1, name);
4402          case -659125328: /*defaultValue*/  return new Property("defaultValue", "string", "A default, hard-coded, or user-defined value for this variable.", 0, 1, defaultValue);
4403          case -1724546052: /*description*/  return new Property("description", "string", "A free text natural language description of the variable and its purpose.", 0, 1, description);
4404          case -1795452264: /*expression*/  return new Property("expression", "string", "The FHIRPath expression for a specific value to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified.", 0, 1, expression);
4405          case 1160732269: /*headerField*/  return new Property("headerField", "string", "Will be used to grab the HTTP header field value from the headers that sourceId is pointing to.", 0, 1, headerField);
4406          case 3202695: /*hint*/  return new Property("hint", "string", "Displayable text string with hint help information to the user when entering a default value.", 0, 1, hint);
4407          case 3433509: /*path*/  return new Property("path", "string", "XPath or JSONPath to evaluate against the fixture body.  When variables are defined, only one of either expression, headerField or path must be specified.", 0, 1, path);
4408          case 1746327190: /*sourceId*/  return new Property("sourceId", "id", "Fixture to evaluate the XPath/JSONPath expression or the headerField  against within this variable.", 0, 1, sourceId);
4409          default: return super.getNamedProperty(_hash, _name, _checkValid);
4410          }
4411
4412        }
4413
4414      @Override
4415      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4416        switch (hash) {
4417        case 3373707: /*name*/ return this.name == null ? new Base[0] : new Base[] {this.name}; // StringType
4418        case -659125328: /*defaultValue*/ return this.defaultValue == null ? new Base[0] : new Base[] {this.defaultValue}; // StringType
4419        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
4420        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // StringType
4421        case 1160732269: /*headerField*/ return this.headerField == null ? new Base[0] : new Base[] {this.headerField}; // StringType
4422        case 3202695: /*hint*/ return this.hint == null ? new Base[0] : new Base[] {this.hint}; // StringType
4423        case 3433509: /*path*/ return this.path == null ? new Base[0] : new Base[] {this.path}; // StringType
4424        case 1746327190: /*sourceId*/ return this.sourceId == null ? new Base[0] : new Base[] {this.sourceId}; // IdType
4425        default: return super.getProperty(hash, name, checkValid);
4426        }
4427
4428      }
4429
4430      @Override
4431      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4432        switch (hash) {
4433        case 3373707: // name
4434          this.name = TypeConvertor.castToString(value); // StringType
4435          return value;
4436        case -659125328: // defaultValue
4437          this.defaultValue = TypeConvertor.castToString(value); // StringType
4438          return value;
4439        case -1724546052: // description
4440          this.description = TypeConvertor.castToString(value); // StringType
4441          return value;
4442        case -1795452264: // expression
4443          this.expression = TypeConvertor.castToString(value); // StringType
4444          return value;
4445        case 1160732269: // headerField
4446          this.headerField = TypeConvertor.castToString(value); // StringType
4447          return value;
4448        case 3202695: // hint
4449          this.hint = TypeConvertor.castToString(value); // StringType
4450          return value;
4451        case 3433509: // path
4452          this.path = TypeConvertor.castToString(value); // StringType
4453          return value;
4454        case 1746327190: // sourceId
4455          this.sourceId = TypeConvertor.castToId(value); // IdType
4456          return value;
4457        default: return super.setProperty(hash, name, value);
4458        }
4459
4460      }
4461
4462      @Override
4463      public Base setProperty(String name, Base value) throws FHIRException {
4464        if (name.equals("name")) {
4465          this.name = TypeConvertor.castToString(value); // StringType
4466        } else if (name.equals("defaultValue")) {
4467          this.defaultValue = TypeConvertor.castToString(value); // StringType
4468        } else if (name.equals("description")) {
4469          this.description = TypeConvertor.castToString(value); // StringType
4470        } else if (name.equals("expression")) {
4471          this.expression = TypeConvertor.castToString(value); // StringType
4472        } else if (name.equals("headerField")) {
4473          this.headerField = TypeConvertor.castToString(value); // StringType
4474        } else if (name.equals("hint")) {
4475          this.hint = TypeConvertor.castToString(value); // StringType
4476        } else if (name.equals("path")) {
4477          this.path = TypeConvertor.castToString(value); // StringType
4478        } else if (name.equals("sourceId")) {
4479          this.sourceId = TypeConvertor.castToId(value); // IdType
4480        } else
4481          return super.setProperty(name, value);
4482        return value;
4483      }
4484
4485  @Override
4486  public void removeChild(String name, Base value) throws FHIRException {
4487        if (name.equals("name")) {
4488          this.name = null;
4489        } else if (name.equals("defaultValue")) {
4490          this.defaultValue = null;
4491        } else if (name.equals("description")) {
4492          this.description = null;
4493        } else if (name.equals("expression")) {
4494          this.expression = null;
4495        } else if (name.equals("headerField")) {
4496          this.headerField = null;
4497        } else if (name.equals("hint")) {
4498          this.hint = null;
4499        } else if (name.equals("path")) {
4500          this.path = null;
4501        } else if (name.equals("sourceId")) {
4502          this.sourceId = null;
4503        } else
4504          super.removeChild(name, value);
4505        
4506      }
4507
4508      @Override
4509      public Base makeProperty(int hash, String name) throws FHIRException {
4510        switch (hash) {
4511        case 3373707:  return getNameElement();
4512        case -659125328:  return getDefaultValueElement();
4513        case -1724546052:  return getDescriptionElement();
4514        case -1795452264:  return getExpressionElement();
4515        case 1160732269:  return getHeaderFieldElement();
4516        case 3202695:  return getHintElement();
4517        case 3433509:  return getPathElement();
4518        case 1746327190:  return getSourceIdElement();
4519        default: return super.makeProperty(hash, name);
4520        }
4521
4522      }
4523
4524      @Override
4525      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4526        switch (hash) {
4527        case 3373707: /*name*/ return new String[] {"string"};
4528        case -659125328: /*defaultValue*/ return new String[] {"string"};
4529        case -1724546052: /*description*/ return new String[] {"string"};
4530        case -1795452264: /*expression*/ return new String[] {"string"};
4531        case 1160732269: /*headerField*/ return new String[] {"string"};
4532        case 3202695: /*hint*/ return new String[] {"string"};
4533        case 3433509: /*path*/ return new String[] {"string"};
4534        case 1746327190: /*sourceId*/ return new String[] {"id"};
4535        default: return super.getTypesForProperty(hash, name);
4536        }
4537
4538      }
4539
4540      @Override
4541      public Base addChild(String name) throws FHIRException {
4542        if (name.equals("name")) {
4543          throw new FHIRException("Cannot call addChild on a singleton property TestScript.variable.name");
4544        }
4545        else if (name.equals("defaultValue")) {
4546          throw new FHIRException("Cannot call addChild on a singleton property TestScript.variable.defaultValue");
4547        }
4548        else if (name.equals("description")) {
4549          throw new FHIRException("Cannot call addChild on a singleton property TestScript.variable.description");
4550        }
4551        else if (name.equals("expression")) {
4552          throw new FHIRException("Cannot call addChild on a singleton property TestScript.variable.expression");
4553        }
4554        else if (name.equals("headerField")) {
4555          throw new FHIRException("Cannot call addChild on a singleton property TestScript.variable.headerField");
4556        }
4557        else if (name.equals("hint")) {
4558          throw new FHIRException("Cannot call addChild on a singleton property TestScript.variable.hint");
4559        }
4560        else if (name.equals("path")) {
4561          throw new FHIRException("Cannot call addChild on a singleton property TestScript.variable.path");
4562        }
4563        else if (name.equals("sourceId")) {
4564          throw new FHIRException("Cannot call addChild on a singleton property TestScript.variable.sourceId");
4565        }
4566        else
4567          return super.addChild(name);
4568      }
4569
4570      public TestScriptVariableComponent copy() {
4571        TestScriptVariableComponent dst = new TestScriptVariableComponent();
4572        copyValues(dst);
4573        return dst;
4574      }
4575
4576      public void copyValues(TestScriptVariableComponent dst) {
4577        super.copyValues(dst);
4578        dst.name = name == null ? null : name.copy();
4579        dst.defaultValue = defaultValue == null ? null : defaultValue.copy();
4580        dst.description = description == null ? null : description.copy();
4581        dst.expression = expression == null ? null : expression.copy();
4582        dst.headerField = headerField == null ? null : headerField.copy();
4583        dst.hint = hint == null ? null : hint.copy();
4584        dst.path = path == null ? null : path.copy();
4585        dst.sourceId = sourceId == null ? null : sourceId.copy();
4586      }
4587
4588      @Override
4589      public boolean equalsDeep(Base other_) {
4590        if (!super.equalsDeep(other_))
4591          return false;
4592        if (!(other_ instanceof TestScriptVariableComponent))
4593          return false;
4594        TestScriptVariableComponent o = (TestScriptVariableComponent) other_;
4595        return compareDeep(name, o.name, true) && compareDeep(defaultValue, o.defaultValue, true) && compareDeep(description, o.description, true)
4596           && compareDeep(expression, o.expression, true) && compareDeep(headerField, o.headerField, true)
4597           && compareDeep(hint, o.hint, true) && compareDeep(path, o.path, true) && compareDeep(sourceId, o.sourceId, true)
4598          ;
4599      }
4600
4601      @Override
4602      public boolean equalsShallow(Base other_) {
4603        if (!super.equalsShallow(other_))
4604          return false;
4605        if (!(other_ instanceof TestScriptVariableComponent))
4606          return false;
4607        TestScriptVariableComponent o = (TestScriptVariableComponent) other_;
4608        return compareValues(name, o.name, true) && compareValues(defaultValue, o.defaultValue, true) && compareValues(description, o.description, true)
4609           && compareValues(expression, o.expression, true) && compareValues(headerField, o.headerField, true)
4610           && compareValues(hint, o.hint, true) && compareValues(path, o.path, true) && compareValues(sourceId, o.sourceId, true)
4611          ;
4612      }
4613
4614      public boolean isEmpty() {
4615        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(name, defaultValue, description
4616          , expression, headerField, hint, path, sourceId);
4617      }
4618
4619  public String fhirType() {
4620    return "TestScript.variable";
4621
4622  }
4623
4624  }
4625
4626    @Block()
4627    public static class TestScriptSetupComponent extends BackboneElement implements IBaseBackboneElement {
4628        /**
4629         * Action would contain either an operation or an assertion.
4630         */
4631        @Child(name = "action", type = {}, order=1, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
4632        @Description(shortDefinition="A setup operation or assert to perform", formalDefinition="Action would contain either an operation or an assertion." )
4633        protected List<SetupActionComponent> action;
4634
4635        private static final long serialVersionUID = -123374486L;
4636
4637    /**
4638     * Constructor
4639     */
4640      public TestScriptSetupComponent() {
4641        super();
4642      }
4643
4644    /**
4645     * Constructor
4646     */
4647      public TestScriptSetupComponent(SetupActionComponent action) {
4648        super();
4649        this.addAction(action);
4650      }
4651
4652        /**
4653         * @return {@link #action} (Action would contain either an operation or an assertion.)
4654         */
4655        public List<SetupActionComponent> getAction() { 
4656          if (this.action == null)
4657            this.action = new ArrayList<SetupActionComponent>();
4658          return this.action;
4659        }
4660
4661        /**
4662         * @return Returns a reference to <code>this</code> for easy method chaining
4663         */
4664        public TestScriptSetupComponent setAction(List<SetupActionComponent> theAction) { 
4665          this.action = theAction;
4666          return this;
4667        }
4668
4669        public boolean hasAction() { 
4670          if (this.action == null)
4671            return false;
4672          for (SetupActionComponent item : this.action)
4673            if (!item.isEmpty())
4674              return true;
4675          return false;
4676        }
4677
4678        public SetupActionComponent addAction() { //3
4679          SetupActionComponent t = new SetupActionComponent();
4680          if (this.action == null)
4681            this.action = new ArrayList<SetupActionComponent>();
4682          this.action.add(t);
4683          return t;
4684        }
4685
4686        public TestScriptSetupComponent addAction(SetupActionComponent t) { //3
4687          if (t == null)
4688            return this;
4689          if (this.action == null)
4690            this.action = new ArrayList<SetupActionComponent>();
4691          this.action.add(t);
4692          return this;
4693        }
4694
4695        /**
4696         * @return The first repetition of repeating field {@link #action}, creating it if it does not already exist {3}
4697         */
4698        public SetupActionComponent getActionFirstRep() { 
4699          if (getAction().isEmpty()) {
4700            addAction();
4701          }
4702          return getAction().get(0);
4703        }
4704
4705        protected void listChildren(List<Property> children) {
4706          super.listChildren(children);
4707          children.add(new Property("action", "", "Action would contain either an operation or an assertion.", 0, java.lang.Integer.MAX_VALUE, action));
4708        }
4709
4710        @Override
4711        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4712          switch (_hash) {
4713          case -1422950858: /*action*/  return new Property("action", "", "Action would contain either an operation or an assertion.", 0, java.lang.Integer.MAX_VALUE, action);
4714          default: return super.getNamedProperty(_hash, _name, _checkValid);
4715          }
4716
4717        }
4718
4719      @Override
4720      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4721        switch (hash) {
4722        case -1422950858: /*action*/ return this.action == null ? new Base[0] : this.action.toArray(new Base[this.action.size()]); // SetupActionComponent
4723        default: return super.getProperty(hash, name, checkValid);
4724        }
4725
4726      }
4727
4728      @Override
4729      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4730        switch (hash) {
4731        case -1422950858: // action
4732          this.getAction().add((SetupActionComponent) value); // SetupActionComponent
4733          return value;
4734        default: return super.setProperty(hash, name, value);
4735        }
4736
4737      }
4738
4739      @Override
4740      public Base setProperty(String name, Base value) throws FHIRException {
4741        if (name.equals("action")) {
4742          this.getAction().add((SetupActionComponent) value);
4743        } else
4744          return super.setProperty(name, value);
4745        return value;
4746      }
4747
4748  @Override
4749  public void removeChild(String name, Base value) throws FHIRException {
4750        if (name.equals("action")) {
4751          this.getAction().remove((SetupActionComponent) value);
4752        } else
4753          super.removeChild(name, value);
4754        
4755      }
4756
4757      @Override
4758      public Base makeProperty(int hash, String name) throws FHIRException {
4759        switch (hash) {
4760        case -1422950858:  return addAction(); 
4761        default: return super.makeProperty(hash, name);
4762        }
4763
4764      }
4765
4766      @Override
4767      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4768        switch (hash) {
4769        case -1422950858: /*action*/ return new String[] {};
4770        default: return super.getTypesForProperty(hash, name);
4771        }
4772
4773      }
4774
4775      @Override
4776      public Base addChild(String name) throws FHIRException {
4777        if (name.equals("action")) {
4778          return addAction();
4779        }
4780        else
4781          return super.addChild(name);
4782      }
4783
4784      public TestScriptSetupComponent copy() {
4785        TestScriptSetupComponent dst = new TestScriptSetupComponent();
4786        copyValues(dst);
4787        return dst;
4788      }
4789
4790      public void copyValues(TestScriptSetupComponent dst) {
4791        super.copyValues(dst);
4792        if (action != null) {
4793          dst.action = new ArrayList<SetupActionComponent>();
4794          for (SetupActionComponent i : action)
4795            dst.action.add(i.copy());
4796        };
4797      }
4798
4799      @Override
4800      public boolean equalsDeep(Base other_) {
4801        if (!super.equalsDeep(other_))
4802          return false;
4803        if (!(other_ instanceof TestScriptSetupComponent))
4804          return false;
4805        TestScriptSetupComponent o = (TestScriptSetupComponent) other_;
4806        return compareDeep(action, o.action, true);
4807      }
4808
4809      @Override
4810      public boolean equalsShallow(Base other_) {
4811        if (!super.equalsShallow(other_))
4812          return false;
4813        if (!(other_ instanceof TestScriptSetupComponent))
4814          return false;
4815        TestScriptSetupComponent o = (TestScriptSetupComponent) other_;
4816        return true;
4817      }
4818
4819      public boolean isEmpty() {
4820        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(action);
4821      }
4822
4823  public String fhirType() {
4824    return "TestScript.setup";
4825
4826  }
4827
4828  }
4829
4830    @Block()
4831    public static class SetupActionComponent extends BackboneElement implements IBaseBackboneElement {
4832        /**
4833         * The operation to perform.
4834         */
4835        @Child(name = "operation", type = {}, order=1, min=0, max=1, modifier=false, summary=false)
4836        @Description(shortDefinition="The setup operation to perform", formalDefinition="The operation to perform." )
4837        protected SetupActionOperationComponent operation;
4838
4839        /**
4840         * Evaluates the results of previous operations to determine if the server under test behaves appropriately.
4841         */
4842        @Child(name = "assert", type = {}, order=2, min=0, max=1, modifier=false, summary=false)
4843        @Description(shortDefinition="The assertion to perform", formalDefinition="Evaluates the results of previous operations to determine if the server under test behaves appropriately." )
4844        protected SetupActionAssertComponent assert_;
4845
4846        private static final long serialVersionUID = -252088305L;
4847
4848    /**
4849     * Constructor
4850     */
4851      public SetupActionComponent() {
4852        super();
4853      }
4854
4855        /**
4856         * @return {@link #operation} (The operation to perform.)
4857         */
4858        public SetupActionOperationComponent getOperation() { 
4859          if (this.operation == null)
4860            if (Configuration.errorOnAutoCreate())
4861              throw new Error("Attempt to auto-create SetupActionComponent.operation");
4862            else if (Configuration.doAutoCreate())
4863              this.operation = new SetupActionOperationComponent(); // cc
4864          return this.operation;
4865        }
4866
4867        public boolean hasOperation() { 
4868          return this.operation != null && !this.operation.isEmpty();
4869        }
4870
4871        /**
4872         * @param value {@link #operation} (The operation to perform.)
4873         */
4874        public SetupActionComponent setOperation(SetupActionOperationComponent value) { 
4875          this.operation = value;
4876          return this;
4877        }
4878
4879        /**
4880         * @return {@link #assert_} (Evaluates the results of previous operations to determine if the server under test behaves appropriately.)
4881         */
4882        public SetupActionAssertComponent getAssert() { 
4883          if (this.assert_ == null)
4884            if (Configuration.errorOnAutoCreate())
4885              throw new Error("Attempt to auto-create SetupActionComponent.assert_");
4886            else if (Configuration.doAutoCreate())
4887              this.assert_ = new SetupActionAssertComponent(); // cc
4888          return this.assert_;
4889        }
4890
4891        public boolean hasAssert() { 
4892          return this.assert_ != null && !this.assert_.isEmpty();
4893        }
4894
4895        /**
4896         * @param value {@link #assert_} (Evaluates the results of previous operations to determine if the server under test behaves appropriately.)
4897         */
4898        public SetupActionComponent setAssert(SetupActionAssertComponent value) { 
4899          this.assert_ = value;
4900          return this;
4901        }
4902
4903        protected void listChildren(List<Property> children) {
4904          super.listChildren(children);
4905          children.add(new Property("operation", "", "The operation to perform.", 0, 1, operation));
4906          children.add(new Property("assert", "", "Evaluates the results of previous operations to determine if the server under test behaves appropriately.", 0, 1, assert_));
4907        }
4908
4909        @Override
4910        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
4911          switch (_hash) {
4912          case 1662702951: /*operation*/  return new Property("operation", "", "The operation to perform.", 0, 1, operation);
4913          case -1408208058: /*assert*/  return new Property("assert", "", "Evaluates the results of previous operations to determine if the server under test behaves appropriately.", 0, 1, assert_);
4914          default: return super.getNamedProperty(_hash, _name, _checkValid);
4915          }
4916
4917        }
4918
4919      @Override
4920      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
4921        switch (hash) {
4922        case 1662702951: /*operation*/ return this.operation == null ? new Base[0] : new Base[] {this.operation}; // SetupActionOperationComponent
4923        case -1408208058: /*assert*/ return this.assert_ == null ? new Base[0] : new Base[] {this.assert_}; // SetupActionAssertComponent
4924        default: return super.getProperty(hash, name, checkValid);
4925        }
4926
4927      }
4928
4929      @Override
4930      public Base setProperty(int hash, String name, Base value) throws FHIRException {
4931        switch (hash) {
4932        case 1662702951: // operation
4933          this.operation = (SetupActionOperationComponent) value; // SetupActionOperationComponent
4934          return value;
4935        case -1408208058: // assert
4936          this.assert_ = (SetupActionAssertComponent) value; // SetupActionAssertComponent
4937          return value;
4938        default: return super.setProperty(hash, name, value);
4939        }
4940
4941      }
4942
4943      @Override
4944      public Base setProperty(String name, Base value) throws FHIRException {
4945        if (name.equals("operation")) {
4946          this.operation = (SetupActionOperationComponent) value; // SetupActionOperationComponent
4947        } else if (name.equals("assert")) {
4948          this.assert_ = (SetupActionAssertComponent) value; // SetupActionAssertComponent
4949        } else
4950          return super.setProperty(name, value);
4951        return value;
4952      }
4953
4954  @Override
4955  public void removeChild(String name, Base value) throws FHIRException {
4956        if (name.equals("operation")) {
4957          this.operation = (SetupActionOperationComponent) value; // SetupActionOperationComponent
4958        } else if (name.equals("assert")) {
4959          this.assert_ = (SetupActionAssertComponent) value; // SetupActionAssertComponent
4960        } else
4961          super.removeChild(name, value);
4962        
4963      }
4964
4965      @Override
4966      public Base makeProperty(int hash, String name) throws FHIRException {
4967        switch (hash) {
4968        case 1662702951:  return getOperation();
4969        case -1408208058:  return getAssert();
4970        default: return super.makeProperty(hash, name);
4971        }
4972
4973      }
4974
4975      @Override
4976      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
4977        switch (hash) {
4978        case 1662702951: /*operation*/ return new String[] {};
4979        case -1408208058: /*assert*/ return new String[] {};
4980        default: return super.getTypesForProperty(hash, name);
4981        }
4982
4983      }
4984
4985      @Override
4986      public Base addChild(String name) throws FHIRException {
4987        if (name.equals("operation")) {
4988          this.operation = new SetupActionOperationComponent();
4989          return this.operation;
4990        }
4991        else if (name.equals("assert")) {
4992          this.assert_ = new SetupActionAssertComponent();
4993          return this.assert_;
4994        }
4995        else
4996          return super.addChild(name);
4997      }
4998
4999      public SetupActionComponent copy() {
5000        SetupActionComponent dst = new SetupActionComponent();
5001        copyValues(dst);
5002        return dst;
5003      }
5004
5005      public void copyValues(SetupActionComponent dst) {
5006        super.copyValues(dst);
5007        dst.operation = operation == null ? null : operation.copy();
5008        dst.assert_ = assert_ == null ? null : assert_.copy();
5009      }
5010
5011      @Override
5012      public boolean equalsDeep(Base other_) {
5013        if (!super.equalsDeep(other_))
5014          return false;
5015        if (!(other_ instanceof SetupActionComponent))
5016          return false;
5017        SetupActionComponent o = (SetupActionComponent) other_;
5018        return compareDeep(operation, o.operation, true) && compareDeep(assert_, o.assert_, true);
5019      }
5020
5021      @Override
5022      public boolean equalsShallow(Base other_) {
5023        if (!super.equalsShallow(other_))
5024          return false;
5025        if (!(other_ instanceof SetupActionComponent))
5026          return false;
5027        SetupActionComponent o = (SetupActionComponent) other_;
5028        return true;
5029      }
5030
5031      public boolean isEmpty() {
5032        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(operation, assert_);
5033      }
5034
5035  public String fhirType() {
5036    return "TestScript.setup.action";
5037
5038  }
5039
5040  }
5041
5042    @Block()
5043    public static class SetupActionOperationComponent extends BackboneElement implements IBaseBackboneElement {
5044        /**
5045         * Server interaction or operation type.
5046         */
5047        @Child(name = "type", type = {Coding.class}, order=1, min=0, max=1, modifier=false, summary=false)
5048        @Description(shortDefinition="The operation code type that will be executed", formalDefinition="Server interaction or operation type." )
5049        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/testscript-operation-codes")
5050        protected Coding type;
5051
5052        /**
5053         * The type of the FHIR resource. See the [resource list](resourcelist.html). Data type of uri is needed when non-HL7 artifacts are identified.
5054         */
5055        @Child(name = "resource", type = {UriType.class}, order=2, min=0, max=1, modifier=false, summary=false)
5056        @Description(shortDefinition="Resource type", formalDefinition="The type of the FHIR resource. See the [resource list](resourcelist.html). Data type of uri is needed when non-HL7 artifacts are identified." )
5057        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/concrete-fhir-types")
5058        protected UriType resource;
5059
5060        /**
5061         * The label would be used for tracking/logging purposes by test engines.
5062         */
5063        @Child(name = "label", type = {StringType.class}, order=3, min=0, max=1, modifier=false, summary=false)
5064        @Description(shortDefinition="Tracking/logging operation label", formalDefinition="The label would be used for tracking/logging purposes by test engines." )
5065        protected StringType label;
5066
5067        /**
5068         * The description would be used by test engines for tracking and reporting purposes.
5069         */
5070        @Child(name = "description", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
5071        @Description(shortDefinition="Tracking/reporting operation description", formalDefinition="The description would be used by test engines for tracking and reporting purposes." )
5072        protected StringType description;
5073
5074        /**
5075         * The mime-type to use for RESTful operation in the 'Accept' header.
5076         */
5077        @Child(name = "accept", type = {CodeType.class}, order=5, min=0, max=1, modifier=false, summary=false)
5078        @Description(shortDefinition="Mime type to accept in the payload of the response, with charset etc", formalDefinition="The mime-type to use for RESTful operation in the 'Accept' header." )
5079        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/mimetypes")
5080        protected CodeType accept;
5081
5082        /**
5083         * The mime-type to use for RESTful operation in the 'Content-Type' header.
5084         */
5085        @Child(name = "contentType", type = {CodeType.class}, order=6, min=0, max=1, modifier=false, summary=false)
5086        @Description(shortDefinition="Mime type of the request payload contents, with charset etc", formalDefinition="The mime-type to use for RESTful operation in the 'Content-Type' header." )
5087        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/mimetypes")
5088        protected CodeType contentType;
5089
5090        /**
5091         * The server where the request message is destined for.  Must be one of the server numbers listed in TestScript.destination section.
5092         */
5093        @Child(name = "destination", type = {IntegerType.class}, order=7, min=0, max=1, modifier=false, summary=false)
5094        @Description(shortDefinition="Server responding to the request", formalDefinition="The server where the request message is destined for.  Must be one of the server numbers listed in TestScript.destination section." )
5095        protected IntegerType destination;
5096
5097        /**
5098         * Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url paths.
5099         */
5100        @Child(name = "encodeRequestUrl", type = {BooleanType.class}, order=8, min=1, max=1, modifier=false, summary=false)
5101        @Description(shortDefinition="Whether or not to send the request url in encoded format", formalDefinition="Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url paths." )
5102        protected BooleanType encodeRequestUrl;
5103
5104        /**
5105         * The HTTP method the test engine MUST use for this operation regardless of any other operation details.
5106         */
5107        @Child(name = "method", type = {CodeType.class}, order=9, min=0, max=1, modifier=false, summary=false)
5108        @Description(shortDefinition="delete | get | options | patch | post | put | head", formalDefinition="The HTTP method the test engine MUST use for this operation regardless of any other operation details." )
5109        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/http-operations")
5110        protected Enumeration<TestScriptRequestMethodCode> method;
5111
5112        /**
5113         * The server where the request message originates from.  Must be one of the server numbers listed in TestScript.origin section.
5114         */
5115        @Child(name = "origin", type = {IntegerType.class}, order=10, min=0, max=1, modifier=false, summary=false)
5116        @Description(shortDefinition="Server initiating the request", formalDefinition="The server where the request message originates from.  Must be one of the server numbers listed in TestScript.origin section." )
5117        protected IntegerType origin;
5118
5119        /**
5120         * Path plus parameters after [type].  Used to set parts of the request URL explicitly.
5121         */
5122        @Child(name = "params", type = {StringType.class}, order=11, min=0, max=1, modifier=false, summary=false)
5123        @Description(shortDefinition="Explicitly defined path parameters", formalDefinition="Path plus parameters after [type].  Used to set parts of the request URL explicitly." )
5124        protected StringType params;
5125
5126        /**
5127         * Header elements would be used to set HTTP headers.
5128         */
5129        @Child(name = "requestHeader", type = {}, order=12, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
5130        @Description(shortDefinition="Each operation can have one or more header elements", formalDefinition="Header elements would be used to set HTTP headers." )
5131        protected List<SetupActionOperationRequestHeaderComponent> requestHeader;
5132
5133        /**
5134         * The fixture id (maybe new) to map to the request.
5135         */
5136        @Child(name = "requestId", type = {IdType.class}, order=13, min=0, max=1, modifier=false, summary=false)
5137        @Description(shortDefinition="Fixture Id of mapped request", formalDefinition="The fixture id (maybe new) to map to the request." )
5138        protected IdType requestId;
5139
5140        /**
5141         * The fixture id (maybe new) to map to the response.
5142         */
5143        @Child(name = "responseId", type = {IdType.class}, order=14, min=0, max=1, modifier=false, summary=false)
5144        @Description(shortDefinition="Fixture Id of mapped response", formalDefinition="The fixture id (maybe new) to map to the response." )
5145        protected IdType responseId;
5146
5147        /**
5148         * The id of the fixture used as the body of a PUT or POST request.
5149         */
5150        @Child(name = "sourceId", type = {IdType.class}, order=15, min=0, max=1, modifier=false, summary=false)
5151        @Description(shortDefinition="Fixture Id of body for PUT and POST requests", formalDefinition="The id of the fixture used as the body of a PUT or POST request." )
5152        protected IdType sourceId;
5153
5154        /**
5155         * Id of fixture used for extracting the [id],  [type], and [vid] for GET requests.
5156         */
5157        @Child(name = "targetId", type = {IdType.class}, order=16, min=0, max=1, modifier=false, summary=false)
5158        @Description(shortDefinition="Id of fixture used for extracting the [id],  [type], and [vid] for GET requests", formalDefinition="Id of fixture used for extracting the [id],  [type], and [vid] for GET requests." )
5159        protected IdType targetId;
5160
5161        /**
5162         * Complete request URL.
5163         */
5164        @Child(name = "url", type = {StringType.class}, order=17, min=0, max=1, modifier=false, summary=false)
5165        @Description(shortDefinition="Request URL", formalDefinition="Complete request URL." )
5166        protected StringType url;
5167
5168        private static final long serialVersionUID = 308704897L;
5169
5170    /**
5171     * Constructor
5172     */
5173      public SetupActionOperationComponent() {
5174        super();
5175      }
5176
5177    /**
5178     * Constructor
5179     */
5180      public SetupActionOperationComponent(boolean encodeRequestUrl) {
5181        super();
5182        this.setEncodeRequestUrl(encodeRequestUrl);
5183      }
5184
5185        /**
5186         * @return {@link #type} (Server interaction or operation type.)
5187         */
5188        public Coding getType() { 
5189          if (this.type == null)
5190            if (Configuration.errorOnAutoCreate())
5191              throw new Error("Attempt to auto-create SetupActionOperationComponent.type");
5192            else if (Configuration.doAutoCreate())
5193              this.type = new Coding(); // cc
5194          return this.type;
5195        }
5196
5197        public boolean hasType() { 
5198          return this.type != null && !this.type.isEmpty();
5199        }
5200
5201        /**
5202         * @param value {@link #type} (Server interaction or operation type.)
5203         */
5204        public SetupActionOperationComponent setType(Coding value) { 
5205          this.type = value;
5206          return this;
5207        }
5208
5209        /**
5210         * @return {@link #resource} (The type of the FHIR resource. See the [resource list](resourcelist.html). Data type of uri is needed when non-HL7 artifacts are identified.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
5211         */
5212        public UriType getResourceElement() { 
5213          if (this.resource == null)
5214            if (Configuration.errorOnAutoCreate())
5215              throw new Error("Attempt to auto-create SetupActionOperationComponent.resource");
5216            else if (Configuration.doAutoCreate())
5217              this.resource = new UriType(); // bb
5218          return this.resource;
5219        }
5220
5221        public boolean hasResourceElement() { 
5222          return this.resource != null && !this.resource.isEmpty();
5223        }
5224
5225        public boolean hasResource() { 
5226          return this.resource != null && !this.resource.isEmpty();
5227        }
5228
5229        /**
5230         * @param value {@link #resource} (The type of the FHIR resource. See the [resource list](resourcelist.html). Data type of uri is needed when non-HL7 artifacts are identified.). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
5231         */
5232        public SetupActionOperationComponent setResourceElement(UriType value) { 
5233          this.resource = value;
5234          return this;
5235        }
5236
5237        /**
5238         * @return The type of the FHIR resource. See the [resource list](resourcelist.html). Data type of uri is needed when non-HL7 artifacts are identified.
5239         */
5240        public String getResource() { 
5241          return this.resource == null ? null : this.resource.getValue();
5242        }
5243
5244        /**
5245         * @param value The type of the FHIR resource. See the [resource list](resourcelist.html). Data type of uri is needed when non-HL7 artifacts are identified.
5246         */
5247        public SetupActionOperationComponent setResource(String value) { 
5248          if (Utilities.noString(value))
5249            this.resource = null;
5250          else {
5251            if (this.resource == null)
5252              this.resource = new UriType();
5253            this.resource.setValue(value);
5254          }
5255          return this;
5256        }
5257
5258        /**
5259         * @return {@link #label} (The label would be used for tracking/logging purposes by test engines.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
5260         */
5261        public StringType getLabelElement() { 
5262          if (this.label == null)
5263            if (Configuration.errorOnAutoCreate())
5264              throw new Error("Attempt to auto-create SetupActionOperationComponent.label");
5265            else if (Configuration.doAutoCreate())
5266              this.label = new StringType(); // bb
5267          return this.label;
5268        }
5269
5270        public boolean hasLabelElement() { 
5271          return this.label != null && !this.label.isEmpty();
5272        }
5273
5274        public boolean hasLabel() { 
5275          return this.label != null && !this.label.isEmpty();
5276        }
5277
5278        /**
5279         * @param value {@link #label} (The label would be used for tracking/logging purposes by test engines.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
5280         */
5281        public SetupActionOperationComponent setLabelElement(StringType value) { 
5282          this.label = value;
5283          return this;
5284        }
5285
5286        /**
5287         * @return The label would be used for tracking/logging purposes by test engines.
5288         */
5289        public String getLabel() { 
5290          return this.label == null ? null : this.label.getValue();
5291        }
5292
5293        /**
5294         * @param value The label would be used for tracking/logging purposes by test engines.
5295         */
5296        public SetupActionOperationComponent setLabel(String value) { 
5297          if (Utilities.noString(value))
5298            this.label = null;
5299          else {
5300            if (this.label == null)
5301              this.label = new StringType();
5302            this.label.setValue(value);
5303          }
5304          return this;
5305        }
5306
5307        /**
5308         * @return {@link #description} (The description would be used by test engines for tracking and reporting purposes.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
5309         */
5310        public StringType getDescriptionElement() { 
5311          if (this.description == null)
5312            if (Configuration.errorOnAutoCreate())
5313              throw new Error("Attempt to auto-create SetupActionOperationComponent.description");
5314            else if (Configuration.doAutoCreate())
5315              this.description = new StringType(); // bb
5316          return this.description;
5317        }
5318
5319        public boolean hasDescriptionElement() { 
5320          return this.description != null && !this.description.isEmpty();
5321        }
5322
5323        public boolean hasDescription() { 
5324          return this.description != null && !this.description.isEmpty();
5325        }
5326
5327        /**
5328         * @param value {@link #description} (The description would be used by test engines for tracking and reporting purposes.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
5329         */
5330        public SetupActionOperationComponent setDescriptionElement(StringType value) { 
5331          this.description = value;
5332          return this;
5333        }
5334
5335        /**
5336         * @return The description would be used by test engines for tracking and reporting purposes.
5337         */
5338        public String getDescription() { 
5339          return this.description == null ? null : this.description.getValue();
5340        }
5341
5342        /**
5343         * @param value The description would be used by test engines for tracking and reporting purposes.
5344         */
5345        public SetupActionOperationComponent setDescription(String value) { 
5346          if (Utilities.noString(value))
5347            this.description = null;
5348          else {
5349            if (this.description == null)
5350              this.description = new StringType();
5351            this.description.setValue(value);
5352          }
5353          return this;
5354        }
5355
5356        /**
5357         * @return {@link #accept} (The mime-type to use for RESTful operation in the 'Accept' header.). This is the underlying object with id, value and extensions. The accessor "getAccept" gives direct access to the value
5358         */
5359        public CodeType getAcceptElement() { 
5360          if (this.accept == null)
5361            if (Configuration.errorOnAutoCreate())
5362              throw new Error("Attempt to auto-create SetupActionOperationComponent.accept");
5363            else if (Configuration.doAutoCreate())
5364              this.accept = new CodeType(); // bb
5365          return this.accept;
5366        }
5367
5368        public boolean hasAcceptElement() { 
5369          return this.accept != null && !this.accept.isEmpty();
5370        }
5371
5372        public boolean hasAccept() { 
5373          return this.accept != null && !this.accept.isEmpty();
5374        }
5375
5376        /**
5377         * @param value {@link #accept} (The mime-type to use for RESTful operation in the 'Accept' header.). This is the underlying object with id, value and extensions. The accessor "getAccept" gives direct access to the value
5378         */
5379        public SetupActionOperationComponent setAcceptElement(CodeType value) { 
5380          this.accept = value;
5381          return this;
5382        }
5383
5384        /**
5385         * @return The mime-type to use for RESTful operation in the 'Accept' header.
5386         */
5387        public String getAccept() { 
5388          return this.accept == null ? null : this.accept.getValue();
5389        }
5390
5391        /**
5392         * @param value The mime-type to use for RESTful operation in the 'Accept' header.
5393         */
5394        public SetupActionOperationComponent setAccept(String value) { 
5395          if (Utilities.noString(value))
5396            this.accept = null;
5397          else {
5398            if (this.accept == null)
5399              this.accept = new CodeType();
5400            this.accept.setValue(value);
5401          }
5402          return this;
5403        }
5404
5405        /**
5406         * @return {@link #contentType} (The mime-type to use for RESTful operation in the 'Content-Type' header.). This is the underlying object with id, value and extensions. The accessor "getContentType" gives direct access to the value
5407         */
5408        public CodeType getContentTypeElement() { 
5409          if (this.contentType == null)
5410            if (Configuration.errorOnAutoCreate())
5411              throw new Error("Attempt to auto-create SetupActionOperationComponent.contentType");
5412            else if (Configuration.doAutoCreate())
5413              this.contentType = new CodeType(); // bb
5414          return this.contentType;
5415        }
5416
5417        public boolean hasContentTypeElement() { 
5418          return this.contentType != null && !this.contentType.isEmpty();
5419        }
5420
5421        public boolean hasContentType() { 
5422          return this.contentType != null && !this.contentType.isEmpty();
5423        }
5424
5425        /**
5426         * @param value {@link #contentType} (The mime-type to use for RESTful operation in the 'Content-Type' header.). This is the underlying object with id, value and extensions. The accessor "getContentType" gives direct access to the value
5427         */
5428        public SetupActionOperationComponent setContentTypeElement(CodeType value) { 
5429          this.contentType = value;
5430          return this;
5431        }
5432
5433        /**
5434         * @return The mime-type to use for RESTful operation in the 'Content-Type' header.
5435         */
5436        public String getContentType() { 
5437          return this.contentType == null ? null : this.contentType.getValue();
5438        }
5439
5440        /**
5441         * @param value The mime-type to use for RESTful operation in the 'Content-Type' header.
5442         */
5443        public SetupActionOperationComponent setContentType(String value) { 
5444          if (Utilities.noString(value))
5445            this.contentType = null;
5446          else {
5447            if (this.contentType == null)
5448              this.contentType = new CodeType();
5449            this.contentType.setValue(value);
5450          }
5451          return this;
5452        }
5453
5454        /**
5455         * @return {@link #destination} (The server where the request message is destined for.  Must be one of the server numbers listed in TestScript.destination section.). This is the underlying object with id, value and extensions. The accessor "getDestination" gives direct access to the value
5456         */
5457        public IntegerType getDestinationElement() { 
5458          if (this.destination == null)
5459            if (Configuration.errorOnAutoCreate())
5460              throw new Error("Attempt to auto-create SetupActionOperationComponent.destination");
5461            else if (Configuration.doAutoCreate())
5462              this.destination = new IntegerType(); // bb
5463          return this.destination;
5464        }
5465
5466        public boolean hasDestinationElement() { 
5467          return this.destination != null && !this.destination.isEmpty();
5468        }
5469
5470        public boolean hasDestination() { 
5471          return this.destination != null && !this.destination.isEmpty();
5472        }
5473
5474        /**
5475         * @param value {@link #destination} (The server where the request message is destined for.  Must be one of the server numbers listed in TestScript.destination section.). This is the underlying object with id, value and extensions. The accessor "getDestination" gives direct access to the value
5476         */
5477        public SetupActionOperationComponent setDestinationElement(IntegerType value) { 
5478          this.destination = value;
5479          return this;
5480        }
5481
5482        /**
5483         * @return The server where the request message is destined for.  Must be one of the server numbers listed in TestScript.destination section.
5484         */
5485        public int getDestination() { 
5486          return this.destination == null || this.destination.isEmpty() ? 0 : this.destination.getValue();
5487        }
5488
5489        /**
5490         * @param value The server where the request message is destined for.  Must be one of the server numbers listed in TestScript.destination section.
5491         */
5492        public SetupActionOperationComponent setDestination(int value) { 
5493            if (this.destination == null)
5494              this.destination = new IntegerType();
5495            this.destination.setValue(value);
5496          return this;
5497        }
5498
5499        /**
5500         * @return {@link #encodeRequestUrl} (Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url paths.). This is the underlying object with id, value and extensions. The accessor "getEncodeRequestUrl" gives direct access to the value
5501         */
5502        public BooleanType getEncodeRequestUrlElement() { 
5503          if (this.encodeRequestUrl == null)
5504            if (Configuration.errorOnAutoCreate())
5505              throw new Error("Attempt to auto-create SetupActionOperationComponent.encodeRequestUrl");
5506            else if (Configuration.doAutoCreate())
5507              this.encodeRequestUrl = new BooleanType(); // bb
5508          return this.encodeRequestUrl;
5509        }
5510
5511        public boolean hasEncodeRequestUrlElement() { 
5512          return this.encodeRequestUrl != null && !this.encodeRequestUrl.isEmpty();
5513        }
5514
5515        public boolean hasEncodeRequestUrl() { 
5516          return this.encodeRequestUrl != null && !this.encodeRequestUrl.isEmpty();
5517        }
5518
5519        /**
5520         * @param value {@link #encodeRequestUrl} (Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url paths.). This is the underlying object with id, value and extensions. The accessor "getEncodeRequestUrl" gives direct access to the value
5521         */
5522        public SetupActionOperationComponent setEncodeRequestUrlElement(BooleanType value) { 
5523          this.encodeRequestUrl = value;
5524          return this;
5525        }
5526
5527        /**
5528         * @return Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url paths.
5529         */
5530        public boolean getEncodeRequestUrl() { 
5531          return this.encodeRequestUrl == null || this.encodeRequestUrl.isEmpty() ? false : this.encodeRequestUrl.getValue();
5532        }
5533
5534        /**
5535         * @param value Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url paths.
5536         */
5537        public SetupActionOperationComponent setEncodeRequestUrl(boolean value) { 
5538            if (this.encodeRequestUrl == null)
5539              this.encodeRequestUrl = new BooleanType();
5540            this.encodeRequestUrl.setValue(value);
5541          return this;
5542        }
5543
5544        /**
5545         * @return {@link #method} (The HTTP method the test engine MUST use for this operation regardless of any other operation details.). This is the underlying object with id, value and extensions. The accessor "getMethod" gives direct access to the value
5546         */
5547        public Enumeration<TestScriptRequestMethodCode> getMethodElement() { 
5548          if (this.method == null)
5549            if (Configuration.errorOnAutoCreate())
5550              throw new Error("Attempt to auto-create SetupActionOperationComponent.method");
5551            else if (Configuration.doAutoCreate())
5552              this.method = new Enumeration<TestScriptRequestMethodCode>(new TestScriptRequestMethodCodeEnumFactory()); // bb
5553          return this.method;
5554        }
5555
5556        public boolean hasMethodElement() { 
5557          return this.method != null && !this.method.isEmpty();
5558        }
5559
5560        public boolean hasMethod() { 
5561          return this.method != null && !this.method.isEmpty();
5562        }
5563
5564        /**
5565         * @param value {@link #method} (The HTTP method the test engine MUST use for this operation regardless of any other operation details.). This is the underlying object with id, value and extensions. The accessor "getMethod" gives direct access to the value
5566         */
5567        public SetupActionOperationComponent setMethodElement(Enumeration<TestScriptRequestMethodCode> value) { 
5568          this.method = value;
5569          return this;
5570        }
5571
5572        /**
5573         * @return The HTTP method the test engine MUST use for this operation regardless of any other operation details.
5574         */
5575        public TestScriptRequestMethodCode getMethod() { 
5576          return this.method == null ? null : this.method.getValue();
5577        }
5578
5579        /**
5580         * @param value The HTTP method the test engine MUST use for this operation regardless of any other operation details.
5581         */
5582        public SetupActionOperationComponent setMethod(TestScriptRequestMethodCode value) { 
5583          if (value == null)
5584            this.method = null;
5585          else {
5586            if (this.method == null)
5587              this.method = new Enumeration<TestScriptRequestMethodCode>(new TestScriptRequestMethodCodeEnumFactory());
5588            this.method.setValue(value);
5589          }
5590          return this;
5591        }
5592
5593        /**
5594         * @return {@link #origin} (The server where the request message originates from.  Must be one of the server numbers listed in TestScript.origin section.). This is the underlying object with id, value and extensions. The accessor "getOrigin" gives direct access to the value
5595         */
5596        public IntegerType getOriginElement() { 
5597          if (this.origin == null)
5598            if (Configuration.errorOnAutoCreate())
5599              throw new Error("Attempt to auto-create SetupActionOperationComponent.origin");
5600            else if (Configuration.doAutoCreate())
5601              this.origin = new IntegerType(); // bb
5602          return this.origin;
5603        }
5604
5605        public boolean hasOriginElement() { 
5606          return this.origin != null && !this.origin.isEmpty();
5607        }
5608
5609        public boolean hasOrigin() { 
5610          return this.origin != null && !this.origin.isEmpty();
5611        }
5612
5613        /**
5614         * @param value {@link #origin} (The server where the request message originates from.  Must be one of the server numbers listed in TestScript.origin section.). This is the underlying object with id, value and extensions. The accessor "getOrigin" gives direct access to the value
5615         */
5616        public SetupActionOperationComponent setOriginElement(IntegerType value) { 
5617          this.origin = value;
5618          return this;
5619        }
5620
5621        /**
5622         * @return The server where the request message originates from.  Must be one of the server numbers listed in TestScript.origin section.
5623         */
5624        public int getOrigin() { 
5625          return this.origin == null || this.origin.isEmpty() ? 0 : this.origin.getValue();
5626        }
5627
5628        /**
5629         * @param value The server where the request message originates from.  Must be one of the server numbers listed in TestScript.origin section.
5630         */
5631        public SetupActionOperationComponent setOrigin(int value) { 
5632            if (this.origin == null)
5633              this.origin = new IntegerType();
5634            this.origin.setValue(value);
5635          return this;
5636        }
5637
5638        /**
5639         * @return {@link #params} (Path plus parameters after [type].  Used to set parts of the request URL explicitly.). This is the underlying object with id, value and extensions. The accessor "getParams" gives direct access to the value
5640         */
5641        public StringType getParamsElement() { 
5642          if (this.params == null)
5643            if (Configuration.errorOnAutoCreate())
5644              throw new Error("Attempt to auto-create SetupActionOperationComponent.params");
5645            else if (Configuration.doAutoCreate())
5646              this.params = new StringType(); // bb
5647          return this.params;
5648        }
5649
5650        public boolean hasParamsElement() { 
5651          return this.params != null && !this.params.isEmpty();
5652        }
5653
5654        public boolean hasParams() { 
5655          return this.params != null && !this.params.isEmpty();
5656        }
5657
5658        /**
5659         * @param value {@link #params} (Path plus parameters after [type].  Used to set parts of the request URL explicitly.). This is the underlying object with id, value and extensions. The accessor "getParams" gives direct access to the value
5660         */
5661        public SetupActionOperationComponent setParamsElement(StringType value) { 
5662          this.params = value;
5663          return this;
5664        }
5665
5666        /**
5667         * @return Path plus parameters after [type].  Used to set parts of the request URL explicitly.
5668         */
5669        public String getParams() { 
5670          return this.params == null ? null : this.params.getValue();
5671        }
5672
5673        /**
5674         * @param value Path plus parameters after [type].  Used to set parts of the request URL explicitly.
5675         */
5676        public SetupActionOperationComponent setParams(String value) { 
5677          if (Utilities.noString(value))
5678            this.params = null;
5679          else {
5680            if (this.params == null)
5681              this.params = new StringType();
5682            this.params.setValue(value);
5683          }
5684          return this;
5685        }
5686
5687        /**
5688         * @return {@link #requestHeader} (Header elements would be used to set HTTP headers.)
5689         */
5690        public List<SetupActionOperationRequestHeaderComponent> getRequestHeader() { 
5691          if (this.requestHeader == null)
5692            this.requestHeader = new ArrayList<SetupActionOperationRequestHeaderComponent>();
5693          return this.requestHeader;
5694        }
5695
5696        /**
5697         * @return Returns a reference to <code>this</code> for easy method chaining
5698         */
5699        public SetupActionOperationComponent setRequestHeader(List<SetupActionOperationRequestHeaderComponent> theRequestHeader) { 
5700          this.requestHeader = theRequestHeader;
5701          return this;
5702        }
5703
5704        public boolean hasRequestHeader() { 
5705          if (this.requestHeader == null)
5706            return false;
5707          for (SetupActionOperationRequestHeaderComponent item : this.requestHeader)
5708            if (!item.isEmpty())
5709              return true;
5710          return false;
5711        }
5712
5713        public SetupActionOperationRequestHeaderComponent addRequestHeader() { //3
5714          SetupActionOperationRequestHeaderComponent t = new SetupActionOperationRequestHeaderComponent();
5715          if (this.requestHeader == null)
5716            this.requestHeader = new ArrayList<SetupActionOperationRequestHeaderComponent>();
5717          this.requestHeader.add(t);
5718          return t;
5719        }
5720
5721        public SetupActionOperationComponent addRequestHeader(SetupActionOperationRequestHeaderComponent t) { //3
5722          if (t == null)
5723            return this;
5724          if (this.requestHeader == null)
5725            this.requestHeader = new ArrayList<SetupActionOperationRequestHeaderComponent>();
5726          this.requestHeader.add(t);
5727          return this;
5728        }
5729
5730        /**
5731         * @return The first repetition of repeating field {@link #requestHeader}, creating it if it does not already exist {3}
5732         */
5733        public SetupActionOperationRequestHeaderComponent getRequestHeaderFirstRep() { 
5734          if (getRequestHeader().isEmpty()) {
5735            addRequestHeader();
5736          }
5737          return getRequestHeader().get(0);
5738        }
5739
5740        /**
5741         * @return {@link #requestId} (The fixture id (maybe new) to map to the request.). This is the underlying object with id, value and extensions. The accessor "getRequestId" gives direct access to the value
5742         */
5743        public IdType getRequestIdElement() { 
5744          if (this.requestId == null)
5745            if (Configuration.errorOnAutoCreate())
5746              throw new Error("Attempt to auto-create SetupActionOperationComponent.requestId");
5747            else if (Configuration.doAutoCreate())
5748              this.requestId = new IdType(); // bb
5749          return this.requestId;
5750        }
5751
5752        public boolean hasRequestIdElement() { 
5753          return this.requestId != null && !this.requestId.isEmpty();
5754        }
5755
5756        public boolean hasRequestId() { 
5757          return this.requestId != null && !this.requestId.isEmpty();
5758        }
5759
5760        /**
5761         * @param value {@link #requestId} (The fixture id (maybe new) to map to the request.). This is the underlying object with id, value and extensions. The accessor "getRequestId" gives direct access to the value
5762         */
5763        public SetupActionOperationComponent setRequestIdElement(IdType value) { 
5764          this.requestId = value;
5765          return this;
5766        }
5767
5768        /**
5769         * @return The fixture id (maybe new) to map to the request.
5770         */
5771        public String getRequestId() { 
5772          return this.requestId == null ? null : this.requestId.getValue();
5773        }
5774
5775        /**
5776         * @param value The fixture id (maybe new) to map to the request.
5777         */
5778        public SetupActionOperationComponent setRequestId(String value) { 
5779          if (Utilities.noString(value))
5780            this.requestId = null;
5781          else {
5782            if (this.requestId == null)
5783              this.requestId = new IdType();
5784            this.requestId.setValue(value);
5785          }
5786          return this;
5787        }
5788
5789        /**
5790         * @return {@link #responseId} (The fixture id (maybe new) to map to the response.). This is the underlying object with id, value and extensions. The accessor "getResponseId" gives direct access to the value
5791         */
5792        public IdType getResponseIdElement() { 
5793          if (this.responseId == null)
5794            if (Configuration.errorOnAutoCreate())
5795              throw new Error("Attempt to auto-create SetupActionOperationComponent.responseId");
5796            else if (Configuration.doAutoCreate())
5797              this.responseId = new IdType(); // bb
5798          return this.responseId;
5799        }
5800
5801        public boolean hasResponseIdElement() { 
5802          return this.responseId != null && !this.responseId.isEmpty();
5803        }
5804
5805        public boolean hasResponseId() { 
5806          return this.responseId != null && !this.responseId.isEmpty();
5807        }
5808
5809        /**
5810         * @param value {@link #responseId} (The fixture id (maybe new) to map to the response.). This is the underlying object with id, value and extensions. The accessor "getResponseId" gives direct access to the value
5811         */
5812        public SetupActionOperationComponent setResponseIdElement(IdType value) { 
5813          this.responseId = value;
5814          return this;
5815        }
5816
5817        /**
5818         * @return The fixture id (maybe new) to map to the response.
5819         */
5820        public String getResponseId() { 
5821          return this.responseId == null ? null : this.responseId.getValue();
5822        }
5823
5824        /**
5825         * @param value The fixture id (maybe new) to map to the response.
5826         */
5827        public SetupActionOperationComponent setResponseId(String value) { 
5828          if (Utilities.noString(value))
5829            this.responseId = null;
5830          else {
5831            if (this.responseId == null)
5832              this.responseId = new IdType();
5833            this.responseId.setValue(value);
5834          }
5835          return this;
5836        }
5837
5838        /**
5839         * @return {@link #sourceId} (The id of the fixture used as the body of a PUT or POST request.). This is the underlying object with id, value and extensions. The accessor "getSourceId" gives direct access to the value
5840         */
5841        public IdType getSourceIdElement() { 
5842          if (this.sourceId == null)
5843            if (Configuration.errorOnAutoCreate())
5844              throw new Error("Attempt to auto-create SetupActionOperationComponent.sourceId");
5845            else if (Configuration.doAutoCreate())
5846              this.sourceId = new IdType(); // bb
5847          return this.sourceId;
5848        }
5849
5850        public boolean hasSourceIdElement() { 
5851          return this.sourceId != null && !this.sourceId.isEmpty();
5852        }
5853
5854        public boolean hasSourceId() { 
5855          return this.sourceId != null && !this.sourceId.isEmpty();
5856        }
5857
5858        /**
5859         * @param value {@link #sourceId} (The id of the fixture used as the body of a PUT or POST request.). This is the underlying object with id, value and extensions. The accessor "getSourceId" gives direct access to the value
5860         */
5861        public SetupActionOperationComponent setSourceIdElement(IdType value) { 
5862          this.sourceId = value;
5863          return this;
5864        }
5865
5866        /**
5867         * @return The id of the fixture used as the body of a PUT or POST request.
5868         */
5869        public String getSourceId() { 
5870          return this.sourceId == null ? null : this.sourceId.getValue();
5871        }
5872
5873        /**
5874         * @param value The id of the fixture used as the body of a PUT or POST request.
5875         */
5876        public SetupActionOperationComponent setSourceId(String value) { 
5877          if (Utilities.noString(value))
5878            this.sourceId = null;
5879          else {
5880            if (this.sourceId == null)
5881              this.sourceId = new IdType();
5882            this.sourceId.setValue(value);
5883          }
5884          return this;
5885        }
5886
5887        /**
5888         * @return {@link #targetId} (Id of fixture used for extracting the [id],  [type], and [vid] for GET requests.). This is the underlying object with id, value and extensions. The accessor "getTargetId" gives direct access to the value
5889         */
5890        public IdType getTargetIdElement() { 
5891          if (this.targetId == null)
5892            if (Configuration.errorOnAutoCreate())
5893              throw new Error("Attempt to auto-create SetupActionOperationComponent.targetId");
5894            else if (Configuration.doAutoCreate())
5895              this.targetId = new IdType(); // bb
5896          return this.targetId;
5897        }
5898
5899        public boolean hasTargetIdElement() { 
5900          return this.targetId != null && !this.targetId.isEmpty();
5901        }
5902
5903        public boolean hasTargetId() { 
5904          return this.targetId != null && !this.targetId.isEmpty();
5905        }
5906
5907        /**
5908         * @param value {@link #targetId} (Id of fixture used for extracting the [id],  [type], and [vid] for GET requests.). This is the underlying object with id, value and extensions. The accessor "getTargetId" gives direct access to the value
5909         */
5910        public SetupActionOperationComponent setTargetIdElement(IdType value) { 
5911          this.targetId = value;
5912          return this;
5913        }
5914
5915        /**
5916         * @return Id of fixture used for extracting the [id],  [type], and [vid] for GET requests.
5917         */
5918        public String getTargetId() { 
5919          return this.targetId == null ? null : this.targetId.getValue();
5920        }
5921
5922        /**
5923         * @param value Id of fixture used for extracting the [id],  [type], and [vid] for GET requests.
5924         */
5925        public SetupActionOperationComponent setTargetId(String value) { 
5926          if (Utilities.noString(value))
5927            this.targetId = null;
5928          else {
5929            if (this.targetId == null)
5930              this.targetId = new IdType();
5931            this.targetId.setValue(value);
5932          }
5933          return this;
5934        }
5935
5936        /**
5937         * @return {@link #url} (Complete request URL.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
5938         */
5939        public StringType getUrlElement() { 
5940          if (this.url == null)
5941            if (Configuration.errorOnAutoCreate())
5942              throw new Error("Attempt to auto-create SetupActionOperationComponent.url");
5943            else if (Configuration.doAutoCreate())
5944              this.url = new StringType(); // bb
5945          return this.url;
5946        }
5947
5948        public boolean hasUrlElement() { 
5949          return this.url != null && !this.url.isEmpty();
5950        }
5951
5952        public boolean hasUrl() { 
5953          return this.url != null && !this.url.isEmpty();
5954        }
5955
5956        /**
5957         * @param value {@link #url} (Complete request URL.). This is the underlying object with id, value and extensions. The accessor "getUrl" gives direct access to the value
5958         */
5959        public SetupActionOperationComponent setUrlElement(StringType value) { 
5960          this.url = value;
5961          return this;
5962        }
5963
5964        /**
5965         * @return Complete request URL.
5966         */
5967        public String getUrl() { 
5968          return this.url == null ? null : this.url.getValue();
5969        }
5970
5971        /**
5972         * @param value Complete request URL.
5973         */
5974        public SetupActionOperationComponent setUrl(String value) { 
5975          if (Utilities.noString(value))
5976            this.url = null;
5977          else {
5978            if (this.url == null)
5979              this.url = new StringType();
5980            this.url.setValue(value);
5981          }
5982          return this;
5983        }
5984
5985        protected void listChildren(List<Property> children) {
5986          super.listChildren(children);
5987          children.add(new Property("type", "Coding", "Server interaction or operation type.", 0, 1, type));
5988          children.add(new Property("resource", "uri", "The type of the FHIR resource. See the [resource list](resourcelist.html). Data type of uri is needed when non-HL7 artifacts are identified.", 0, 1, resource));
5989          children.add(new Property("label", "string", "The label would be used for tracking/logging purposes by test engines.", 0, 1, label));
5990          children.add(new Property("description", "string", "The description would be used by test engines for tracking and reporting purposes.", 0, 1, description));
5991          children.add(new Property("accept", "code", "The mime-type to use for RESTful operation in the 'Accept' header.", 0, 1, accept));
5992          children.add(new Property("contentType", "code", "The mime-type to use for RESTful operation in the 'Content-Type' header.", 0, 1, contentType));
5993          children.add(new Property("destination", "integer", "The server where the request message is destined for.  Must be one of the server numbers listed in TestScript.destination section.", 0, 1, destination));
5994          children.add(new Property("encodeRequestUrl", "boolean", "Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url paths.", 0, 1, encodeRequestUrl));
5995          children.add(new Property("method", "code", "The HTTP method the test engine MUST use for this operation regardless of any other operation details.", 0, 1, method));
5996          children.add(new Property("origin", "integer", "The server where the request message originates from.  Must be one of the server numbers listed in TestScript.origin section.", 0, 1, origin));
5997          children.add(new Property("params", "string", "Path plus parameters after [type].  Used to set parts of the request URL explicitly.", 0, 1, params));
5998          children.add(new Property("requestHeader", "", "Header elements would be used to set HTTP headers.", 0, java.lang.Integer.MAX_VALUE, requestHeader));
5999          children.add(new Property("requestId", "id", "The fixture id (maybe new) to map to the request.", 0, 1, requestId));
6000          children.add(new Property("responseId", "id", "The fixture id (maybe new) to map to the response.", 0, 1, responseId));
6001          children.add(new Property("sourceId", "id", "The id of the fixture used as the body of a PUT or POST request.", 0, 1, sourceId));
6002          children.add(new Property("targetId", "id", "Id of fixture used for extracting the [id],  [type], and [vid] for GET requests.", 0, 1, targetId));
6003          children.add(new Property("url", "string", "Complete request URL.", 0, 1, url));
6004        }
6005
6006        @Override
6007        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
6008          switch (_hash) {
6009          case 3575610: /*type*/  return new Property("type", "Coding", "Server interaction or operation type.", 0, 1, type);
6010          case -341064690: /*resource*/  return new Property("resource", "uri", "The type of the FHIR resource. See the [resource list](resourcelist.html). Data type of uri is needed when non-HL7 artifacts are identified.", 0, 1, resource);
6011          case 102727412: /*label*/  return new Property("label", "string", "The label would be used for tracking/logging purposes by test engines.", 0, 1, label);
6012          case -1724546052: /*description*/  return new Property("description", "string", "The description would be used by test engines for tracking and reporting purposes.", 0, 1, description);
6013          case -1423461112: /*accept*/  return new Property("accept", "code", "The mime-type to use for RESTful operation in the 'Accept' header.", 0, 1, accept);
6014          case -389131437: /*contentType*/  return new Property("contentType", "code", "The mime-type to use for RESTful operation in the 'Content-Type' header.", 0, 1, contentType);
6015          case -1429847026: /*destination*/  return new Property("destination", "integer", "The server where the request message is destined for.  Must be one of the server numbers listed in TestScript.destination section.", 0, 1, destination);
6016          case -1760554218: /*encodeRequestUrl*/  return new Property("encodeRequestUrl", "boolean", "Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url paths.", 0, 1, encodeRequestUrl);
6017          case -1077554975: /*method*/  return new Property("method", "code", "The HTTP method the test engine MUST use for this operation regardless of any other operation details.", 0, 1, method);
6018          case -1008619738: /*origin*/  return new Property("origin", "integer", "The server where the request message originates from.  Must be one of the server numbers listed in TestScript.origin section.", 0, 1, origin);
6019          case -995427962: /*params*/  return new Property("params", "string", "Path plus parameters after [type].  Used to set parts of the request URL explicitly.", 0, 1, params);
6020          case 1074158076: /*requestHeader*/  return new Property("requestHeader", "", "Header elements would be used to set HTTP headers.", 0, java.lang.Integer.MAX_VALUE, requestHeader);
6021          case 693933066: /*requestId*/  return new Property("requestId", "id", "The fixture id (maybe new) to map to the request.", 0, 1, requestId);
6022          case -633138884: /*responseId*/  return new Property("responseId", "id", "The fixture id (maybe new) to map to the response.", 0, 1, responseId);
6023          case 1746327190: /*sourceId*/  return new Property("sourceId", "id", "The id of the fixture used as the body of a PUT or POST request.", 0, 1, sourceId);
6024          case -441951604: /*targetId*/  return new Property("targetId", "id", "Id of fixture used for extracting the [id],  [type], and [vid] for GET requests.", 0, 1, targetId);
6025          case 116079: /*url*/  return new Property("url", "string", "Complete request URL.", 0, 1, url);
6026          default: return super.getNamedProperty(_hash, _name, _checkValid);
6027          }
6028
6029        }
6030
6031      @Override
6032      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
6033        switch (hash) {
6034        case 3575610: /*type*/ return this.type == null ? new Base[0] : new Base[] {this.type}; // Coding
6035        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : new Base[] {this.resource}; // UriType
6036        case 102727412: /*label*/ return this.label == null ? new Base[0] : new Base[] {this.label}; // StringType
6037        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
6038        case -1423461112: /*accept*/ return this.accept == null ? new Base[0] : new Base[] {this.accept}; // CodeType
6039        case -389131437: /*contentType*/ return this.contentType == null ? new Base[0] : new Base[] {this.contentType}; // CodeType
6040        case -1429847026: /*destination*/ return this.destination == null ? new Base[0] : new Base[] {this.destination}; // IntegerType
6041        case -1760554218: /*encodeRequestUrl*/ return this.encodeRequestUrl == null ? new Base[0] : new Base[] {this.encodeRequestUrl}; // BooleanType
6042        case -1077554975: /*method*/ return this.method == null ? new Base[0] : new Base[] {this.method}; // Enumeration<TestScriptRequestMethodCode>
6043        case -1008619738: /*origin*/ return this.origin == null ? new Base[0] : new Base[] {this.origin}; // IntegerType
6044        case -995427962: /*params*/ return this.params == null ? new Base[0] : new Base[] {this.params}; // StringType
6045        case 1074158076: /*requestHeader*/ return this.requestHeader == null ? new Base[0] : this.requestHeader.toArray(new Base[this.requestHeader.size()]); // SetupActionOperationRequestHeaderComponent
6046        case 693933066: /*requestId*/ return this.requestId == null ? new Base[0] : new Base[] {this.requestId}; // IdType
6047        case -633138884: /*responseId*/ return this.responseId == null ? new Base[0] : new Base[] {this.responseId}; // IdType
6048        case 1746327190: /*sourceId*/ return this.sourceId == null ? new Base[0] : new Base[] {this.sourceId}; // IdType
6049        case -441951604: /*targetId*/ return this.targetId == null ? new Base[0] : new Base[] {this.targetId}; // IdType
6050        case 116079: /*url*/ return this.url == null ? new Base[0] : new Base[] {this.url}; // StringType
6051        default: return super.getProperty(hash, name, checkValid);
6052        }
6053
6054      }
6055
6056      @Override
6057      public Base setProperty(int hash, String name, Base value) throws FHIRException {
6058        switch (hash) {
6059        case 3575610: // type
6060          this.type = TypeConvertor.castToCoding(value); // Coding
6061          return value;
6062        case -341064690: // resource
6063          this.resource = TypeConvertor.castToUri(value); // UriType
6064          return value;
6065        case 102727412: // label
6066          this.label = TypeConvertor.castToString(value); // StringType
6067          return value;
6068        case -1724546052: // description
6069          this.description = TypeConvertor.castToString(value); // StringType
6070          return value;
6071        case -1423461112: // accept
6072          this.accept = TypeConvertor.castToCode(value); // CodeType
6073          return value;
6074        case -389131437: // contentType
6075          this.contentType = TypeConvertor.castToCode(value); // CodeType
6076          return value;
6077        case -1429847026: // destination
6078          this.destination = TypeConvertor.castToInteger(value); // IntegerType
6079          return value;
6080        case -1760554218: // encodeRequestUrl
6081          this.encodeRequestUrl = TypeConvertor.castToBoolean(value); // BooleanType
6082          return value;
6083        case -1077554975: // method
6084          value = new TestScriptRequestMethodCodeEnumFactory().fromType(TypeConvertor.castToCode(value));
6085          this.method = (Enumeration) value; // Enumeration<TestScriptRequestMethodCode>
6086          return value;
6087        case -1008619738: // origin
6088          this.origin = TypeConvertor.castToInteger(value); // IntegerType
6089          return value;
6090        case -995427962: // params
6091          this.params = TypeConvertor.castToString(value); // StringType
6092          return value;
6093        case 1074158076: // requestHeader
6094          this.getRequestHeader().add((SetupActionOperationRequestHeaderComponent) value); // SetupActionOperationRequestHeaderComponent
6095          return value;
6096        case 693933066: // requestId
6097          this.requestId = TypeConvertor.castToId(value); // IdType
6098          return value;
6099        case -633138884: // responseId
6100          this.responseId = TypeConvertor.castToId(value); // IdType
6101          return value;
6102        case 1746327190: // sourceId
6103          this.sourceId = TypeConvertor.castToId(value); // IdType
6104          return value;
6105        case -441951604: // targetId
6106          this.targetId = TypeConvertor.castToId(value); // IdType
6107          return value;
6108        case 116079: // url
6109          this.url = TypeConvertor.castToString(value); // StringType
6110          return value;
6111        default: return super.setProperty(hash, name, value);
6112        }
6113
6114      }
6115
6116      @Override
6117      public Base setProperty(String name, Base value) throws FHIRException {
6118        if (name.equals("type")) {
6119          this.type = TypeConvertor.castToCoding(value); // Coding
6120        } else if (name.equals("resource")) {
6121          this.resource = TypeConvertor.castToUri(value); // UriType
6122        } else if (name.equals("label")) {
6123          this.label = TypeConvertor.castToString(value); // StringType
6124        } else if (name.equals("description")) {
6125          this.description = TypeConvertor.castToString(value); // StringType
6126        } else if (name.equals("accept")) {
6127          this.accept = TypeConvertor.castToCode(value); // CodeType
6128        } else if (name.equals("contentType")) {
6129          this.contentType = TypeConvertor.castToCode(value); // CodeType
6130        } else if (name.equals("destination")) {
6131          this.destination = TypeConvertor.castToInteger(value); // IntegerType
6132        } else if (name.equals("encodeRequestUrl")) {
6133          this.encodeRequestUrl = TypeConvertor.castToBoolean(value); // BooleanType
6134        } else if (name.equals("method")) {
6135          value = new TestScriptRequestMethodCodeEnumFactory().fromType(TypeConvertor.castToCode(value));
6136          this.method = (Enumeration) value; // Enumeration<TestScriptRequestMethodCode>
6137        } else if (name.equals("origin")) {
6138          this.origin = TypeConvertor.castToInteger(value); // IntegerType
6139        } else if (name.equals("params")) {
6140          this.params = TypeConvertor.castToString(value); // StringType
6141        } else if (name.equals("requestHeader")) {
6142          this.getRequestHeader().add((SetupActionOperationRequestHeaderComponent) value);
6143        } else if (name.equals("requestId")) {
6144          this.requestId = TypeConvertor.castToId(value); // IdType
6145        } else if (name.equals("responseId")) {
6146          this.responseId = TypeConvertor.castToId(value); // IdType
6147        } else if (name.equals("sourceId")) {
6148          this.sourceId = TypeConvertor.castToId(value); // IdType
6149        } else if (name.equals("targetId")) {
6150          this.targetId = TypeConvertor.castToId(value); // IdType
6151        } else if (name.equals("url")) {
6152          this.url = TypeConvertor.castToString(value); // StringType
6153        } else
6154          return super.setProperty(name, value);
6155        return value;
6156      }
6157
6158  @Override
6159  public void removeChild(String name, Base value) throws FHIRException {
6160        if (name.equals("type")) {
6161          this.type = null;
6162        } else if (name.equals("resource")) {
6163          this.resource = null;
6164        } else if (name.equals("label")) {
6165          this.label = null;
6166        } else if (name.equals("description")) {
6167          this.description = null;
6168        } else if (name.equals("accept")) {
6169          this.accept = null;
6170        } else if (name.equals("contentType")) {
6171          this.contentType = null;
6172        } else if (name.equals("destination")) {
6173          this.destination = null;
6174        } else if (name.equals("encodeRequestUrl")) {
6175          this.encodeRequestUrl = null;
6176        } else if (name.equals("method")) {
6177          value = new TestScriptRequestMethodCodeEnumFactory().fromType(TypeConvertor.castToCode(value));
6178          this.method = (Enumeration) value; // Enumeration<TestScriptRequestMethodCode>
6179        } else if (name.equals("origin")) {
6180          this.origin = null;
6181        } else if (name.equals("params")) {
6182          this.params = null;
6183        } else if (name.equals("requestHeader")) {
6184          this.getRequestHeader().remove((SetupActionOperationRequestHeaderComponent) value);
6185        } else if (name.equals("requestId")) {
6186          this.requestId = null;
6187        } else if (name.equals("responseId")) {
6188          this.responseId = null;
6189        } else if (name.equals("sourceId")) {
6190          this.sourceId = null;
6191        } else if (name.equals("targetId")) {
6192          this.targetId = null;
6193        } else if (name.equals("url")) {
6194          this.url = null;
6195        } else
6196          super.removeChild(name, value);
6197        
6198      }
6199
6200      @Override
6201      public Base makeProperty(int hash, String name) throws FHIRException {
6202        switch (hash) {
6203        case 3575610:  return getType();
6204        case -341064690:  return getResourceElement();
6205        case 102727412:  return getLabelElement();
6206        case -1724546052:  return getDescriptionElement();
6207        case -1423461112:  return getAcceptElement();
6208        case -389131437:  return getContentTypeElement();
6209        case -1429847026:  return getDestinationElement();
6210        case -1760554218:  return getEncodeRequestUrlElement();
6211        case -1077554975:  return getMethodElement();
6212        case -1008619738:  return getOriginElement();
6213        case -995427962:  return getParamsElement();
6214        case 1074158076:  return addRequestHeader(); 
6215        case 693933066:  return getRequestIdElement();
6216        case -633138884:  return getResponseIdElement();
6217        case 1746327190:  return getSourceIdElement();
6218        case -441951604:  return getTargetIdElement();
6219        case 116079:  return getUrlElement();
6220        default: return super.makeProperty(hash, name);
6221        }
6222
6223      }
6224
6225      @Override
6226      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
6227        switch (hash) {
6228        case 3575610: /*type*/ return new String[] {"Coding"};
6229        case -341064690: /*resource*/ return new String[] {"uri"};
6230        case 102727412: /*label*/ return new String[] {"string"};
6231        case -1724546052: /*description*/ return new String[] {"string"};
6232        case -1423461112: /*accept*/ return new String[] {"code"};
6233        case -389131437: /*contentType*/ return new String[] {"code"};
6234        case -1429847026: /*destination*/ return new String[] {"integer"};
6235        case -1760554218: /*encodeRequestUrl*/ return new String[] {"boolean"};
6236        case -1077554975: /*method*/ return new String[] {"code"};
6237        case -1008619738: /*origin*/ return new String[] {"integer"};
6238        case -995427962: /*params*/ return new String[] {"string"};
6239        case 1074158076: /*requestHeader*/ return new String[] {};
6240        case 693933066: /*requestId*/ return new String[] {"id"};
6241        case -633138884: /*responseId*/ return new String[] {"id"};
6242        case 1746327190: /*sourceId*/ return new String[] {"id"};
6243        case -441951604: /*targetId*/ return new String[] {"id"};
6244        case 116079: /*url*/ return new String[] {"string"};
6245        default: return super.getTypesForProperty(hash, name);
6246        }
6247
6248      }
6249
6250      @Override
6251      public Base addChild(String name) throws FHIRException {
6252        if (name.equals("type")) {
6253          this.type = new Coding();
6254          return this.type;
6255        }
6256        else if (name.equals("resource")) {
6257          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.resource");
6258        }
6259        else if (name.equals("label")) {
6260          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.label");
6261        }
6262        else if (name.equals("description")) {
6263          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.description");
6264        }
6265        else if (name.equals("accept")) {
6266          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.accept");
6267        }
6268        else if (name.equals("contentType")) {
6269          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.contentType");
6270        }
6271        else if (name.equals("destination")) {
6272          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.destination");
6273        }
6274        else if (name.equals("encodeRequestUrl")) {
6275          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.encodeRequestUrl");
6276        }
6277        else if (name.equals("method")) {
6278          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.method");
6279        }
6280        else if (name.equals("origin")) {
6281          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.origin");
6282        }
6283        else if (name.equals("params")) {
6284          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.params");
6285        }
6286        else if (name.equals("requestHeader")) {
6287          return addRequestHeader();
6288        }
6289        else if (name.equals("requestId")) {
6290          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.requestId");
6291        }
6292        else if (name.equals("responseId")) {
6293          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.responseId");
6294        }
6295        else if (name.equals("sourceId")) {
6296          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.sourceId");
6297        }
6298        else if (name.equals("targetId")) {
6299          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.targetId");
6300        }
6301        else if (name.equals("url")) {
6302          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.url");
6303        }
6304        else
6305          return super.addChild(name);
6306      }
6307
6308      public SetupActionOperationComponent copy() {
6309        SetupActionOperationComponent dst = new SetupActionOperationComponent();
6310        copyValues(dst);
6311        return dst;
6312      }
6313
6314      public void copyValues(SetupActionOperationComponent dst) {
6315        super.copyValues(dst);
6316        dst.type = type == null ? null : type.copy();
6317        dst.resource = resource == null ? null : resource.copy();
6318        dst.label = label == null ? null : label.copy();
6319        dst.description = description == null ? null : description.copy();
6320        dst.accept = accept == null ? null : accept.copy();
6321        dst.contentType = contentType == null ? null : contentType.copy();
6322        dst.destination = destination == null ? null : destination.copy();
6323        dst.encodeRequestUrl = encodeRequestUrl == null ? null : encodeRequestUrl.copy();
6324        dst.method = method == null ? null : method.copy();
6325        dst.origin = origin == null ? null : origin.copy();
6326        dst.params = params == null ? null : params.copy();
6327        if (requestHeader != null) {
6328          dst.requestHeader = new ArrayList<SetupActionOperationRequestHeaderComponent>();
6329          for (SetupActionOperationRequestHeaderComponent i : requestHeader)
6330            dst.requestHeader.add(i.copy());
6331        };
6332        dst.requestId = requestId == null ? null : requestId.copy();
6333        dst.responseId = responseId == null ? null : responseId.copy();
6334        dst.sourceId = sourceId == null ? null : sourceId.copy();
6335        dst.targetId = targetId == null ? null : targetId.copy();
6336        dst.url = url == null ? null : url.copy();
6337      }
6338
6339      @Override
6340      public boolean equalsDeep(Base other_) {
6341        if (!super.equalsDeep(other_))
6342          return false;
6343        if (!(other_ instanceof SetupActionOperationComponent))
6344          return false;
6345        SetupActionOperationComponent o = (SetupActionOperationComponent) other_;
6346        return compareDeep(type, o.type, true) && compareDeep(resource, o.resource, true) && compareDeep(label, o.label, true)
6347           && compareDeep(description, o.description, true) && compareDeep(accept, o.accept, true) && compareDeep(contentType, o.contentType, true)
6348           && compareDeep(destination, o.destination, true) && compareDeep(encodeRequestUrl, o.encodeRequestUrl, true)
6349           && compareDeep(method, o.method, true) && compareDeep(origin, o.origin, true) && compareDeep(params, o.params, true)
6350           && compareDeep(requestHeader, o.requestHeader, true) && compareDeep(requestId, o.requestId, true)
6351           && compareDeep(responseId, o.responseId, true) && compareDeep(sourceId, o.sourceId, true) && compareDeep(targetId, o.targetId, true)
6352           && compareDeep(url, o.url, true);
6353      }
6354
6355      @Override
6356      public boolean equalsShallow(Base other_) {
6357        if (!super.equalsShallow(other_))
6358          return false;
6359        if (!(other_ instanceof SetupActionOperationComponent))
6360          return false;
6361        SetupActionOperationComponent o = (SetupActionOperationComponent) other_;
6362        return compareValues(resource, o.resource, true) && compareValues(label, o.label, true) && compareValues(description, o.description, true)
6363           && compareValues(accept, o.accept, true) && compareValues(contentType, o.contentType, true) && compareValues(destination, o.destination, true)
6364           && compareValues(encodeRequestUrl, o.encodeRequestUrl, true) && compareValues(method, o.method, true)
6365           && compareValues(origin, o.origin, true) && compareValues(params, o.params, true) && compareValues(requestId, o.requestId, true)
6366           && compareValues(responseId, o.responseId, true) && compareValues(sourceId, o.sourceId, true) && compareValues(targetId, o.targetId, true)
6367           && compareValues(url, o.url, true);
6368      }
6369
6370      public boolean isEmpty() {
6371        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(type, resource, label, description
6372          , accept, contentType, destination, encodeRequestUrl, method, origin, params, requestHeader
6373          , requestId, responseId, sourceId, targetId, url);
6374      }
6375
6376  public String fhirType() {
6377    return "TestScript.setup.action.operation";
6378
6379  }
6380
6381  }
6382
6383    @Block()
6384    public static class SetupActionOperationRequestHeaderComponent extends BackboneElement implements IBaseBackboneElement {
6385        /**
6386         * The HTTP header field e.g. "Accept".
6387         */
6388        @Child(name = "field", type = {StringType.class}, order=1, min=1, max=1, modifier=false, summary=false)
6389        @Description(shortDefinition="HTTP header field name", formalDefinition="The HTTP header field e.g. \"Accept\"." )
6390        protected StringType field;
6391
6392        /**
6393         * The value of the header e.g. "application/fhir+xml".
6394         */
6395        @Child(name = "value", type = {StringType.class}, order=2, min=1, max=1, modifier=false, summary=false)
6396        @Description(shortDefinition="HTTP headerfield value", formalDefinition="The value of the header e.g. \"application/fhir+xml\"." )
6397        protected StringType value;
6398
6399        private static final long serialVersionUID = 274395337L;
6400
6401    /**
6402     * Constructor
6403     */
6404      public SetupActionOperationRequestHeaderComponent() {
6405        super();
6406      }
6407
6408    /**
6409     * Constructor
6410     */
6411      public SetupActionOperationRequestHeaderComponent(String field, String value) {
6412        super();
6413        this.setField(field);
6414        this.setValue(value);
6415      }
6416
6417        /**
6418         * @return {@link #field} (The HTTP header field e.g. "Accept".). This is the underlying object with id, value and extensions. The accessor "getField" gives direct access to the value
6419         */
6420        public StringType getFieldElement() { 
6421          if (this.field == null)
6422            if (Configuration.errorOnAutoCreate())
6423              throw new Error("Attempt to auto-create SetupActionOperationRequestHeaderComponent.field");
6424            else if (Configuration.doAutoCreate())
6425              this.field = new StringType(); // bb
6426          return this.field;
6427        }
6428
6429        public boolean hasFieldElement() { 
6430          return this.field != null && !this.field.isEmpty();
6431        }
6432
6433        public boolean hasField() { 
6434          return this.field != null && !this.field.isEmpty();
6435        }
6436
6437        /**
6438         * @param value {@link #field} (The HTTP header field e.g. "Accept".). This is the underlying object with id, value and extensions. The accessor "getField" gives direct access to the value
6439         */
6440        public SetupActionOperationRequestHeaderComponent setFieldElement(StringType value) { 
6441          this.field = value;
6442          return this;
6443        }
6444
6445        /**
6446         * @return The HTTP header field e.g. "Accept".
6447         */
6448        public String getField() { 
6449          return this.field == null ? null : this.field.getValue();
6450        }
6451
6452        /**
6453         * @param value The HTTP header field e.g. "Accept".
6454         */
6455        public SetupActionOperationRequestHeaderComponent setField(String value) { 
6456            if (this.field == null)
6457              this.field = new StringType();
6458            this.field.setValue(value);
6459          return this;
6460        }
6461
6462        /**
6463         * @return {@link #value} (The value of the header e.g. "application/fhir+xml".). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
6464         */
6465        public StringType getValueElement() { 
6466          if (this.value == null)
6467            if (Configuration.errorOnAutoCreate())
6468              throw new Error("Attempt to auto-create SetupActionOperationRequestHeaderComponent.value");
6469            else if (Configuration.doAutoCreate())
6470              this.value = new StringType(); // bb
6471          return this.value;
6472        }
6473
6474        public boolean hasValueElement() { 
6475          return this.value != null && !this.value.isEmpty();
6476        }
6477
6478        public boolean hasValue() { 
6479          return this.value != null && !this.value.isEmpty();
6480        }
6481
6482        /**
6483         * @param value {@link #value} (The value of the header e.g. "application/fhir+xml".). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
6484         */
6485        public SetupActionOperationRequestHeaderComponent setValueElement(StringType value) { 
6486          this.value = value;
6487          return this;
6488        }
6489
6490        /**
6491         * @return The value of the header e.g. "application/fhir+xml".
6492         */
6493        public String getValue() { 
6494          return this.value == null ? null : this.value.getValue();
6495        }
6496
6497        /**
6498         * @param value The value of the header e.g. "application/fhir+xml".
6499         */
6500        public SetupActionOperationRequestHeaderComponent setValue(String value) { 
6501            if (this.value == null)
6502              this.value = new StringType();
6503            this.value.setValue(value);
6504          return this;
6505        }
6506
6507        protected void listChildren(List<Property> children) {
6508          super.listChildren(children);
6509          children.add(new Property("field", "string", "The HTTP header field e.g. \"Accept\".", 0, 1, field));
6510          children.add(new Property("value", "string", "The value of the header e.g. \"application/fhir+xml\".", 0, 1, value));
6511        }
6512
6513        @Override
6514        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
6515          switch (_hash) {
6516          case 97427706: /*field*/  return new Property("field", "string", "The HTTP header field e.g. \"Accept\".", 0, 1, field);
6517          case 111972721: /*value*/  return new Property("value", "string", "The value of the header e.g. \"application/fhir+xml\".", 0, 1, value);
6518          default: return super.getNamedProperty(_hash, _name, _checkValid);
6519          }
6520
6521        }
6522
6523      @Override
6524      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
6525        switch (hash) {
6526        case 97427706: /*field*/ return this.field == null ? new Base[0] : new Base[] {this.field}; // StringType
6527        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
6528        default: return super.getProperty(hash, name, checkValid);
6529        }
6530
6531      }
6532
6533      @Override
6534      public Base setProperty(int hash, String name, Base value) throws FHIRException {
6535        switch (hash) {
6536        case 97427706: // field
6537          this.field = TypeConvertor.castToString(value); // StringType
6538          return value;
6539        case 111972721: // value
6540          this.value = TypeConvertor.castToString(value); // StringType
6541          return value;
6542        default: return super.setProperty(hash, name, value);
6543        }
6544
6545      }
6546
6547      @Override
6548      public Base setProperty(String name, Base value) throws FHIRException {
6549        if (name.equals("field")) {
6550          this.field = TypeConvertor.castToString(value); // StringType
6551        } else if (name.equals("value")) {
6552          this.value = TypeConvertor.castToString(value); // StringType
6553        } else
6554          return super.setProperty(name, value);
6555        return value;
6556      }
6557
6558  @Override
6559  public void removeChild(String name, Base value) throws FHIRException {
6560        if (name.equals("field")) {
6561          this.field = null;
6562        } else if (name.equals("value")) {
6563          this.value = null;
6564        } else
6565          super.removeChild(name, value);
6566        
6567      }
6568
6569      @Override
6570      public Base makeProperty(int hash, String name) throws FHIRException {
6571        switch (hash) {
6572        case 97427706:  return getFieldElement();
6573        case 111972721:  return getValueElement();
6574        default: return super.makeProperty(hash, name);
6575        }
6576
6577      }
6578
6579      @Override
6580      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
6581        switch (hash) {
6582        case 97427706: /*field*/ return new String[] {"string"};
6583        case 111972721: /*value*/ return new String[] {"string"};
6584        default: return super.getTypesForProperty(hash, name);
6585        }
6586
6587      }
6588
6589      @Override
6590      public Base addChild(String name) throws FHIRException {
6591        if (name.equals("field")) {
6592          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.requestHeader.field");
6593        }
6594        else if (name.equals("value")) {
6595          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.operation.requestHeader.value");
6596        }
6597        else
6598          return super.addChild(name);
6599      }
6600
6601      public SetupActionOperationRequestHeaderComponent copy() {
6602        SetupActionOperationRequestHeaderComponent dst = new SetupActionOperationRequestHeaderComponent();
6603        copyValues(dst);
6604        return dst;
6605      }
6606
6607      public void copyValues(SetupActionOperationRequestHeaderComponent dst) {
6608        super.copyValues(dst);
6609        dst.field = field == null ? null : field.copy();
6610        dst.value = value == null ? null : value.copy();
6611      }
6612
6613      @Override
6614      public boolean equalsDeep(Base other_) {
6615        if (!super.equalsDeep(other_))
6616          return false;
6617        if (!(other_ instanceof SetupActionOperationRequestHeaderComponent))
6618          return false;
6619        SetupActionOperationRequestHeaderComponent o = (SetupActionOperationRequestHeaderComponent) other_;
6620        return compareDeep(field, o.field, true) && compareDeep(value, o.value, true);
6621      }
6622
6623      @Override
6624      public boolean equalsShallow(Base other_) {
6625        if (!super.equalsShallow(other_))
6626          return false;
6627        if (!(other_ instanceof SetupActionOperationRequestHeaderComponent))
6628          return false;
6629        SetupActionOperationRequestHeaderComponent o = (SetupActionOperationRequestHeaderComponent) other_;
6630        return compareValues(field, o.field, true) && compareValues(value, o.value, true);
6631      }
6632
6633      public boolean isEmpty() {
6634        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(field, value);
6635      }
6636
6637  public String fhirType() {
6638    return "TestScript.setup.action.operation.requestHeader";
6639
6640  }
6641
6642  }
6643
6644    @Block()
6645    public static class SetupActionAssertComponent extends BackboneElement implements IBaseBackboneElement {
6646        /**
6647         * The label would be used for tracking/logging purposes by test engines.
6648         */
6649        @Child(name = "label", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
6650        @Description(shortDefinition="Tracking/logging assertion label", formalDefinition="The label would be used for tracking/logging purposes by test engines." )
6651        protected StringType label;
6652
6653        /**
6654         * The description would be used by test engines for tracking and reporting purposes.
6655         */
6656        @Child(name = "description", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
6657        @Description(shortDefinition="Tracking/reporting assertion description", formalDefinition="The description would be used by test engines for tracking and reporting purposes." )
6658        protected StringType description;
6659
6660        /**
6661         * The direction to use for the assertion.
6662         */
6663        @Child(name = "direction", type = {CodeType.class}, order=3, min=0, max=1, modifier=false, summary=false)
6664        @Description(shortDefinition="response | request", formalDefinition="The direction to use for the assertion." )
6665        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/assert-direction-codes")
6666        protected Enumeration<AssertionDirectionType> direction;
6667
6668        /**
6669         * Id of the source fixture used as the contents to be evaluated by either the "source/expression" or "sourceId/path" definition.
6670         */
6671        @Child(name = "compareToSourceId", type = {StringType.class}, order=4, min=0, max=1, modifier=false, summary=false)
6672        @Description(shortDefinition="Id of the source fixture to be evaluated", formalDefinition="Id of the source fixture used as the contents to be evaluated by either the \"source/expression\" or \"sourceId/path\" definition." )
6673        protected StringType compareToSourceId;
6674
6675        /**
6676         * The FHIRPath expression for a specific value to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.
6677         */
6678        @Child(name = "compareToSourceExpression", type = {StringType.class}, order=5, min=0, max=1, modifier=false, summary=false)
6679        @Description(shortDefinition="The FHIRPath expression to evaluate against the source fixture", formalDefinition="The FHIRPath expression for a specific value to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both." )
6680        protected StringType compareToSourceExpression;
6681
6682        /**
6683         * XPath or JSONPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.
6684         */
6685        @Child(name = "compareToSourcePath", type = {StringType.class}, order=6, min=0, max=1, modifier=false, summary=false)
6686        @Description(shortDefinition="XPath or JSONPath expression to evaluate against the source fixture", formalDefinition="XPath or JSONPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both." )
6687        protected StringType compareToSourcePath;
6688
6689        /**
6690         * The mime-type contents to compare against the request or response message 'Content-Type' header.
6691         */
6692        @Child(name = "contentType", type = {CodeType.class}, order=7, min=0, max=1, modifier=false, summary=false)
6693        @Description(shortDefinition="Mime type to compare against the 'Content-Type' header", formalDefinition="The mime-type contents to compare against the request or response message 'Content-Type' header." )
6694        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/mimetypes")
6695        protected CodeType contentType;
6696
6697        /**
6698         * The default manual completion outcome applied to this assertion.
6699         */
6700        @Child(name = "defaultManualCompletion", type = {CodeType.class}, order=8, min=0, max=1, modifier=false, summary=false)
6701        @Description(shortDefinition="fail | pass | skip | stop", formalDefinition="The default manual completion outcome applied to this assertion." )
6702        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/assert-manual-completion-codes")
6703        protected Enumeration<AssertionManualCompletionType> defaultManualCompletion;
6704
6705        /**
6706         * The FHIRPath expression to be evaluated against the request or response message contents - HTTP headers and payload.
6707         */
6708        @Child(name = "expression", type = {StringType.class}, order=9, min=0, max=1, modifier=false, summary=false)
6709        @Description(shortDefinition="The FHIRPath expression to be evaluated", formalDefinition="The FHIRPath expression to be evaluated against the request or response message contents - HTTP headers and payload." )
6710        protected StringType expression;
6711
6712        /**
6713         * The HTTP header field name e.g. 'Location'.
6714         */
6715        @Child(name = "headerField", type = {StringType.class}, order=10, min=0, max=1, modifier=false, summary=false)
6716        @Description(shortDefinition="HTTP header field name", formalDefinition="The HTTP header field name e.g. 'Location'." )
6717        protected StringType headerField;
6718
6719        /**
6720         * The ID of a fixture. Asserts that the response contains at a minimum the fixture specified by minimumId.
6721         */
6722        @Child(name = "minimumId", type = {StringType.class}, order=11, min=0, max=1, modifier=false, summary=false)
6723        @Description(shortDefinition="Fixture Id of minimum content resource", formalDefinition="The ID of a fixture. Asserts that the response contains at a minimum the fixture specified by minimumId." )
6724        protected StringType minimumId;
6725
6726        /**
6727         * Whether or not the test execution performs validation on the bundle navigation links.
6728         */
6729        @Child(name = "navigationLinks", type = {BooleanType.class}, order=12, min=0, max=1, modifier=false, summary=false)
6730        @Description(shortDefinition="Perform validation on navigation links?", formalDefinition="Whether or not the test execution performs validation on the bundle navigation links." )
6731        protected BooleanType navigationLinks;
6732
6733        /**
6734         * The operator type defines the conditional behavior of the assert.
6735         */
6736        @Child(name = "operator", type = {CodeType.class}, order=13, min=0, max=1, modifier=false, summary=false)
6737        @Description(shortDefinition="equals | notEquals | in | notIn | greaterThan | lessThan | empty | notEmpty | contains | notContains | eval | manualEval", formalDefinition="The operator type defines the conditional behavior of the assert." )
6738        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/assert-operator-codes")
6739        protected Enumeration<AssertionOperatorType> operator;
6740
6741        /**
6742         * The XPath or JSONPath expression to be evaluated against the fixture representing the response received from server.
6743         */
6744        @Child(name = "path", type = {StringType.class}, order=14, min=0, max=1, modifier=false, summary=false)
6745        @Description(shortDefinition="XPath or JSONPath expression", formalDefinition="The XPath or JSONPath expression to be evaluated against the fixture representing the response received from server." )
6746        protected StringType path;
6747
6748        /**
6749         * The request method or HTTP operation code to compare against that used by the client system under test.
6750         */
6751        @Child(name = "requestMethod", type = {CodeType.class}, order=15, min=0, max=1, modifier=false, summary=false)
6752        @Description(shortDefinition="delete | get | options | patch | post | put | head", formalDefinition="The request method or HTTP operation code to compare against that used by the client system under test." )
6753        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/http-operations")
6754        protected Enumeration<TestScriptRequestMethodCode> requestMethod;
6755
6756        /**
6757         * The value to use in a comparison against the request URL path string.
6758         */
6759        @Child(name = "requestURL", type = {StringType.class}, order=16, min=0, max=1, modifier=false, summary=false)
6760        @Description(shortDefinition="Request URL comparison value", formalDefinition="The value to use in a comparison against the request URL path string." )
6761        protected StringType requestURL;
6762
6763        /**
6764         * The type of the resource.  See the [resource list](resourcelist.html).
6765         */
6766        @Child(name = "resource", type = {UriType.class}, order=17, min=0, max=1, modifier=false, summary=false)
6767        @Description(shortDefinition="Resource type", formalDefinition="The type of the resource.  See the [resource list](resourcelist.html)." )
6768        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/concrete-fhir-types")
6769        protected UriType resource;
6770
6771        /**
6772         * continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported.
6773         */
6774        @Child(name = "response", type = {CodeType.class}, order=18, min=0, max=1, modifier=false, summary=false)
6775        @Description(shortDefinition="continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported", formalDefinition="continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported." )
6776        @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/assert-response-code-types")
6777        protected Enumeration<AssertionResponseTypes> response;
6778
6779        /**
6780         * The value of the HTTP response code to be tested.
6781         */
6782        @Child(name = "responseCode", type = {StringType.class}, order=19, min=0, max=1, modifier=false, summary=false)
6783        @Description(shortDefinition="HTTP response code to test", formalDefinition="The value of the HTTP response code to be tested." )
6784        protected StringType responseCode;
6785
6786        /**
6787         * Fixture to evaluate the XPath/JSONPath expression or the headerField  against.
6788         */
6789        @Child(name = "sourceId", type = {IdType.class}, order=20, min=0, max=1, modifier=false, summary=false)
6790        @Description(shortDefinition="Fixture Id of source expression or headerField", formalDefinition="Fixture to evaluate the XPath/JSONPath expression or the headerField  against." )
6791        protected IdType sourceId;
6792
6793        /**
6794         * Whether or not the current test execution will stop on failure for this assert.
6795         */
6796        @Child(name = "stopTestOnFail", type = {BooleanType.class}, order=21, min=1, max=1, modifier=false, summary=false)
6797        @Description(shortDefinition="If this assert fails, will the current test execution stop?", formalDefinition="Whether or not the current test execution will stop on failure for this assert." )
6798        protected BooleanType stopTestOnFail;
6799
6800        /**
6801         * The ID of the Profile to validate against.
6802         */
6803        @Child(name = "validateProfileId", type = {IdType.class}, order=22, min=0, max=1, modifier=false, summary=false)
6804        @Description(shortDefinition="Profile Id of validation profile reference", formalDefinition="The ID of the Profile to validate against." )
6805        protected IdType validateProfileId;
6806
6807        /**
6808         * The value to compare to.
6809         */
6810        @Child(name = "value", type = {StringType.class}, order=23, min=0, max=1, modifier=false, summary=false)
6811        @Description(shortDefinition="The value to compare to", formalDefinition="The value to compare to." )
6812        protected StringType value;
6813
6814        /**
6815         * Whether or not the test execution will produce a warning only on error for this assert.
6816         */
6817        @Child(name = "warningOnly", type = {BooleanType.class}, order=24, min=1, max=1, modifier=false, summary=false)
6818        @Description(shortDefinition="Will this assert produce a warning only on error?", formalDefinition="Whether or not the test execution will produce a warning only on error for this assert." )
6819        protected BooleanType warningOnly;
6820
6821        /**
6822         * Links or references providing traceability to the testing requirements for this assert.
6823         */
6824        @Child(name = "requirement", type = {}, order=25, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
6825        @Description(shortDefinition="Links or references to the testing requirements", formalDefinition="Links or references providing traceability to the testing requirements for this assert." )
6826        protected List<SetupActionAssertRequirementComponent> requirement;
6827
6828        private static final long serialVersionUID = -1269963728L;
6829
6830    /**
6831     * Constructor
6832     */
6833      public SetupActionAssertComponent() {
6834        super();
6835      }
6836
6837    /**
6838     * Constructor
6839     */
6840      public SetupActionAssertComponent(boolean stopTestOnFail, boolean warningOnly) {
6841        super();
6842        this.setStopTestOnFail(stopTestOnFail);
6843        this.setWarningOnly(warningOnly);
6844      }
6845
6846        /**
6847         * @return {@link #label} (The label would be used for tracking/logging purposes by test engines.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
6848         */
6849        public StringType getLabelElement() { 
6850          if (this.label == null)
6851            if (Configuration.errorOnAutoCreate())
6852              throw new Error("Attempt to auto-create SetupActionAssertComponent.label");
6853            else if (Configuration.doAutoCreate())
6854              this.label = new StringType(); // bb
6855          return this.label;
6856        }
6857
6858        public boolean hasLabelElement() { 
6859          return this.label != null && !this.label.isEmpty();
6860        }
6861
6862        public boolean hasLabel() { 
6863          return this.label != null && !this.label.isEmpty();
6864        }
6865
6866        /**
6867         * @param value {@link #label} (The label would be used for tracking/logging purposes by test engines.). This is the underlying object with id, value and extensions. The accessor "getLabel" gives direct access to the value
6868         */
6869        public SetupActionAssertComponent setLabelElement(StringType value) { 
6870          this.label = value;
6871          return this;
6872        }
6873
6874        /**
6875         * @return The label would be used for tracking/logging purposes by test engines.
6876         */
6877        public String getLabel() { 
6878          return this.label == null ? null : this.label.getValue();
6879        }
6880
6881        /**
6882         * @param value The label would be used for tracking/logging purposes by test engines.
6883         */
6884        public SetupActionAssertComponent setLabel(String value) { 
6885          if (Utilities.noString(value))
6886            this.label = null;
6887          else {
6888            if (this.label == null)
6889              this.label = new StringType();
6890            this.label.setValue(value);
6891          }
6892          return this;
6893        }
6894
6895        /**
6896         * @return {@link #description} (The description would be used by test engines for tracking and reporting purposes.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
6897         */
6898        public StringType getDescriptionElement() { 
6899          if (this.description == null)
6900            if (Configuration.errorOnAutoCreate())
6901              throw new Error("Attempt to auto-create SetupActionAssertComponent.description");
6902            else if (Configuration.doAutoCreate())
6903              this.description = new StringType(); // bb
6904          return this.description;
6905        }
6906
6907        public boolean hasDescriptionElement() { 
6908          return this.description != null && !this.description.isEmpty();
6909        }
6910
6911        public boolean hasDescription() { 
6912          return this.description != null && !this.description.isEmpty();
6913        }
6914
6915        /**
6916         * @param value {@link #description} (The description would be used by test engines for tracking and reporting purposes.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
6917         */
6918        public SetupActionAssertComponent setDescriptionElement(StringType value) { 
6919          this.description = value;
6920          return this;
6921        }
6922
6923        /**
6924         * @return The description would be used by test engines for tracking and reporting purposes.
6925         */
6926        public String getDescription() { 
6927          return this.description == null ? null : this.description.getValue();
6928        }
6929
6930        /**
6931         * @param value The description would be used by test engines for tracking and reporting purposes.
6932         */
6933        public SetupActionAssertComponent setDescription(String value) { 
6934          if (Utilities.noString(value))
6935            this.description = null;
6936          else {
6937            if (this.description == null)
6938              this.description = new StringType();
6939            this.description.setValue(value);
6940          }
6941          return this;
6942        }
6943
6944        /**
6945         * @return {@link #direction} (The direction to use for the assertion.). This is the underlying object with id, value and extensions. The accessor "getDirection" gives direct access to the value
6946         */
6947        public Enumeration<AssertionDirectionType> getDirectionElement() { 
6948          if (this.direction == null)
6949            if (Configuration.errorOnAutoCreate())
6950              throw new Error("Attempt to auto-create SetupActionAssertComponent.direction");
6951            else if (Configuration.doAutoCreate())
6952              this.direction = new Enumeration<AssertionDirectionType>(new AssertionDirectionTypeEnumFactory()); // bb
6953          return this.direction;
6954        }
6955
6956        public boolean hasDirectionElement() { 
6957          return this.direction != null && !this.direction.isEmpty();
6958        }
6959
6960        public boolean hasDirection() { 
6961          return this.direction != null && !this.direction.isEmpty();
6962        }
6963
6964        /**
6965         * @param value {@link #direction} (The direction to use for the assertion.). This is the underlying object with id, value and extensions. The accessor "getDirection" gives direct access to the value
6966         */
6967        public SetupActionAssertComponent setDirectionElement(Enumeration<AssertionDirectionType> value) { 
6968          this.direction = value;
6969          return this;
6970        }
6971
6972        /**
6973         * @return The direction to use for the assertion.
6974         */
6975        public AssertionDirectionType getDirection() { 
6976          return this.direction == null ? null : this.direction.getValue();
6977        }
6978
6979        /**
6980         * @param value The direction to use for the assertion.
6981         */
6982        public SetupActionAssertComponent setDirection(AssertionDirectionType value) { 
6983          if (value == null)
6984            this.direction = null;
6985          else {
6986            if (this.direction == null)
6987              this.direction = new Enumeration<AssertionDirectionType>(new AssertionDirectionTypeEnumFactory());
6988            this.direction.setValue(value);
6989          }
6990          return this;
6991        }
6992
6993        /**
6994         * @return {@link #compareToSourceId} (Id of the source fixture used as the contents to be evaluated by either the "source/expression" or "sourceId/path" definition.). This is the underlying object with id, value and extensions. The accessor "getCompareToSourceId" gives direct access to the value
6995         */
6996        public StringType getCompareToSourceIdElement() { 
6997          if (this.compareToSourceId == null)
6998            if (Configuration.errorOnAutoCreate())
6999              throw new Error("Attempt to auto-create SetupActionAssertComponent.compareToSourceId");
7000            else if (Configuration.doAutoCreate())
7001              this.compareToSourceId = new StringType(); // bb
7002          return this.compareToSourceId;
7003        }
7004
7005        public boolean hasCompareToSourceIdElement() { 
7006          return this.compareToSourceId != null && !this.compareToSourceId.isEmpty();
7007        }
7008
7009        public boolean hasCompareToSourceId() { 
7010          return this.compareToSourceId != null && !this.compareToSourceId.isEmpty();
7011        }
7012
7013        /**
7014         * @param value {@link #compareToSourceId} (Id of the source fixture used as the contents to be evaluated by either the "source/expression" or "sourceId/path" definition.). This is the underlying object with id, value and extensions. The accessor "getCompareToSourceId" gives direct access to the value
7015         */
7016        public SetupActionAssertComponent setCompareToSourceIdElement(StringType value) { 
7017          this.compareToSourceId = value;
7018          return this;
7019        }
7020
7021        /**
7022         * @return Id of the source fixture used as the contents to be evaluated by either the "source/expression" or "sourceId/path" definition.
7023         */
7024        public String getCompareToSourceId() { 
7025          return this.compareToSourceId == null ? null : this.compareToSourceId.getValue();
7026        }
7027
7028        /**
7029         * @param value Id of the source fixture used as the contents to be evaluated by either the "source/expression" or "sourceId/path" definition.
7030         */
7031        public SetupActionAssertComponent setCompareToSourceId(String value) { 
7032          if (Utilities.noString(value))
7033            this.compareToSourceId = null;
7034          else {
7035            if (this.compareToSourceId == null)
7036              this.compareToSourceId = new StringType();
7037            this.compareToSourceId.setValue(value);
7038          }
7039          return this;
7040        }
7041
7042        /**
7043         * @return {@link #compareToSourceExpression} (The FHIRPath expression for a specific value to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.). This is the underlying object with id, value and extensions. The accessor "getCompareToSourceExpression" gives direct access to the value
7044         */
7045        public StringType getCompareToSourceExpressionElement() { 
7046          if (this.compareToSourceExpression == null)
7047            if (Configuration.errorOnAutoCreate())
7048              throw new Error("Attempt to auto-create SetupActionAssertComponent.compareToSourceExpression");
7049            else if (Configuration.doAutoCreate())
7050              this.compareToSourceExpression = new StringType(); // bb
7051          return this.compareToSourceExpression;
7052        }
7053
7054        public boolean hasCompareToSourceExpressionElement() { 
7055          return this.compareToSourceExpression != null && !this.compareToSourceExpression.isEmpty();
7056        }
7057
7058        public boolean hasCompareToSourceExpression() { 
7059          return this.compareToSourceExpression != null && !this.compareToSourceExpression.isEmpty();
7060        }
7061
7062        /**
7063         * @param value {@link #compareToSourceExpression} (The FHIRPath expression for a specific value to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.). This is the underlying object with id, value and extensions. The accessor "getCompareToSourceExpression" gives direct access to the value
7064         */
7065        public SetupActionAssertComponent setCompareToSourceExpressionElement(StringType value) { 
7066          this.compareToSourceExpression = value;
7067          return this;
7068        }
7069
7070        /**
7071         * @return The FHIRPath expression for a specific value to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.
7072         */
7073        public String getCompareToSourceExpression() { 
7074          return this.compareToSourceExpression == null ? null : this.compareToSourceExpression.getValue();
7075        }
7076
7077        /**
7078         * @param value The FHIRPath expression for a specific value to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.
7079         */
7080        public SetupActionAssertComponent setCompareToSourceExpression(String value) { 
7081          if (Utilities.noString(value))
7082            this.compareToSourceExpression = null;
7083          else {
7084            if (this.compareToSourceExpression == null)
7085              this.compareToSourceExpression = new StringType();
7086            this.compareToSourceExpression.setValue(value);
7087          }
7088          return this;
7089        }
7090
7091        /**
7092         * @return {@link #compareToSourcePath} (XPath or JSONPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.). This is the underlying object with id, value and extensions. The accessor "getCompareToSourcePath" gives direct access to the value
7093         */
7094        public StringType getCompareToSourcePathElement() { 
7095          if (this.compareToSourcePath == null)
7096            if (Configuration.errorOnAutoCreate())
7097              throw new Error("Attempt to auto-create SetupActionAssertComponent.compareToSourcePath");
7098            else if (Configuration.doAutoCreate())
7099              this.compareToSourcePath = new StringType(); // bb
7100          return this.compareToSourcePath;
7101        }
7102
7103        public boolean hasCompareToSourcePathElement() { 
7104          return this.compareToSourcePath != null && !this.compareToSourcePath.isEmpty();
7105        }
7106
7107        public boolean hasCompareToSourcePath() { 
7108          return this.compareToSourcePath != null && !this.compareToSourcePath.isEmpty();
7109        }
7110
7111        /**
7112         * @param value {@link #compareToSourcePath} (XPath or JSONPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.). This is the underlying object with id, value and extensions. The accessor "getCompareToSourcePath" gives direct access to the value
7113         */
7114        public SetupActionAssertComponent setCompareToSourcePathElement(StringType value) { 
7115          this.compareToSourcePath = value;
7116          return this;
7117        }
7118
7119        /**
7120         * @return XPath or JSONPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.
7121         */
7122        public String getCompareToSourcePath() { 
7123          return this.compareToSourcePath == null ? null : this.compareToSourcePath.getValue();
7124        }
7125
7126        /**
7127         * @param value XPath or JSONPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.
7128         */
7129        public SetupActionAssertComponent setCompareToSourcePath(String value) { 
7130          if (Utilities.noString(value))
7131            this.compareToSourcePath = null;
7132          else {
7133            if (this.compareToSourcePath == null)
7134              this.compareToSourcePath = new StringType();
7135            this.compareToSourcePath.setValue(value);
7136          }
7137          return this;
7138        }
7139
7140        /**
7141         * @return {@link #contentType} (The mime-type contents to compare against the request or response message 'Content-Type' header.). This is the underlying object with id, value and extensions. The accessor "getContentType" gives direct access to the value
7142         */
7143        public CodeType getContentTypeElement() { 
7144          if (this.contentType == null)
7145            if (Configuration.errorOnAutoCreate())
7146              throw new Error("Attempt to auto-create SetupActionAssertComponent.contentType");
7147            else if (Configuration.doAutoCreate())
7148              this.contentType = new CodeType(); // bb
7149          return this.contentType;
7150        }
7151
7152        public boolean hasContentTypeElement() { 
7153          return this.contentType != null && !this.contentType.isEmpty();
7154        }
7155
7156        public boolean hasContentType() { 
7157          return this.contentType != null && !this.contentType.isEmpty();
7158        }
7159
7160        /**
7161         * @param value {@link #contentType} (The mime-type contents to compare against the request or response message 'Content-Type' header.). This is the underlying object with id, value and extensions. The accessor "getContentType" gives direct access to the value
7162         */
7163        public SetupActionAssertComponent setContentTypeElement(CodeType value) { 
7164          this.contentType = value;
7165          return this;
7166        }
7167
7168        /**
7169         * @return The mime-type contents to compare against the request or response message 'Content-Type' header.
7170         */
7171        public String getContentType() { 
7172          return this.contentType == null ? null : this.contentType.getValue();
7173        }
7174
7175        /**
7176         * @param value The mime-type contents to compare against the request or response message 'Content-Type' header.
7177         */
7178        public SetupActionAssertComponent setContentType(String value) { 
7179          if (Utilities.noString(value))
7180            this.contentType = null;
7181          else {
7182            if (this.contentType == null)
7183              this.contentType = new CodeType();
7184            this.contentType.setValue(value);
7185          }
7186          return this;
7187        }
7188
7189        /**
7190         * @return {@link #defaultManualCompletion} (The default manual completion outcome applied to this assertion.). This is the underlying object with id, value and extensions. The accessor "getDefaultManualCompletion" gives direct access to the value
7191         */
7192        public Enumeration<AssertionManualCompletionType> getDefaultManualCompletionElement() { 
7193          if (this.defaultManualCompletion == null)
7194            if (Configuration.errorOnAutoCreate())
7195              throw new Error("Attempt to auto-create SetupActionAssertComponent.defaultManualCompletion");
7196            else if (Configuration.doAutoCreate())
7197              this.defaultManualCompletion = new Enumeration<AssertionManualCompletionType>(new AssertionManualCompletionTypeEnumFactory()); // bb
7198          return this.defaultManualCompletion;
7199        }
7200
7201        public boolean hasDefaultManualCompletionElement() { 
7202          return this.defaultManualCompletion != null && !this.defaultManualCompletion.isEmpty();
7203        }
7204
7205        public boolean hasDefaultManualCompletion() { 
7206          return this.defaultManualCompletion != null && !this.defaultManualCompletion.isEmpty();
7207        }
7208
7209        /**
7210         * @param value {@link #defaultManualCompletion} (The default manual completion outcome applied to this assertion.). This is the underlying object with id, value and extensions. The accessor "getDefaultManualCompletion" gives direct access to the value
7211         */
7212        public SetupActionAssertComponent setDefaultManualCompletionElement(Enumeration<AssertionManualCompletionType> value) { 
7213          this.defaultManualCompletion = value;
7214          return this;
7215        }
7216
7217        /**
7218         * @return The default manual completion outcome applied to this assertion.
7219         */
7220        public AssertionManualCompletionType getDefaultManualCompletion() { 
7221          return this.defaultManualCompletion == null ? null : this.defaultManualCompletion.getValue();
7222        }
7223
7224        /**
7225         * @param value The default manual completion outcome applied to this assertion.
7226         */
7227        public SetupActionAssertComponent setDefaultManualCompletion(AssertionManualCompletionType value) { 
7228          if (value == null)
7229            this.defaultManualCompletion = null;
7230          else {
7231            if (this.defaultManualCompletion == null)
7232              this.defaultManualCompletion = new Enumeration<AssertionManualCompletionType>(new AssertionManualCompletionTypeEnumFactory());
7233            this.defaultManualCompletion.setValue(value);
7234          }
7235          return this;
7236        }
7237
7238        /**
7239         * @return {@link #expression} (The FHIRPath expression to be evaluated against the request or response message contents - HTTP headers and payload.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
7240         */
7241        public StringType getExpressionElement() { 
7242          if (this.expression == null)
7243            if (Configuration.errorOnAutoCreate())
7244              throw new Error("Attempt to auto-create SetupActionAssertComponent.expression");
7245            else if (Configuration.doAutoCreate())
7246              this.expression = new StringType(); // bb
7247          return this.expression;
7248        }
7249
7250        public boolean hasExpressionElement() { 
7251          return this.expression != null && !this.expression.isEmpty();
7252        }
7253
7254        public boolean hasExpression() { 
7255          return this.expression != null && !this.expression.isEmpty();
7256        }
7257
7258        /**
7259         * @param value {@link #expression} (The FHIRPath expression to be evaluated against the request or response message contents - HTTP headers and payload.). This is the underlying object with id, value and extensions. The accessor "getExpression" gives direct access to the value
7260         */
7261        public SetupActionAssertComponent setExpressionElement(StringType value) { 
7262          this.expression = value;
7263          return this;
7264        }
7265
7266        /**
7267         * @return The FHIRPath expression to be evaluated against the request or response message contents - HTTP headers and payload.
7268         */
7269        public String getExpression() { 
7270          return this.expression == null ? null : this.expression.getValue();
7271        }
7272
7273        /**
7274         * @param value The FHIRPath expression to be evaluated against the request or response message contents - HTTP headers and payload.
7275         */
7276        public SetupActionAssertComponent setExpression(String value) { 
7277          if (Utilities.noString(value))
7278            this.expression = null;
7279          else {
7280            if (this.expression == null)
7281              this.expression = new StringType();
7282            this.expression.setValue(value);
7283          }
7284          return this;
7285        }
7286
7287        /**
7288         * @return {@link #headerField} (The HTTP header field name e.g. 'Location'.). This is the underlying object with id, value and extensions. The accessor "getHeaderField" gives direct access to the value
7289         */
7290        public StringType getHeaderFieldElement() { 
7291          if (this.headerField == null)
7292            if (Configuration.errorOnAutoCreate())
7293              throw new Error("Attempt to auto-create SetupActionAssertComponent.headerField");
7294            else if (Configuration.doAutoCreate())
7295              this.headerField = new StringType(); // bb
7296          return this.headerField;
7297        }
7298
7299        public boolean hasHeaderFieldElement() { 
7300          return this.headerField != null && !this.headerField.isEmpty();
7301        }
7302
7303        public boolean hasHeaderField() { 
7304          return this.headerField != null && !this.headerField.isEmpty();
7305        }
7306
7307        /**
7308         * @param value {@link #headerField} (The HTTP header field name e.g. 'Location'.). This is the underlying object with id, value and extensions. The accessor "getHeaderField" gives direct access to the value
7309         */
7310        public SetupActionAssertComponent setHeaderFieldElement(StringType value) { 
7311          this.headerField = value;
7312          return this;
7313        }
7314
7315        /**
7316         * @return The HTTP header field name e.g. 'Location'.
7317         */
7318        public String getHeaderField() { 
7319          return this.headerField == null ? null : this.headerField.getValue();
7320        }
7321
7322        /**
7323         * @param value The HTTP header field name e.g. 'Location'.
7324         */
7325        public SetupActionAssertComponent setHeaderField(String value) { 
7326          if (Utilities.noString(value))
7327            this.headerField = null;
7328          else {
7329            if (this.headerField == null)
7330              this.headerField = new StringType();
7331            this.headerField.setValue(value);
7332          }
7333          return this;
7334        }
7335
7336        /**
7337         * @return {@link #minimumId} (The ID of a fixture. Asserts that the response contains at a minimum the fixture specified by minimumId.). This is the underlying object with id, value and extensions. The accessor "getMinimumId" gives direct access to the value
7338         */
7339        public StringType getMinimumIdElement() { 
7340          if (this.minimumId == null)
7341            if (Configuration.errorOnAutoCreate())
7342              throw new Error("Attempt to auto-create SetupActionAssertComponent.minimumId");
7343            else if (Configuration.doAutoCreate())
7344              this.minimumId = new StringType(); // bb
7345          return this.minimumId;
7346        }
7347
7348        public boolean hasMinimumIdElement() { 
7349          return this.minimumId != null && !this.minimumId.isEmpty();
7350        }
7351
7352        public boolean hasMinimumId() { 
7353          return this.minimumId != null && !this.minimumId.isEmpty();
7354        }
7355
7356        /**
7357         * @param value {@link #minimumId} (The ID of a fixture. Asserts that the response contains at a minimum the fixture specified by minimumId.). This is the underlying object with id, value and extensions. The accessor "getMinimumId" gives direct access to the value
7358         */
7359        public SetupActionAssertComponent setMinimumIdElement(StringType value) { 
7360          this.minimumId = value;
7361          return this;
7362        }
7363
7364        /**
7365         * @return The ID of a fixture. Asserts that the response contains at a minimum the fixture specified by minimumId.
7366         */
7367        public String getMinimumId() { 
7368          return this.minimumId == null ? null : this.minimumId.getValue();
7369        }
7370
7371        /**
7372         * @param value The ID of a fixture. Asserts that the response contains at a minimum the fixture specified by minimumId.
7373         */
7374        public SetupActionAssertComponent setMinimumId(String value) { 
7375          if (Utilities.noString(value))
7376            this.minimumId = null;
7377          else {
7378            if (this.minimumId == null)
7379              this.minimumId = new StringType();
7380            this.minimumId.setValue(value);
7381          }
7382          return this;
7383        }
7384
7385        /**
7386         * @return {@link #navigationLinks} (Whether or not the test execution performs validation on the bundle navigation links.). This is the underlying object with id, value and extensions. The accessor "getNavigationLinks" gives direct access to the value
7387         */
7388        public BooleanType getNavigationLinksElement() { 
7389          if (this.navigationLinks == null)
7390            if (Configuration.errorOnAutoCreate())
7391              throw new Error("Attempt to auto-create SetupActionAssertComponent.navigationLinks");
7392            else if (Configuration.doAutoCreate())
7393              this.navigationLinks = new BooleanType(); // bb
7394          return this.navigationLinks;
7395        }
7396
7397        public boolean hasNavigationLinksElement() { 
7398          return this.navigationLinks != null && !this.navigationLinks.isEmpty();
7399        }
7400
7401        public boolean hasNavigationLinks() { 
7402          return this.navigationLinks != null && !this.navigationLinks.isEmpty();
7403        }
7404
7405        /**
7406         * @param value {@link #navigationLinks} (Whether or not the test execution performs validation on the bundle navigation links.). This is the underlying object with id, value and extensions. The accessor "getNavigationLinks" gives direct access to the value
7407         */
7408        public SetupActionAssertComponent setNavigationLinksElement(BooleanType value) { 
7409          this.navigationLinks = value;
7410          return this;
7411        }
7412
7413        /**
7414         * @return Whether or not the test execution performs validation on the bundle navigation links.
7415         */
7416        public boolean getNavigationLinks() { 
7417          return this.navigationLinks == null || this.navigationLinks.isEmpty() ? false : this.navigationLinks.getValue();
7418        }
7419
7420        /**
7421         * @param value Whether or not the test execution performs validation on the bundle navigation links.
7422         */
7423        public SetupActionAssertComponent setNavigationLinks(boolean value) { 
7424            if (this.navigationLinks == null)
7425              this.navigationLinks = new BooleanType();
7426            this.navigationLinks.setValue(value);
7427          return this;
7428        }
7429
7430        /**
7431         * @return {@link #operator} (The operator type defines the conditional behavior of the assert.). This is the underlying object with id, value and extensions. The accessor "getOperator" gives direct access to the value
7432         */
7433        public Enumeration<AssertionOperatorType> getOperatorElement() { 
7434          if (this.operator == null)
7435            if (Configuration.errorOnAutoCreate())
7436              throw new Error("Attempt to auto-create SetupActionAssertComponent.operator");
7437            else if (Configuration.doAutoCreate())
7438              this.operator = new Enumeration<AssertionOperatorType>(new AssertionOperatorTypeEnumFactory()); // bb
7439          return this.operator;
7440        }
7441
7442        public boolean hasOperatorElement() { 
7443          return this.operator != null && !this.operator.isEmpty();
7444        }
7445
7446        public boolean hasOperator() { 
7447          return this.operator != null && !this.operator.isEmpty();
7448        }
7449
7450        /**
7451         * @param value {@link #operator} (The operator type defines the conditional behavior of the assert.). This is the underlying object with id, value and extensions. The accessor "getOperator" gives direct access to the value
7452         */
7453        public SetupActionAssertComponent setOperatorElement(Enumeration<AssertionOperatorType> value) { 
7454          this.operator = value;
7455          return this;
7456        }
7457
7458        /**
7459         * @return The operator type defines the conditional behavior of the assert.
7460         */
7461        public AssertionOperatorType getOperator() { 
7462          return this.operator == null ? null : this.operator.getValue();
7463        }
7464
7465        /**
7466         * @param value The operator type defines the conditional behavior of the assert.
7467         */
7468        public SetupActionAssertComponent setOperator(AssertionOperatorType value) { 
7469          if (value == null)
7470            this.operator = null;
7471          else {
7472            if (this.operator == null)
7473              this.operator = new Enumeration<AssertionOperatorType>(new AssertionOperatorTypeEnumFactory());
7474            this.operator.setValue(value);
7475          }
7476          return this;
7477        }
7478
7479        /**
7480         * @return {@link #path} (The XPath or JSONPath expression to be evaluated against the fixture representing the response received from server.). This is the underlying object with id, value and extensions. The accessor "getPath" gives direct access to the value
7481         */
7482        public StringType getPathElement() { 
7483          if (this.path == null)
7484            if (Configuration.errorOnAutoCreate())
7485              throw new Error("Attempt to auto-create SetupActionAssertComponent.path");
7486            else if (Configuration.doAutoCreate())
7487              this.path = new StringType(); // bb
7488          return this.path;
7489        }
7490
7491        public boolean hasPathElement() { 
7492          return this.path != null && !this.path.isEmpty();
7493        }
7494
7495        public boolean hasPath() { 
7496          return this.path != null && !this.path.isEmpty();
7497        }
7498
7499        /**
7500         * @param value {@link #path} (The XPath or JSONPath expression to be evaluated against the fixture representing the response received from server.). This is the underlying object with id, value and extensions. The accessor "getPath" gives direct access to the value
7501         */
7502        public SetupActionAssertComponent setPathElement(StringType value) { 
7503          this.path = value;
7504          return this;
7505        }
7506
7507        /**
7508         * @return The XPath or JSONPath expression to be evaluated against the fixture representing the response received from server.
7509         */
7510        public String getPath() { 
7511          return this.path == null ? null : this.path.getValue();
7512        }
7513
7514        /**
7515         * @param value The XPath or JSONPath expression to be evaluated against the fixture representing the response received from server.
7516         */
7517        public SetupActionAssertComponent setPath(String value) { 
7518          if (Utilities.noString(value))
7519            this.path = null;
7520          else {
7521            if (this.path == null)
7522              this.path = new StringType();
7523            this.path.setValue(value);
7524          }
7525          return this;
7526        }
7527
7528        /**
7529         * @return {@link #requestMethod} (The request method or HTTP operation code to compare against that used by the client system under test.). This is the underlying object with id, value and extensions. The accessor "getRequestMethod" gives direct access to the value
7530         */
7531        public Enumeration<TestScriptRequestMethodCode> getRequestMethodElement() { 
7532          if (this.requestMethod == null)
7533            if (Configuration.errorOnAutoCreate())
7534              throw new Error("Attempt to auto-create SetupActionAssertComponent.requestMethod");
7535            else if (Configuration.doAutoCreate())
7536              this.requestMethod = new Enumeration<TestScriptRequestMethodCode>(new TestScriptRequestMethodCodeEnumFactory()); // bb
7537          return this.requestMethod;
7538        }
7539
7540        public boolean hasRequestMethodElement() { 
7541          return this.requestMethod != null && !this.requestMethod.isEmpty();
7542        }
7543
7544        public boolean hasRequestMethod() { 
7545          return this.requestMethod != null && !this.requestMethod.isEmpty();
7546        }
7547
7548        /**
7549         * @param value {@link #requestMethod} (The request method or HTTP operation code to compare against that used by the client system under test.). This is the underlying object with id, value and extensions. The accessor "getRequestMethod" gives direct access to the value
7550         */
7551        public SetupActionAssertComponent setRequestMethodElement(Enumeration<TestScriptRequestMethodCode> value) { 
7552          this.requestMethod = value;
7553          return this;
7554        }
7555
7556        /**
7557         * @return The request method or HTTP operation code to compare against that used by the client system under test.
7558         */
7559        public TestScriptRequestMethodCode getRequestMethod() { 
7560          return this.requestMethod == null ? null : this.requestMethod.getValue();
7561        }
7562
7563        /**
7564         * @param value The request method or HTTP operation code to compare against that used by the client system under test.
7565         */
7566        public SetupActionAssertComponent setRequestMethod(TestScriptRequestMethodCode value) { 
7567          if (value == null)
7568            this.requestMethod = null;
7569          else {
7570            if (this.requestMethod == null)
7571              this.requestMethod = new Enumeration<TestScriptRequestMethodCode>(new TestScriptRequestMethodCodeEnumFactory());
7572            this.requestMethod.setValue(value);
7573          }
7574          return this;
7575        }
7576
7577        /**
7578         * @return {@link #requestURL} (The value to use in a comparison against the request URL path string.). This is the underlying object with id, value and extensions. The accessor "getRequestURL" gives direct access to the value
7579         */
7580        public StringType getRequestURLElement() { 
7581          if (this.requestURL == null)
7582            if (Configuration.errorOnAutoCreate())
7583              throw new Error("Attempt to auto-create SetupActionAssertComponent.requestURL");
7584            else if (Configuration.doAutoCreate())
7585              this.requestURL = new StringType(); // bb
7586          return this.requestURL;
7587        }
7588
7589        public boolean hasRequestURLElement() { 
7590          return this.requestURL != null && !this.requestURL.isEmpty();
7591        }
7592
7593        public boolean hasRequestURL() { 
7594          return this.requestURL != null && !this.requestURL.isEmpty();
7595        }
7596
7597        /**
7598         * @param value {@link #requestURL} (The value to use in a comparison against the request URL path string.). This is the underlying object with id, value and extensions. The accessor "getRequestURL" gives direct access to the value
7599         */
7600        public SetupActionAssertComponent setRequestURLElement(StringType value) { 
7601          this.requestURL = value;
7602          return this;
7603        }
7604
7605        /**
7606         * @return The value to use in a comparison against the request URL path string.
7607         */
7608        public String getRequestURL() { 
7609          return this.requestURL == null ? null : this.requestURL.getValue();
7610        }
7611
7612        /**
7613         * @param value The value to use in a comparison against the request URL path string.
7614         */
7615        public SetupActionAssertComponent setRequestURL(String value) { 
7616          if (Utilities.noString(value))
7617            this.requestURL = null;
7618          else {
7619            if (this.requestURL == null)
7620              this.requestURL = new StringType();
7621            this.requestURL.setValue(value);
7622          }
7623          return this;
7624        }
7625
7626        /**
7627         * @return {@link #resource} (The type of the resource.  See the [resource list](resourcelist.html).). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
7628         */
7629        public UriType getResourceElement() { 
7630          if (this.resource == null)
7631            if (Configuration.errorOnAutoCreate())
7632              throw new Error("Attempt to auto-create SetupActionAssertComponent.resource");
7633            else if (Configuration.doAutoCreate())
7634              this.resource = new UriType(); // bb
7635          return this.resource;
7636        }
7637
7638        public boolean hasResourceElement() { 
7639          return this.resource != null && !this.resource.isEmpty();
7640        }
7641
7642        public boolean hasResource() { 
7643          return this.resource != null && !this.resource.isEmpty();
7644        }
7645
7646        /**
7647         * @param value {@link #resource} (The type of the resource.  See the [resource list](resourcelist.html).). This is the underlying object with id, value and extensions. The accessor "getResource" gives direct access to the value
7648         */
7649        public SetupActionAssertComponent setResourceElement(UriType value) { 
7650          this.resource = value;
7651          return this;
7652        }
7653
7654        /**
7655         * @return The type of the resource.  See the [resource list](resourcelist.html).
7656         */
7657        public String getResource() { 
7658          return this.resource == null ? null : this.resource.getValue();
7659        }
7660
7661        /**
7662         * @param value The type of the resource.  See the [resource list](resourcelist.html).
7663         */
7664        public SetupActionAssertComponent setResource(String value) { 
7665          if (Utilities.noString(value))
7666            this.resource = null;
7667          else {
7668            if (this.resource == null)
7669              this.resource = new UriType();
7670            this.resource.setValue(value);
7671          }
7672          return this;
7673        }
7674
7675        /**
7676         * @return {@link #response} (continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported.). This is the underlying object with id, value and extensions. The accessor "getResponse" gives direct access to the value
7677         */
7678        public Enumeration<AssertionResponseTypes> getResponseElement() { 
7679          if (this.response == null)
7680            if (Configuration.errorOnAutoCreate())
7681              throw new Error("Attempt to auto-create SetupActionAssertComponent.response");
7682            else if (Configuration.doAutoCreate())
7683              this.response = new Enumeration<AssertionResponseTypes>(new AssertionResponseTypesEnumFactory()); // bb
7684          return this.response;
7685        }
7686
7687        public boolean hasResponseElement() { 
7688          return this.response != null && !this.response.isEmpty();
7689        }
7690
7691        public boolean hasResponse() { 
7692          return this.response != null && !this.response.isEmpty();
7693        }
7694
7695        /**
7696         * @param value {@link #response} (continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported.). This is the underlying object with id, value and extensions. The accessor "getResponse" gives direct access to the value
7697         */
7698        public SetupActionAssertComponent setResponseElement(Enumeration<AssertionResponseTypes> value) { 
7699          this.response = value;
7700          return this;
7701        }
7702
7703        /**
7704         * @return continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported.
7705         */
7706        public AssertionResponseTypes getResponse() { 
7707          return this.response == null ? null : this.response.getValue();
7708        }
7709
7710        /**
7711         * @param value continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported.
7712         */
7713        public SetupActionAssertComponent setResponse(AssertionResponseTypes value) { 
7714          if (value == null)
7715            this.response = null;
7716          else {
7717            if (this.response == null)
7718              this.response = new Enumeration<AssertionResponseTypes>(new AssertionResponseTypesEnumFactory());
7719            this.response.setValue(value);
7720          }
7721          return this;
7722        }
7723
7724        /**
7725         * @return {@link #responseCode} (The value of the HTTP response code to be tested.). This is the underlying object with id, value and extensions. The accessor "getResponseCode" gives direct access to the value
7726         */
7727        public StringType getResponseCodeElement() { 
7728          if (this.responseCode == null)
7729            if (Configuration.errorOnAutoCreate())
7730              throw new Error("Attempt to auto-create SetupActionAssertComponent.responseCode");
7731            else if (Configuration.doAutoCreate())
7732              this.responseCode = new StringType(); // bb
7733          return this.responseCode;
7734        }
7735
7736        public boolean hasResponseCodeElement() { 
7737          return this.responseCode != null && !this.responseCode.isEmpty();
7738        }
7739
7740        public boolean hasResponseCode() { 
7741          return this.responseCode != null && !this.responseCode.isEmpty();
7742        }
7743
7744        /**
7745         * @param value {@link #responseCode} (The value of the HTTP response code to be tested.). This is the underlying object with id, value and extensions. The accessor "getResponseCode" gives direct access to the value
7746         */
7747        public SetupActionAssertComponent setResponseCodeElement(StringType value) { 
7748          this.responseCode = value;
7749          return this;
7750        }
7751
7752        /**
7753         * @return The value of the HTTP response code to be tested.
7754         */
7755        public String getResponseCode() { 
7756          return this.responseCode == null ? null : this.responseCode.getValue();
7757        }
7758
7759        /**
7760         * @param value The value of the HTTP response code to be tested.
7761         */
7762        public SetupActionAssertComponent setResponseCode(String value) { 
7763          if (Utilities.noString(value))
7764            this.responseCode = null;
7765          else {
7766            if (this.responseCode == null)
7767              this.responseCode = new StringType();
7768            this.responseCode.setValue(value);
7769          }
7770          return this;
7771        }
7772
7773        /**
7774         * @return {@link #sourceId} (Fixture to evaluate the XPath/JSONPath expression or the headerField  against.). This is the underlying object with id, value and extensions. The accessor "getSourceId" gives direct access to the value
7775         */
7776        public IdType getSourceIdElement() { 
7777          if (this.sourceId == null)
7778            if (Configuration.errorOnAutoCreate())
7779              throw new Error("Attempt to auto-create SetupActionAssertComponent.sourceId");
7780            else if (Configuration.doAutoCreate())
7781              this.sourceId = new IdType(); // bb
7782          return this.sourceId;
7783        }
7784
7785        public boolean hasSourceIdElement() { 
7786          return this.sourceId != null && !this.sourceId.isEmpty();
7787        }
7788
7789        public boolean hasSourceId() { 
7790          return this.sourceId != null && !this.sourceId.isEmpty();
7791        }
7792
7793        /**
7794         * @param value {@link #sourceId} (Fixture to evaluate the XPath/JSONPath expression or the headerField  against.). This is the underlying object with id, value and extensions. The accessor "getSourceId" gives direct access to the value
7795         */
7796        public SetupActionAssertComponent setSourceIdElement(IdType value) { 
7797          this.sourceId = value;
7798          return this;
7799        }
7800
7801        /**
7802         * @return Fixture to evaluate the XPath/JSONPath expression or the headerField  against.
7803         */
7804        public String getSourceId() { 
7805          return this.sourceId == null ? null : this.sourceId.getValue();
7806        }
7807
7808        /**
7809         * @param value Fixture to evaluate the XPath/JSONPath expression or the headerField  against.
7810         */
7811        public SetupActionAssertComponent setSourceId(String value) { 
7812          if (Utilities.noString(value))
7813            this.sourceId = null;
7814          else {
7815            if (this.sourceId == null)
7816              this.sourceId = new IdType();
7817            this.sourceId.setValue(value);
7818          }
7819          return this;
7820        }
7821
7822        /**
7823         * @return {@link #stopTestOnFail} (Whether or not the current test execution will stop on failure for this assert.). This is the underlying object with id, value and extensions. The accessor "getStopTestOnFail" gives direct access to the value
7824         */
7825        public BooleanType getStopTestOnFailElement() { 
7826          if (this.stopTestOnFail == null)
7827            if (Configuration.errorOnAutoCreate())
7828              throw new Error("Attempt to auto-create SetupActionAssertComponent.stopTestOnFail");
7829            else if (Configuration.doAutoCreate())
7830              this.stopTestOnFail = new BooleanType(); // bb
7831          return this.stopTestOnFail;
7832        }
7833
7834        public boolean hasStopTestOnFailElement() { 
7835          return this.stopTestOnFail != null && !this.stopTestOnFail.isEmpty();
7836        }
7837
7838        public boolean hasStopTestOnFail() { 
7839          return this.stopTestOnFail != null && !this.stopTestOnFail.isEmpty();
7840        }
7841
7842        /**
7843         * @param value {@link #stopTestOnFail} (Whether or not the current test execution will stop on failure for this assert.). This is the underlying object with id, value and extensions. The accessor "getStopTestOnFail" gives direct access to the value
7844         */
7845        public SetupActionAssertComponent setStopTestOnFailElement(BooleanType value) { 
7846          this.stopTestOnFail = value;
7847          return this;
7848        }
7849
7850        /**
7851         * @return Whether or not the current test execution will stop on failure for this assert.
7852         */
7853        public boolean getStopTestOnFail() { 
7854          return this.stopTestOnFail == null || this.stopTestOnFail.isEmpty() ? false : this.stopTestOnFail.getValue();
7855        }
7856
7857        /**
7858         * @param value Whether or not the current test execution will stop on failure for this assert.
7859         */
7860        public SetupActionAssertComponent setStopTestOnFail(boolean value) { 
7861            if (this.stopTestOnFail == null)
7862              this.stopTestOnFail = new BooleanType();
7863            this.stopTestOnFail.setValue(value);
7864          return this;
7865        }
7866
7867        /**
7868         * @return {@link #validateProfileId} (The ID of the Profile to validate against.). This is the underlying object with id, value and extensions. The accessor "getValidateProfileId" gives direct access to the value
7869         */
7870        public IdType getValidateProfileIdElement() { 
7871          if (this.validateProfileId == null)
7872            if (Configuration.errorOnAutoCreate())
7873              throw new Error("Attempt to auto-create SetupActionAssertComponent.validateProfileId");
7874            else if (Configuration.doAutoCreate())
7875              this.validateProfileId = new IdType(); // bb
7876          return this.validateProfileId;
7877        }
7878
7879        public boolean hasValidateProfileIdElement() { 
7880          return this.validateProfileId != null && !this.validateProfileId.isEmpty();
7881        }
7882
7883        public boolean hasValidateProfileId() { 
7884          return this.validateProfileId != null && !this.validateProfileId.isEmpty();
7885        }
7886
7887        /**
7888         * @param value {@link #validateProfileId} (The ID of the Profile to validate against.). This is the underlying object with id, value and extensions. The accessor "getValidateProfileId" gives direct access to the value
7889         */
7890        public SetupActionAssertComponent setValidateProfileIdElement(IdType value) { 
7891          this.validateProfileId = value;
7892          return this;
7893        }
7894
7895        /**
7896         * @return The ID of the Profile to validate against.
7897         */
7898        public String getValidateProfileId() { 
7899          return this.validateProfileId == null ? null : this.validateProfileId.getValue();
7900        }
7901
7902        /**
7903         * @param value The ID of the Profile to validate against.
7904         */
7905        public SetupActionAssertComponent setValidateProfileId(String value) { 
7906          if (Utilities.noString(value))
7907            this.validateProfileId = null;
7908          else {
7909            if (this.validateProfileId == null)
7910              this.validateProfileId = new IdType();
7911            this.validateProfileId.setValue(value);
7912          }
7913          return this;
7914        }
7915
7916        /**
7917         * @return {@link #value} (The value to compare to.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
7918         */
7919        public StringType getValueElement() { 
7920          if (this.value == null)
7921            if (Configuration.errorOnAutoCreate())
7922              throw new Error("Attempt to auto-create SetupActionAssertComponent.value");
7923            else if (Configuration.doAutoCreate())
7924              this.value = new StringType(); // bb
7925          return this.value;
7926        }
7927
7928        public boolean hasValueElement() { 
7929          return this.value != null && !this.value.isEmpty();
7930        }
7931
7932        public boolean hasValue() { 
7933          return this.value != null && !this.value.isEmpty();
7934        }
7935
7936        /**
7937         * @param value {@link #value} (The value to compare to.). This is the underlying object with id, value and extensions. The accessor "getValue" gives direct access to the value
7938         */
7939        public SetupActionAssertComponent setValueElement(StringType value) { 
7940          this.value = value;
7941          return this;
7942        }
7943
7944        /**
7945         * @return The value to compare to.
7946         */
7947        public String getValue() { 
7948          return this.value == null ? null : this.value.getValue();
7949        }
7950
7951        /**
7952         * @param value The value to compare to.
7953         */
7954        public SetupActionAssertComponent setValue(String value) { 
7955          if (Utilities.noString(value))
7956            this.value = null;
7957          else {
7958            if (this.value == null)
7959              this.value = new StringType();
7960            this.value.setValue(value);
7961          }
7962          return this;
7963        }
7964
7965        /**
7966         * @return {@link #warningOnly} (Whether or not the test execution will produce a warning only on error for this assert.). This is the underlying object with id, value and extensions. The accessor "getWarningOnly" gives direct access to the value
7967         */
7968        public BooleanType getWarningOnlyElement() { 
7969          if (this.warningOnly == null)
7970            if (Configuration.errorOnAutoCreate())
7971              throw new Error("Attempt to auto-create SetupActionAssertComponent.warningOnly");
7972            else if (Configuration.doAutoCreate())
7973              this.warningOnly = new BooleanType(); // bb
7974          return this.warningOnly;
7975        }
7976
7977        public boolean hasWarningOnlyElement() { 
7978          return this.warningOnly != null && !this.warningOnly.isEmpty();
7979        }
7980
7981        public boolean hasWarningOnly() { 
7982          return this.warningOnly != null && !this.warningOnly.isEmpty();
7983        }
7984
7985        /**
7986         * @param value {@link #warningOnly} (Whether or not the test execution will produce a warning only on error for this assert.). This is the underlying object with id, value and extensions. The accessor "getWarningOnly" gives direct access to the value
7987         */
7988        public SetupActionAssertComponent setWarningOnlyElement(BooleanType value) { 
7989          this.warningOnly = value;
7990          return this;
7991        }
7992
7993        /**
7994         * @return Whether or not the test execution will produce a warning only on error for this assert.
7995         */
7996        public boolean getWarningOnly() { 
7997          return this.warningOnly == null || this.warningOnly.isEmpty() ? false : this.warningOnly.getValue();
7998        }
7999
8000        /**
8001         * @param value Whether or not the test execution will produce a warning only on error for this assert.
8002         */
8003        public SetupActionAssertComponent setWarningOnly(boolean value) { 
8004            if (this.warningOnly == null)
8005              this.warningOnly = new BooleanType();
8006            this.warningOnly.setValue(value);
8007          return this;
8008        }
8009
8010        /**
8011         * @return {@link #requirement} (Links or references providing traceability to the testing requirements for this assert.)
8012         */
8013        public List<SetupActionAssertRequirementComponent> getRequirement() { 
8014          if (this.requirement == null)
8015            this.requirement = new ArrayList<SetupActionAssertRequirementComponent>();
8016          return this.requirement;
8017        }
8018
8019        /**
8020         * @return Returns a reference to <code>this</code> for easy method chaining
8021         */
8022        public SetupActionAssertComponent setRequirement(List<SetupActionAssertRequirementComponent> theRequirement) { 
8023          this.requirement = theRequirement;
8024          return this;
8025        }
8026
8027        public boolean hasRequirement() { 
8028          if (this.requirement == null)
8029            return false;
8030          for (SetupActionAssertRequirementComponent item : this.requirement)
8031            if (!item.isEmpty())
8032              return true;
8033          return false;
8034        }
8035
8036        public SetupActionAssertRequirementComponent addRequirement() { //3
8037          SetupActionAssertRequirementComponent t = new SetupActionAssertRequirementComponent();
8038          if (this.requirement == null)
8039            this.requirement = new ArrayList<SetupActionAssertRequirementComponent>();
8040          this.requirement.add(t);
8041          return t;
8042        }
8043
8044        public SetupActionAssertComponent addRequirement(SetupActionAssertRequirementComponent t) { //3
8045          if (t == null)
8046            return this;
8047          if (this.requirement == null)
8048            this.requirement = new ArrayList<SetupActionAssertRequirementComponent>();
8049          this.requirement.add(t);
8050          return this;
8051        }
8052
8053        /**
8054         * @return The first repetition of repeating field {@link #requirement}, creating it if it does not already exist {3}
8055         */
8056        public SetupActionAssertRequirementComponent getRequirementFirstRep() { 
8057          if (getRequirement().isEmpty()) {
8058            addRequirement();
8059          }
8060          return getRequirement().get(0);
8061        }
8062
8063        protected void listChildren(List<Property> children) {
8064          super.listChildren(children);
8065          children.add(new Property("label", "string", "The label would be used for tracking/logging purposes by test engines.", 0, 1, label));
8066          children.add(new Property("description", "string", "The description would be used by test engines for tracking and reporting purposes.", 0, 1, description));
8067          children.add(new Property("direction", "code", "The direction to use for the assertion.", 0, 1, direction));
8068          children.add(new Property("compareToSourceId", "string", "Id of the source fixture used as the contents to be evaluated by either the \"source/expression\" or \"sourceId/path\" definition.", 0, 1, compareToSourceId));
8069          children.add(new Property("compareToSourceExpression", "string", "The FHIRPath expression for a specific value to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.", 0, 1, compareToSourceExpression));
8070          children.add(new Property("compareToSourcePath", "string", "XPath or JSONPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.", 0, 1, compareToSourcePath));
8071          children.add(new Property("contentType", "code", "The mime-type contents to compare against the request or response message 'Content-Type' header.", 0, 1, contentType));
8072          children.add(new Property("defaultManualCompletion", "code", "The default manual completion outcome applied to this assertion.", 0, 1, defaultManualCompletion));
8073          children.add(new Property("expression", "string", "The FHIRPath expression to be evaluated against the request or response message contents - HTTP headers and payload.", 0, 1, expression));
8074          children.add(new Property("headerField", "string", "The HTTP header field name e.g. 'Location'.", 0, 1, headerField));
8075          children.add(new Property("minimumId", "string", "The ID of a fixture. Asserts that the response contains at a minimum the fixture specified by minimumId.", 0, 1, minimumId));
8076          children.add(new Property("navigationLinks", "boolean", "Whether or not the test execution performs validation on the bundle navigation links.", 0, 1, navigationLinks));
8077          children.add(new Property("operator", "code", "The operator type defines the conditional behavior of the assert.", 0, 1, operator));
8078          children.add(new Property("path", "string", "The XPath or JSONPath expression to be evaluated against the fixture representing the response received from server.", 0, 1, path));
8079          children.add(new Property("requestMethod", "code", "The request method or HTTP operation code to compare against that used by the client system under test.", 0, 1, requestMethod));
8080          children.add(new Property("requestURL", "string", "The value to use in a comparison against the request URL path string.", 0, 1, requestURL));
8081          children.add(new Property("resource", "uri", "The type of the resource.  See the [resource list](resourcelist.html).", 0, 1, resource));
8082          children.add(new Property("response", "code", "continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported.", 0, 1, response));
8083          children.add(new Property("responseCode", "string", "The value of the HTTP response code to be tested.", 0, 1, responseCode));
8084          children.add(new Property("sourceId", "id", "Fixture to evaluate the XPath/JSONPath expression or the headerField  against.", 0, 1, sourceId));
8085          children.add(new Property("stopTestOnFail", "boolean", "Whether or not the current test execution will stop on failure for this assert.", 0, 1, stopTestOnFail));
8086          children.add(new Property("validateProfileId", "id", "The ID of the Profile to validate against.", 0, 1, validateProfileId));
8087          children.add(new Property("value", "string", "The value to compare to.", 0, 1, value));
8088          children.add(new Property("warningOnly", "boolean", "Whether or not the test execution will produce a warning only on error for this assert.", 0, 1, warningOnly));
8089          children.add(new Property("requirement", "", "Links or references providing traceability to the testing requirements for this assert.", 0, java.lang.Integer.MAX_VALUE, requirement));
8090        }
8091
8092        @Override
8093        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
8094          switch (_hash) {
8095          case 102727412: /*label*/  return new Property("label", "string", "The label would be used for tracking/logging purposes by test engines.", 0, 1, label);
8096          case -1724546052: /*description*/  return new Property("description", "string", "The description would be used by test engines for tracking and reporting purposes.", 0, 1, description);
8097          case -962590849: /*direction*/  return new Property("direction", "code", "The direction to use for the assertion.", 0, 1, direction);
8098          case 2081856758: /*compareToSourceId*/  return new Property("compareToSourceId", "string", "Id of the source fixture used as the contents to be evaluated by either the \"source/expression\" or \"sourceId/path\" definition.", 0, 1, compareToSourceId);
8099          case -1415702669: /*compareToSourceExpression*/  return new Property("compareToSourceExpression", "string", "The FHIRPath expression for a specific value to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.", 0, 1, compareToSourceExpression);
8100          case -790206144: /*compareToSourcePath*/  return new Property("compareToSourcePath", "string", "XPath or JSONPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.", 0, 1, compareToSourcePath);
8101          case -389131437: /*contentType*/  return new Property("contentType", "code", "The mime-type contents to compare against the request or response message 'Content-Type' header.", 0, 1, contentType);
8102          case 1448452259: /*defaultManualCompletion*/  return new Property("defaultManualCompletion", "code", "The default manual completion outcome applied to this assertion.", 0, 1, defaultManualCompletion);
8103          case -1795452264: /*expression*/  return new Property("expression", "string", "The FHIRPath expression to be evaluated against the request or response message contents - HTTP headers and payload.", 0, 1, expression);
8104          case 1160732269: /*headerField*/  return new Property("headerField", "string", "The HTTP header field name e.g. 'Location'.", 0, 1, headerField);
8105          case 818925001: /*minimumId*/  return new Property("minimumId", "string", "The ID of a fixture. Asserts that the response contains at a minimum the fixture specified by minimumId.", 0, 1, minimumId);
8106          case 1001488901: /*navigationLinks*/  return new Property("navigationLinks", "boolean", "Whether or not the test execution performs validation on the bundle navigation links.", 0, 1, navigationLinks);
8107          case -500553564: /*operator*/  return new Property("operator", "code", "The operator type defines the conditional behavior of the assert.", 0, 1, operator);
8108          case 3433509: /*path*/  return new Property("path", "string", "The XPath or JSONPath expression to be evaluated against the fixture representing the response received from server.", 0, 1, path);
8109          case 1217874000: /*requestMethod*/  return new Property("requestMethod", "code", "The request method or HTTP operation code to compare against that used by the client system under test.", 0, 1, requestMethod);
8110          case 37099616: /*requestURL*/  return new Property("requestURL", "string", "The value to use in a comparison against the request URL path string.", 0, 1, requestURL);
8111          case -341064690: /*resource*/  return new Property("resource", "uri", "The type of the resource.  See the [resource list](resourcelist.html).", 0, 1, resource);
8112          case -340323263: /*response*/  return new Property("response", "code", "continue | switchingProtocols | okay | created | accepted | nonAuthoritativeInformation | noContent | resetContent | partialContent | multipleChoices | movedPermanently | found | seeOther | notModified | useProxy | temporaryRedirect | permanentRedirect | badRequest | unauthorized | paymentRequired | forbidden | notFound | methodNotAllowed | notAcceptable | proxyAuthenticationRequired | requestTimeout | conflict | gone | lengthRequired | preconditionFailed | contentTooLarge | uriTooLong | unsupportedMediaType | rangeNotSatisfiable | expectationFailed | misdirectedRequest | unprocessableContent | upgradeRequired | internalServerError | notImplemented | badGateway | serviceUnavailable | gatewayTimeout | httpVersionNotSupported.", 0, 1, response);
8113          case 1438723534: /*responseCode*/  return new Property("responseCode", "string", "The value of the HTTP response code to be tested.", 0, 1, responseCode);
8114          case 1746327190: /*sourceId*/  return new Property("sourceId", "id", "Fixture to evaluate the XPath/JSONPath expression or the headerField  against.", 0, 1, sourceId);
8115          case -626616719: /*stopTestOnFail*/  return new Property("stopTestOnFail", "boolean", "Whether or not the current test execution will stop on failure for this assert.", 0, 1, stopTestOnFail);
8116          case 1555541038: /*validateProfileId*/  return new Property("validateProfileId", "id", "The ID of the Profile to validate against.", 0, 1, validateProfileId);
8117          case 111972721: /*value*/  return new Property("value", "string", "The value to compare to.", 0, 1, value);
8118          case -481159832: /*warningOnly*/  return new Property("warningOnly", "boolean", "Whether or not the test execution will produce a warning only on error for this assert.", 0, 1, warningOnly);
8119          case 363387971: /*requirement*/  return new Property("requirement", "", "Links or references providing traceability to the testing requirements for this assert.", 0, java.lang.Integer.MAX_VALUE, requirement);
8120          default: return super.getNamedProperty(_hash, _name, _checkValid);
8121          }
8122
8123        }
8124
8125      @Override
8126      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
8127        switch (hash) {
8128        case 102727412: /*label*/ return this.label == null ? new Base[0] : new Base[] {this.label}; // StringType
8129        case -1724546052: /*description*/ return this.description == null ? new Base[0] : new Base[] {this.description}; // StringType
8130        case -962590849: /*direction*/ return this.direction == null ? new Base[0] : new Base[] {this.direction}; // Enumeration<AssertionDirectionType>
8131        case 2081856758: /*compareToSourceId*/ return this.compareToSourceId == null ? new Base[0] : new Base[] {this.compareToSourceId}; // StringType
8132        case -1415702669: /*compareToSourceExpression*/ return this.compareToSourceExpression == null ? new Base[0] : new Base[] {this.compareToSourceExpression}; // StringType
8133        case -790206144: /*compareToSourcePath*/ return this.compareToSourcePath == null ? new Base[0] : new Base[] {this.compareToSourcePath}; // StringType
8134        case -389131437: /*contentType*/ return this.contentType == null ? new Base[0] : new Base[] {this.contentType}; // CodeType
8135        case 1448452259: /*defaultManualCompletion*/ return this.defaultManualCompletion == null ? new Base[0] : new Base[] {this.defaultManualCompletion}; // Enumeration<AssertionManualCompletionType>
8136        case -1795452264: /*expression*/ return this.expression == null ? new Base[0] : new Base[] {this.expression}; // StringType
8137        case 1160732269: /*headerField*/ return this.headerField == null ? new Base[0] : new Base[] {this.headerField}; // StringType
8138        case 818925001: /*minimumId*/ return this.minimumId == null ? new Base[0] : new Base[] {this.minimumId}; // StringType
8139        case 1001488901: /*navigationLinks*/ return this.navigationLinks == null ? new Base[0] : new Base[] {this.navigationLinks}; // BooleanType
8140        case -500553564: /*operator*/ return this.operator == null ? new Base[0] : new Base[] {this.operator}; // Enumeration<AssertionOperatorType>
8141        case 3433509: /*path*/ return this.path == null ? new Base[0] : new Base[] {this.path}; // StringType
8142        case 1217874000: /*requestMethod*/ return this.requestMethod == null ? new Base[0] : new Base[] {this.requestMethod}; // Enumeration<TestScriptRequestMethodCode>
8143        case 37099616: /*requestURL*/ return this.requestURL == null ? new Base[0] : new Base[] {this.requestURL}; // StringType
8144        case -341064690: /*resource*/ return this.resource == null ? new Base[0] : new Base[] {this.resource}; // UriType
8145        case -340323263: /*response*/ return this.response == null ? new Base[0] : new Base[] {this.response}; // Enumeration<AssertionResponseTypes>
8146        case 1438723534: /*responseCode*/ return this.responseCode == null ? new Base[0] : new Base[] {this.responseCode}; // StringType
8147        case 1746327190: /*sourceId*/ return this.sourceId == null ? new Base[0] : new Base[] {this.sourceId}; // IdType
8148        case -626616719: /*stopTestOnFail*/ return this.stopTestOnFail == null ? new Base[0] : new Base[] {this.stopTestOnFail}; // BooleanType
8149        case 1555541038: /*validateProfileId*/ return this.validateProfileId == null ? new Base[0] : new Base[] {this.validateProfileId}; // IdType
8150        case 111972721: /*value*/ return this.value == null ? new Base[0] : new Base[] {this.value}; // StringType
8151        case -481159832: /*warningOnly*/ return this.warningOnly == null ? new Base[0] : new Base[] {this.warningOnly}; // BooleanType
8152        case 363387971: /*requirement*/ return this.requirement == null ? new Base[0] : this.requirement.toArray(new Base[this.requirement.size()]); // SetupActionAssertRequirementComponent
8153        default: return super.getProperty(hash, name, checkValid);
8154        }
8155
8156      }
8157
8158      @Override
8159      public Base setProperty(int hash, String name, Base value) throws FHIRException {
8160        switch (hash) {
8161        case 102727412: // label
8162          this.label = TypeConvertor.castToString(value); // StringType
8163          return value;
8164        case -1724546052: // description
8165          this.description = TypeConvertor.castToString(value); // StringType
8166          return value;
8167        case -962590849: // direction
8168          value = new AssertionDirectionTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
8169          this.direction = (Enumeration) value; // Enumeration<AssertionDirectionType>
8170          return value;
8171        case 2081856758: // compareToSourceId
8172          this.compareToSourceId = TypeConvertor.castToString(value); // StringType
8173          return value;
8174        case -1415702669: // compareToSourceExpression
8175          this.compareToSourceExpression = TypeConvertor.castToString(value); // StringType
8176          return value;
8177        case -790206144: // compareToSourcePath
8178          this.compareToSourcePath = TypeConvertor.castToString(value); // StringType
8179          return value;
8180        case -389131437: // contentType
8181          this.contentType = TypeConvertor.castToCode(value); // CodeType
8182          return value;
8183        case 1448452259: // defaultManualCompletion
8184          value = new AssertionManualCompletionTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
8185          this.defaultManualCompletion = (Enumeration) value; // Enumeration<AssertionManualCompletionType>
8186          return value;
8187        case -1795452264: // expression
8188          this.expression = TypeConvertor.castToString(value); // StringType
8189          return value;
8190        case 1160732269: // headerField
8191          this.headerField = TypeConvertor.castToString(value); // StringType
8192          return value;
8193        case 818925001: // minimumId
8194          this.minimumId = TypeConvertor.castToString(value); // StringType
8195          return value;
8196        case 1001488901: // navigationLinks
8197          this.navigationLinks = TypeConvertor.castToBoolean(value); // BooleanType
8198          return value;
8199        case -500553564: // operator
8200          value = new AssertionOperatorTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
8201          this.operator = (Enumeration) value; // Enumeration<AssertionOperatorType>
8202          return value;
8203        case 3433509: // path
8204          this.path = TypeConvertor.castToString(value); // StringType
8205          return value;
8206        case 1217874000: // requestMethod
8207          value = new TestScriptRequestMethodCodeEnumFactory().fromType(TypeConvertor.castToCode(value));
8208          this.requestMethod = (Enumeration) value; // Enumeration<TestScriptRequestMethodCode>
8209          return value;
8210        case 37099616: // requestURL
8211          this.requestURL = TypeConvertor.castToString(value); // StringType
8212          return value;
8213        case -341064690: // resource
8214          this.resource = TypeConvertor.castToUri(value); // UriType
8215          return value;
8216        case -340323263: // response
8217          value = new AssertionResponseTypesEnumFactory().fromType(TypeConvertor.castToCode(value));
8218          this.response = (Enumeration) value; // Enumeration<AssertionResponseTypes>
8219          return value;
8220        case 1438723534: // responseCode
8221          this.responseCode = TypeConvertor.castToString(value); // StringType
8222          return value;
8223        case 1746327190: // sourceId
8224          this.sourceId = TypeConvertor.castToId(value); // IdType
8225          return value;
8226        case -626616719: // stopTestOnFail
8227          this.stopTestOnFail = TypeConvertor.castToBoolean(value); // BooleanType
8228          return value;
8229        case 1555541038: // validateProfileId
8230          this.validateProfileId = TypeConvertor.castToId(value); // IdType
8231          return value;
8232        case 111972721: // value
8233          this.value = TypeConvertor.castToString(value); // StringType
8234          return value;
8235        case -481159832: // warningOnly
8236          this.warningOnly = TypeConvertor.castToBoolean(value); // BooleanType
8237          return value;
8238        case 363387971: // requirement
8239          this.getRequirement().add((SetupActionAssertRequirementComponent) value); // SetupActionAssertRequirementComponent
8240          return value;
8241        default: return super.setProperty(hash, name, value);
8242        }
8243
8244      }
8245
8246      @Override
8247      public Base setProperty(String name, Base value) throws FHIRException {
8248        if (name.equals("label")) {
8249          this.label = TypeConvertor.castToString(value); // StringType
8250        } else if (name.equals("description")) {
8251          this.description = TypeConvertor.castToString(value); // StringType
8252        } else if (name.equals("direction")) {
8253          value = new AssertionDirectionTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
8254          this.direction = (Enumeration) value; // Enumeration<AssertionDirectionType>
8255        } else if (name.equals("compareToSourceId")) {
8256          this.compareToSourceId = TypeConvertor.castToString(value); // StringType
8257        } else if (name.equals("compareToSourceExpression")) {
8258          this.compareToSourceExpression = TypeConvertor.castToString(value); // StringType
8259        } else if (name.equals("compareToSourcePath")) {
8260          this.compareToSourcePath = TypeConvertor.castToString(value); // StringType
8261        } else if (name.equals("contentType")) {
8262          this.contentType = TypeConvertor.castToCode(value); // CodeType
8263        } else if (name.equals("defaultManualCompletion")) {
8264          value = new AssertionManualCompletionTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
8265          this.defaultManualCompletion = (Enumeration) value; // Enumeration<AssertionManualCompletionType>
8266        } else if (name.equals("expression")) {
8267          this.expression = TypeConvertor.castToString(value); // StringType
8268        } else if (name.equals("headerField")) {
8269          this.headerField = TypeConvertor.castToString(value); // StringType
8270        } else if (name.equals("minimumId")) {
8271          this.minimumId = TypeConvertor.castToString(value); // StringType
8272        } else if (name.equals("navigationLinks")) {
8273          this.navigationLinks = TypeConvertor.castToBoolean(value); // BooleanType
8274        } else if (name.equals("operator")) {
8275          value = new AssertionOperatorTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
8276          this.operator = (Enumeration) value; // Enumeration<AssertionOperatorType>
8277        } else if (name.equals("path")) {
8278          this.path = TypeConvertor.castToString(value); // StringType
8279        } else if (name.equals("requestMethod")) {
8280          value = new TestScriptRequestMethodCodeEnumFactory().fromType(TypeConvertor.castToCode(value));
8281          this.requestMethod = (Enumeration) value; // Enumeration<TestScriptRequestMethodCode>
8282        } else if (name.equals("requestURL")) {
8283          this.requestURL = TypeConvertor.castToString(value); // StringType
8284        } else if (name.equals("resource")) {
8285          this.resource = TypeConvertor.castToUri(value); // UriType
8286        } else if (name.equals("response")) {
8287          value = new AssertionResponseTypesEnumFactory().fromType(TypeConvertor.castToCode(value));
8288          this.response = (Enumeration) value; // Enumeration<AssertionResponseTypes>
8289        } else if (name.equals("responseCode")) {
8290          this.responseCode = TypeConvertor.castToString(value); // StringType
8291        } else if (name.equals("sourceId")) {
8292          this.sourceId = TypeConvertor.castToId(value); // IdType
8293        } else if (name.equals("stopTestOnFail")) {
8294          this.stopTestOnFail = TypeConvertor.castToBoolean(value); // BooleanType
8295        } else if (name.equals("validateProfileId")) {
8296          this.validateProfileId = TypeConvertor.castToId(value); // IdType
8297        } else if (name.equals("value")) {
8298          this.value = TypeConvertor.castToString(value); // StringType
8299        } else if (name.equals("warningOnly")) {
8300          this.warningOnly = TypeConvertor.castToBoolean(value); // BooleanType
8301        } else if (name.equals("requirement")) {
8302          this.getRequirement().add((SetupActionAssertRequirementComponent) value);
8303        } else
8304          return super.setProperty(name, value);
8305        return value;
8306      }
8307
8308  @Override
8309  public void removeChild(String name, Base value) throws FHIRException {
8310        if (name.equals("label")) {
8311          this.label = null;
8312        } else if (name.equals("description")) {
8313          this.description = null;
8314        } else if (name.equals("direction")) {
8315          value = new AssertionDirectionTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
8316          this.direction = (Enumeration) value; // Enumeration<AssertionDirectionType>
8317        } else if (name.equals("compareToSourceId")) {
8318          this.compareToSourceId = null;
8319        } else if (name.equals("compareToSourceExpression")) {
8320          this.compareToSourceExpression = null;
8321        } else if (name.equals("compareToSourcePath")) {
8322          this.compareToSourcePath = null;
8323        } else if (name.equals("contentType")) {
8324          this.contentType = null;
8325        } else if (name.equals("defaultManualCompletion")) {
8326          value = new AssertionManualCompletionTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
8327          this.defaultManualCompletion = (Enumeration) value; // Enumeration<AssertionManualCompletionType>
8328        } else if (name.equals("expression")) {
8329          this.expression = null;
8330        } else if (name.equals("headerField")) {
8331          this.headerField = null;
8332        } else if (name.equals("minimumId")) {
8333          this.minimumId = null;
8334        } else if (name.equals("navigationLinks")) {
8335          this.navigationLinks = null;
8336        } else if (name.equals("operator")) {
8337          value = new AssertionOperatorTypeEnumFactory().fromType(TypeConvertor.castToCode(value));
8338          this.operator = (Enumeration) value; // Enumeration<AssertionOperatorType>
8339        } else if (name.equals("path")) {
8340          this.path = null;
8341        } else if (name.equals("requestMethod")) {
8342          value = new TestScriptRequestMethodCodeEnumFactory().fromType(TypeConvertor.castToCode(value));
8343          this.requestMethod = (Enumeration) value; // Enumeration<TestScriptRequestMethodCode>
8344        } else if (name.equals("requestURL")) {
8345          this.requestURL = null;
8346        } else if (name.equals("resource")) {
8347          this.resource = null;
8348        } else if (name.equals("response")) {
8349          value = new AssertionResponseTypesEnumFactory().fromType(TypeConvertor.castToCode(value));
8350          this.response = (Enumeration) value; // Enumeration<AssertionResponseTypes>
8351        } else if (name.equals("responseCode")) {
8352          this.responseCode = null;
8353        } else if (name.equals("sourceId")) {
8354          this.sourceId = null;
8355        } else if (name.equals("stopTestOnFail")) {
8356          this.stopTestOnFail = null;
8357        } else if (name.equals("validateProfileId")) {
8358          this.validateProfileId = null;
8359        } else if (name.equals("value")) {
8360          this.value = null;
8361        } else if (name.equals("warningOnly")) {
8362          this.warningOnly = null;
8363        } else if (name.equals("requirement")) {
8364          this.getRequirement().remove((SetupActionAssertRequirementComponent) value);
8365        } else
8366          super.removeChild(name, value);
8367        
8368      }
8369
8370      @Override
8371      public Base makeProperty(int hash, String name) throws FHIRException {
8372        switch (hash) {
8373        case 102727412:  return getLabelElement();
8374        case -1724546052:  return getDescriptionElement();
8375        case -962590849:  return getDirectionElement();
8376        case 2081856758:  return getCompareToSourceIdElement();
8377        case -1415702669:  return getCompareToSourceExpressionElement();
8378        case -790206144:  return getCompareToSourcePathElement();
8379        case -389131437:  return getContentTypeElement();
8380        case 1448452259:  return getDefaultManualCompletionElement();
8381        case -1795452264:  return getExpressionElement();
8382        case 1160732269:  return getHeaderFieldElement();
8383        case 818925001:  return getMinimumIdElement();
8384        case 1001488901:  return getNavigationLinksElement();
8385        case -500553564:  return getOperatorElement();
8386        case 3433509:  return getPathElement();
8387        case 1217874000:  return getRequestMethodElement();
8388        case 37099616:  return getRequestURLElement();
8389        case -341064690:  return getResourceElement();
8390        case -340323263:  return getResponseElement();
8391        case 1438723534:  return getResponseCodeElement();
8392        case 1746327190:  return getSourceIdElement();
8393        case -626616719:  return getStopTestOnFailElement();
8394        case 1555541038:  return getValidateProfileIdElement();
8395        case 111972721:  return getValueElement();
8396        case -481159832:  return getWarningOnlyElement();
8397        case 363387971:  return addRequirement(); 
8398        default: return super.makeProperty(hash, name);
8399        }
8400
8401      }
8402
8403      @Override
8404      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
8405        switch (hash) {
8406        case 102727412: /*label*/ return new String[] {"string"};
8407        case -1724546052: /*description*/ return new String[] {"string"};
8408        case -962590849: /*direction*/ return new String[] {"code"};
8409        case 2081856758: /*compareToSourceId*/ return new String[] {"string"};
8410        case -1415702669: /*compareToSourceExpression*/ return new String[] {"string"};
8411        case -790206144: /*compareToSourcePath*/ return new String[] {"string"};
8412        case -389131437: /*contentType*/ return new String[] {"code"};
8413        case 1448452259: /*defaultManualCompletion*/ return new String[] {"code"};
8414        case -1795452264: /*expression*/ return new String[] {"string"};
8415        case 1160732269: /*headerField*/ return new String[] {"string"};
8416        case 818925001: /*minimumId*/ return new String[] {"string"};
8417        case 1001488901: /*navigationLinks*/ return new String[] {"boolean"};
8418        case -500553564: /*operator*/ return new String[] {"code"};
8419        case 3433509: /*path*/ return new String[] {"string"};
8420        case 1217874000: /*requestMethod*/ return new String[] {"code"};
8421        case 37099616: /*requestURL*/ return new String[] {"string"};
8422        case -341064690: /*resource*/ return new String[] {"uri"};
8423        case -340323263: /*response*/ return new String[] {"code"};
8424        case 1438723534: /*responseCode*/ return new String[] {"string"};
8425        case 1746327190: /*sourceId*/ return new String[] {"id"};
8426        case -626616719: /*stopTestOnFail*/ return new String[] {"boolean"};
8427        case 1555541038: /*validateProfileId*/ return new String[] {"id"};
8428        case 111972721: /*value*/ return new String[] {"string"};
8429        case -481159832: /*warningOnly*/ return new String[] {"boolean"};
8430        case 363387971: /*requirement*/ return new String[] {};
8431        default: return super.getTypesForProperty(hash, name);
8432        }
8433
8434      }
8435
8436      @Override
8437      public Base addChild(String name) throws FHIRException {
8438        if (name.equals("label")) {
8439          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.label");
8440        }
8441        else if (name.equals("description")) {
8442          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.description");
8443        }
8444        else if (name.equals("direction")) {
8445          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.direction");
8446        }
8447        else if (name.equals("compareToSourceId")) {
8448          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.compareToSourceId");
8449        }
8450        else if (name.equals("compareToSourceExpression")) {
8451          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.compareToSourceExpression");
8452        }
8453        else if (name.equals("compareToSourcePath")) {
8454          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.compareToSourcePath");
8455        }
8456        else if (name.equals("contentType")) {
8457          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.contentType");
8458        }
8459        else if (name.equals("defaultManualCompletion")) {
8460          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.defaultManualCompletion");
8461        }
8462        else if (name.equals("expression")) {
8463          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.expression");
8464        }
8465        else if (name.equals("headerField")) {
8466          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.headerField");
8467        }
8468        else if (name.equals("minimumId")) {
8469          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.minimumId");
8470        }
8471        else if (name.equals("navigationLinks")) {
8472          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.navigationLinks");
8473        }
8474        else if (name.equals("operator")) {
8475          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.operator");
8476        }
8477        else if (name.equals("path")) {
8478          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.path");
8479        }
8480        else if (name.equals("requestMethod")) {
8481          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.requestMethod");
8482        }
8483        else if (name.equals("requestURL")) {
8484          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.requestURL");
8485        }
8486        else if (name.equals("resource")) {
8487          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.resource");
8488        }
8489        else if (name.equals("response")) {
8490          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.response");
8491        }
8492        else if (name.equals("responseCode")) {
8493          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.responseCode");
8494        }
8495        else if (name.equals("sourceId")) {
8496          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.sourceId");
8497        }
8498        else if (name.equals("stopTestOnFail")) {
8499          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.stopTestOnFail");
8500        }
8501        else if (name.equals("validateProfileId")) {
8502          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.validateProfileId");
8503        }
8504        else if (name.equals("value")) {
8505          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.value");
8506        }
8507        else if (name.equals("warningOnly")) {
8508          throw new FHIRException("Cannot call addChild on a singleton property TestScript.setup.action.assert.warningOnly");
8509        }
8510        else if (name.equals("requirement")) {
8511          return addRequirement();
8512        }
8513        else
8514          return super.addChild(name);
8515      }
8516
8517      public SetupActionAssertComponent copy() {
8518        SetupActionAssertComponent dst = new SetupActionAssertComponent();
8519        copyValues(dst);
8520        return dst;
8521      }
8522
8523      public void copyValues(SetupActionAssertComponent dst) {
8524        super.copyValues(dst);
8525        dst.label = label == null ? null : label.copy();
8526        dst.description = description == null ? null : description.copy();
8527        dst.direction = direction == null ? null : direction.copy();
8528        dst.compareToSourceId = compareToSourceId == null ? null : compareToSourceId.copy();
8529        dst.compareToSourceExpression = compareToSourceExpression == null ? null : compareToSourceExpression.copy();
8530        dst.compareToSourcePath = compareToSourcePath == null ? null : compareToSourcePath.copy();
8531        dst.contentType = contentType == null ? null : contentType.copy();
8532        dst.defaultManualCompletion = defaultManualCompletion == null ? null : defaultManualCompletion.copy();
8533        dst.expression = expression == null ? null : expression.copy();
8534        dst.headerField = headerField == null ? null : headerField.copy();
8535        dst.minimumId = minimumId == null ? null : minimumId.copy();
8536        dst.navigationLinks = navigationLinks == null ? null : navigationLinks.copy();
8537        dst.operator = operator == null ? null : operator.copy();
8538        dst.path = path == null ? null : path.copy();
8539        dst.requestMethod = requestMethod == null ? null : requestMethod.copy();
8540        dst.requestURL = requestURL == null ? null : requestURL.copy();
8541        dst.resource = resource == null ? null : resource.copy();
8542        dst.response = response == null ? null : response.copy();
8543        dst.responseCode = responseCode == null ? null : responseCode.copy();
8544        dst.sourceId = sourceId == null ? null : sourceId.copy();
8545        dst.stopTestOnFail = stopTestOnFail == null ? null : stopTestOnFail.copy();
8546        dst.validateProfileId = validateProfileId == null ? null : validateProfileId.copy();
8547        dst.value = value == null ? null : value.copy();
8548        dst.warningOnly = warningOnly == null ? null : warningOnly.copy();
8549        if (requirement != null) {
8550          dst.requirement = new ArrayList<SetupActionAssertRequirementComponent>();
8551          for (SetupActionAssertRequirementComponent i : requirement)
8552            dst.requirement.add(i.copy());
8553        };
8554      }
8555
8556      @Override
8557      public boolean equalsDeep(Base other_) {
8558        if (!super.equalsDeep(other_))
8559          return false;
8560        if (!(other_ instanceof SetupActionAssertComponent))
8561          return false;
8562        SetupActionAssertComponent o = (SetupActionAssertComponent) other_;
8563        return compareDeep(label, o.label, true) && compareDeep(description, o.description, true) && compareDeep(direction, o.direction, true)
8564           && compareDeep(compareToSourceId, o.compareToSourceId, true) && compareDeep(compareToSourceExpression, o.compareToSourceExpression, true)
8565           && compareDeep(compareToSourcePath, o.compareToSourcePath, true) && compareDeep(contentType, o.contentType, true)
8566           && compareDeep(defaultManualCompletion, o.defaultManualCompletion, true) && compareDeep(expression, o.expression, true)
8567           && compareDeep(headerField, o.headerField, true) && compareDeep(minimumId, o.minimumId, true) && compareDeep(navigationLinks, o.navigationLinks, true)
8568           && compareDeep(operator, o.operator, true) && compareDeep(path, o.path, true) && compareDeep(requestMethod, o.requestMethod, true)
8569           && compareDeep(requestURL, o.requestURL, true) && compareDeep(resource, o.resource, true) && compareDeep(response, o.response, true)
8570           && compareDeep(responseCode, o.responseCode, true) && compareDeep(sourceId, o.sourceId, true) && compareDeep(stopTestOnFail, o.stopTestOnFail, true)
8571           && compareDeep(validateProfileId, o.validateProfileId, true) && compareDeep(value, o.value, true)
8572           && compareDeep(warningOnly, o.warningOnly, true) && compareDeep(requirement, o.requirement, true)
8573          ;
8574      }
8575
8576      @Override
8577      public boolean equalsShallow(Base other_) {
8578        if (!super.equalsShallow(other_))
8579          return false;
8580        if (!(other_ instanceof SetupActionAssertComponent))
8581          return false;
8582        SetupActionAssertComponent o = (SetupActionAssertComponent) other_;
8583        return compareValues(label, o.label, true) && compareValues(description, o.description, true) && compareValues(direction, o.direction, true)
8584           && compareValues(compareToSourceId, o.compareToSourceId, true) && compareValues(compareToSourceExpression, o.compareToSourceExpression, true)
8585           && compareValues(compareToSourcePath, o.compareToSourcePath, true) && compareValues(contentType, o.contentType, true)
8586           && compareValues(defaultManualCompletion, o.defaultManualCompletion, true) && compareValues(expression, o.expression, true)
8587           && compareValues(headerField, o.headerField, true) && compareValues(minimumId, o.minimumId, true) && compareValues(navigationLinks, o.navigationLinks, true)
8588           && compareValues(operator, o.operator, true) && compareValues(path, o.path, true) && compareValues(requestMethod, o.requestMethod, true)
8589           && compareValues(requestURL, o.requestURL, true) && compareValues(resource, o.resource, true) && compareValues(response, o.response, true)
8590           && compareValues(responseCode, o.responseCode, true) && compareValues(sourceId, o.sourceId, true) && compareValues(stopTestOnFail, o.stopTestOnFail, true)
8591           && compareValues(validateProfileId, o.validateProfileId, true) && compareValues(value, o.value, true)
8592           && compareValues(warningOnly, o.warningOnly, true);
8593      }
8594
8595      public boolean isEmpty() {
8596        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(label, description, direction
8597          , compareToSourceId, compareToSourceExpression, compareToSourcePath, contentType, defaultManualCompletion
8598          , expression, headerField, minimumId, navigationLinks, operator, path, requestMethod
8599          , requestURL, resource, response, responseCode, sourceId, stopTestOnFail, validateProfileId
8600          , value, warningOnly, requirement);
8601      }
8602
8603  public String fhirType() {
8604    return "TestScript.setup.action.assert";
8605
8606  }
8607
8608  }
8609
8610    @Block()
8611    public static class SetupActionAssertRequirementComponent extends BackboneElement implements IBaseBackboneElement {
8612        /**
8613         * Link or reference providing traceability to the testing requirement for this test.
8614         */
8615        @Child(name = "link", type = {UriType.class, CanonicalType.class}, order=1, min=0, max=1, modifier=false, summary=false)
8616        @Description(shortDefinition="Link or reference to the testing requirement", formalDefinition="Link or reference providing traceability to the testing requirement for this test." )
8617        protected DataType link;
8618
8619        private static final long serialVersionUID = -91187948L;
8620
8621    /**
8622     * Constructor
8623     */
8624      public SetupActionAssertRequirementComponent() {
8625        super();
8626      }
8627
8628        /**
8629         * @return {@link #link} (Link or reference providing traceability to the testing requirement for this test.)
8630         */
8631        public DataType getLink() { 
8632          return this.link;
8633        }
8634
8635        /**
8636         * @return {@link #link} (Link or reference providing traceability to the testing requirement for this test.)
8637         */
8638        public UriType getLinkUriType() throws FHIRException { 
8639          if (this.link == null)
8640            this.link = new UriType();
8641          if (!(this.link instanceof UriType))
8642            throw new FHIRException("Type mismatch: the type UriType was expected, but "+this.link.getClass().getName()+" was encountered");
8643          return (UriType) this.link;
8644        }
8645
8646        public boolean hasLinkUriType() { 
8647          return this != null && this.link instanceof UriType;
8648        }
8649
8650        /**
8651         * @return {@link #link} (Link or reference providing traceability to the testing requirement for this test.)
8652         */
8653        public CanonicalType getLinkCanonicalType() throws FHIRException { 
8654          if (this.link == null)
8655            this.link = new CanonicalType();
8656          if (!(this.link instanceof CanonicalType))
8657            throw new FHIRException("Type mismatch: the type CanonicalType was expected, but "+this.link.getClass().getName()+" was encountered");
8658          return (CanonicalType) this.link;
8659        }
8660
8661        public boolean hasLinkCanonicalType() { 
8662          return this != null && this.link instanceof CanonicalType;
8663        }
8664
8665        public boolean hasLink() { 
8666          return this.link != null && !this.link.isEmpty();
8667        }
8668
8669        /**
8670         * @param value {@link #link} (Link or reference providing traceability to the testing requirement for this test.)
8671         */
8672        public SetupActionAssertRequirementComponent setLink(DataType value) { 
8673          if (value != null && !(value instanceof UriType || value instanceof CanonicalType))
8674            throw new FHIRException("Not the right type for TestScript.setup.action.assert.requirement.link[x]: "+value.fhirType());
8675          this.link = value;
8676          return this;
8677        }
8678
8679        protected void listChildren(List<Property> children) {
8680          super.listChildren(children);
8681          children.add(new Property("link[x]", "uri|canonical(Requirements)", "Link or reference providing traceability to the testing requirement for this test.", 0, 1, link));
8682        }
8683
8684        @Override
8685        public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
8686          switch (_hash) {
8687          case 177076806: /*link[x]*/  return new Property("link[x]", "uri|canonical(Requirements)", "Link or reference providing traceability to the testing requirement for this test.", 0, 1, link);
8688          case 3321850: /*link*/  return new Property("link[x]", "uri|canonical(Requirements)", "Link or reference providing traceability to the testing requirement for this test.", 0, 1, link);
8689          case 177070866: /*linkUri*/  return new Property("link[x]", "uri", "Link or reference providing traceability to the testing requirement for this test.", 0, 1, link);
8690          case -2064880102: /*linkCanonical*/  return new Property("link[x]", "canonical(Requirements)", "Link or reference providing traceability to the testing requirement for this test.", 0, 1, link);
8691          default: return super.getNamedProperty(_hash, _name, _checkValid);
8692          }
8693
8694        }
8695
8696      @Override
8697      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
8698        switch (hash) {
8699        case 3321850: /*link*/ return this.link == null ? new Base[0] : new Base[] {this.link}; // DataType
8700        default: return super.getProperty(hash, name, checkValid);
8701        }
8702
8703      }
8704
8705      @Override
8706      public Base setProperty(int hash, String name, Base value) throws FHIRException {
8707        switch (hash) {
8708        case 3321850: // link
8709          this.link = TypeConvertor.castToType(value); // DataType
8710          return value;
8711        default: return super.setProperty(hash, name, value);
8712        }
8713
8714      }
8715
8716      @Override
8717      public Base setProperty(String name, Base value) throws FHIRException {
8718        if (name.equals("link[x]")) {
8719          this.link = TypeConvertor.castToType(value); // DataType
8720        } else
8721          return super.setProperty(name, value);
8722        return value;
8723      }
8724
8725  @Override
8726  public void removeChild(String name, Base value) throws FHIRException {
8727        if (name.equals("link[x]")) {
8728          this.link = null;
8729        } else
8730          super.removeChild(name, value);
8731        
8732      }
8733
8734      @Override
8735      public Base makeProperty(int hash, String name) throws FHIRException {
8736        switch (hash) {
8737        case 177076806:  return getLink();
8738        case 3321850:  return getLink();
8739        default: return super.makeProperty(hash, name);
8740        }
8741
8742      }
8743
8744      @Override
8745      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
8746        switch (hash) {
8747        case 3321850: /*link*/ return new String[] {"uri", "canonical"};
8748        default: return super.getTypesForProperty(hash, name);
8749        }
8750
8751      }
8752
8753      @Override
8754      public Base addChild(String name) throws FHIRException {
8755        if (name.equals("linkUri")) {
8756          this.link = new UriType();
8757          return this.link;
8758        }
8759        else if (name.equals("linkCanonical")) {
8760          this.link = new CanonicalType();
8761          return this.link;
8762        }
8763        else
8764          return super.addChild(name);
8765      }
8766
8767      public SetupActionAssertRequirementComponent copy() {
8768        SetupActionAssertRequirementComponent dst = new SetupActionAssertRequirementComponent();
8769        copyValues(dst);
8770        return dst;
8771      }
8772
8773      public void copyValues(SetupActionAssertRequirementComponent dst) {
8774        super.copyValues(dst);
8775        dst.link = link == null ? null : link.copy();
8776      }
8777
8778      @Override
8779      public boolean equalsDeep(Base other_) {
8780        if (!super.equalsDeep(other_))
8781          return false;
8782        if (!(other_ instanceof SetupActionAssertRequirementComponent))
8783          return false;
8784        SetupActionAssertRequirementComponent o = (SetupActionAssertRequirementComponent) other_;
8785        return compareDeep(link, o.link, true);
8786      }
8787
8788      @Override
8789      public boolean equalsShallow(Base other_) {
8790        if (!super.equalsShallow(other_))
8791          return false;
8792        if (!(other_ instanceof SetupActionAssertRequirementComponent))
8793          return false;
8794        SetupActionAssertRequirementComponent o = (SetupActionAssertRequirementComponent) other_;
8795        return true;
8796      }
8797
8798      public boolean isEmpty() {
8799        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(link);
8800      }
8801
8802  public String fhirType() {
8803    return "TestScript.setup.action.assert.requirement";
8804
8805  }
8806
8807  }
8808
8809    @Block()
8810    public static class TestScriptTestComponent extends BackboneElement implements IBaseBackboneElement {
8811        /**
8812         * The name of this test used for tracking/logging purposes by test engines.
8813         */
8814        @Child(name = "name", type = {StringType.class}, order=1, min=0, max=1, modifier=false, summary=false)
8815        @Description(shortDefinition="Tracking/logging name of this test", formalDefinition="The name of this test used for tracking/logging purposes by test engines." )
8816        protected StringType name;
8817
8818        /**
8819         * A short description of the test used by test engines for tracking and reporting purposes.
8820         */
8821        @Child(name = "description", type = {StringType.class}, order=2, min=0, max=1, modifier=false, summary=false)
8822        @Description(shortDefinition="Tracking/reporting short description of the test", formalDefinition="A short description of the test used by test engines for tracking and reporting purposes." )
8823        protected StringType description;
8824
8825        /**
8826         * Action would contain either an operation or an assertion.
8827         */
8828        @Child(name = "action", type = {}, order=3, min=1, max=Child.MAX_UNLIMITED, modifier=false, summary=false)
8829        @Description(shortDefinition="A test operation or assert to perform", formalDefinition="Action would contain either an operation or an assertion." )
8830        protected List<TestActionComponent> action;
8831
8832        private static final long serialVersionUID = -865006110L;
8833
8834    /**
8835     * Constructor
8836     */
8837      public TestScriptTestComponent() {
8838        super();
8839      }
8840
8841    /**
8842     * Constructor
8843     */
8844      public TestScriptTestComponent(TestActionComponent action) {
8845        super();
8846        this.addAction(action);
8847      }
8848
8849        /**
8850         * @return {@link #name} (The name of this test used for tracking/logging purposes by test engines.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
8851         */
8852        public StringType getNameElement() { 
8853          if (this.name == null)
8854            if (Configuration.errorOnAutoCreate())
8855              throw new Error("Attempt to auto-create TestScriptTestComponent.name");
8856            else if (Configuration.doAutoCreate())
8857              this.name = new StringType(); // bb
8858          return this.name;
8859        }
8860
8861        public boolean hasNameElement() { 
8862          return this.name != null && !this.name.isEmpty();
8863        }
8864
8865        public boolean hasName() { 
8866          return this.name != null && !this.name.isEmpty();
8867        }
8868
8869        /**
8870         * @param value {@link #name} (The name of this test used for tracking/logging purposes by test engines.). This is the underlying object with id, value and extensions. The accessor "getName" gives direct access to the value
8871         */
8872        public TestScriptTestComponent setNameElement(StringType value) { 
8873          this.name = value;
8874          return this;
8875        }
8876
8877        /**
8878         * @return The name of this test used for tracking/logging purposes by test engines.
8879         */
8880        public String getName() { 
8881          return this.name == null ? null : this.name.getValue();
8882        }
8883
8884        /**
8885         * @param value The name of this test used for tracking/logging purposes by test engines.
8886         */
8887        public TestScriptTestComponent setName(String value) { 
8888          if (Utilities.noString(value))
8889            this.name = null;
8890          else {
8891            if (this.name == null)
8892              this.name = new StringType();
8893            this.name.setValue(value);
8894          }
8895          return this;
8896        }
8897
8898        /**
8899         * @return {@link #description} (A short description of the test used by test engines for tracking and reporting purposes.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
8900         */
8901        public StringType getDescriptionElement() { 
8902          if (this.description == null)
8903            if (Configuration.errorOnAutoCreate())
8904              throw new Error("Attempt to auto-create TestScriptTestComponent.description");
8905            else if (Configuration.doAutoCreate())
8906              this.description = new StringType(); // bb
8907          return this.description;
8908        }
8909
8910        public boolean hasDescriptionElement() { 
8911          return this.description != null && !this.description.isEmpty();
8912        }
8913
8914        public boolean hasDescription() { 
8915          return this.description != null && !this.description.isEmpty();
8916        }
8917
8918        /**
8919         * @param value {@link #description} (A short description of the test used by test engines for tracking and reporting purposes.). This is the underlying object with id, value and extensions. The accessor "getDescription" gives direct access to the value
8920         */
8921        public TestScriptTestComponent setDescriptionElement(StringType value) { 
8922          this.description = value;
8923          return this;
8924        }
8925
8926        /**
8927         * @return A short description of the test used by test engines for tracking and reporting purposes.
8928         */
8929        public String getDescription() { 
8930          return this.description == null ? null : this.description.getValue();
8931        }
8932
8933        /**
8934         * @param value A short description of the test used by test engines for tracking and reporting purposes.
8935         */
8936        public TestScriptTestComponent setDescription(String value) { 
8937          if (Utilities.noString(value))
8938            this.description = null;
8939          else {
8940            if (this.description == null)
8941              this.description = new StringType();
8942            this.description.setValue(value);
8943          }
8944          return this;
8945        }
8946
8947        /**
8948         * @return {@link #action} (Action would contain either an operation or an assertion.)
8949         */
8950        public List<TestActionComponent> getAction() { 
8951          if (this.action == null)
8952            this.action = new ArrayList<TestActionComponent>();
8953          return this.action;
8954        }
8955
8956        /**
8957         * @return Returns a reference to <code>this</code> for easy method chaining
8958         */
8959        public TestScriptTestComponent setAction(List<TestActionComponent> theAction) { 
8960          this.action = theAction;
8961          return this;
8962        }
8963
8964        public boolean hasAction() { 
8965          if (this.action == null)
8966            return false;
8967          for (TestActionComponent item : this.action)
8968            if (!item.isEmpty())
8969              return true;
8970          return false;
8971        }
8972
8973        public TestActionComponent addAction() { //3
8974          TestActionComponent t = new TestActionComponent();
8975          if (this.action == null)
8976            this.action = new ArrayList<TestActionComponent>();
8977          this.action.add(t);
8978          return t;
8979        }
8980
8981        public TestScriptTestComponent addAction(TestActionComponent t) { //3
8982          if (t == null)
8983            return this;
8984          if (this.action == null)
8985            this.action = new ArrayList<TestActionComponent>();
8986          this.action.add(t);
8987          return this;
8988        }
8989
8990        /**
8991         * @return The first repetition of repeating field {@link #action}, creating it if it does not already exist {3}
8992         */
8993        public TestActionComponent getActionFirstRep() { 
8994          if (getAction().isEmpty()) {
8995            addAction();
8996          }
8997          return getAction().get(0);
8998        }
8999
9000