001package org.hl7.fhir.r4.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Tue, May 12, 2020 07:26+1000 for FHIR v4.0.1
033import java.util.ArrayList;
034import java.util.Date;
035import java.util.List;
036
037import org.hl7.fhir.exceptions.FHIRException;
038import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
039import org.hl7.fhir.r4.model.Enumerations.PublicationStatus;
040import org.hl7.fhir.r4.model.Enumerations.PublicationStatusEnumFactory;
041import org.hl7.fhir.utilities.Utilities;
042
043import ca.uhn.fhir.model.api.annotation.Block;
044import ca.uhn.fhir.model.api.annotation.Child;
045import ca.uhn.fhir.model.api.annotation.ChildOrder;
046import ca.uhn.fhir.model.api.annotation.Description;
047import ca.uhn.fhir.model.api.annotation.ResourceDef;
048import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
049
050/**
051 * Defines the characteristics of a message that can be shared between systems,
052 * including the type of event that initiates the message, the content to be
053 * transmitted and what response(s), if any, are permitted.
054 */
055@ResourceDef(name = "MessageDefinition", profile = "http://hl7.org/fhir/StructureDefinition/MessageDefinition")
056@ChildOrder(names = { "url", "identifier", "version", "name", "title", "replaces", "status", "experimental", "date",
057    "publisher", "contact", "description", "useContext", "jurisdiction", "purpose", "copyright", "base", "parent",
058    "event[x]", "category", "focus", "responseRequired", "allowedResponse", "graph" })
059public class MessageDefinition extends MetadataResource {
060
061  public enum MessageSignificanceCategory {
062    /**
063     * The message represents/requests a change that should not be processed more
064     * than once; e.g., making a booking for an appointment.
065     */
066    CONSEQUENCE,
067    /**
068     * The message represents a response to query for current information.
069     * Retrospective processing is wrong and/or wasteful.
070     */
071    CURRENCY,
072    /**
073     * The content is not necessarily intended to be current, and it can be
074     * reprocessed, though there may be version issues created by processing old
075     * notifications.
076     */
077    NOTIFICATION,
078    /**
079     * added to help the parsers with the generic types
080     */
081    NULL;
082
083    public static MessageSignificanceCategory fromCode(String codeString) throws FHIRException {
084      if (codeString == null || "".equals(codeString))
085        return null;
086      if ("consequence".equals(codeString))
087        return CONSEQUENCE;
088      if ("currency".equals(codeString))
089        return CURRENCY;
090      if ("notification".equals(codeString))
091        return NOTIFICATION;
092      if (Configuration.isAcceptInvalidEnums())
093        return null;
094      else
095        throw new FHIRException("Unknown MessageSignificanceCategory code '" + codeString + "'");
096    }
097
098    public String toCode() {
099      switch (this) {
100      case CONSEQUENCE:
101        return "consequence";
102      case CURRENCY:
103        return "currency";
104      case NOTIFICATION:
105        return "notification";
106      case NULL:
107        return null;
108      default:
109        return "?";
110      }
111    }
112
113    public String getSystem() {
114      switch (this) {
115      case CONSEQUENCE:
116        return "http://hl7.org/fhir/message-significance-category";
117      case CURRENCY:
118        return "http://hl7.org/fhir/message-significance-category";
119      case NOTIFICATION:
120        return "http://hl7.org/fhir/message-significance-category";
121      case NULL:
122        return null;
123      default:
124        return "?";
125      }
126    }
127
128    public String getDefinition() {
129      switch (this) {
130      case CONSEQUENCE:
131        return "The message represents/requests a change that should not be processed more than once; e.g., making a booking for an appointment.";
132      case CURRENCY:
133        return "The message represents a response to query for current information. Retrospective processing is wrong and/or wasteful.";
134      case NOTIFICATION:
135        return "The content is not necessarily intended to be current, and it can be reprocessed, though there may be version issues created by processing old notifications.";
136      case NULL:
137        return null;
138      default:
139        return "?";
140      }
141    }
142
143    public String getDisplay() {
144      switch (this) {
145      case CONSEQUENCE:
146        return "Consequence";
147      case CURRENCY:
148        return "Currency";
149      case NOTIFICATION:
150        return "Notification";
151      case NULL:
152        return null;
153      default:
154        return "?";
155      }
156    }
157  }
158
159  public static class MessageSignificanceCategoryEnumFactory implements EnumFactory<MessageSignificanceCategory> {
160    public MessageSignificanceCategory fromCode(String codeString) throws IllegalArgumentException {
161      if (codeString == null || "".equals(codeString))
162        if (codeString == null || "".equals(codeString))
163          return null;
164      if ("consequence".equals(codeString))
165        return MessageSignificanceCategory.CONSEQUENCE;
166      if ("currency".equals(codeString))
167        return MessageSignificanceCategory.CURRENCY;
168      if ("notification".equals(codeString))
169        return MessageSignificanceCategory.NOTIFICATION;
170      throw new IllegalArgumentException("Unknown MessageSignificanceCategory code '" + codeString + "'");
171    }
172
173    public Enumeration<MessageSignificanceCategory> fromType(PrimitiveType<?> code) throws FHIRException {
174      if (code == null)
175        return null;
176      if (code.isEmpty())
177        return new Enumeration<MessageSignificanceCategory>(this, MessageSignificanceCategory.NULL, code);
178      String codeString = code.asStringValue();
179      if (codeString == null || "".equals(codeString))
180        return new Enumeration<MessageSignificanceCategory>(this, MessageSignificanceCategory.NULL, code);
181      if ("consequence".equals(codeString))
182        return new Enumeration<MessageSignificanceCategory>(this, MessageSignificanceCategory.CONSEQUENCE, code);
183      if ("currency".equals(codeString))
184        return new Enumeration<MessageSignificanceCategory>(this, MessageSignificanceCategory.CURRENCY, code);
185      if ("notification".equals(codeString))
186        return new Enumeration<MessageSignificanceCategory>(this, MessageSignificanceCategory.NOTIFICATION, code);
187      throw new FHIRException("Unknown MessageSignificanceCategory code '" + codeString + "'");
188    }
189
190    public String toCode(MessageSignificanceCategory code) {
191      if (code == MessageSignificanceCategory.CONSEQUENCE)
192        return "consequence";
193      if (code == MessageSignificanceCategory.CURRENCY)
194        return "currency";
195      if (code == MessageSignificanceCategory.NOTIFICATION)
196        return "notification";
197      return "?";
198    }
199
200    public String toSystem(MessageSignificanceCategory code) {
201      return code.getSystem();
202    }
203  }
204
205  public enum MessageheaderResponseRequest {
206    /**
207     * initiator expects a response for this message.
208     */
209    ALWAYS,
210    /**
211     * initiator expects a response only if in error.
212     */
213    ONERROR,
214    /**
215     * initiator does not expect a response.
216     */
217    NEVER,
218    /**
219     * initiator expects a response only if successful.
220     */
221    ONSUCCESS,
222    /**
223     * added to help the parsers with the generic types
224     */
225    NULL;
226
227    public static MessageheaderResponseRequest fromCode(String codeString) throws FHIRException {
228      if (codeString == null || "".equals(codeString))
229        return null;
230      if ("always".equals(codeString))
231        return ALWAYS;
232      if ("on-error".equals(codeString))
233        return ONERROR;
234      if ("never".equals(codeString))
235        return NEVER;
236      if ("on-success".equals(codeString))
237        return ONSUCCESS;
238      if (Configuration.isAcceptInvalidEnums())
239        return null;
240      else
241        throw new FHIRException("Unknown MessageheaderResponseRequest code '" + codeString + "'");
242    }
243
244    public String toCode() {
245      switch (this) {
246      case ALWAYS:
247        return "always";
248      case ONERROR:
249        return "on-error";
250      case NEVER:
251        return "never";
252      case ONSUCCESS:
253        return "on-success";
254      case NULL:
255        return null;
256      default:
257        return "?";
258      }
259    }
260
261    public String getSystem() {
262      switch (this) {
263      case ALWAYS:
264        return "http://hl7.org/fhir/messageheader-response-request";
265      case ONERROR:
266        return "http://hl7.org/fhir/messageheader-response-request";
267      case NEVER:
268        return "http://hl7.org/fhir/messageheader-response-request";
269      case ONSUCCESS:
270        return "http://hl7.org/fhir/messageheader-response-request";
271      case NULL:
272        return null;
273      default:
274        return "?";
275      }
276    }
277
278    public String getDefinition() {
279      switch (this) {
280      case ALWAYS:
281        return "initiator expects a response for this message.";
282      case ONERROR:
283        return "initiator expects a response only if in error.";
284      case NEVER:
285        return "initiator does not expect a response.";
286      case ONSUCCESS:
287        return "initiator expects a response only if successful.";
288      case NULL:
289        return null;
290      default:
291        return "?";
292      }
293    }
294
295    public String getDisplay() {
296      switch (this) {
297      case ALWAYS:
298        return "Always";
299      case ONERROR:
300        return "Error/reject conditions only";
301      case NEVER:
302        return "Never";
303      case ONSUCCESS:
304        return "Successful completion only";
305      case NULL:
306        return null;
307      default:
308        return "?";
309      }
310    }
311  }
312
313  public static class MessageheaderResponseRequestEnumFactory implements EnumFactory<MessageheaderResponseRequest> {
314    public MessageheaderResponseRequest fromCode(String codeString) throws IllegalArgumentException {
315      if (codeString == null || "".equals(codeString))
316        if (codeString == null || "".equals(codeString))
317          return null;
318      if ("always".equals(codeString))
319        return MessageheaderResponseRequest.ALWAYS;
320      if ("on-error".equals(codeString))
321        return MessageheaderResponseRequest.ONERROR;
322      if ("never".equals(codeString))
323        return MessageheaderResponseRequest.NEVER;
324      if ("on-success".equals(codeString))
325        return MessageheaderResponseRequest.ONSUCCESS;
326      throw new IllegalArgumentException("Unknown MessageheaderResponseRequest code '" + codeString + "'");
327    }
328
329    public Enumeration<MessageheaderResponseRequest> fromType(PrimitiveType<?> code) throws FHIRException {
330      if (code == null)
331        return null;
332      if (code.isEmpty())
333        return new Enumeration<MessageheaderResponseRequest>(this, MessageheaderResponseRequest.NULL, code);
334      String codeString = code.asStringValue();
335      if (codeString == null || "".equals(codeString))
336        return new Enumeration<MessageheaderResponseRequest>(this, MessageheaderResponseRequest.NULL, code);
337      if ("always".equals(codeString))
338        return new Enumeration<MessageheaderResponseRequest>(this, MessageheaderResponseRequest.ALWAYS, code);
339      if ("on-error".equals(codeString))
340        return new Enumeration<MessageheaderResponseRequest>(this, MessageheaderResponseRequest.ONERROR, code);
341      if ("never".equals(codeString))
342        return new Enumeration<MessageheaderResponseRequest>(this, MessageheaderResponseRequest.NEVER, code);
343      if ("on-success".equals(codeString))
344        return new Enumeration<MessageheaderResponseRequest>(this, MessageheaderResponseRequest.ONSUCCESS, code);
345      throw new FHIRException("Unknown MessageheaderResponseRequest code '" + codeString + "'");
346    }
347
348    public String toCode(MessageheaderResponseRequest code) {
349      if (code == MessageheaderResponseRequest.ALWAYS)
350        return "always";
351      if (code == MessageheaderResponseRequest.ONERROR)
352        return "on-error";
353      if (code == MessageheaderResponseRequest.NEVER)
354        return "never";
355      if (code == MessageheaderResponseRequest.ONSUCCESS)
356        return "on-success";
357      return "?";
358    }
359
360    public String toSystem(MessageheaderResponseRequest code) {
361      return code.getSystem();
362    }
363  }
364
365  @Block()
366  public static class MessageDefinitionFocusComponent extends BackboneElement implements IBaseBackboneElement {
367    /**
368     * The kind of resource that must be the focus for this message.
369     */
370    @Child(name = "code", type = { CodeType.class }, order = 1, min = 1, max = 1, modifier = false, summary = true)
371    @Description(shortDefinition = "Type of resource", formalDefinition = "The kind of resource that must be the focus for this message.")
372    @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/resource-types")
373    protected CodeType code;
374
375    /**
376     * A profile that reflects constraints for the focal resource (and potentially
377     * for related resources).
378     */
379    @Child(name = "profile", type = {
380        CanonicalType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
381    @Description(shortDefinition = "Profile that must be adhered to by focus", formalDefinition = "A profile that reflects constraints for the focal resource (and potentially for related resources).")
382    protected CanonicalType profile;
383
384    /**
385     * Identifies the minimum number of resources of this type that must be pointed
386     * to by a message in order for it to be valid against this MessageDefinition.
387     */
388    @Child(name = "min", type = {
389        UnsignedIntType.class }, order = 3, min = 1, max = 1, modifier = false, summary = true)
390    @Description(shortDefinition = "Minimum number of focuses of this type", formalDefinition = "Identifies the minimum number of resources of this type that must be pointed to by a message in order for it to be valid against this MessageDefinition.")
391    protected UnsignedIntType min;
392
393    /**
394     * Identifies the maximum number of resources of this type that must be pointed
395     * to by a message in order for it to be valid against this MessageDefinition.
396     */
397    @Child(name = "max", type = { StringType.class }, order = 4, min = 0, max = 1, modifier = false, summary = false)
398    @Description(shortDefinition = "Maximum number of focuses of this type", formalDefinition = "Identifies the maximum number of resources of this type that must be pointed to by a message in order for it to be valid against this MessageDefinition.")
399    protected StringType max;
400
401    private static final long serialVersionUID = -68504836L;
402
403    /**
404     * Constructor
405     */
406    public MessageDefinitionFocusComponent() {
407      super();
408    }
409
410    /**
411     * Constructor
412     */
413    public MessageDefinitionFocusComponent(CodeType code, UnsignedIntType min) {
414      super();
415      this.code = code;
416      this.min = min;
417    }
418
419    /**
420     * @return {@link #code} (The kind of resource that must be the focus for this
421     *         message.). This is the underlying object with id, value and
422     *         extensions. The accessor "getCode" gives direct access to the value
423     */
424    public CodeType getCodeElement() {
425      if (this.code == null)
426        if (Configuration.errorOnAutoCreate())
427          throw new Error("Attempt to auto-create MessageDefinitionFocusComponent.code");
428        else if (Configuration.doAutoCreate())
429          this.code = new CodeType(); // bb
430      return this.code;
431    }
432
433    public boolean hasCodeElement() {
434      return this.code != null && !this.code.isEmpty();
435    }
436
437    public boolean hasCode() {
438      return this.code != null && !this.code.isEmpty();
439    }
440
441    /**
442     * @param value {@link #code} (The kind of resource that must be the focus for
443     *              this message.). This is the underlying object with id, value and
444     *              extensions. The accessor "getCode" gives direct access to the
445     *              value
446     */
447    public MessageDefinitionFocusComponent setCodeElement(CodeType value) {
448      this.code = value;
449      return this;
450    }
451
452    /**
453     * @return The kind of resource that must be the focus for this message.
454     */
455    public String getCode() {
456      return this.code == null ? null : this.code.getValue();
457    }
458
459    /**
460     * @param value The kind of resource that must be the focus for this message.
461     */
462    public MessageDefinitionFocusComponent setCode(String value) {
463      if (this.code == null)
464        this.code = new CodeType();
465      this.code.setValue(value);
466      return this;
467    }
468
469    /**
470     * @return {@link #profile} (A profile that reflects constraints for the focal
471     *         resource (and potentially for related resources).). This is the
472     *         underlying object with id, value and extensions. The accessor
473     *         "getProfile" gives direct access to the value
474     */
475    public CanonicalType getProfileElement() {
476      if (this.profile == null)
477        if (Configuration.errorOnAutoCreate())
478          throw new Error("Attempt to auto-create MessageDefinitionFocusComponent.profile");
479        else if (Configuration.doAutoCreate())
480          this.profile = new CanonicalType(); // bb
481      return this.profile;
482    }
483
484    public boolean hasProfileElement() {
485      return this.profile != null && !this.profile.isEmpty();
486    }
487
488    public boolean hasProfile() {
489      return this.profile != null && !this.profile.isEmpty();
490    }
491
492    /**
493     * @param value {@link #profile} (A profile that reflects constraints for the
494     *              focal resource (and potentially for related resources).). This
495     *              is the underlying object with id, value and extensions. The
496     *              accessor "getProfile" gives direct access to the value
497     */
498    public MessageDefinitionFocusComponent setProfileElement(CanonicalType value) {
499      this.profile = value;
500      return this;
501    }
502
503    /**
504     * @return A profile that reflects constraints for the focal resource (and
505     *         potentially for related resources).
506     */
507    public String getProfile() {
508      return this.profile == null ? null : this.profile.getValue();
509    }
510
511    /**
512     * @param value A profile that reflects constraints for the focal resource (and
513     *              potentially for related resources).
514     */
515    public MessageDefinitionFocusComponent setProfile(String value) {
516      if (Utilities.noString(value))
517        this.profile = null;
518      else {
519        if (this.profile == null)
520          this.profile = new CanonicalType();
521        this.profile.setValue(value);
522      }
523      return this;
524    }
525
526    /**
527     * @return {@link #min} (Identifies the minimum number of resources of this type
528     *         that must be pointed to by a message in order for it to be valid
529     *         against this MessageDefinition.). This is the underlying object with
530     *         id, value and extensions. The accessor "getMin" gives direct access
531     *         to the value
532     */
533    public UnsignedIntType getMinElement() {
534      if (this.min == null)
535        if (Configuration.errorOnAutoCreate())
536          throw new Error("Attempt to auto-create MessageDefinitionFocusComponent.min");
537        else if (Configuration.doAutoCreate())
538          this.min = new UnsignedIntType(); // bb
539      return this.min;
540    }
541
542    public boolean hasMinElement() {
543      return this.min != null && !this.min.isEmpty();
544    }
545
546    public boolean hasMin() {
547      return this.min != null && !this.min.isEmpty();
548    }
549
550    /**
551     * @param value {@link #min} (Identifies the minimum number of resources of this
552     *              type that must be pointed to by a message in order for it to be
553     *              valid against this MessageDefinition.). This is the underlying
554     *              object with id, value and extensions. The accessor "getMin"
555     *              gives direct access to the value
556     */
557    public MessageDefinitionFocusComponent setMinElement(UnsignedIntType value) {
558      this.min = value;
559      return this;
560    }
561
562    /**
563     * @return Identifies the minimum number of resources of this type that must be
564     *         pointed to by a message in order for it to be valid against this
565     *         MessageDefinition.
566     */
567    public int getMin() {
568      return this.min == null || this.min.isEmpty() ? 0 : this.min.getValue();
569    }
570
571    /**
572     * @param value Identifies the minimum number of resources of this type that
573     *              must be pointed to by a message in order for it to be valid
574     *              against this MessageDefinition.
575     */
576    public MessageDefinitionFocusComponent setMin(int value) {
577      if (this.min == null)
578        this.min = new UnsignedIntType();
579      this.min.setValue(value);
580      return this;
581    }
582
583    /**
584     * @return {@link #max} (Identifies the maximum number of resources of this type
585     *         that must be pointed to by a message in order for it to be valid
586     *         against this MessageDefinition.). This is the underlying object with
587     *         id, value and extensions. The accessor "getMax" gives direct access
588     *         to the value
589     */
590    public StringType getMaxElement() {
591      if (this.max == null)
592        if (Configuration.errorOnAutoCreate())
593          throw new Error("Attempt to auto-create MessageDefinitionFocusComponent.max");
594        else if (Configuration.doAutoCreate())
595          this.max = new StringType(); // bb
596      return this.max;
597    }
598
599    public boolean hasMaxElement() {
600      return this.max != null && !this.max.isEmpty();
601    }
602
603    public boolean hasMax() {
604      return this.max != null && !this.max.isEmpty();
605    }
606
607    /**
608     * @param value {@link #max} (Identifies the maximum number of resources of this
609     *              type that must be pointed to by a message in order for it to be
610     *              valid against this MessageDefinition.). This is the underlying
611     *              object with id, value and extensions. The accessor "getMax"
612     *              gives direct access to the value
613     */
614    public MessageDefinitionFocusComponent setMaxElement(StringType value) {
615      this.max = value;
616      return this;
617    }
618
619    /**
620     * @return Identifies the maximum number of resources of this type that must be
621     *         pointed to by a message in order for it to be valid against this
622     *         MessageDefinition.
623     */
624    public String getMax() {
625      return this.max == null ? null : this.max.getValue();
626    }
627
628    /**
629     * @param value Identifies the maximum number of resources of this type that
630     *              must be pointed to by a message in order for it to be valid
631     *              against this MessageDefinition.
632     */
633    public MessageDefinitionFocusComponent setMax(String value) {
634      if (Utilities.noString(value))
635        this.max = null;
636      else {
637        if (this.max == null)
638          this.max = new StringType();
639        this.max.setValue(value);
640      }
641      return this;
642    }
643
644    protected void listChildren(List<Property> children) {
645      super.listChildren(children);
646      children.add(
647          new Property("code", "code", "The kind of resource that must be the focus for this message.", 0, 1, code));
648      children.add(new Property("profile", "canonical(StructureDefinition)",
649          "A profile that reflects constraints for the focal resource (and potentially for related resources).", 0, 1,
650          profile));
651      children.add(new Property("min", "unsignedInt",
652          "Identifies the minimum number of resources of this type that must be pointed to by a message in order for it to be valid against this MessageDefinition.",
653          0, 1, min));
654      children.add(new Property("max", "string",
655          "Identifies the maximum number of resources of this type that must be pointed to by a message in order for it to be valid against this MessageDefinition.",
656          0, 1, max));
657    }
658
659    @Override
660    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
661      switch (_hash) {
662      case 3059181:
663        /* code */ return new Property("code", "code", "The kind of resource that must be the focus for this message.",
664            0, 1, code);
665      case -309425751:
666        /* profile */ return new Property("profile", "canonical(StructureDefinition)",
667            "A profile that reflects constraints for the focal resource (and potentially for related resources).", 0, 1,
668            profile);
669      case 108114:
670        /* min */ return new Property("min", "unsignedInt",
671            "Identifies the minimum number of resources of this type that must be pointed to by a message in order for it to be valid against this MessageDefinition.",
672            0, 1, min);
673      case 107876:
674        /* max */ return new Property("max", "string",
675            "Identifies the maximum number of resources of this type that must be pointed to by a message in order for it to be valid against this MessageDefinition.",
676            0, 1, max);
677      default:
678        return super.getNamedProperty(_hash, _name, _checkValid);
679      }
680
681    }
682
683    @Override
684    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
685      switch (hash) {
686      case 3059181:
687        /* code */ return this.code == null ? new Base[0] : new Base[] { this.code }; // CodeType
688      case -309425751:
689        /* profile */ return this.profile == null ? new Base[0] : new Base[] { this.profile }; // CanonicalType
690      case 108114:
691        /* min */ return this.min == null ? new Base[0] : new Base[] { this.min }; // UnsignedIntType
692      case 107876:
693        /* max */ return this.max == null ? new Base[0] : new Base[] { this.max }; // StringType
694      default:
695        return super.getProperty(hash, name, checkValid);
696      }
697
698    }
699
700    @Override
701    public Base setProperty(int hash, String name, Base value) throws FHIRException {
702      switch (hash) {
703      case 3059181: // code
704        this.code = castToCode(value); // CodeType
705        return value;
706      case -309425751: // profile
707        this.profile = castToCanonical(value); // CanonicalType
708        return value;
709      case 108114: // min
710        this.min = castToUnsignedInt(value); // UnsignedIntType
711        return value;
712      case 107876: // max
713        this.max = castToString(value); // StringType
714        return value;
715      default:
716        return super.setProperty(hash, name, value);
717      }
718
719    }
720
721    @Override
722    public Base setProperty(String name, Base value) throws FHIRException {
723      if (name.equals("code")) {
724        this.code = castToCode(value); // CodeType
725      } else if (name.equals("profile")) {
726        this.profile = castToCanonical(value); // CanonicalType
727      } else if (name.equals("min")) {
728        this.min = castToUnsignedInt(value); // UnsignedIntType
729      } else if (name.equals("max")) {
730        this.max = castToString(value); // StringType
731      } else
732        return super.setProperty(name, value);
733      return value;
734    }
735
736    @Override
737    public Base makeProperty(int hash, String name) throws FHIRException {
738      switch (hash) {
739      case 3059181:
740        return getCodeElement();
741      case -309425751:
742        return getProfileElement();
743      case 108114:
744        return getMinElement();
745      case 107876:
746        return getMaxElement();
747      default:
748        return super.makeProperty(hash, name);
749      }
750
751    }
752
753    @Override
754    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
755      switch (hash) {
756      case 3059181:
757        /* code */ return new String[] { "code" };
758      case -309425751:
759        /* profile */ return new String[] { "canonical" };
760      case 108114:
761        /* min */ return new String[] { "unsignedInt" };
762      case 107876:
763        /* max */ return new String[] { "string" };
764      default:
765        return super.getTypesForProperty(hash, name);
766      }
767
768    }
769
770    @Override
771    public Base addChild(String name) throws FHIRException {
772      if (name.equals("code")) {
773        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.code");
774      } else if (name.equals("profile")) {
775        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.profile");
776      } else if (name.equals("min")) {
777        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.min");
778      } else if (name.equals("max")) {
779        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.max");
780      } else
781        return super.addChild(name);
782    }
783
784    public MessageDefinitionFocusComponent copy() {
785      MessageDefinitionFocusComponent dst = new MessageDefinitionFocusComponent();
786      copyValues(dst);
787      return dst;
788    }
789
790    public void copyValues(MessageDefinitionFocusComponent dst) {
791      super.copyValues(dst);
792      dst.code = code == null ? null : code.copy();
793      dst.profile = profile == null ? null : profile.copy();
794      dst.min = min == null ? null : min.copy();
795      dst.max = max == null ? null : max.copy();
796    }
797
798    @Override
799    public boolean equalsDeep(Base other_) {
800      if (!super.equalsDeep(other_))
801        return false;
802      if (!(other_ instanceof MessageDefinitionFocusComponent))
803        return false;
804      MessageDefinitionFocusComponent o = (MessageDefinitionFocusComponent) other_;
805      return compareDeep(code, o.code, true) && compareDeep(profile, o.profile, true) && compareDeep(min, o.min, true)
806          && compareDeep(max, o.max, true);
807    }
808
809    @Override
810    public boolean equalsShallow(Base other_) {
811      if (!super.equalsShallow(other_))
812        return false;
813      if (!(other_ instanceof MessageDefinitionFocusComponent))
814        return false;
815      MessageDefinitionFocusComponent o = (MessageDefinitionFocusComponent) other_;
816      return compareValues(code, o.code, true) && compareValues(min, o.min, true) && compareValues(max, o.max, true);
817    }
818
819    public boolean isEmpty() {
820      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, profile, min, max);
821    }
822
823    public String fhirType() {
824      return "MessageDefinition.focus";
825
826    }
827
828  }
829
830  @Block()
831  public static class MessageDefinitionAllowedResponseComponent extends BackboneElement
832      implements IBaseBackboneElement {
833    /**
834     * A reference to the message definition that must be adhered to by this
835     * supported response.
836     */
837    @Child(name = "message", type = {
838        CanonicalType.class }, order = 1, min = 1, max = 1, modifier = false, summary = false)
839    @Description(shortDefinition = "Reference to allowed message definition response", formalDefinition = "A reference to the message definition that must be adhered to by this supported response.")
840    protected CanonicalType message;
841
842    /**
843     * Provides a description of the circumstances in which this response should be
844     * used (as opposed to one of the alternative responses).
845     */
846    @Child(name = "situation", type = {
847        MarkdownType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
848    @Description(shortDefinition = "When should this response be used", formalDefinition = "Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).")
849    protected MarkdownType situation;
850
851    private static final long serialVersionUID = -1943810550L;
852
853    /**
854     * Constructor
855     */
856    public MessageDefinitionAllowedResponseComponent() {
857      super();
858    }
859
860    /**
861     * Constructor
862     */
863    public MessageDefinitionAllowedResponseComponent(CanonicalType message) {
864      super();
865      this.message = message;
866    }
867
868    /**
869     * @return {@link #message} (A reference to the message definition that must be
870     *         adhered to by this supported response.). This is the underlying
871     *         object with id, value and extensions. The accessor "getMessage" gives
872     *         direct access to the value
873     */
874    public CanonicalType getMessageElement() {
875      if (this.message == null)
876        if (Configuration.errorOnAutoCreate())
877          throw new Error("Attempt to auto-create MessageDefinitionAllowedResponseComponent.message");
878        else if (Configuration.doAutoCreate())
879          this.message = new CanonicalType(); // bb
880      return this.message;
881    }
882
883    public boolean hasMessageElement() {
884      return this.message != null && !this.message.isEmpty();
885    }
886
887    public boolean hasMessage() {
888      return this.message != null && !this.message.isEmpty();
889    }
890
891    /**
892     * @param value {@link #message} (A reference to the message definition that
893     *              must be adhered to by this supported response.). This is the
894     *              underlying object with id, value and extensions. The accessor
895     *              "getMessage" gives direct access to the value
896     */
897    public MessageDefinitionAllowedResponseComponent setMessageElement(CanonicalType value) {
898      this.message = value;
899      return this;
900    }
901
902    /**
903     * @return A reference to the message definition that must be adhered to by this
904     *         supported response.
905     */
906    public String getMessage() {
907      return this.message == null ? null : this.message.getValue();
908    }
909
910    /**
911     * @param value A reference to the message definition that must be adhered to by
912     *              this supported response.
913     */
914    public MessageDefinitionAllowedResponseComponent setMessage(String value) {
915      if (this.message == null)
916        this.message = new CanonicalType();
917      this.message.setValue(value);
918      return this;
919    }
920
921    /**
922     * @return {@link #situation} (Provides a description of the circumstances in
923     *         which this response should be used (as opposed to one of the
924     *         alternative responses).). This is the underlying object with id,
925     *         value and extensions. The accessor "getSituation" gives direct access
926     *         to the value
927     */
928    public MarkdownType getSituationElement() {
929      if (this.situation == null)
930        if (Configuration.errorOnAutoCreate())
931          throw new Error("Attempt to auto-create MessageDefinitionAllowedResponseComponent.situation");
932        else if (Configuration.doAutoCreate())
933          this.situation = new MarkdownType(); // bb
934      return this.situation;
935    }
936
937    public boolean hasSituationElement() {
938      return this.situation != null && !this.situation.isEmpty();
939    }
940
941    public boolean hasSituation() {
942      return this.situation != null && !this.situation.isEmpty();
943    }
944
945    /**
946     * @param value {@link #situation} (Provides a description of the circumstances
947     *              in which this response should be used (as opposed to one of the
948     *              alternative responses).). This is the underlying object with id,
949     *              value and extensions. The accessor "getSituation" gives direct
950     *              access to the value
951     */
952    public MessageDefinitionAllowedResponseComponent setSituationElement(MarkdownType value) {
953      this.situation = value;
954      return this;
955    }
956
957    /**
958     * @return Provides a description of the circumstances in which this response
959     *         should be used (as opposed to one of the alternative responses).
960     */
961    public String getSituation() {
962      return this.situation == null ? null : this.situation.getValue();
963    }
964
965    /**
966     * @param value Provides a description of the circumstances in which this
967     *              response should be used (as opposed to one of the alternative
968     *              responses).
969     */
970    public MessageDefinitionAllowedResponseComponent setSituation(String value) {
971      if (value == null)
972        this.situation = null;
973      else {
974        if (this.situation == null)
975          this.situation = new MarkdownType();
976        this.situation.setValue(value);
977      }
978      return this;
979    }
980
981    protected void listChildren(List<Property> children) {
982      super.listChildren(children);
983      children.add(new Property("message", "canonical(MessageDefinition)",
984          "A reference to the message definition that must be adhered to by this supported response.", 0, 1, message));
985      children.add(new Property("situation", "markdown",
986          "Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).",
987          0, 1, situation));
988    }
989
990    @Override
991    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
992      switch (_hash) {
993      case 954925063:
994        /* message */ return new Property("message", "canonical(MessageDefinition)",
995            "A reference to the message definition that must be adhered to by this supported response.", 0, 1, message);
996      case -73377282:
997        /* situation */ return new Property("situation", "markdown",
998            "Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).",
999            0, 1, situation);
1000      default:
1001        return super.getNamedProperty(_hash, _name, _checkValid);
1002      }
1003
1004    }
1005
1006    @Override
1007    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1008      switch (hash) {
1009      case 954925063:
1010        /* message */ return this.message == null ? new Base[0] : new Base[] { this.message }; // CanonicalType
1011      case -73377282:
1012        /* situation */ return this.situation == null ? new Base[0] : new Base[] { this.situation }; // MarkdownType
1013      default:
1014        return super.getProperty(hash, name, checkValid);
1015      }
1016
1017    }
1018
1019    @Override
1020    public Base setProperty(int hash, String name, Base value) throws FHIRException {
1021      switch (hash) {
1022      case 954925063: // message
1023        this.message = castToCanonical(value); // CanonicalType
1024        return value;
1025      case -73377282: // situation
1026        this.situation = castToMarkdown(value); // MarkdownType
1027        return value;
1028      default:
1029        return super.setProperty(hash, name, value);
1030      }
1031
1032    }
1033
1034    @Override
1035    public Base setProperty(String name, Base value) throws FHIRException {
1036      if (name.equals("message")) {
1037        this.message = castToCanonical(value); // CanonicalType
1038      } else if (name.equals("situation")) {
1039        this.situation = castToMarkdown(value); // MarkdownType
1040      } else
1041        return super.setProperty(name, value);
1042      return value;
1043    }
1044
1045    @Override
1046    public Base makeProperty(int hash, String name) throws FHIRException {
1047      switch (hash) {
1048      case 954925063:
1049        return getMessageElement();
1050      case -73377282:
1051        return getSituationElement();
1052      default:
1053        return super.makeProperty(hash, name);
1054      }
1055
1056    }
1057
1058    @Override
1059    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1060      switch (hash) {
1061      case 954925063:
1062        /* message */ return new String[] { "canonical" };
1063      case -73377282:
1064        /* situation */ return new String[] { "markdown" };
1065      default:
1066        return super.getTypesForProperty(hash, name);
1067      }
1068
1069    }
1070
1071    @Override
1072    public Base addChild(String name) throws FHIRException {
1073      if (name.equals("message")) {
1074        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.message");
1075      } else if (name.equals("situation")) {
1076        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.situation");
1077      } else
1078        return super.addChild(name);
1079    }
1080
1081    public MessageDefinitionAllowedResponseComponent copy() {
1082      MessageDefinitionAllowedResponseComponent dst = new MessageDefinitionAllowedResponseComponent();
1083      copyValues(dst);
1084      return dst;
1085    }
1086
1087    public void copyValues(MessageDefinitionAllowedResponseComponent dst) {
1088      super.copyValues(dst);
1089      dst.message = message == null ? null : message.copy();
1090      dst.situation = situation == null ? null : situation.copy();
1091    }
1092
1093    @Override
1094    public boolean equalsDeep(Base other_) {
1095      if (!super.equalsDeep(other_))
1096        return false;
1097      if (!(other_ instanceof MessageDefinitionAllowedResponseComponent))
1098        return false;
1099      MessageDefinitionAllowedResponseComponent o = (MessageDefinitionAllowedResponseComponent) other_;
1100      return compareDeep(message, o.message, true) && compareDeep(situation, o.situation, true);
1101    }
1102
1103    @Override
1104    public boolean equalsShallow(Base other_) {
1105      if (!super.equalsShallow(other_))
1106        return false;
1107      if (!(other_ instanceof MessageDefinitionAllowedResponseComponent))
1108        return false;
1109      MessageDefinitionAllowedResponseComponent o = (MessageDefinitionAllowedResponseComponent) other_;
1110      return compareValues(situation, o.situation, true);
1111    }
1112
1113    public boolean isEmpty() {
1114      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(message, situation);
1115    }
1116
1117    public String fhirType() {
1118      return "MessageDefinition.allowedResponse";
1119
1120    }
1121
1122  }
1123
1124  /**
1125   * A formal identifier that is used to identify this message definition when it
1126   * is represented in other formats, or referenced in a specification, model,
1127   * design or an instance.
1128   */
1129  @Child(name = "identifier", type = {
1130      Identifier.class }, order = 0, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
1131  @Description(shortDefinition = "Primary key for the message definition on a given server", formalDefinition = "A formal identifier that is used to identify this message definition when it is represented in other formats, or referenced in a specification, model, design or an instance.")
1132  protected List<Identifier> identifier;
1133
1134  /**
1135   * A MessageDefinition that is superseded by this definition.
1136   */
1137  @Child(name = "replaces", type = {
1138      CanonicalType.class }, order = 1, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
1139  @Description(shortDefinition = "Takes the place of", formalDefinition = "A MessageDefinition that is superseded by this definition.")
1140  protected List<CanonicalType> replaces;
1141
1142  /**
1143   * Explanation of why this message definition is needed and why it has been
1144   * designed as it has.
1145   */
1146  @Child(name = "purpose", type = { MarkdownType.class }, order = 2, min = 0, max = 1, modifier = false, summary = true)
1147  @Description(shortDefinition = "Why this message definition is defined", formalDefinition = "Explanation of why this message definition is needed and why it has been designed as it has.")
1148  protected MarkdownType purpose;
1149
1150  /**
1151   * A copyright statement relating to the message definition and/or its contents.
1152   * Copyright statements are generally legal restrictions on the use and
1153   * publishing of the message definition.
1154   */
1155  @Child(name = "copyright", type = {
1156      MarkdownType.class }, order = 3, min = 0, max = 1, modifier = false, summary = false)
1157  @Description(shortDefinition = "Use and/or publishing restrictions", formalDefinition = "A copyright statement relating to the message definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the message definition.")
1158  protected MarkdownType copyright;
1159
1160  /**
1161   * The MessageDefinition that is the basis for the contents of this resource.
1162   */
1163  @Child(name = "base", type = { CanonicalType.class }, order = 4, min = 0, max = 1, modifier = false, summary = true)
1164  @Description(shortDefinition = "Definition this one is based on", formalDefinition = "The MessageDefinition that is the basis for the contents of this resource.")
1165  protected CanonicalType base;
1166
1167  /**
1168   * Identifies a protocol or workflow that this MessageDefinition represents a
1169   * step in.
1170   */
1171  @Child(name = "parent", type = {
1172      CanonicalType.class }, order = 5, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
1173  @Description(shortDefinition = "Protocol/workflow this is part of", formalDefinition = "Identifies a protocol or workflow that this MessageDefinition represents a step in.")
1174  protected List<CanonicalType> parent;
1175
1176  /**
1177   * Event code or link to the EventDefinition.
1178   */
1179  @Child(name = "event", type = { Coding.class,
1180      UriType.class }, order = 6, min = 1, max = 1, modifier = false, summary = true)
1181  @Description(shortDefinition = "Event code  or link to the EventDefinition", formalDefinition = "Event code or link to the EventDefinition.")
1182  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/message-events")
1183  protected Type event;
1184
1185  /**
1186   * The impact of the content of the message.
1187   */
1188  @Child(name = "category", type = { CodeType.class }, order = 7, min = 0, max = 1, modifier = false, summary = true)
1189  @Description(shortDefinition = "consequence | currency | notification", formalDefinition = "The impact of the content of the message.")
1190  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/message-significance-category")
1191  protected Enumeration<MessageSignificanceCategory> category;
1192
1193  /**
1194   * Identifies the resource (or resources) that are being addressed by the event.
1195   * For example, the Encounter for an admit message or two Account records for a
1196   * merge.
1197   */
1198  @Child(name = "focus", type = {}, order = 8, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
1199  @Description(shortDefinition = "Resource(s) that are the subject of the event", formalDefinition = "Identifies the resource (or resources) that are being addressed by the event.  For example, the Encounter for an admit message or two Account records for a merge.")
1200  protected List<MessageDefinitionFocusComponent> focus;
1201
1202  /**
1203   * Declare at a message definition level whether a response is required or only
1204   * upon error or success, or never.
1205   */
1206  @Child(name = "responseRequired", type = {
1207      CodeType.class }, order = 9, min = 0, max = 1, modifier = false, summary = false)
1208  @Description(shortDefinition = "always | on-error | never | on-success", formalDefinition = "Declare at a message definition level whether a response is required or only upon error or success, or never.")
1209  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/messageheader-response-request")
1210  protected Enumeration<MessageheaderResponseRequest> responseRequired;
1211
1212  /**
1213   * Indicates what types of messages may be sent as an application-level response
1214   * to this message.
1215   */
1216  @Child(name = "allowedResponse", type = {}, order = 10, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1217  @Description(shortDefinition = "Responses to this message", formalDefinition = "Indicates what types of messages may be sent as an application-level response to this message.")
1218  protected List<MessageDefinitionAllowedResponseComponent> allowedResponse;
1219
1220  /**
1221   * Canonical reference to a GraphDefinition. If a URL is provided, it is the
1222   * canonical reference to a [[[GraphDefinition]]] that it controls what
1223   * resources are to be added to the bundle when building the document. The
1224   * GraphDefinition can also specify profiles that apply to the various
1225   * resources.
1226   */
1227  @Child(name = "graph", type = {
1228      CanonicalType.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1229  @Description(shortDefinition = "Canonical reference to a GraphDefinition", formalDefinition = "Canonical reference to a GraphDefinition. If a URL is provided, it is the canonical reference to a [[[GraphDefinition]]] that it controls what resources are to be added to the bundle when building the document. The GraphDefinition can also specify profiles that apply to the various resources.")
1230  protected List<CanonicalType> graph;
1231
1232  private static final long serialVersionUID = 927775347L;
1233
1234  /**
1235   * Constructor
1236   */
1237  public MessageDefinition() {
1238    super();
1239  }
1240
1241  /**
1242   * Constructor
1243   */
1244  public MessageDefinition(Enumeration<PublicationStatus> status, DateTimeType date, Type event) {
1245    super();
1246    this.status = status;
1247    this.date = date;
1248    this.event = event;
1249  }
1250
1251  /**
1252   * @return {@link #url} (The business identifier that is used to reference the
1253   *         MessageDefinition and *is* expected to be consistent from server to
1254   *         server.). This is the underlying object with id, value and
1255   *         extensions. The accessor "getUrl" gives direct access to the value
1256   */
1257  public UriType getUrlElement() {
1258    if (this.url == null)
1259      if (Configuration.errorOnAutoCreate())
1260        throw new Error("Attempt to auto-create MessageDefinition.url");
1261      else if (Configuration.doAutoCreate())
1262        this.url = new UriType(); // bb
1263    return this.url;
1264  }
1265
1266  public boolean hasUrlElement() {
1267    return this.url != null && !this.url.isEmpty();
1268  }
1269
1270  public boolean hasUrl() {
1271    return this.url != null && !this.url.isEmpty();
1272  }
1273
1274  /**
1275   * @param value {@link #url} (The business identifier that is used to reference
1276   *              the MessageDefinition and *is* expected to be consistent from
1277   *              server to server.). This is the underlying object with id, value
1278   *              and extensions. The accessor "getUrl" gives direct access to the
1279   *              value
1280   */
1281  public MessageDefinition setUrlElement(UriType value) {
1282    this.url = value;
1283    return this;
1284  }
1285
1286  /**
1287   * @return The business identifier that is used to reference the
1288   *         MessageDefinition and *is* expected to be consistent from server to
1289   *         server.
1290   */
1291  public String getUrl() {
1292    return this.url == null ? null : this.url.getValue();
1293  }
1294
1295  /**
1296   * @param value The business identifier that is used to reference the
1297   *              MessageDefinition and *is* expected to be consistent from server
1298   *              to server.
1299   */
1300  public MessageDefinition setUrl(String value) {
1301    if (Utilities.noString(value))
1302      this.url = null;
1303    else {
1304      if (this.url == null)
1305        this.url = new UriType();
1306      this.url.setValue(value);
1307    }
1308    return this;
1309  }
1310
1311  /**
1312   * @return {@link #identifier} (A formal identifier that is used to identify
1313   *         this message definition when it is represented in other formats, or
1314   *         referenced in a specification, model, design or an instance.)
1315   */
1316  public List<Identifier> getIdentifier() {
1317    if (this.identifier == null)
1318      this.identifier = new ArrayList<Identifier>();
1319    return this.identifier;
1320  }
1321
1322  /**
1323   * @return Returns a reference to <code>this</code> for easy method chaining
1324   */
1325  public MessageDefinition setIdentifier(List<Identifier> theIdentifier) {
1326    this.identifier = theIdentifier;
1327    return this;
1328  }
1329
1330  public boolean hasIdentifier() {
1331    if (this.identifier == null)
1332      return false;
1333    for (Identifier item : this.identifier)
1334      if (!item.isEmpty())
1335        return true;
1336    return false;
1337  }
1338
1339  public Identifier addIdentifier() { // 3
1340    Identifier t = new Identifier();
1341    if (this.identifier == null)
1342      this.identifier = new ArrayList<Identifier>();
1343    this.identifier.add(t);
1344    return t;
1345  }
1346
1347  public MessageDefinition addIdentifier(Identifier t) { // 3
1348    if (t == null)
1349      return this;
1350    if (this.identifier == null)
1351      this.identifier = new ArrayList<Identifier>();
1352    this.identifier.add(t);
1353    return this;
1354  }
1355
1356  /**
1357   * @return The first repetition of repeating field {@link #identifier}, creating
1358   *         it if it does not already exist
1359   */
1360  public Identifier getIdentifierFirstRep() {
1361    if (getIdentifier().isEmpty()) {
1362      addIdentifier();
1363    }
1364    return getIdentifier().get(0);
1365  }
1366
1367  /**
1368   * @return {@link #version} (The identifier that is used to identify this
1369   *         version of the message definition when it is referenced in a
1370   *         specification, model, design or instance. This is an arbitrary value
1371   *         managed by the message definition author and is not expected to be
1372   *         globally unique. For example, it might be a timestamp (e.g. yyyymmdd)
1373   *         if a managed version is not available. There is also no expectation
1374   *         that versions can be placed in a lexicographical sequence.). This is
1375   *         the underlying object with id, value and extensions. The accessor
1376   *         "getVersion" gives direct access to the value
1377   */
1378  public StringType getVersionElement() {
1379    if (this.version == null)
1380      if (Configuration.errorOnAutoCreate())
1381        throw new Error("Attempt to auto-create MessageDefinition.version");
1382      else if (Configuration.doAutoCreate())
1383        this.version = new StringType(); // bb
1384    return this.version;
1385  }
1386
1387  public boolean hasVersionElement() {
1388    return this.version != null && !this.version.isEmpty();
1389  }
1390
1391  public boolean hasVersion() {
1392    return this.version != null && !this.version.isEmpty();
1393  }
1394
1395  /**
1396   * @param value {@link #version} (The identifier that is used to identify this
1397   *              version of the message definition when it is referenced in a
1398   *              specification, model, design or instance. This is an arbitrary
1399   *              value managed by the message definition author and is not
1400   *              expected to be globally unique. For example, it might be a
1401   *              timestamp (e.g. yyyymmdd) if a managed version is not available.
1402   *              There is also no expectation that versions can be placed in a
1403   *              lexicographical sequence.). This is the underlying object with
1404   *              id, value and extensions. The accessor "getVersion" gives direct
1405   *              access to the value
1406   */
1407  public MessageDefinition setVersionElement(StringType value) {
1408    this.version = value;
1409    return this;
1410  }
1411
1412  /**
1413   * @return The identifier that is used to identify this version of the message
1414   *         definition when it is referenced in a specification, model, design or
1415   *         instance. This is an arbitrary value managed by the message
1416   *         definition author and is not expected to be globally unique. For
1417   *         example, it might be a timestamp (e.g. yyyymmdd) if a managed version
1418   *         is not available. There is also no expectation that versions can be
1419   *         placed in a lexicographical sequence.
1420   */
1421  public String getVersion() {
1422    return this.version == null ? null : this.version.getValue();
1423  }
1424
1425  /**
1426   * @param value The identifier that is used to identify this version of the
1427   *              message definition when it is referenced in a specification,
1428   *              model, design or instance. This is an arbitrary value managed by
1429   *              the message definition author and is not expected to be globally
1430   *              unique. For example, it might be a timestamp (e.g. yyyymmdd) if
1431   *              a managed version is not available. There is also no expectation
1432   *              that versions can be placed in a lexicographical sequence.
1433   */
1434  public MessageDefinition setVersion(String value) {
1435    if (Utilities.noString(value))
1436      this.version = null;
1437    else {
1438      if (this.version == null)
1439        this.version = new StringType();
1440      this.version.setValue(value);
1441    }
1442    return this;
1443  }
1444
1445  /**
1446   * @return {@link #name} (A natural language name identifying the message
1447   *         definition. This name should be usable as an identifier for the
1448   *         module by machine processing applications such as code generation.).
1449   *         This is the underlying object with id, value and extensions. The
1450   *         accessor "getName" gives direct access to the value
1451   */
1452  public StringType getNameElement() {
1453    if (this.name == null)
1454      if (Configuration.errorOnAutoCreate())
1455        throw new Error("Attempt to auto-create MessageDefinition.name");
1456      else if (Configuration.doAutoCreate())
1457        this.name = new StringType(); // bb
1458    return this.name;
1459  }
1460
1461  public boolean hasNameElement() {
1462    return this.name != null && !this.name.isEmpty();
1463  }
1464
1465  public boolean hasName() {
1466    return this.name != null && !this.name.isEmpty();
1467  }
1468
1469  /**
1470   * @param value {@link #name} (A natural language name identifying the message
1471   *              definition. This name should be usable as an identifier for the
1472   *              module by machine processing applications such as code
1473   *              generation.). This is the underlying object with id, value and
1474   *              extensions. The accessor "getName" gives direct access to the
1475   *              value
1476   */
1477  public MessageDefinition setNameElement(StringType value) {
1478    this.name = value;
1479    return this;
1480  }
1481
1482  /**
1483   * @return A natural language name identifying the message definition. This name
1484   *         should be usable as an identifier for the module by machine
1485   *         processing applications such as code generation.
1486   */
1487  public String getName() {
1488    return this.name == null ? null : this.name.getValue();
1489  }
1490
1491  /**
1492   * @param value A natural language name identifying the message definition. This
1493   *              name should be usable as an identifier for the module by machine
1494   *              processing applications such as code generation.
1495   */
1496  public MessageDefinition setName(String value) {
1497    if (Utilities.noString(value))
1498      this.name = null;
1499    else {
1500      if (this.name == null)
1501        this.name = new StringType();
1502      this.name.setValue(value);
1503    }
1504    return this;
1505  }
1506
1507  /**
1508   * @return {@link #title} (A short, descriptive, user-friendly title for the
1509   *         message definition.). This is the underlying object with id, value
1510   *         and extensions. The accessor "getTitle" gives direct access to the
1511   *         value
1512   */
1513  public StringType getTitleElement() {
1514    if (this.title == null)
1515      if (Configuration.errorOnAutoCreate())
1516        throw new Error("Attempt to auto-create MessageDefinition.title");
1517      else if (Configuration.doAutoCreate())
1518        this.title = new StringType(); // bb
1519    return this.title;
1520  }
1521
1522  public boolean hasTitleElement() {
1523    return this.title != null && !this.title.isEmpty();
1524  }
1525
1526  public boolean hasTitle() {
1527    return this.title != null && !this.title.isEmpty();
1528  }
1529
1530  /**
1531   * @param value {@link #title} (A short, descriptive, user-friendly title for
1532   *              the message definition.). This is the underlying object with id,
1533   *              value and extensions. The accessor "getTitle" gives direct
1534   *              access to the value
1535   */
1536  public MessageDefinition setTitleElement(StringType value) {
1537    this.title = value;
1538    return this;
1539  }
1540
1541  /**
1542   * @return A short, descriptive, user-friendly title for the message definition.
1543   */
1544  public String getTitle() {
1545    return this.title == null ? null : this.title.getValue();
1546  }
1547
1548  /**
1549   * @param value A short, descriptive, user-friendly title for the message
1550   *              definition.
1551   */
1552  public MessageDefinition setTitle(String value) {
1553    if (Utilities.noString(value))
1554      this.title = null;
1555    else {
1556      if (this.title == null)
1557        this.title = new StringType();
1558      this.title.setValue(value);
1559    }
1560    return this;
1561  }
1562
1563  /**
1564   * @return {@link #replaces} (A MessageDefinition that is superseded by this
1565   *         definition.)
1566   */
1567  public List<CanonicalType> getReplaces() {
1568    if (this.replaces == null)
1569      this.replaces = new ArrayList<CanonicalType>();
1570    return this.replaces;
1571  }
1572
1573  /**
1574   * @return Returns a reference to <code>this</code> for easy method chaining
1575   */
1576  public MessageDefinition setReplaces(List<CanonicalType> theReplaces) {
1577    this.replaces = theReplaces;
1578    return this;
1579  }
1580
1581  public boolean hasReplaces() {
1582    if (this.replaces == null)
1583      return false;
1584    for (CanonicalType item : this.replaces)
1585      if (!item.isEmpty())
1586        return true;
1587    return false;
1588  }
1589
1590  /**
1591   * @return {@link #replaces} (A MessageDefinition that is superseded by this
1592   *         definition.)
1593   */
1594  public CanonicalType addReplacesElement() {// 2
1595    CanonicalType t = new CanonicalType();
1596    if (this.replaces == null)
1597      this.replaces = new ArrayList<CanonicalType>();
1598    this.replaces.add(t);
1599    return t;
1600  }
1601
1602  /**
1603   * @param value {@link #replaces} (A MessageDefinition that is superseded by
1604   *              this definition.)
1605   */
1606  public MessageDefinition addReplaces(String value) { // 1
1607    CanonicalType t = new CanonicalType();
1608    t.setValue(value);
1609    if (this.replaces == null)
1610      this.replaces = new ArrayList<CanonicalType>();
1611    this.replaces.add(t);
1612    return this;
1613  }
1614
1615  /**
1616   * @param value {@link #replaces} (A MessageDefinition that is superseded by
1617   *              this definition.)
1618   */
1619  public boolean hasReplaces(String value) {
1620    if (this.replaces == null)
1621      return false;
1622    for (CanonicalType v : this.replaces)
1623      if (v.getValue().equals(value)) // canonical(MessageDefinition)
1624        return true;
1625    return false;
1626  }
1627
1628  /**
1629   * @return {@link #status} (The status of this message definition. Enables
1630   *         tracking the life-cycle of the content.). This is the underlying
1631   *         object with id, value and extensions. The accessor "getStatus" gives
1632   *         direct access to the value
1633   */
1634  public Enumeration<PublicationStatus> getStatusElement() {
1635    if (this.status == null)
1636      if (Configuration.errorOnAutoCreate())
1637        throw new Error("Attempt to auto-create MessageDefinition.status");
1638      else if (Configuration.doAutoCreate())
1639        this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
1640    return this.status;
1641  }
1642
1643  public boolean hasStatusElement() {
1644    return this.status != null && !this.status.isEmpty();
1645  }
1646
1647  public boolean hasStatus() {
1648    return this.status != null && !this.status.isEmpty();
1649  }
1650
1651  /**
1652   * @param value {@link #status} (The status of this message definition. Enables
1653   *              tracking the life-cycle of the content.). This is the underlying
1654   *              object with id, value and extensions. The accessor "getStatus"
1655   *              gives direct access to the value
1656   */
1657  public MessageDefinition setStatusElement(Enumeration<PublicationStatus> value) {
1658    this.status = value;
1659    return this;
1660  }
1661
1662  /**
1663   * @return The status of this message definition. Enables tracking the
1664   *         life-cycle of the content.
1665   */
1666  public PublicationStatus getStatus() {
1667    return this.status == null ? null : this.status.getValue();
1668  }
1669
1670  /**
1671   * @param value The status of this message definition. Enables tracking the
1672   *              life-cycle of the content.
1673   */
1674  public MessageDefinition setStatus(PublicationStatus value) {
1675    if (this.status == null)
1676      this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
1677    this.status.setValue(value);
1678    return this;
1679  }
1680
1681  /**
1682   * @return {@link #experimental} (A Boolean value to indicate that this message
1683   *         definition is authored for testing purposes (or
1684   *         education/evaluation/marketing) and is not intended to be used for
1685   *         genuine usage.). This is the underlying object with id, value and
1686   *         extensions. The accessor "getExperimental" gives direct access to the
1687   *         value
1688   */
1689  public BooleanType getExperimentalElement() {
1690    if (this.experimental == null)
1691      if (Configuration.errorOnAutoCreate())
1692        throw new Error("Attempt to auto-create MessageDefinition.experimental");
1693      else if (Configuration.doAutoCreate())
1694        this.experimental = new BooleanType(); // bb
1695    return this.experimental;
1696  }
1697
1698  public boolean hasExperimentalElement() {
1699    return this.experimental != null && !this.experimental.isEmpty();
1700  }
1701
1702  public boolean hasExperimental() {
1703    return this.experimental != null && !this.experimental.isEmpty();
1704  }
1705
1706  /**
1707   * @param value {@link #experimental} (A Boolean value to indicate that this
1708   *              message definition is authored for testing purposes (or
1709   *              education/evaluation/marketing) and is not intended to be used
1710   *              for genuine usage.). This is the underlying object with id,
1711   *              value and extensions. The accessor "getExperimental" gives
1712   *              direct access to the value
1713   */
1714  public MessageDefinition setExperimentalElement(BooleanType value) {
1715    this.experimental = value;
1716    return this;
1717  }
1718
1719  /**
1720   * @return A Boolean value to indicate that this message definition is authored
1721   *         for testing purposes (or education/evaluation/marketing) and is not
1722   *         intended to be used for genuine usage.
1723   */
1724  public boolean getExperimental() {
1725    return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
1726  }
1727
1728  /**
1729   * @param value A Boolean value to indicate that this message definition is
1730   *              authored for testing purposes (or
1731   *              education/evaluation/marketing) and is not intended to be used
1732   *              for genuine usage.
1733   */
1734  public MessageDefinition setExperimental(boolean value) {
1735    if (this.experimental == null)
1736      this.experimental = new BooleanType();
1737    this.experimental.setValue(value);
1738    return this;
1739  }
1740
1741  /**
1742   * @return {@link #date} (The date (and optionally time) when the message
1743   *         definition was published. The date must change when the business
1744   *         version changes and it must change if the status code changes. In
1745   *         addition, it should change when the substantive content of the
1746   *         message definition changes.). This is the underlying object with id,
1747   *         value and extensions. The accessor "getDate" gives direct access to
1748   *         the value
1749   */
1750  public DateTimeType getDateElement() {
1751    if (this.date == null)
1752      if (Configuration.errorOnAutoCreate())
1753        throw new Error("Attempt to auto-create MessageDefinition.date");
1754      else if (Configuration.doAutoCreate())
1755        this.date = new DateTimeType(); // bb
1756    return this.date;
1757  }
1758
1759  public boolean hasDateElement() {
1760    return this.date != null && !this.date.isEmpty();
1761  }
1762
1763  public boolean hasDate() {
1764    return this.date != null && !this.date.isEmpty();
1765  }
1766
1767  /**
1768   * @param value {@link #date} (The date (and optionally time) when the message
1769   *              definition was published. The date must change when the business
1770   *              version changes and it must change if the status code changes.
1771   *              In addition, it should change when the substantive content of
1772   *              the message definition changes.). This is the underlying object
1773   *              with id, value and extensions. The accessor "getDate" gives
1774   *              direct access to the value
1775   */
1776  public MessageDefinition setDateElement(DateTimeType value) {
1777    this.date = value;
1778    return this;
1779  }
1780
1781  /**
1782   * @return The date (and optionally time) when the message definition was
1783   *         published. The date must change when the business version changes and
1784   *         it must change if the status code changes. In addition, it should
1785   *         change when the substantive content of the message definition
1786   *         changes.
1787   */
1788  public Date getDate() {
1789    return this.date == null ? null : this.date.getValue();
1790  }
1791
1792  /**
1793   * @param value The date (and optionally time) when the message definition was
1794   *              published. The date must change when the business version
1795   *              changes and it must change if the status code changes. In
1796   *              addition, it should change when the substantive content of the
1797   *              message definition changes.
1798   */
1799  public MessageDefinition setDate(Date value) {
1800    if (this.date == null)
1801      this.date = new DateTimeType();
1802    this.date.setValue(value);
1803    return this;
1804  }
1805
1806  /**
1807   * @return {@link #publisher} (The name of the organization or individual that
1808   *         published the message definition.). This is the underlying object
1809   *         with id, value and extensions. The accessor "getPublisher" gives
1810   *         direct access to the value
1811   */
1812  public StringType getPublisherElement() {
1813    if (this.publisher == null)
1814      if (Configuration.errorOnAutoCreate())
1815        throw new Error("Attempt to auto-create MessageDefinition.publisher");
1816      else if (Configuration.doAutoCreate())
1817        this.publisher = new StringType(); // bb
1818    return this.publisher;
1819  }
1820
1821  public boolean hasPublisherElement() {
1822    return this.publisher != null && !this.publisher.isEmpty();
1823  }
1824
1825  public boolean hasPublisher() {
1826    return this.publisher != null && !this.publisher.isEmpty();
1827  }
1828
1829  /**
1830   * @param value {@link #publisher} (The name of the organization or individual
1831   *              that published the message definition.). This is the underlying
1832   *              object with id, value and extensions. The accessor
1833   *              "getPublisher" gives direct access to the value
1834   */
1835  public MessageDefinition setPublisherElement(StringType value) {
1836    this.publisher = value;
1837    return this;
1838  }
1839
1840  /**
1841   * @return The name of the organization or individual that published the message
1842   *         definition.
1843   */
1844  public String getPublisher() {
1845    return this.publisher == null ? null : this.publisher.getValue();
1846  }
1847
1848  /**
1849   * @param value The name of the organization or individual that published the
1850   *              message definition.
1851   */
1852  public MessageDefinition setPublisher(String value) {
1853    if (Utilities.noString(value))
1854      this.publisher = null;
1855    else {
1856      if (this.publisher == null)
1857        this.publisher = new StringType();
1858      this.publisher.setValue(value);
1859    }
1860    return this;
1861  }
1862
1863  /**
1864   * @return {@link #contact} (Contact details to assist a user in finding and
1865   *         communicating with the publisher.)
1866   */
1867  public List<ContactDetail> getContact() {
1868    if (this.contact == null)
1869      this.contact = new ArrayList<ContactDetail>();
1870    return this.contact;
1871  }
1872
1873  /**
1874   * @return Returns a reference to <code>this</code> for easy method chaining
1875   */
1876  public MessageDefinition setContact(List<ContactDetail> theContact) {
1877    this.contact = theContact;
1878    return this;
1879  }
1880
1881  public boolean hasContact() {
1882    if (this.contact == null)
1883      return false;
1884    for (ContactDetail item : this.contact)
1885      if (!item.isEmpty())
1886        return true;
1887    return false;
1888  }
1889
1890  public ContactDetail addContact() { // 3
1891    ContactDetail t = new ContactDetail();
1892    if (this.contact == null)
1893      this.contact = new ArrayList<ContactDetail>();
1894    this.contact.add(t);
1895    return t;
1896  }
1897
1898  public MessageDefinition addContact(ContactDetail t) { // 3
1899    if (t == null)
1900      return this;
1901    if (this.contact == null)
1902      this.contact = new ArrayList<ContactDetail>();
1903    this.contact.add(t);
1904    return this;
1905  }
1906
1907  /**
1908   * @return The first repetition of repeating field {@link #contact}, creating it
1909   *         if it does not already exist
1910   */
1911  public ContactDetail getContactFirstRep() {
1912    if (getContact().isEmpty()) {
1913      addContact();
1914    }
1915    return getContact().get(0);
1916  }
1917
1918  /**
1919   * @return {@link #description} (A free text natural language description of the
1920   *         message definition from a consumer's perspective.). This is the
1921   *         underlying object with id, value and extensions. The accessor
1922   *         "getDescription" gives direct access to the value
1923   */
1924  public MarkdownType getDescriptionElement() {
1925    if (this.description == null)
1926      if (Configuration.errorOnAutoCreate())
1927        throw new Error("Attempt to auto-create MessageDefinition.description");
1928      else if (Configuration.doAutoCreate())
1929        this.description = new MarkdownType(); // bb
1930    return this.description;
1931  }
1932
1933  public boolean hasDescriptionElement() {
1934    return this.description != null && !this.description.isEmpty();
1935  }
1936
1937  public boolean hasDescription() {
1938    return this.description != null && !this.description.isEmpty();
1939  }
1940
1941  /**
1942   * @param value {@link #description} (A free text natural language description
1943   *              of the message definition from a consumer's perspective.). This
1944   *              is the underlying object with id, value and extensions. The
1945   *              accessor "getDescription" gives direct access to the value
1946   */
1947  public MessageDefinition setDescriptionElement(MarkdownType value) {
1948    this.description = value;
1949    return this;
1950  }
1951
1952  /**
1953   * @return A free text natural language description of the message definition
1954   *         from a consumer's perspective.
1955   */
1956  public String getDescription() {
1957    return this.description == null ? null : this.description.getValue();
1958  }
1959
1960  /**
1961   * @param value A free text natural language description of the message
1962   *              definition from a consumer's perspective.
1963   */
1964  public MessageDefinition setDescription(String value) {
1965    if (value == null)
1966      this.description = null;
1967    else {
1968      if (this.description == null)
1969        this.description = new MarkdownType();
1970      this.description.setValue(value);
1971    }
1972    return this;
1973  }
1974
1975  /**
1976   * @return {@link #useContext} (The content was developed with a focus and
1977   *         intent of supporting the contexts that are listed. These contexts may
1978   *         be general categories (gender, age, ...) or may be references to
1979   *         specific programs (insurance plans, studies, ...) and may be used to
1980   *         assist with indexing and searching for appropriate message definition
1981   *         instances.)
1982   */
1983  public List<UsageContext> getUseContext() {
1984    if (this.useContext == null)
1985      this.useContext = new ArrayList<UsageContext>();
1986    return this.useContext;
1987  }
1988
1989  /**
1990   * @return Returns a reference to <code>this</code> for easy method chaining
1991   */
1992  public MessageDefinition setUseContext(List<UsageContext> theUseContext) {
1993    this.useContext = theUseContext;
1994    return this;
1995  }
1996
1997  public boolean hasUseContext() {
1998    if (this.useContext == null)
1999      return false;
2000    for (UsageContext item : this.useContext)
2001      if (!item.isEmpty())
2002        return true;
2003    return false;
2004  }
2005
2006  public UsageContext addUseContext() { // 3
2007    UsageContext t = new UsageContext();
2008    if (this.useContext == null)
2009      this.useContext = new ArrayList<UsageContext>();
2010    this.useContext.add(t);
2011    return t;
2012  }
2013
2014  public MessageDefinition addUseContext(UsageContext t) { // 3
2015    if (t == null)
2016      return this;
2017    if (this.useContext == null)
2018      this.useContext = new ArrayList<UsageContext>();
2019    this.useContext.add(t);
2020    return this;
2021  }
2022
2023  /**
2024   * @return The first repetition of repeating field {@link #useContext}, creating
2025   *         it if it does not already exist
2026   */
2027  public UsageContext getUseContextFirstRep() {
2028    if (getUseContext().isEmpty()) {
2029      addUseContext();
2030    }
2031    return getUseContext().get(0);
2032  }
2033
2034  /**
2035   * @return {@link #jurisdiction} (A legal or geographic region in which the
2036   *         message definition is intended to be used.)
2037   */
2038  public List<CodeableConcept> getJurisdiction() {
2039    if (this.jurisdiction == null)
2040      this.jurisdiction = new ArrayList<CodeableConcept>();
2041    return this.jurisdiction;
2042  }
2043
2044  /**
2045   * @return Returns a reference to <code>this</code> for easy method chaining
2046   */
2047  public MessageDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) {
2048    this.jurisdiction = theJurisdiction;
2049    return this;
2050  }
2051
2052  public boolean hasJurisdiction() {
2053    if (this.jurisdiction == null)
2054      return false;
2055    for (CodeableConcept item : this.jurisdiction)
2056      if (!item.isEmpty())
2057        return true;
2058    return false;
2059  }
2060
2061  public CodeableConcept addJurisdiction() { // 3
2062    CodeableConcept t = new CodeableConcept();
2063    if (this.jurisdiction == null)
2064      this.jurisdiction = new ArrayList<CodeableConcept>();
2065    this.jurisdiction.add(t);
2066    return t;
2067  }
2068
2069  public MessageDefinition addJurisdiction(CodeableConcept t) { // 3
2070    if (t == null)
2071      return this;
2072    if (this.jurisdiction == null)
2073      this.jurisdiction = new ArrayList<CodeableConcept>();
2074    this.jurisdiction.add(t);
2075    return this;
2076  }
2077
2078  /**
2079   * @return The first repetition of repeating field {@link #jurisdiction},
2080   *         creating it if it does not already exist
2081   */
2082  public CodeableConcept getJurisdictionFirstRep() {
2083    if (getJurisdiction().isEmpty()) {
2084      addJurisdiction();
2085    }
2086    return getJurisdiction().get(0);
2087  }
2088
2089  /**
2090   * @return {@link #purpose} (Explanation of why this message definition is
2091   *         needed and why it has been designed as it has.). This is the
2092   *         underlying object with id, value and extensions. The accessor
2093   *         "getPurpose" gives direct access to the value
2094   */
2095  public MarkdownType getPurposeElement() {
2096    if (this.purpose == null)
2097      if (Configuration.errorOnAutoCreate())
2098        throw new Error("Attempt to auto-create MessageDefinition.purpose");
2099      else if (Configuration.doAutoCreate())
2100        this.purpose = new MarkdownType(); // bb
2101    return this.purpose;
2102  }
2103
2104  public boolean hasPurposeElement() {
2105    return this.purpose != null && !this.purpose.isEmpty();
2106  }
2107
2108  public boolean hasPurpose() {
2109    return this.purpose != null && !this.purpose.isEmpty();
2110  }
2111
2112  /**
2113   * @param value {@link #purpose} (Explanation of why this message definition is
2114   *              needed and why it has been designed as it has.). This is the
2115   *              underlying object with id, value and extensions. The accessor
2116   *              "getPurpose" gives direct access to the value
2117   */
2118  public MessageDefinition setPurposeElement(MarkdownType value) {
2119    this.purpose = value;
2120    return this;
2121  }
2122
2123  /**
2124   * @return Explanation of why this message definition is needed and why it has
2125   *         been designed as it has.
2126   */
2127  public String getPurpose() {
2128    return this.purpose == null ? null : this.purpose.getValue();
2129  }
2130
2131  /**
2132   * @param value Explanation of why this message definition is needed and why it
2133   *              has been designed as it has.
2134   */
2135  public MessageDefinition setPurpose(String value) {
2136    if (value == null)
2137      this.purpose = null;
2138    else {
2139      if (this.purpose == null)
2140        this.purpose = new MarkdownType();
2141      this.purpose.setValue(value);
2142    }
2143    return this;
2144  }
2145
2146  /**
2147   * @return {@link #copyright} (A copyright statement relating to the message
2148   *         definition and/or its contents. Copyright statements are generally
2149   *         legal restrictions on the use and publishing of the message
2150   *         definition.). This is the underlying object with id, value and
2151   *         extensions. The accessor "getCopyright" gives direct access to the
2152   *         value
2153   */
2154  public MarkdownType getCopyrightElement() {
2155    if (this.copyright == null)
2156      if (Configuration.errorOnAutoCreate())
2157        throw new Error("Attempt to auto-create MessageDefinition.copyright");
2158      else if (Configuration.doAutoCreate())
2159        this.copyright = new MarkdownType(); // bb
2160    return this.copyright;
2161  }
2162
2163  public boolean hasCopyrightElement() {
2164    return this.copyright != null && !this.copyright.isEmpty();
2165  }
2166
2167  public boolean hasCopyright() {
2168    return this.copyright != null && !this.copyright.isEmpty();
2169  }
2170
2171  /**
2172   * @param value {@link #copyright} (A copyright statement relating to the
2173   *              message definition and/or its contents. Copyright statements are
2174   *              generally legal restrictions on the use and publishing of the
2175   *              message definition.). This is the underlying object with id,
2176   *              value and extensions. The accessor "getCopyright" gives direct
2177   *              access to the value
2178   */
2179  public MessageDefinition setCopyrightElement(MarkdownType value) {
2180    this.copyright = value;
2181    return this;
2182  }
2183
2184  /**
2185   * @return A copyright statement relating to the message definition and/or its
2186   *         contents. Copyright statements are generally legal restrictions on
2187   *         the use and publishing of the message definition.
2188   */
2189  public String getCopyright() {
2190    return this.copyright == null ? null : this.copyright.getValue();
2191  }
2192
2193  /**
2194   * @param value A copyright statement relating to the message definition and/or
2195   *              its contents. Copyright statements are generally legal
2196   *              restrictions on the use and publishing of the message
2197   *              definition.
2198   */
2199  public MessageDefinition setCopyright(String value) {
2200    if (value == null)
2201      this.copyright = null;
2202    else {
2203      if (this.copyright == null)
2204        this.copyright = new MarkdownType();
2205      this.copyright.setValue(value);
2206    }
2207    return this;
2208  }
2209
2210  /**
2211   * @return {@link #base} (The MessageDefinition that is the basis for the
2212   *         contents of this resource.). This is the underlying object with id,
2213   *         value and extensions. The accessor "getBase" gives direct access to
2214   *         the value
2215   */
2216  public CanonicalType getBaseElement() {
2217    if (this.base == null)
2218      if (Configuration.errorOnAutoCreate())
2219        throw new Error("Attempt to auto-create MessageDefinition.base");
2220      else if (Configuration.doAutoCreate())
2221        this.base = new CanonicalType(); // bb
2222    return this.base;
2223  }
2224
2225  public boolean hasBaseElement() {
2226    return this.base != null && !this.base.isEmpty();
2227  }
2228
2229  public boolean hasBase() {
2230    return this.base != null && !this.base.isEmpty();
2231  }
2232
2233  /**
2234   * @param value {@link #base} (The MessageDefinition that is the basis for the
2235   *              contents of this resource.). This is the underlying object with
2236   *              id, value and extensions. The accessor "getBase" gives direct
2237   *              access to the value
2238   */
2239  public MessageDefinition setBaseElement(CanonicalType value) {
2240    this.base = value;
2241    return this;
2242  }
2243
2244  /**
2245   * @return The MessageDefinition that is the basis for the contents of this
2246   *         resource.
2247   */
2248  public String getBase() {
2249    return this.base == null ? null : this.base.getValue();
2250  }
2251
2252  /**
2253   * @param value The MessageDefinition that is the basis for the contents of this
2254   *              resource.
2255   */
2256  public MessageDefinition setBase(String value) {
2257    if (Utilities.noString(value))
2258      this.base = null;
2259    else {
2260      if (this.base == null)
2261        this.base = new CanonicalType();
2262      this.base.setValue(value);
2263    }
2264    return this;
2265  }
2266
2267  /**
2268   * @return {@link #parent} (Identifies a protocol or workflow that this
2269   *         MessageDefinition represents a step in.)
2270   */
2271  public List<CanonicalType> getParent() {
2272    if (this.parent == null)
2273      this.parent = new ArrayList<CanonicalType>();
2274    return this.parent;
2275  }
2276
2277  /**
2278   * @return Returns a reference to <code>this</code> for easy method chaining
2279   */
2280  public MessageDefinition setParent(List<CanonicalType> theParent) {
2281    this.parent = theParent;
2282    return this;
2283  }
2284
2285  public boolean hasParent() {
2286    if (this.parent == null)
2287      return false;
2288    for (CanonicalType item : this.parent)
2289      if (!item.isEmpty())
2290        return true;
2291    return false;
2292  }
2293
2294  /**
2295   * @return {@link #parent} (Identifies a protocol or workflow that this
2296   *         MessageDefinition represents a step in.)
2297   */
2298  public CanonicalType addParentElement() {// 2
2299    CanonicalType t = new CanonicalType();
2300    if (this.parent == null)
2301      this.parent = new ArrayList<CanonicalType>();
2302    this.parent.add(t);
2303    return t;
2304  }
2305
2306  /**
2307   * @param value {@link #parent} (Identifies a protocol or workflow that this
2308   *              MessageDefinition represents a step in.)
2309   */
2310  public MessageDefinition addParent(String value) { // 1
2311    CanonicalType t = new CanonicalType();
2312    t.setValue(value);
2313    if (this.parent == null)
2314      this.parent = new ArrayList<CanonicalType>();
2315    this.parent.add(t);
2316    return this;
2317  }
2318
2319  /**
2320   * @param value {@link #parent} (Identifies a protocol or workflow that this
2321   *              MessageDefinition represents a step in.)
2322   */
2323  public boolean hasParent(String value) {
2324    if (this.parent == null)
2325      return false;
2326    for (CanonicalType v : this.parent)
2327      if (v.getValue().equals(value)) // canonical(ActivityDefinition|PlanDefinition)
2328        return true;
2329    return false;
2330  }
2331
2332  /**
2333   * @return {@link #event} (Event code or link to the EventDefinition.)
2334   */
2335  public Type getEvent() {
2336    return this.event;
2337  }
2338
2339  /**
2340   * @return {@link #event} (Event code or link to the EventDefinition.)
2341   */
2342  public Coding getEventCoding() throws FHIRException {
2343    if (this.event == null)
2344      this.event = new Coding();
2345    if (!(this.event instanceof Coding))
2346      throw new FHIRException(
2347          "Type mismatch: the type Coding was expected, but " + this.event.getClass().getName() + " was encountered");
2348    return (Coding) this.event;
2349  }
2350
2351  public boolean hasEventCoding() {
2352    return this != null && this.event instanceof Coding;
2353  }
2354
2355  /**
2356   * @return {@link #event} (Event code or link to the EventDefinition.)
2357   */
2358  public UriType getEventUriType() throws FHIRException {
2359    if (this.event == null)
2360      this.event = new UriType();
2361    if (!(this.event instanceof UriType))
2362      throw new FHIRException(
2363          "Type mismatch: the type UriType was expected, but " + this.event.getClass().getName() + " was encountered");
2364    return (UriType) this.event;
2365  }
2366
2367  public boolean hasEventUriType() {
2368    return this != null && this.event instanceof UriType;
2369  }
2370
2371  public boolean hasEvent() {
2372    return this.event != null && !this.event.isEmpty();
2373  }
2374
2375  /**
2376   * @param value {@link #event} (Event code or link to the EventDefinition.)
2377   */
2378  public MessageDefinition setEvent(Type value) {
2379    if (value != null && !(value instanceof Coding || value instanceof UriType))
2380      throw new Error("Not the right type for MessageDefinition.event[x]: " + value.fhirType());
2381    this.event = value;
2382    return this;
2383  }
2384
2385  /**
2386   * @return {@link #category} (The impact of the content of the message.). This
2387   *         is the underlying object with id, value and extensions. The accessor
2388   *         "getCategory" gives direct access to the value
2389   */
2390  public Enumeration<MessageSignificanceCategory> getCategoryElement() {
2391    if (this.category == null)
2392      if (Configuration.errorOnAutoCreate())
2393        throw new Error("Attempt to auto-create MessageDefinition.category");
2394      else if (Configuration.doAutoCreate())
2395        this.category = new Enumeration<MessageSignificanceCategory>(new MessageSignificanceCategoryEnumFactory()); // bb
2396    return this.category;
2397  }
2398
2399  public boolean hasCategoryElement() {
2400    return this.category != null && !this.category.isEmpty();
2401  }
2402
2403  public boolean hasCategory() {
2404    return this.category != null && !this.category.isEmpty();
2405  }
2406
2407  /**
2408   * @param value {@link #category} (The impact of the content of the message.).
2409   *              This is the underlying object with id, value and extensions. The
2410   *              accessor "getCategory" gives direct access to the value
2411   */
2412  public MessageDefinition setCategoryElement(Enumeration<MessageSignificanceCategory> value) {
2413    this.category = value;
2414    return this;
2415  }
2416
2417  /**
2418   * @return The impact of the content of the message.
2419   */
2420  public MessageSignificanceCategory getCategory() {
2421    return this.category == null ? null : this.category.getValue();
2422  }
2423
2424  /**
2425   * @param value The impact of the content of the message.
2426   */
2427  public MessageDefinition setCategory(MessageSignificanceCategory value) {
2428    if (value == null)
2429      this.category = null;
2430    else {
2431      if (this.category == null)
2432        this.category = new Enumeration<MessageSignificanceCategory>(new MessageSignificanceCategoryEnumFactory());
2433      this.category.setValue(value);
2434    }
2435    return this;
2436  }
2437
2438  /**
2439   * @return {@link #focus} (Identifies the resource (or resources) that are being
2440   *         addressed by the event. For example, the Encounter for an admit
2441   *         message or two Account records for a merge.)
2442   */
2443  public List<MessageDefinitionFocusComponent> getFocus() {
2444    if (this.focus == null)
2445      this.focus = new ArrayList<MessageDefinitionFocusComponent>();
2446    return this.focus;
2447  }
2448
2449  /**
2450   * @return Returns a reference to <code>this</code> for easy method chaining
2451   */
2452  public MessageDefinition setFocus(List<MessageDefinitionFocusComponent> theFocus) {
2453    this.focus = theFocus;
2454    return this;
2455  }
2456
2457  public boolean hasFocus() {
2458    if (this.focus == null)
2459      return false;
2460    for (MessageDefinitionFocusComponent item : this.focus)
2461      if (!item.isEmpty())
2462        return true;
2463    return false;
2464  }
2465
2466  public MessageDefinitionFocusComponent addFocus() { // 3
2467    MessageDefinitionFocusComponent t = new MessageDefinitionFocusComponent();
2468    if (this.focus == null)
2469      this.focus = new ArrayList<MessageDefinitionFocusComponent>();
2470    this.focus.add(t);
2471    return t;
2472  }
2473
2474  public MessageDefinition addFocus(MessageDefinitionFocusComponent t) { // 3
2475    if (t == null)
2476      return this;
2477    if (this.focus == null)
2478      this.focus = new ArrayList<MessageDefinitionFocusComponent>();
2479    this.focus.add(t);
2480    return this;
2481  }
2482
2483  /**
2484   * @return The first repetition of repeating field {@link #focus}, creating it
2485   *         if it does not already exist
2486   */
2487  public MessageDefinitionFocusComponent getFocusFirstRep() {
2488    if (getFocus().isEmpty()) {
2489      addFocus();
2490    }
2491    return getFocus().get(0);
2492  }
2493
2494  /**
2495   * @return {@link #responseRequired} (Declare at a message definition level
2496   *         whether a response is required or only upon error or success, or
2497   *         never.). This is the underlying object with id, value and extensions.
2498   *         The accessor "getResponseRequired" gives direct access to the value
2499   */
2500  public Enumeration<MessageheaderResponseRequest> getResponseRequiredElement() {
2501    if (this.responseRequired == null)
2502      if (Configuration.errorOnAutoCreate())
2503        throw new Error("Attempt to auto-create MessageDefinition.responseRequired");
2504      else if (Configuration.doAutoCreate())
2505        this.responseRequired = new Enumeration<MessageheaderResponseRequest>(
2506            new MessageheaderResponseRequestEnumFactory()); // bb
2507    return this.responseRequired;
2508  }
2509
2510  public boolean hasResponseRequiredElement() {
2511    return this.responseRequired != null && !this.responseRequired.isEmpty();
2512  }
2513
2514  public boolean hasResponseRequired() {
2515    return this.responseRequired != null && !this.responseRequired.isEmpty();
2516  }
2517
2518  /**
2519   * @param value {@link #responseRequired} (Declare at a message definition level
2520   *              whether a response is required or only upon error or success, or
2521   *              never.). This is the underlying object with id, value and
2522   *              extensions. The accessor "getResponseRequired" gives direct
2523   *              access to the value
2524   */
2525  public MessageDefinition setResponseRequiredElement(Enumeration<MessageheaderResponseRequest> value) {
2526    this.responseRequired = value;
2527    return this;
2528  }
2529
2530  /**
2531   * @return Declare at a message definition level whether a response is required
2532   *         or only upon error or success, or never.
2533   */
2534  public MessageheaderResponseRequest getResponseRequired() {
2535    return this.responseRequired == null ? null : this.responseRequired.getValue();
2536  }
2537
2538  /**
2539   * @param value Declare at a message definition level whether a response is
2540   *              required or only upon error or success, or never.
2541   */
2542  public MessageDefinition setResponseRequired(MessageheaderResponseRequest value) {
2543    if (value == null)
2544      this.responseRequired = null;
2545    else {
2546      if (this.responseRequired == null)
2547        this.responseRequired = new Enumeration<MessageheaderResponseRequest>(
2548            new MessageheaderResponseRequestEnumFactory());
2549      this.responseRequired.setValue(value);
2550    }
2551    return this;
2552  }
2553
2554  /**
2555   * @return {@link #allowedResponse} (Indicates what types of messages may be
2556   *         sent as an application-level response to this message.)
2557   */
2558  public List<MessageDefinitionAllowedResponseComponent> getAllowedResponse() {
2559    if (this.allowedResponse == null)
2560      this.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
2561    return this.allowedResponse;
2562  }
2563
2564  /**
2565   * @return Returns a reference to <code>this</code> for easy method chaining
2566   */
2567  public MessageDefinition setAllowedResponse(List<MessageDefinitionAllowedResponseComponent> theAllowedResponse) {
2568    this.allowedResponse = theAllowedResponse;
2569    return this;
2570  }
2571
2572  public boolean hasAllowedResponse() {
2573    if (this.allowedResponse == null)
2574      return false;
2575    for (MessageDefinitionAllowedResponseComponent item : this.allowedResponse)
2576      if (!item.isEmpty())
2577        return true;
2578    return false;
2579  }
2580
2581  public MessageDefinitionAllowedResponseComponent addAllowedResponse() { // 3
2582    MessageDefinitionAllowedResponseComponent t = new MessageDefinitionAllowedResponseComponent();
2583    if (this.allowedResponse == null)
2584      this.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
2585    this.allowedResponse.add(t);
2586    return t;
2587  }
2588
2589  public MessageDefinition addAllowedResponse(MessageDefinitionAllowedResponseComponent t) { // 3
2590    if (t == null)
2591      return this;
2592    if (this.allowedResponse == null)
2593      this.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
2594    this.allowedResponse.add(t);
2595    return this;
2596  }
2597
2598  /**
2599   * @return The first repetition of repeating field {@link #allowedResponse},
2600   *         creating it if it does not already exist
2601   */
2602  public MessageDefinitionAllowedResponseComponent getAllowedResponseFirstRep() {
2603    if (getAllowedResponse().isEmpty()) {
2604      addAllowedResponse();
2605    }
2606    return getAllowedResponse().get(0);
2607  }
2608
2609  /**
2610   * @return {@link #graph} (Canonical reference to a GraphDefinition. If a URL is
2611   *         provided, it is the canonical reference to a [[[GraphDefinition]]]
2612   *         that it controls what resources are to be added to the bundle when
2613   *         building the document. The GraphDefinition can also specify profiles
2614   *         that apply to the various resources.)
2615   */
2616  public List<CanonicalType> getGraph() {
2617    if (this.graph == null)
2618      this.graph = new ArrayList<CanonicalType>();
2619    return this.graph;
2620  }
2621
2622  /**
2623   * @return Returns a reference to <code>this</code> for easy method chaining
2624   */
2625  public MessageDefinition setGraph(List<CanonicalType> theGraph) {
2626    this.graph = theGraph;
2627    return this;
2628  }
2629
2630  public boolean hasGraph() {
2631    if (this.graph == null)
2632      return false;
2633    for (CanonicalType item : this.graph)
2634      if (!item.isEmpty())
2635        return true;
2636    return false;
2637  }
2638
2639  /**
2640   * @return {@link #graph} (Canonical reference to a GraphDefinition. If a URL is
2641   *         provided, it is the canonical reference to a [[[GraphDefinition]]]
2642   *         that it controls what resources are to be added to the bundle when
2643   *         building the document. The GraphDefinition can also specify profiles
2644   *         that apply to the various resources.)
2645   */
2646  public CanonicalType addGraphElement() {// 2
2647    CanonicalType t = new CanonicalType();
2648    if (this.graph == null)
2649      this.graph = new ArrayList<CanonicalType>();
2650    this.graph.add(t);
2651    return t;
2652  }
2653
2654  /**
2655   * @param value {@link #graph} (Canonical reference to a GraphDefinition. If a
2656   *              URL is provided, it is the canonical reference to a
2657   *              [[[GraphDefinition]]] that it controls what resources are to be
2658   *              added to the bundle when building the document. The
2659   *              GraphDefinition can also specify profiles that apply to the
2660   *              various resources.)
2661   */
2662  public MessageDefinition addGraph(String value) { // 1
2663    CanonicalType t = new CanonicalType();
2664    t.setValue(value);
2665    if (this.graph == null)
2666      this.graph = new ArrayList<CanonicalType>();
2667    this.graph.add(t);
2668    return this;
2669  }
2670
2671  /**
2672   * @param value {@link #graph} (Canonical reference to a GraphDefinition. If a
2673   *              URL is provided, it is the canonical reference to a
2674   *              [[[GraphDefinition]]] that it controls what resources are to be
2675   *              added to the bundle when building the document. The
2676   *              GraphDefinition can also specify profiles that apply to the
2677   *              various resources.)
2678   */
2679  public boolean hasGraph(String value) {
2680    if (this.graph == null)
2681      return false;
2682    for (CanonicalType v : this.graph)
2683      if (v.getValue().equals(value)) // canonical(GraphDefinition)
2684        return true;
2685    return false;
2686  }
2687
2688  protected void listChildren(List<Property> children) {
2689    super.listChildren(children);
2690    children.add(new Property("url", "uri",
2691        "The business identifier that is used to reference the MessageDefinition and *is* expected to be consistent from server to server.",
2692        0, 1, url));
2693    children.add(new Property("identifier", "Identifier",
2694        "A formal identifier that is used to identify this message definition when it is represented in other formats, or referenced in a specification, model, design or an instance.",
2695        0, java.lang.Integer.MAX_VALUE, identifier));
2696    children.add(new Property("version", "string",
2697        "The identifier that is used to identify this version of the message definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the message definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.",
2698        0, 1, version));
2699    children.add(new Property("name", "string",
2700        "A natural language name identifying the message definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.",
2701        0, 1, name));
2702    children.add(new Property("title", "string",
2703        "A short, descriptive, user-friendly title for the message definition.", 0, 1, title));
2704    children.add(new Property("replaces", "canonical(MessageDefinition)",
2705        "A MessageDefinition that is superseded by this definition.", 0, java.lang.Integer.MAX_VALUE, replaces));
2706    children.add(new Property("status", "code",
2707        "The status of this message definition. Enables tracking the life-cycle of the content.", 0, 1, status));
2708    children.add(new Property("experimental", "boolean",
2709        "A Boolean value to indicate that this message definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.",
2710        0, 1, experimental));
2711    children.add(new Property("date", "dateTime",
2712        "The date  (and optionally time) when the message definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the message definition changes.",
2713        0, 1, date));
2714    children.add(new Property("publisher", "string",
2715        "The name of the organization or individual that published the message definition.", 0, 1, publisher));
2716    children.add(new Property("contact", "ContactDetail",
2717        "Contact details to assist a user in finding and communicating with the publisher.", 0,
2718        java.lang.Integer.MAX_VALUE, contact));
2719    children.add(new Property("description", "markdown",
2720        "A free text natural language description of the message definition from a consumer's perspective.", 0, 1,
2721        description));
2722    children.add(new Property("useContext", "UsageContext",
2723        "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate message definition instances.",
2724        0, java.lang.Integer.MAX_VALUE, useContext));
2725    children.add(new Property("jurisdiction", "CodeableConcept",
2726        "A legal or geographic region in which the message definition is intended to be used.", 0,
2727        java.lang.Integer.MAX_VALUE, jurisdiction));
2728    children.add(new Property("purpose", "markdown",
2729        "Explanation of why this message definition is needed and why it has been designed as it has.", 0, 1, purpose));
2730    children.add(new Property("copyright", "markdown",
2731        "A copyright statement relating to the message definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the message definition.",
2732        0, 1, copyright));
2733    children.add(new Property("base", "canonical(MessageDefinition)",
2734        "The MessageDefinition that is the basis for the contents of this resource.", 0, 1, base));
2735    children.add(new Property("parent", "canonical(ActivityDefinition|PlanDefinition)",
2736        "Identifies a protocol or workflow that this MessageDefinition represents a step in.", 0,
2737        java.lang.Integer.MAX_VALUE, parent));
2738    children.add(new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1, event));
2739    children.add(new Property("category", "code", "The impact of the content of the message.", 0, 1, category));
2740    children.add(new Property("focus", "",
2741        "Identifies the resource (or resources) that are being addressed by the event.  For example, the Encounter for an admit message or two Account records for a merge.",
2742        0, java.lang.Integer.MAX_VALUE, focus));
2743    children.add(new Property("responseRequired", "code",
2744        "Declare at a message definition level whether a response is required or only upon error or success, or never.",
2745        0, 1, responseRequired));
2746    children.add(new Property("allowedResponse", "",
2747        "Indicates what types of messages may be sent as an application-level response to this message.", 0,
2748        java.lang.Integer.MAX_VALUE, allowedResponse));
2749    children.add(new Property("graph", "canonical(GraphDefinition)",
2750        "Canonical reference to a GraphDefinition. If a URL is provided, it is the canonical reference to a [[[GraphDefinition]]] that it controls what resources are to be added to the bundle when building the document. The GraphDefinition can also specify profiles that apply to the various resources.",
2751        0, java.lang.Integer.MAX_VALUE, graph));
2752  }
2753
2754  @Override
2755  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2756    switch (_hash) {
2757    case 116079:
2758      /* url */ return new Property("url", "uri",
2759          "The business identifier that is used to reference the MessageDefinition and *is* expected to be consistent from server to server.",
2760          0, 1, url);
2761    case -1618432855:
2762      /* identifier */ return new Property("identifier", "Identifier",
2763          "A formal identifier that is used to identify this message definition when it is represented in other formats, or referenced in a specification, model, design or an instance.",
2764          0, java.lang.Integer.MAX_VALUE, identifier);
2765    case 351608024:
2766      /* version */ return new Property("version", "string",
2767          "The identifier that is used to identify this version of the message definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the message definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.",
2768          0, 1, version);
2769    case 3373707:
2770      /* name */ return new Property("name", "string",
2771          "A natural language name identifying the message definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.",
2772          0, 1, name);
2773    case 110371416:
2774      /* title */ return new Property("title", "string",
2775          "A short, descriptive, user-friendly title for the message definition.", 0, 1, title);
2776    case -430332865:
2777      /* replaces */ return new Property("replaces", "canonical(MessageDefinition)",
2778          "A MessageDefinition that is superseded by this definition.", 0, java.lang.Integer.MAX_VALUE, replaces);
2779    case -892481550:
2780      /* status */ return new Property("status", "code",
2781          "The status of this message definition. Enables tracking the life-cycle of the content.", 0, 1, status);
2782    case -404562712:
2783      /* experimental */ return new Property("experimental", "boolean",
2784          "A Boolean value to indicate that this message definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.",
2785          0, 1, experimental);
2786    case 3076014:
2787      /* date */ return new Property("date", "dateTime",
2788          "The date  (and optionally time) when the message definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the message definition changes.",
2789          0, 1, date);
2790    case 1447404028:
2791      /* publisher */ return new Property("publisher", "string",
2792          "The name of the organization or individual that published the message definition.", 0, 1, publisher);
2793    case 951526432:
2794      /* contact */ return new Property("contact", "ContactDetail",
2795          "Contact details to assist a user in finding and communicating with the publisher.", 0,
2796          java.lang.Integer.MAX_VALUE, contact);
2797    case -1724546052:
2798      /* description */ return new Property("description", "markdown",
2799          "A free text natural language description of the message definition from a consumer's perspective.", 0, 1,
2800          description);
2801    case -669707736:
2802      /* useContext */ return new Property("useContext", "UsageContext",
2803          "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate message definition instances.",
2804          0, java.lang.Integer.MAX_VALUE, useContext);
2805    case -507075711:
2806      /* jurisdiction */ return new Property("jurisdiction", "CodeableConcept",
2807          "A legal or geographic region in which the message definition is intended to be used.", 0,
2808          java.lang.Integer.MAX_VALUE, jurisdiction);
2809    case -220463842:
2810      /* purpose */ return new Property("purpose", "markdown",
2811          "Explanation of why this message definition is needed and why it has been designed as it has.", 0, 1,
2812          purpose);
2813    case 1522889671:
2814      /* copyright */ return new Property("copyright", "markdown",
2815          "A copyright statement relating to the message definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the message definition.",
2816          0, 1, copyright);
2817    case 3016401:
2818      /* base */ return new Property("base", "canonical(MessageDefinition)",
2819          "The MessageDefinition that is the basis for the contents of this resource.", 0, 1, base);
2820    case -995424086:
2821      /* parent */ return new Property("parent", "canonical(ActivityDefinition|PlanDefinition)",
2822          "Identifies a protocol or workflow that this MessageDefinition represents a step in.", 0,
2823          java.lang.Integer.MAX_VALUE, parent);
2824    case 278115238:
2825      /* event[x] */ return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1,
2826          event);
2827    case 96891546:
2828      /* event */ return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1,
2829          event);
2830    case -355957084:
2831      /* eventCoding */ return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0,
2832          1, event);
2833    case 278109298:
2834      /* eventUri */ return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1,
2835          event);
2836    case 50511102:
2837      /* category */ return new Property("category", "code", "The impact of the content of the message.", 0, 1,
2838          category);
2839    case 97604824:
2840      /* focus */ return new Property("focus", "",
2841          "Identifies the resource (or resources) that are being addressed by the event.  For example, the Encounter for an admit message or two Account records for a merge.",
2842          0, java.lang.Integer.MAX_VALUE, focus);
2843    case 791597824:
2844      /* responseRequired */ return new Property("responseRequired", "code",
2845          "Declare at a message definition level whether a response is required or only upon error or success, or never.",
2846          0, 1, responseRequired);
2847    case -1130933751:
2848      /* allowedResponse */ return new Property("allowedResponse", "",
2849          "Indicates what types of messages may be sent as an application-level response to this message.", 0,
2850          java.lang.Integer.MAX_VALUE, allowedResponse);
2851    case 98615630:
2852      /* graph */ return new Property("graph", "canonical(GraphDefinition)",
2853          "Canonical reference to a GraphDefinition. If a URL is provided, it is the canonical reference to a [[[GraphDefinition]]] that it controls what resources are to be added to the bundle when building the document. The GraphDefinition can also specify profiles that apply to the various resources.",
2854          0, java.lang.Integer.MAX_VALUE, graph);
2855    default:
2856      return super.getNamedProperty(_hash, _name, _checkValid);
2857    }
2858
2859  }
2860
2861  @Override
2862  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2863    switch (hash) {
2864    case 116079:
2865      /* url */ return this.url == null ? new Base[0] : new Base[] { this.url }; // UriType
2866    case -1618432855:
2867      /* identifier */ return this.identifier == null ? new Base[0]
2868          : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2869    case 351608024:
2870      /* version */ return this.version == null ? new Base[0] : new Base[] { this.version }; // StringType
2871    case 3373707:
2872      /* name */ return this.name == null ? new Base[0] : new Base[] { this.name }; // StringType
2873    case 110371416:
2874      /* title */ return this.title == null ? new Base[0] : new Base[] { this.title }; // StringType
2875    case -430332865:
2876      /* replaces */ return this.replaces == null ? new Base[0] : this.replaces.toArray(new Base[this.replaces.size()]); // CanonicalType
2877    case -892481550:
2878      /* status */ return this.status == null ? new Base[0] : new Base[] { this.status }; // Enumeration<PublicationStatus>
2879    case -404562712:
2880      /* experimental */ return this.experimental == null ? new Base[0] : new Base[] { this.experimental }; // BooleanType
2881    case 3076014:
2882      /* date */ return this.date == null ? new Base[0] : new Base[] { this.date }; // DateTimeType
2883    case 1447404028:
2884      /* publisher */ return this.publisher == null ? new Base[0] : new Base[] { this.publisher }; // StringType
2885    case 951526432:
2886      /* contact */ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
2887    case -1724546052:
2888      /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // MarkdownType
2889    case -669707736:
2890      /* useContext */ return this.useContext == null ? new Base[0]
2891          : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
2892    case -507075711:
2893      /* jurisdiction */ return this.jurisdiction == null ? new Base[0]
2894          : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
2895    case -220463842:
2896      /* purpose */ return this.purpose == null ? new Base[0] : new Base[] { this.purpose }; // MarkdownType
2897    case 1522889671:
2898      /* copyright */ return this.copyright == null ? new Base[0] : new Base[] { this.copyright }; // MarkdownType
2899    case 3016401:
2900      /* base */ return this.base == null ? new Base[0] : new Base[] { this.base }; // CanonicalType
2901    case -995424086:
2902      /* parent */ return this.parent == null ? new Base[0] : this.parent.toArray(new Base[this.parent.size()]); // CanonicalType
2903    case 96891546:
2904      /* event */ return this.event == null ? new Base[0] : new Base[] { this.event }; // Type
2905    case 50511102:
2906      /* category */ return this.category == null ? new Base[0] : new Base[] { this.category }; // Enumeration<MessageSignificanceCategory>
2907    case 97604824:
2908      /* focus */ return this.focus == null ? new Base[0] : this.focus.toArray(new Base[this.focus.size()]); // MessageDefinitionFocusComponent
2909    case 791597824:
2910      /* responseRequired */ return this.responseRequired == null ? new Base[0] : new Base[] { this.responseRequired }; // Enumeration<MessageheaderResponseRequest>
2911    case -1130933751:
2912      /* allowedResponse */ return this.allowedResponse == null ? new Base[0]
2913          : this.allowedResponse.toArray(new Base[this.allowedResponse.size()]); // MessageDefinitionAllowedResponseComponent
2914    case 98615630:
2915      /* graph */ return this.graph == null ? new Base[0] : this.graph.toArray(new Base[this.graph.size()]); // CanonicalType
2916    default:
2917      return super.getProperty(hash, name, checkValid);
2918    }
2919
2920  }
2921
2922  @Override
2923  public Base setProperty(int hash, String name, Base value) throws FHIRException {
2924    switch (hash) {
2925    case 116079: // url
2926      this.url = castToUri(value); // UriType
2927      return value;
2928    case -1618432855: // identifier
2929      this.getIdentifier().add(castToIdentifier(value)); // Identifier
2930      return value;
2931    case 351608024: // version
2932      this.version = castToString(value); // StringType
2933      return value;
2934    case 3373707: // name
2935      this.name = castToString(value); // StringType
2936      return value;
2937    case 110371416: // title
2938      this.title = castToString(value); // StringType
2939      return value;
2940    case -430332865: // replaces
2941      this.getReplaces().add(castToCanonical(value)); // CanonicalType
2942      return value;
2943    case -892481550: // status
2944      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
2945      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2946      return value;
2947    case -404562712: // experimental
2948      this.experimental = castToBoolean(value); // BooleanType
2949      return value;
2950    case 3076014: // date
2951      this.date = castToDateTime(value); // DateTimeType
2952      return value;
2953    case 1447404028: // publisher
2954      this.publisher = castToString(value); // StringType
2955      return value;
2956    case 951526432: // contact
2957      this.getContact().add(castToContactDetail(value)); // ContactDetail
2958      return value;
2959    case -1724546052: // description
2960      this.description = castToMarkdown(value); // MarkdownType
2961      return value;
2962    case -669707736: // useContext
2963      this.getUseContext().add(castToUsageContext(value)); // UsageContext
2964      return value;
2965    case -507075711: // jurisdiction
2966      this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
2967      return value;
2968    case -220463842: // purpose
2969      this.purpose = castToMarkdown(value); // MarkdownType
2970      return value;
2971    case 1522889671: // copyright
2972      this.copyright = castToMarkdown(value); // MarkdownType
2973      return value;
2974    case 3016401: // base
2975      this.base = castToCanonical(value); // CanonicalType
2976      return value;
2977    case -995424086: // parent
2978      this.getParent().add(castToCanonical(value)); // CanonicalType
2979      return value;
2980    case 96891546: // event
2981      this.event = castToType(value); // Type
2982      return value;
2983    case 50511102: // category
2984      value = new MessageSignificanceCategoryEnumFactory().fromType(castToCode(value));
2985      this.category = (Enumeration) value; // Enumeration<MessageSignificanceCategory>
2986      return value;
2987    case 97604824: // focus
2988      this.getFocus().add((MessageDefinitionFocusComponent) value); // MessageDefinitionFocusComponent
2989      return value;
2990    case 791597824: // responseRequired
2991      value = new MessageheaderResponseRequestEnumFactory().fromType(castToCode(value));
2992      this.responseRequired = (Enumeration) value; // Enumeration<MessageheaderResponseRequest>
2993      return value;
2994    case -1130933751: // allowedResponse
2995      this.getAllowedResponse().add((MessageDefinitionAllowedResponseComponent) value); // MessageDefinitionAllowedResponseComponent
2996      return value;
2997    case 98615630: // graph
2998      this.getGraph().add(castToCanonical(value)); // CanonicalType
2999      return value;
3000    default:
3001      return super.setProperty(hash, name, value);
3002    }
3003
3004  }
3005
3006  @Override
3007  public Base setProperty(String name, Base value) throws FHIRException {
3008    if (name.equals("url")) {
3009      this.url = castToUri(value); // UriType
3010    } else if (name.equals("identifier")) {
3011      this.getIdentifier().add(castToIdentifier(value));
3012    } else if (name.equals("version")) {
3013      this.version = castToString(value); // StringType
3014    } else if (name.equals("name")) {
3015      this.name = castToString(value); // StringType
3016    } else if (name.equals("title")) {
3017      this.title = castToString(value); // StringType
3018    } else if (name.equals("replaces")) {
3019      this.getReplaces().add(castToCanonical(value));
3020    } else if (name.equals("status")) {
3021      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
3022      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3023    } else if (name.equals("experimental")) {
3024      this.experimental = castToBoolean(value); // BooleanType
3025    } else if (name.equals("date")) {
3026      this.date = castToDateTime(value); // DateTimeType
3027    } else if (name.equals("publisher")) {
3028      this.publisher = castToString(value); // StringType
3029    } else if (name.equals("contact")) {
3030      this.getContact().add(castToContactDetail(value));
3031    } else if (name.equals("description")) {
3032      this.description = castToMarkdown(value); // MarkdownType
3033    } else if (name.equals("useContext")) {
3034      this.getUseContext().add(castToUsageContext(value));
3035    } else if (name.equals("jurisdiction")) {
3036      this.getJurisdiction().add(castToCodeableConcept(value));
3037    } else if (name.equals("purpose")) {
3038      this.purpose = castToMarkdown(value); // MarkdownType
3039    } else if (name.equals("copyright")) {
3040      this.copyright = castToMarkdown(value); // MarkdownType
3041    } else if (name.equals("base")) {
3042      this.base = castToCanonical(value); // CanonicalType
3043    } else if (name.equals("parent")) {
3044      this.getParent().add(castToCanonical(value));
3045    } else if (name.equals("event[x]")) {
3046      this.event = castToType(value); // Type
3047    } else if (name.equals("category")) {
3048      value = new MessageSignificanceCategoryEnumFactory().fromType(castToCode(value));
3049      this.category = (Enumeration) value; // Enumeration<MessageSignificanceCategory>
3050    } else if (name.equals("focus")) {
3051      this.getFocus().add((MessageDefinitionFocusComponent) value);
3052    } else if (name.equals("responseRequired")) {
3053      value = new MessageheaderResponseRequestEnumFactory().fromType(castToCode(value));
3054      this.responseRequired = (Enumeration) value; // Enumeration<MessageheaderResponseRequest>
3055    } else if (name.equals("allowedResponse")) {
3056      this.getAllowedResponse().add((MessageDefinitionAllowedResponseComponent) value);
3057    } else if (name.equals("graph")) {
3058      this.getGraph().add(castToCanonical(value));
3059    } else
3060      return super.setProperty(name, value);
3061    return value;
3062  }
3063
3064  @Override
3065  public Base makeProperty(int hash, String name) throws FHIRException {
3066    switch (hash) {
3067    case 116079:
3068      return getUrlElement();
3069    case -1618432855:
3070      return addIdentifier();
3071    case 351608024:
3072      return getVersionElement();
3073    case 3373707:
3074      return getNameElement();
3075    case 110371416:
3076      return getTitleElement();
3077    case -430332865:
3078      return addReplacesElement();
3079    case -892481550:
3080      return getStatusElement();
3081    case -404562712:
3082      return getExperimentalElement();
3083    case 3076014:
3084      return getDateElement();
3085    case 1447404028:
3086      return getPublisherElement();
3087    case 951526432:
3088      return addContact();
3089    case -1724546052:
3090      return getDescriptionElement();
3091    case -669707736:
3092      return addUseContext();
3093    case -507075711:
3094      return addJurisdiction();
3095    case -220463842:
3096      return getPurposeElement();
3097    case 1522889671:
3098      return getCopyrightElement();
3099    case 3016401:
3100      return getBaseElement();
3101    case -995424086:
3102      return addParentElement();
3103    case 278115238:
3104      return getEvent();
3105    case 96891546:
3106      return getEvent();
3107    case 50511102:
3108      return getCategoryElement();
3109    case 97604824:
3110      return addFocus();
3111    case 791597824:
3112      return getResponseRequiredElement();
3113    case -1130933751:
3114      return addAllowedResponse();
3115    case 98615630:
3116      return addGraphElement();
3117    default:
3118      return super.makeProperty(hash, name);
3119    }
3120
3121  }
3122
3123  @Override
3124  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3125    switch (hash) {
3126    case 116079:
3127      /* url */ return new String[] { "uri" };
3128    case -1618432855:
3129      /* identifier */ return new String[] { "Identifier" };
3130    case 351608024:
3131      /* version */ return new String[] { "string" };
3132    case 3373707:
3133      /* name */ return new String[] { "string" };
3134    case 110371416:
3135      /* title */ return new String[] { "string" };
3136    case -430332865:
3137      /* replaces */ return new String[] { "canonical" };
3138    case -892481550:
3139      /* status */ return new String[] { "code" };
3140    case -404562712:
3141      /* experimental */ return new String[] { "boolean" };
3142    case 3076014:
3143      /* date */ return new String[] { "dateTime" };
3144    case 1447404028:
3145      /* publisher */ return new String[] { "string" };
3146    case 951526432:
3147      /* contact */ return new String[] { "ContactDetail" };
3148    case -1724546052:
3149      /* description */ return new String[] { "markdown" };
3150    case -669707736:
3151      /* useContext */ return new String[] { "UsageContext" };
3152    case -507075711:
3153      /* jurisdiction */ return new String[] { "CodeableConcept" };
3154    case -220463842:
3155      /* purpose */ return new String[] { "markdown" };
3156    case 1522889671:
3157      /* copyright */ return new String[] { "markdown" };
3158    case 3016401:
3159      /* base */ return new String[] { "canonical" };
3160    case -995424086:
3161      /* parent */ return new String[] { "canonical" };
3162    case 96891546:
3163      /* event */ return new String[] { "Coding", "uri" };
3164    case 50511102:
3165      /* category */ return new String[] { "code" };
3166    case 97604824:
3167      /* focus */ return new String[] {};
3168    case 791597824:
3169      /* responseRequired */ return new String[] { "code" };
3170    case -1130933751:
3171      /* allowedResponse */ return new String[] {};
3172    case 98615630:
3173      /* graph */ return new String[] { "canonical" };
3174    default:
3175      return super.getTypesForProperty(hash, name);
3176    }
3177
3178  }
3179
3180  @Override
3181  public Base addChild(String name) throws FHIRException {
3182    if (name.equals("url")) {
3183      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.url");
3184    } else if (name.equals("identifier")) {
3185      return addIdentifier();
3186    } else if (name.equals("version")) {
3187      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.version");
3188    } else if (name.equals("name")) {
3189      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.name");
3190    } else if (name.equals("title")) {
3191      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.title");
3192    } else if (name.equals("replaces")) {
3193      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.replaces");
3194    } else if (name.equals("status")) {
3195      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.status");
3196    } else if (name.equals("experimental")) {
3197      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.experimental");
3198    } else if (name.equals("date")) {
3199      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.date");
3200    } else if (name.equals("publisher")) {
3201      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.publisher");
3202    } else if (name.equals("contact")) {
3203      return addContact();
3204    } else if (name.equals("description")) {
3205      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.description");
3206    } else if (name.equals("useContext")) {
3207      return addUseContext();
3208    } else if (name.equals("jurisdiction")) {
3209      return addJurisdiction();
3210    } else if (name.equals("purpose")) {
3211      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.purpose");
3212    } else if (name.equals("copyright")) {
3213      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.copyright");
3214    } else if (name.equals("base")) {
3215      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.base");
3216    } else if (name.equals("parent")) {
3217      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.parent");
3218    } else if (name.equals("eventCoding")) {
3219      this.event = new Coding();
3220      return this.event;
3221    } else if (name.equals("eventUri")) {
3222      this.event = new UriType();
3223      return this.event;
3224    } else if (name.equals("category")) {
3225      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.category");
3226    } else if (name.equals("focus")) {
3227      return addFocus();
3228    } else if (name.equals("responseRequired")) {
3229      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.responseRequired");
3230    } else if (name.equals("allowedResponse")) {
3231      return addAllowedResponse();
3232    } else if (name.equals("graph")) {
3233      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.graph");
3234    } else
3235      return super.addChild(name);
3236  }
3237
3238  public String fhirType() {
3239    return "MessageDefinition";
3240
3241  }
3242
3243  public MessageDefinition copy() {
3244    MessageDefinition dst = new MessageDefinition();
3245    copyValues(dst);
3246    return dst;
3247  }
3248
3249  public void copyValues(MessageDefinition dst) {
3250    super.copyValues(dst);
3251    dst.url = url == null ? null : url.copy();
3252    if (identifier != null) {
3253      dst.identifier = new ArrayList<Identifier>();
3254      for (Identifier i : identifier)
3255        dst.identifier.add(i.copy());
3256    }
3257    ;
3258    dst.version = version == null ? null : version.copy();
3259    dst.name = name == null ? null : name.copy();
3260    dst.title = title == null ? null : title.copy();
3261    if (replaces != null) {
3262      dst.replaces = new ArrayList<CanonicalType>();
3263      for (CanonicalType i : replaces)
3264        dst.replaces.add(i.copy());
3265    }
3266    ;
3267    dst.status = status == null ? null : status.copy();
3268    dst.experimental = experimental == null ? null : experimental.copy();
3269    dst.date = date == null ? null : date.copy();
3270    dst.publisher = publisher == null ? null : publisher.copy();
3271    if (contact != null) {
3272      dst.contact = new ArrayList<ContactDetail>();
3273      for (ContactDetail i : contact)
3274        dst.contact.add(i.copy());
3275    }
3276    ;
3277    dst.description = description == null ? null : description.copy();
3278    if (useContext != null) {
3279      dst.useContext = new ArrayList<UsageContext>();
3280      for (UsageContext i : useContext)
3281        dst.useContext.add(i.copy());
3282    }
3283    ;
3284    if (jurisdiction != null) {
3285      dst.jurisdiction = new ArrayList<CodeableConcept>();
3286      for (CodeableConcept i : jurisdiction)
3287        dst.jurisdiction.add(i.copy());
3288    }
3289    ;
3290    dst.purpose = purpose == null ? null : purpose.copy();
3291    dst.copyright = copyright == null ? null : copyright.copy();
3292    dst.base = base == null ? null : base.copy();
3293    if (parent != null) {
3294      dst.parent = new ArrayList<CanonicalType>();
3295      for (CanonicalType i : parent)
3296        dst.parent.add(i.copy());
3297    }
3298    ;
3299    dst.event = event == null ? null : event.copy();
3300    dst.category = category == null ? null : category.copy();
3301    if (focus != null) {
3302      dst.focus = new ArrayList<MessageDefinitionFocusComponent>();
3303      for (MessageDefinitionFocusComponent i : focus)
3304        dst.focus.add(i.copy());
3305    }
3306    ;
3307    dst.responseRequired = responseRequired == null ? null : responseRequired.copy();
3308    if (allowedResponse != null) {
3309      dst.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
3310      for (MessageDefinitionAllowedResponseComponent i : allowedResponse)
3311        dst.allowedResponse.add(i.copy());
3312    }
3313    ;
3314    if (graph != null) {
3315      dst.graph = new ArrayList<CanonicalType>();
3316      for (CanonicalType i : graph)
3317        dst.graph.add(i.copy());
3318    }
3319    ;
3320  }
3321
3322  protected MessageDefinition typedCopy() {
3323    return copy();
3324  }
3325
3326  @Override
3327  public boolean equalsDeep(Base other_) {
3328    if (!super.equalsDeep(other_))
3329      return false;
3330    if (!(other_ instanceof MessageDefinition))
3331      return false;
3332    MessageDefinition o = (MessageDefinition) other_;
3333    return compareDeep(identifier, o.identifier, true) && compareDeep(replaces, o.replaces, true)
3334        && compareDeep(purpose, o.purpose, true) && compareDeep(copyright, o.copyright, true)
3335        && compareDeep(base, o.base, true) && compareDeep(parent, o.parent, true) && compareDeep(event, o.event, true)
3336        && compareDeep(category, o.category, true) && compareDeep(focus, o.focus, true)
3337        && compareDeep(responseRequired, o.responseRequired, true)
3338        && compareDeep(allowedResponse, o.allowedResponse, true) && compareDeep(graph, o.graph, true);
3339  }
3340
3341  @Override
3342  public boolean equalsShallow(Base other_) {
3343    if (!super.equalsShallow(other_))
3344      return false;
3345    if (!(other_ instanceof MessageDefinition))
3346      return false;
3347    MessageDefinition o = (MessageDefinition) other_;
3348    return compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true)
3349        && compareValues(category, o.category, true) && compareValues(responseRequired, o.responseRequired, true);
3350  }
3351
3352  public boolean isEmpty() {
3353    return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, replaces, purpose, copyright, base,
3354        parent, event, category, focus, responseRequired, allowedResponse, graph);
3355  }
3356
3357  @Override
3358  public ResourceType getResourceType() {
3359    return ResourceType.MessageDefinition;
3360  }
3361
3362  /**
3363   * Search parameter: <b>date</b>
3364   * <p>
3365   * Description: <b>The message definition publication date</b><br>
3366   * Type: <b>date</b><br>
3367   * Path: <b>MessageDefinition.date</b><br>
3368   * </p>
3369   */
3370  @SearchParamDefinition(name = "date", path = "MessageDefinition.date", description = "The message definition publication date", type = "date")
3371  public static final String SP_DATE = "date";
3372  /**
3373   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3374   * <p>
3375   * Description: <b>The message definition publication date</b><br>
3376   * Type: <b>date</b><br>
3377   * Path: <b>MessageDefinition.date</b><br>
3378   * </p>
3379   */
3380  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(
3381      SP_DATE);
3382
3383  /**
3384   * Search parameter: <b>identifier</b>
3385   * <p>
3386   * Description: <b>External identifier for the message definition</b><br>
3387   * Type: <b>token</b><br>
3388   * Path: <b>MessageDefinition.identifier</b><br>
3389   * </p>
3390   */
3391  @SearchParamDefinition(name = "identifier", path = "MessageDefinition.identifier", description = "External identifier for the message definition", type = "token")
3392  public static final String SP_IDENTIFIER = "identifier";
3393  /**
3394   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3395   * <p>
3396   * Description: <b>External identifier for the message definition</b><br>
3397   * Type: <b>token</b><br>
3398   * Path: <b>MessageDefinition.identifier</b><br>
3399   * </p>
3400   */
3401  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3402      SP_IDENTIFIER);
3403
3404  /**
3405   * Search parameter: <b>parent</b>
3406   * <p>
3407   * Description: <b>A resource that is the parent of the definition</b><br>
3408   * Type: <b>reference</b><br>
3409   * Path: <b>MessageDefinition.parent</b><br>
3410   * </p>
3411   */
3412  @SearchParamDefinition(name = "parent", path = "MessageDefinition.parent", description = "A resource that is the parent of the definition", type = "reference", target = {
3413      ActivityDefinition.class, PlanDefinition.class })
3414  public static final String SP_PARENT = "parent";
3415  /**
3416   * <b>Fluent Client</b> search parameter constant for <b>parent</b>
3417   * <p>
3418   * Description: <b>A resource that is the parent of the definition</b><br>
3419   * Type: <b>reference</b><br>
3420   * Path: <b>MessageDefinition.parent</b><br>
3421   * </p>
3422   */
3423  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PARENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
3424      SP_PARENT);
3425
3426  /**
3427   * Constant for fluent queries to be used to add include statements. Specifies
3428   * the path value of "<b>MessageDefinition:parent</b>".
3429   */
3430  public static final ca.uhn.fhir.model.api.Include INCLUDE_PARENT = new ca.uhn.fhir.model.api.Include(
3431      "MessageDefinition:parent").toLocked();
3432
3433  /**
3434   * Search parameter: <b>context-type-value</b>
3435   * <p>
3436   * Description: <b>A use context type and value assigned to the message
3437   * definition</b><br>
3438   * Type: <b>composite</b><br>
3439   * Path: <b></b><br>
3440   * </p>
3441   */
3442  @SearchParamDefinition(name = "context-type-value", path = "MessageDefinition.useContext", description = "A use context type and value assigned to the message definition", type = "composite", compositeOf = {
3443      "context-type", "context" })
3444  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
3445  /**
3446   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
3447   * <p>
3448   * Description: <b>A use context type and value assigned to the message
3449   * definition</b><br>
3450   * Type: <b>composite</b><br>
3451   * Path: <b></b><br>
3452   * </p>
3453   */
3454  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam> CONTEXT_TYPE_VALUE = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.TokenClientParam>(
3455      SP_CONTEXT_TYPE_VALUE);
3456
3457  /**
3458   * Search parameter: <b>jurisdiction</b>
3459   * <p>
3460   * Description: <b>Intended jurisdiction for the message definition</b><br>
3461   * Type: <b>token</b><br>
3462   * Path: <b>MessageDefinition.jurisdiction</b><br>
3463   * </p>
3464   */
3465  @SearchParamDefinition(name = "jurisdiction", path = "MessageDefinition.jurisdiction", description = "Intended jurisdiction for the message definition", type = "token")
3466  public static final String SP_JURISDICTION = "jurisdiction";
3467  /**
3468   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
3469   * <p>
3470   * Description: <b>Intended jurisdiction for the message definition</b><br>
3471   * Type: <b>token</b><br>
3472   * Path: <b>MessageDefinition.jurisdiction</b><br>
3473   * </p>
3474   */
3475  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3476      SP_JURISDICTION);
3477
3478  /**
3479   * Search parameter: <b>description</b>
3480   * <p>
3481   * Description: <b>The description of the message definition</b><br>
3482   * Type: <b>string</b><br>
3483   * Path: <b>MessageDefinition.description</b><br>
3484   * </p>
3485   */
3486  @SearchParamDefinition(name = "description", path = "MessageDefinition.description", description = "The description of the message definition", type = "string")
3487  public static final String SP_DESCRIPTION = "description";
3488  /**
3489   * <b>Fluent Client</b> search parameter constant for <b>description</b>
3490   * <p>
3491   * Description: <b>The description of the message definition</b><br>
3492   * Type: <b>string</b><br>
3493   * Path: <b>MessageDefinition.description</b><br>
3494   * </p>
3495   */
3496  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(
3497      SP_DESCRIPTION);
3498
3499  /**
3500   * Search parameter: <b>focus</b>
3501   * <p>
3502   * Description: <b>A resource that is a permitted focus of the message</b><br>
3503   * Type: <b>token</b><br>
3504   * Path: <b>MessageDefinition.focus.code</b><br>
3505   * </p>
3506   */
3507  @SearchParamDefinition(name = "focus", path = "MessageDefinition.focus.code", description = "A resource that is a permitted focus of the message", type = "token")
3508  public static final String SP_FOCUS = "focus";
3509  /**
3510   * <b>Fluent Client</b> search parameter constant for <b>focus</b>
3511   * <p>
3512   * Description: <b>A resource that is a permitted focus of the message</b><br>
3513   * Type: <b>token</b><br>
3514   * Path: <b>MessageDefinition.focus.code</b><br>
3515   * </p>
3516   */
3517  public static final ca.uhn.fhir.rest.gclient.TokenClientParam FOCUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3518      SP_FOCUS);
3519
3520  /**
3521   * Search parameter: <b>context-type</b>
3522   * <p>
3523   * Description: <b>A type of use context assigned to the message
3524   * definition</b><br>
3525   * Type: <b>token</b><br>
3526   * Path: <b>MessageDefinition.useContext.code</b><br>
3527   * </p>
3528   */
3529  @SearchParamDefinition(name = "context-type", path = "MessageDefinition.useContext.code", description = "A type of use context assigned to the message definition", type = "token")
3530  public static final String SP_CONTEXT_TYPE = "context-type";
3531  /**
3532   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
3533   * <p>
3534   * Description: <b>A type of use context assigned to the message
3535   * definition</b><br>
3536   * Type: <b>token</b><br>
3537   * Path: <b>MessageDefinition.useContext.code</b><br>
3538   * </p>
3539   */
3540  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3541      SP_CONTEXT_TYPE);
3542
3543  /**
3544   * Search parameter: <b>title</b>
3545   * <p>
3546   * Description: <b>The human-friendly name of the message definition</b><br>
3547   * Type: <b>string</b><br>
3548   * Path: <b>MessageDefinition.title</b><br>
3549   * </p>
3550   */
3551  @SearchParamDefinition(name = "title", path = "MessageDefinition.title", description = "The human-friendly name of the message definition", type = "string")
3552  public static final String SP_TITLE = "title";
3553  /**
3554   * <b>Fluent Client</b> search parameter constant for <b>title</b>
3555   * <p>
3556   * Description: <b>The human-friendly name of the message definition</b><br>
3557   * Type: <b>string</b><br>
3558   * Path: <b>MessageDefinition.title</b><br>
3559   * </p>
3560   */
3561  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(
3562      SP_TITLE);
3563
3564  /**
3565   * Search parameter: <b>version</b>
3566   * <p>
3567   * Description: <b>The business version of the message definition</b><br>
3568   * Type: <b>token</b><br>
3569   * Path: <b>MessageDefinition.version</b><br>
3570   * </p>
3571   */
3572  @SearchParamDefinition(name = "version", path = "MessageDefinition.version", description = "The business version of the message definition", type = "token")
3573  public static final String SP_VERSION = "version";
3574  /**
3575   * <b>Fluent Client</b> search parameter constant for <b>version</b>
3576   * <p>
3577   * Description: <b>The business version of the message definition</b><br>
3578   * Type: <b>token</b><br>
3579   * Path: <b>MessageDefinition.version</b><br>
3580   * </p>
3581   */
3582  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3583      SP_VERSION);
3584
3585  /**
3586   * Search parameter: <b>url</b>
3587   * <p>
3588   * Description: <b>The uri that identifies the message definition</b><br>
3589   * Type: <b>uri</b><br>
3590   * Path: <b>MessageDefinition.url</b><br>
3591   * </p>
3592   */
3593  @SearchParamDefinition(name = "url", path = "MessageDefinition.url", description = "The uri that identifies the message definition", type = "uri")
3594  public static final String SP_URL = "url";
3595  /**
3596   * <b>Fluent Client</b> search parameter constant for <b>url</b>
3597   * <p>
3598   * Description: <b>The uri that identifies the message definition</b><br>
3599   * Type: <b>uri</b><br>
3600   * Path: <b>MessageDefinition.url</b><br>
3601   * </p>
3602   */
3603  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
3604
3605  /**
3606   * Search parameter: <b>context-quantity</b>
3607   * <p>
3608   * Description: <b>A quantity- or range-valued use context assigned to the
3609   * message definition</b><br>
3610   * Type: <b>quantity</b><br>
3611   * Path: <b>MessageDefinition.useContext.valueQuantity,
3612   * MessageDefinition.useContext.valueRange</b><br>
3613   * </p>
3614   */
3615  @SearchParamDefinition(name = "context-quantity", path = "(MessageDefinition.useContext.value as Quantity) | (MessageDefinition.useContext.value as Range)", description = "A quantity- or range-valued use context assigned to the message definition", type = "quantity")
3616  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
3617  /**
3618   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
3619   * <p>
3620   * Description: <b>A quantity- or range-valued use context assigned to the
3621   * message definition</b><br>
3622   * Type: <b>quantity</b><br>
3623   * Path: <b>MessageDefinition.useContext.valueQuantity,
3624   * MessageDefinition.useContext.valueRange</b><br>
3625   * </p>
3626   */
3627  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(
3628      SP_CONTEXT_QUANTITY);
3629
3630  /**
3631   * Search parameter: <b>name</b>
3632   * <p>
3633   * Description: <b>Computationally friendly name of the message
3634   * definition</b><br>
3635   * Type: <b>string</b><br>
3636   * Path: <b>MessageDefinition.name</b><br>
3637   * </p>
3638   */
3639  @SearchParamDefinition(name = "name", path = "MessageDefinition.name", description = "Computationally friendly name of the message definition", type = "string")
3640  public static final String SP_NAME = "name";
3641  /**
3642   * <b>Fluent Client</b> search parameter constant for <b>name</b>
3643   * <p>
3644   * Description: <b>Computationally friendly name of the message
3645   * definition</b><br>
3646   * Type: <b>string</b><br>
3647   * Path: <b>MessageDefinition.name</b><br>
3648   * </p>
3649   */
3650  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(
3651      SP_NAME);
3652
3653  /**
3654   * Search parameter: <b>context</b>
3655   * <p>
3656   * Description: <b>A use context assigned to the message definition</b><br>
3657   * Type: <b>token</b><br>
3658   * Path: <b>MessageDefinition.useContext.valueCodeableConcept</b><br>
3659   * </p>
3660   */
3661  @SearchParamDefinition(name = "context", path = "(MessageDefinition.useContext.value as CodeableConcept)", description = "A use context assigned to the message definition", type = "token")
3662  public static final String SP_CONTEXT = "context";
3663  /**
3664   * <b>Fluent Client</b> search parameter constant for <b>context</b>
3665   * <p>
3666   * Description: <b>A use context assigned to the message definition</b><br>
3667   * Type: <b>token</b><br>
3668   * Path: <b>MessageDefinition.useContext.valueCodeableConcept</b><br>
3669   * </p>
3670   */
3671  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3672      SP_CONTEXT);
3673
3674  /**
3675   * Search parameter: <b>publisher</b>
3676   * <p>
3677   * Description: <b>Name of the publisher of the message definition</b><br>
3678   * Type: <b>string</b><br>
3679   * Path: <b>MessageDefinition.publisher</b><br>
3680   * </p>
3681   */
3682  @SearchParamDefinition(name = "publisher", path = "MessageDefinition.publisher", description = "Name of the publisher of the message definition", type = "string")
3683  public static final String SP_PUBLISHER = "publisher";
3684  /**
3685   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
3686   * <p>
3687   * Description: <b>Name of the publisher of the message definition</b><br>
3688   * Type: <b>string</b><br>
3689   * Path: <b>MessageDefinition.publisher</b><br>
3690   * </p>
3691   */
3692  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(
3693      SP_PUBLISHER);
3694
3695  /**
3696   * Search parameter: <b>event</b>
3697   * <p>
3698   * Description: <b>The event that triggers the message or link to the event
3699   * definition.</b><br>
3700   * Type: <b>token</b><br>
3701   * Path: <b>MessageDefinition.event[x]</b><br>
3702   * </p>
3703   */
3704  @SearchParamDefinition(name = "event", path = "MessageDefinition.event", description = "The event that triggers the message or link to the event definition.", type = "token")
3705  public static final String SP_EVENT = "event";
3706  /**
3707   * <b>Fluent Client</b> search parameter constant for <b>event</b>
3708   * <p>
3709   * Description: <b>The event that triggers the message or link to the event
3710   * definition.</b><br>
3711   * Type: <b>token</b><br>
3712   * Path: <b>MessageDefinition.event[x]</b><br>
3713   * </p>
3714   */
3715  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EVENT = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3716      SP_EVENT);
3717
3718  /**
3719   * Search parameter: <b>category</b>
3720   * <p>
3721   * Description: <b>The behavior associated with the message</b><br>
3722   * Type: <b>token</b><br>
3723   * Path: <b>MessageDefinition.category</b><br>
3724   * </p>
3725   */
3726  @SearchParamDefinition(name = "category", path = "MessageDefinition.category", description = "The behavior associated with the message", type = "token")
3727  public static final String SP_CATEGORY = "category";
3728  /**
3729   * <b>Fluent Client</b> search parameter constant for <b>category</b>
3730   * <p>
3731   * Description: <b>The behavior associated with the message</b><br>
3732   * Type: <b>token</b><br>
3733   * Path: <b>MessageDefinition.category</b><br>
3734   * </p>
3735   */
3736  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3737      SP_CATEGORY);
3738
3739  /**
3740   * Search parameter: <b>context-type-quantity</b>
3741   * <p>
3742   * Description: <b>A use context type and quantity- or range-based value
3743   * assigned to the message definition</b><br>
3744   * Type: <b>composite</b><br>
3745   * Path: <b></b><br>
3746   * </p>
3747   */
3748  @SearchParamDefinition(name = "context-type-quantity", path = "MessageDefinition.useContext", description = "A use context type and quantity- or range-based value assigned to the message definition", type = "composite", compositeOf = {
3749      "context-type", "context-quantity" })
3750  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
3751  /**
3752   * <b>Fluent Client</b> search parameter constant for
3753   * <b>context-type-quantity</b>
3754   * <p>
3755   * Description: <b>A use context type and quantity- or range-based value
3756   * assigned to the message definition</b><br>
3757   * Type: <b>composite</b><br>
3758   * Path: <b></b><br>
3759   * </p>
3760   */
3761  public static final ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam> CONTEXT_TYPE_QUANTITY = new ca.uhn.fhir.rest.gclient.CompositeClientParam<ca.uhn.fhir.rest.gclient.TokenClientParam, ca.uhn.fhir.rest.gclient.QuantityClientParam>(
3762      SP_CONTEXT_TYPE_QUANTITY);
3763
3764  /**
3765   * Search parameter: <b>status</b>
3766   * <p>
3767   * Description: <b>The current status of the message definition</b><br>
3768   * Type: <b>token</b><br>
3769   * Path: <b>MessageDefinition.status</b><br>
3770   * </p>
3771   */
3772  @SearchParamDefinition(name = "status", path = "MessageDefinition.status", description = "The current status of the message definition", type = "token")
3773  public static final String SP_STATUS = "status";
3774  /**
3775   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3776   * <p>
3777   * Description: <b>The current status of the message definition</b><br>
3778   * Type: <b>token</b><br>
3779   * Path: <b>MessageDefinition.status</b><br>
3780   * </p>
3781   */
3782  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3783      SP_STATUS);
3784
3785}