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 void removeChild(String name, Base value) throws FHIRException {
738      if (name.equals("code")) {
739        this.code = null;
740      } else if (name.equals("profile")) {
741        this.profile = null;
742      } else if (name.equals("min")) {
743        this.min = null;
744      } else if (name.equals("max")) {
745        this.max = null;
746      } else
747        super.removeChild(name, value);
748      
749    }
750
751    @Override
752    public Base makeProperty(int hash, String name) throws FHIRException {
753      switch (hash) {
754      case 3059181:
755        return getCodeElement();
756      case -309425751:
757        return getProfileElement();
758      case 108114:
759        return getMinElement();
760      case 107876:
761        return getMaxElement();
762      default:
763        return super.makeProperty(hash, name);
764      }
765
766    }
767
768    @Override
769    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
770      switch (hash) {
771      case 3059181:
772        /* code */ return new String[] { "code" };
773      case -309425751:
774        /* profile */ return new String[] { "canonical" };
775      case 108114:
776        /* min */ return new String[] { "unsignedInt" };
777      case 107876:
778        /* max */ return new String[] { "string" };
779      default:
780        return super.getTypesForProperty(hash, name);
781      }
782
783    }
784
785    @Override
786    public Base addChild(String name) throws FHIRException {
787      if (name.equals("code")) {
788        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.code");
789      } else if (name.equals("profile")) {
790        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.profile");
791      } else if (name.equals("min")) {
792        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.min");
793      } else if (name.equals("max")) {
794        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.max");
795      } else
796        return super.addChild(name);
797    }
798
799    public MessageDefinitionFocusComponent copy() {
800      MessageDefinitionFocusComponent dst = new MessageDefinitionFocusComponent();
801      copyValues(dst);
802      return dst;
803    }
804
805    public void copyValues(MessageDefinitionFocusComponent dst) {
806      super.copyValues(dst);
807      dst.code = code == null ? null : code.copy();
808      dst.profile = profile == null ? null : profile.copy();
809      dst.min = min == null ? null : min.copy();
810      dst.max = max == null ? null : max.copy();
811    }
812
813    @Override
814    public boolean equalsDeep(Base other_) {
815      if (!super.equalsDeep(other_))
816        return false;
817      if (!(other_ instanceof MessageDefinitionFocusComponent))
818        return false;
819      MessageDefinitionFocusComponent o = (MessageDefinitionFocusComponent) other_;
820      return compareDeep(code, o.code, true) && compareDeep(profile, o.profile, true) && compareDeep(min, o.min, true)
821          && compareDeep(max, o.max, true);
822    }
823
824    @Override
825    public boolean equalsShallow(Base other_) {
826      if (!super.equalsShallow(other_))
827        return false;
828      if (!(other_ instanceof MessageDefinitionFocusComponent))
829        return false;
830      MessageDefinitionFocusComponent o = (MessageDefinitionFocusComponent) other_;
831      return compareValues(code, o.code, true) && compareValues(min, o.min, true) && compareValues(max, o.max, true);
832    }
833
834    public boolean isEmpty() {
835      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(code, profile, min, max);
836    }
837
838    public String fhirType() {
839      return "MessageDefinition.focus";
840
841    }
842
843  }
844
845  @Block()
846  public static class MessageDefinitionAllowedResponseComponent extends BackboneElement
847      implements IBaseBackboneElement {
848    /**
849     * A reference to the message definition that must be adhered to by this
850     * supported response.
851     */
852    @Child(name = "message", type = {
853        CanonicalType.class }, order = 1, min = 1, max = 1, modifier = false, summary = false)
854    @Description(shortDefinition = "Reference to allowed message definition response", formalDefinition = "A reference to the message definition that must be adhered to by this supported response.")
855    protected CanonicalType message;
856
857    /**
858     * Provides a description of the circumstances in which this response should be
859     * used (as opposed to one of the alternative responses).
860     */
861    @Child(name = "situation", type = {
862        MarkdownType.class }, order = 2, min = 0, max = 1, modifier = false, summary = false)
863    @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).")
864    protected MarkdownType situation;
865
866    private static final long serialVersionUID = -1943810550L;
867
868    /**
869     * Constructor
870     */
871    public MessageDefinitionAllowedResponseComponent() {
872      super();
873    }
874
875    /**
876     * Constructor
877     */
878    public MessageDefinitionAllowedResponseComponent(CanonicalType message) {
879      super();
880      this.message = message;
881    }
882
883    /**
884     * @return {@link #message} (A reference to the message definition that must be
885     *         adhered to by this supported response.). This is the underlying
886     *         object with id, value and extensions. The accessor "getMessage" gives
887     *         direct access to the value
888     */
889    public CanonicalType getMessageElement() {
890      if (this.message == null)
891        if (Configuration.errorOnAutoCreate())
892          throw new Error("Attempt to auto-create MessageDefinitionAllowedResponseComponent.message");
893        else if (Configuration.doAutoCreate())
894          this.message = new CanonicalType(); // bb
895      return this.message;
896    }
897
898    public boolean hasMessageElement() {
899      return this.message != null && !this.message.isEmpty();
900    }
901
902    public boolean hasMessage() {
903      return this.message != null && !this.message.isEmpty();
904    }
905
906    /**
907     * @param value {@link #message} (A reference to the message definition that
908     *              must be adhered to by this supported response.). This is the
909     *              underlying object with id, value and extensions. The accessor
910     *              "getMessage" gives direct access to the value
911     */
912    public MessageDefinitionAllowedResponseComponent setMessageElement(CanonicalType value) {
913      this.message = value;
914      return this;
915    }
916
917    /**
918     * @return A reference to the message definition that must be adhered to by this
919     *         supported response.
920     */
921    public String getMessage() {
922      return this.message == null ? null : this.message.getValue();
923    }
924
925    /**
926     * @param value A reference to the message definition that must be adhered to by
927     *              this supported response.
928     */
929    public MessageDefinitionAllowedResponseComponent setMessage(String value) {
930      if (this.message == null)
931        this.message = new CanonicalType();
932      this.message.setValue(value);
933      return this;
934    }
935
936    /**
937     * @return {@link #situation} (Provides a description of the circumstances in
938     *         which this response should be used (as opposed to one of the
939     *         alternative responses).). This is the underlying object with id,
940     *         value and extensions. The accessor "getSituation" gives direct access
941     *         to the value
942     */
943    public MarkdownType getSituationElement() {
944      if (this.situation == null)
945        if (Configuration.errorOnAutoCreate())
946          throw new Error("Attempt to auto-create MessageDefinitionAllowedResponseComponent.situation");
947        else if (Configuration.doAutoCreate())
948          this.situation = new MarkdownType(); // bb
949      return this.situation;
950    }
951
952    public boolean hasSituationElement() {
953      return this.situation != null && !this.situation.isEmpty();
954    }
955
956    public boolean hasSituation() {
957      return this.situation != null && !this.situation.isEmpty();
958    }
959
960    /**
961     * @param value {@link #situation} (Provides a description of the circumstances
962     *              in which this response should be used (as opposed to one of the
963     *              alternative responses).). This is the underlying object with id,
964     *              value and extensions. The accessor "getSituation" gives direct
965     *              access to the value
966     */
967    public MessageDefinitionAllowedResponseComponent setSituationElement(MarkdownType value) {
968      this.situation = value;
969      return this;
970    }
971
972    /**
973     * @return Provides a description of the circumstances in which this response
974     *         should be used (as opposed to one of the alternative responses).
975     */
976    public String getSituation() {
977      return this.situation == null ? null : this.situation.getValue();
978    }
979
980    /**
981     * @param value Provides a description of the circumstances in which this
982     *              response should be used (as opposed to one of the alternative
983     *              responses).
984     */
985    public MessageDefinitionAllowedResponseComponent setSituation(String value) {
986      if (value == null)
987        this.situation = null;
988      else {
989        if (this.situation == null)
990          this.situation = new MarkdownType();
991        this.situation.setValue(value);
992      }
993      return this;
994    }
995
996    protected void listChildren(List<Property> children) {
997      super.listChildren(children);
998      children.add(new Property("message", "canonical(MessageDefinition)",
999          "A reference to the message definition that must be adhered to by this supported response.", 0, 1, message));
1000      children.add(new Property("situation", "markdown",
1001          "Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).",
1002          0, 1, situation));
1003    }
1004
1005    @Override
1006    public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
1007      switch (_hash) {
1008      case 954925063:
1009        /* message */ return new Property("message", "canonical(MessageDefinition)",
1010            "A reference to the message definition that must be adhered to by this supported response.", 0, 1, message);
1011      case -73377282:
1012        /* situation */ return new Property("situation", "markdown",
1013            "Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).",
1014            0, 1, situation);
1015      default:
1016        return super.getNamedProperty(_hash, _name, _checkValid);
1017      }
1018
1019    }
1020
1021    @Override
1022    public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
1023      switch (hash) {
1024      case 954925063:
1025        /* message */ return this.message == null ? new Base[0] : new Base[] { this.message }; // CanonicalType
1026      case -73377282:
1027        /* situation */ return this.situation == null ? new Base[0] : new Base[] { this.situation }; // MarkdownType
1028      default:
1029        return super.getProperty(hash, name, checkValid);
1030      }
1031
1032    }
1033
1034    @Override
1035    public Base setProperty(int hash, String name, Base value) throws FHIRException {
1036      switch (hash) {
1037      case 954925063: // message
1038        this.message = castToCanonical(value); // CanonicalType
1039        return value;
1040      case -73377282: // situation
1041        this.situation = castToMarkdown(value); // MarkdownType
1042        return value;
1043      default:
1044        return super.setProperty(hash, name, value);
1045      }
1046
1047    }
1048
1049    @Override
1050    public Base setProperty(String name, Base value) throws FHIRException {
1051      if (name.equals("message")) {
1052        this.message = castToCanonical(value); // CanonicalType
1053      } else if (name.equals("situation")) {
1054        this.situation = castToMarkdown(value); // MarkdownType
1055      } else
1056        return super.setProperty(name, value);
1057      return value;
1058    }
1059
1060  @Override
1061  public void removeChild(String name, Base value) throws FHIRException {
1062      if (name.equals("message")) {
1063        this.message = null;
1064      } else if (name.equals("situation")) {
1065        this.situation = null;
1066      } else
1067        super.removeChild(name, value);
1068      
1069    }
1070
1071    @Override
1072    public Base makeProperty(int hash, String name) throws FHIRException {
1073      switch (hash) {
1074      case 954925063:
1075        return getMessageElement();
1076      case -73377282:
1077        return getSituationElement();
1078      default:
1079        return super.makeProperty(hash, name);
1080      }
1081
1082    }
1083
1084    @Override
1085    public String[] getTypesForProperty(int hash, String name) throws FHIRException {
1086      switch (hash) {
1087      case 954925063:
1088        /* message */ return new String[] { "canonical" };
1089      case -73377282:
1090        /* situation */ return new String[] { "markdown" };
1091      default:
1092        return super.getTypesForProperty(hash, name);
1093      }
1094
1095    }
1096
1097    @Override
1098    public Base addChild(String name) throws FHIRException {
1099      if (name.equals("message")) {
1100        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.message");
1101      } else if (name.equals("situation")) {
1102        throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.situation");
1103      } else
1104        return super.addChild(name);
1105    }
1106
1107    public MessageDefinitionAllowedResponseComponent copy() {
1108      MessageDefinitionAllowedResponseComponent dst = new MessageDefinitionAllowedResponseComponent();
1109      copyValues(dst);
1110      return dst;
1111    }
1112
1113    public void copyValues(MessageDefinitionAllowedResponseComponent dst) {
1114      super.copyValues(dst);
1115      dst.message = message == null ? null : message.copy();
1116      dst.situation = situation == null ? null : situation.copy();
1117    }
1118
1119    @Override
1120    public boolean equalsDeep(Base other_) {
1121      if (!super.equalsDeep(other_))
1122        return false;
1123      if (!(other_ instanceof MessageDefinitionAllowedResponseComponent))
1124        return false;
1125      MessageDefinitionAllowedResponseComponent o = (MessageDefinitionAllowedResponseComponent) other_;
1126      return compareDeep(message, o.message, true) && compareDeep(situation, o.situation, true);
1127    }
1128
1129    @Override
1130    public boolean equalsShallow(Base other_) {
1131      if (!super.equalsShallow(other_))
1132        return false;
1133      if (!(other_ instanceof MessageDefinitionAllowedResponseComponent))
1134        return false;
1135      MessageDefinitionAllowedResponseComponent o = (MessageDefinitionAllowedResponseComponent) other_;
1136      return compareValues(situation, o.situation, true);
1137    }
1138
1139    public boolean isEmpty() {
1140      return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(message, situation);
1141    }
1142
1143    public String fhirType() {
1144      return "MessageDefinition.allowedResponse";
1145
1146    }
1147
1148  }
1149
1150  /**
1151   * A formal identifier that is used to identify this message definition when it
1152   * is represented in other formats, or referenced in a specification, model,
1153   * design or an instance.
1154   */
1155  @Child(name = "identifier", type = {
1156      Identifier.class }, order = 0, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
1157  @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.")
1158  protected List<Identifier> identifier;
1159
1160  /**
1161   * A MessageDefinition that is superseded by this definition.
1162   */
1163  @Child(name = "replaces", type = {
1164      CanonicalType.class }, order = 1, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
1165  @Description(shortDefinition = "Takes the place of", formalDefinition = "A MessageDefinition that is superseded by this definition.")
1166  protected List<CanonicalType> replaces;
1167
1168  /**
1169   * Explanation of why this message definition is needed and why it has been
1170   * designed as it has.
1171   */
1172  @Child(name = "purpose", type = { MarkdownType.class }, order = 2, min = 0, max = 1, modifier = false, summary = true)
1173  @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.")
1174  protected MarkdownType purpose;
1175
1176  /**
1177   * A copyright statement relating to the message definition and/or its contents.
1178   * Copyright statements are generally legal restrictions on the use and
1179   * publishing of the message definition.
1180   */
1181  @Child(name = "copyright", type = {
1182      MarkdownType.class }, order = 3, min = 0, max = 1, modifier = false, summary = false)
1183  @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.")
1184  protected MarkdownType copyright;
1185
1186  /**
1187   * The MessageDefinition that is the basis for the contents of this resource.
1188   */
1189  @Child(name = "base", type = { CanonicalType.class }, order = 4, min = 0, max = 1, modifier = false, summary = true)
1190  @Description(shortDefinition = "Definition this one is based on", formalDefinition = "The MessageDefinition that is the basis for the contents of this resource.")
1191  protected CanonicalType base;
1192
1193  /**
1194   * Identifies a protocol or workflow that this MessageDefinition represents a
1195   * step in.
1196   */
1197  @Child(name = "parent", type = {
1198      CanonicalType.class }, order = 5, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
1199  @Description(shortDefinition = "Protocol/workflow this is part of", formalDefinition = "Identifies a protocol or workflow that this MessageDefinition represents a step in.")
1200  protected List<CanonicalType> parent;
1201
1202  /**
1203   * Event code or link to the EventDefinition.
1204   */
1205  @Child(name = "event", type = { Coding.class,
1206      UriType.class }, order = 6, min = 1, max = 1, modifier = false, summary = true)
1207  @Description(shortDefinition = "Event code  or link to the EventDefinition", formalDefinition = "Event code or link to the EventDefinition.")
1208  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/message-events")
1209  protected Type event;
1210
1211  /**
1212   * The impact of the content of the message.
1213   */
1214  @Child(name = "category", type = { CodeType.class }, order = 7, min = 0, max = 1, modifier = false, summary = true)
1215  @Description(shortDefinition = "consequence | currency | notification", formalDefinition = "The impact of the content of the message.")
1216  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/message-significance-category")
1217  protected Enumeration<MessageSignificanceCategory> category;
1218
1219  /**
1220   * Identifies the resource (or resources) that are being addressed by the event.
1221   * For example, the Encounter for an admit message or two Account records for a
1222   * merge.
1223   */
1224  @Child(name = "focus", type = {}, order = 8, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = true)
1225  @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.")
1226  protected List<MessageDefinitionFocusComponent> focus;
1227
1228  /**
1229   * Declare at a message definition level whether a response is required or only
1230   * upon error or success, or never.
1231   */
1232  @Child(name = "responseRequired", type = {
1233      CodeType.class }, order = 9, min = 0, max = 1, modifier = false, summary = false)
1234  @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.")
1235  @ca.uhn.fhir.model.api.annotation.Binding(valueSet = "http://hl7.org/fhir/ValueSet/messageheader-response-request")
1236  protected Enumeration<MessageheaderResponseRequest> responseRequired;
1237
1238  /**
1239   * Indicates what types of messages may be sent as an application-level response
1240   * to this message.
1241   */
1242  @Child(name = "allowedResponse", type = {}, order = 10, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1243  @Description(shortDefinition = "Responses to this message", formalDefinition = "Indicates what types of messages may be sent as an application-level response to this message.")
1244  protected List<MessageDefinitionAllowedResponseComponent> allowedResponse;
1245
1246  /**
1247   * Canonical reference to a GraphDefinition. If a URL is provided, it is the
1248   * canonical reference to a [[[GraphDefinition]]] that it controls what
1249   * resources are to be added to the bundle when building the document. The
1250   * GraphDefinition can also specify profiles that apply to the various
1251   * resources.
1252   */
1253  @Child(name = "graph", type = {
1254      CanonicalType.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false)
1255  @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.")
1256  protected List<CanonicalType> graph;
1257
1258  private static final long serialVersionUID = 927775347L;
1259
1260  /**
1261   * Constructor
1262   */
1263  public MessageDefinition() {
1264    super();
1265  }
1266
1267  /**
1268   * Constructor
1269   */
1270  public MessageDefinition(Enumeration<PublicationStatus> status, DateTimeType date, Type event) {
1271    super();
1272    this.status = status;
1273    this.date = date;
1274    this.event = event;
1275  }
1276
1277  /**
1278   * @return {@link #url} (The business identifier that is used to reference the
1279   *         MessageDefinition and *is* expected to be consistent from server to
1280   *         server.). This is the underlying object with id, value and
1281   *         extensions. The accessor "getUrl" gives direct access to the value
1282   */
1283  public UriType getUrlElement() {
1284    if (this.url == null)
1285      if (Configuration.errorOnAutoCreate())
1286        throw new Error("Attempt to auto-create MessageDefinition.url");
1287      else if (Configuration.doAutoCreate())
1288        this.url = new UriType(); // bb
1289    return this.url;
1290  }
1291
1292  public boolean hasUrlElement() {
1293    return this.url != null && !this.url.isEmpty();
1294  }
1295
1296  public boolean hasUrl() {
1297    return this.url != null && !this.url.isEmpty();
1298  }
1299
1300  /**
1301   * @param value {@link #url} (The business identifier that is used to reference
1302   *              the MessageDefinition and *is* expected to be consistent from
1303   *              server to server.). This is the underlying object with id, value
1304   *              and extensions. The accessor "getUrl" gives direct access to the
1305   *              value
1306   */
1307  public MessageDefinition setUrlElement(UriType value) {
1308    this.url = value;
1309    return this;
1310  }
1311
1312  /**
1313   * @return The business identifier that is used to reference the
1314   *         MessageDefinition and *is* expected to be consistent from server to
1315   *         server.
1316   */
1317  public String getUrl() {
1318    return this.url == null ? null : this.url.getValue();
1319  }
1320
1321  /**
1322   * @param value The business identifier that is used to reference the
1323   *              MessageDefinition and *is* expected to be consistent from server
1324   *              to server.
1325   */
1326  public MessageDefinition setUrl(String value) {
1327    if (Utilities.noString(value))
1328      this.url = null;
1329    else {
1330      if (this.url == null)
1331        this.url = new UriType();
1332      this.url.setValue(value);
1333    }
1334    return this;
1335  }
1336
1337  /**
1338   * @return {@link #identifier} (A formal identifier that is used to identify
1339   *         this message definition when it is represented in other formats, or
1340   *         referenced in a specification, model, design or an instance.)
1341   */
1342  public List<Identifier> getIdentifier() {
1343    if (this.identifier == null)
1344      this.identifier = new ArrayList<Identifier>();
1345    return this.identifier;
1346  }
1347
1348  /**
1349   * @return Returns a reference to <code>this</code> for easy method chaining
1350   */
1351  public MessageDefinition setIdentifier(List<Identifier> theIdentifier) {
1352    this.identifier = theIdentifier;
1353    return this;
1354  }
1355
1356  public boolean hasIdentifier() {
1357    if (this.identifier == null)
1358      return false;
1359    for (Identifier item : this.identifier)
1360      if (!item.isEmpty())
1361        return true;
1362    return false;
1363  }
1364
1365  public Identifier addIdentifier() { // 3
1366    Identifier t = new Identifier();
1367    if (this.identifier == null)
1368      this.identifier = new ArrayList<Identifier>();
1369    this.identifier.add(t);
1370    return t;
1371  }
1372
1373  public MessageDefinition addIdentifier(Identifier t) { // 3
1374    if (t == null)
1375      return this;
1376    if (this.identifier == null)
1377      this.identifier = new ArrayList<Identifier>();
1378    this.identifier.add(t);
1379    return this;
1380  }
1381
1382  /**
1383   * @return The first repetition of repeating field {@link #identifier}, creating
1384   *         it if it does not already exist
1385   */
1386  public Identifier getIdentifierFirstRep() {
1387    if (getIdentifier().isEmpty()) {
1388      addIdentifier();
1389    }
1390    return getIdentifier().get(0);
1391  }
1392
1393  /**
1394   * @return {@link #version} (The identifier that is used to identify this
1395   *         version of the message definition when it is referenced in a
1396   *         specification, model, design or instance. This is an arbitrary value
1397   *         managed by the message definition author and is not expected to be
1398   *         globally unique. For example, it might be a timestamp (e.g. yyyymmdd)
1399   *         if a managed version is not available. There is also no expectation
1400   *         that versions can be placed in a lexicographical sequence.). This is
1401   *         the underlying object with id, value and extensions. The accessor
1402   *         "getVersion" gives direct access to the value
1403   */
1404  public StringType getVersionElement() {
1405    if (this.version == null)
1406      if (Configuration.errorOnAutoCreate())
1407        throw new Error("Attempt to auto-create MessageDefinition.version");
1408      else if (Configuration.doAutoCreate())
1409        this.version = new StringType(); // bb
1410    return this.version;
1411  }
1412
1413  public boolean hasVersionElement() {
1414    return this.version != null && !this.version.isEmpty();
1415  }
1416
1417  public boolean hasVersion() {
1418    return this.version != null && !this.version.isEmpty();
1419  }
1420
1421  /**
1422   * @param value {@link #version} (The identifier that is used to identify this
1423   *              version of the message definition when it is referenced in a
1424   *              specification, model, design or instance. This is an arbitrary
1425   *              value managed by the message definition author and is not
1426   *              expected to be globally unique. For example, it might be a
1427   *              timestamp (e.g. yyyymmdd) if a managed version is not available.
1428   *              There is also no expectation that versions can be placed in a
1429   *              lexicographical sequence.). This is the underlying object with
1430   *              id, value and extensions. The accessor "getVersion" gives direct
1431   *              access to the value
1432   */
1433  public MessageDefinition setVersionElement(StringType value) {
1434    this.version = value;
1435    return this;
1436  }
1437
1438  /**
1439   * @return The identifier that is used to identify this version of the message
1440   *         definition when it is referenced in a specification, model, design or
1441   *         instance. This is an arbitrary value managed by the message
1442   *         definition author and is not expected to be globally unique. For
1443   *         example, it might be a timestamp (e.g. yyyymmdd) if a managed version
1444   *         is not available. There is also no expectation that versions can be
1445   *         placed in a lexicographical sequence.
1446   */
1447  public String getVersion() {
1448    return this.version == null ? null : this.version.getValue();
1449  }
1450
1451  /**
1452   * @param value The identifier that is used to identify this version of the
1453   *              message definition when it is referenced in a specification,
1454   *              model, design or instance. This is an arbitrary value managed by
1455   *              the message definition author and is not expected to be globally
1456   *              unique. For example, it might be a timestamp (e.g. yyyymmdd) if
1457   *              a managed version is not available. There is also no expectation
1458   *              that versions can be placed in a lexicographical sequence.
1459   */
1460  public MessageDefinition setVersion(String value) {
1461    if (Utilities.noString(value))
1462      this.version = null;
1463    else {
1464      if (this.version == null)
1465        this.version = new StringType();
1466      this.version.setValue(value);
1467    }
1468    return this;
1469  }
1470
1471  /**
1472   * @return {@link #name} (A natural language name identifying the message
1473   *         definition. This name should be usable as an identifier for the
1474   *         module by machine processing applications such as code generation.).
1475   *         This is the underlying object with id, value and extensions. The
1476   *         accessor "getName" gives direct access to the value
1477   */
1478  public StringType getNameElement() {
1479    if (this.name == null)
1480      if (Configuration.errorOnAutoCreate())
1481        throw new Error("Attempt to auto-create MessageDefinition.name");
1482      else if (Configuration.doAutoCreate())
1483        this.name = new StringType(); // bb
1484    return this.name;
1485  }
1486
1487  public boolean hasNameElement() {
1488    return this.name != null && !this.name.isEmpty();
1489  }
1490
1491  public boolean hasName() {
1492    return this.name != null && !this.name.isEmpty();
1493  }
1494
1495  /**
1496   * @param value {@link #name} (A natural language name identifying the message
1497   *              definition. This name should be usable as an identifier for the
1498   *              module by machine processing applications such as code
1499   *              generation.). This is the underlying object with id, value and
1500   *              extensions. The accessor "getName" gives direct access to the
1501   *              value
1502   */
1503  public MessageDefinition setNameElement(StringType value) {
1504    this.name = value;
1505    return this;
1506  }
1507
1508  /**
1509   * @return A natural language name identifying the message definition. This name
1510   *         should be usable as an identifier for the module by machine
1511   *         processing applications such as code generation.
1512   */
1513  public String getName() {
1514    return this.name == null ? null : this.name.getValue();
1515  }
1516
1517  /**
1518   * @param value A natural language name identifying the message definition. This
1519   *              name should be usable as an identifier for the module by machine
1520   *              processing applications such as code generation.
1521   */
1522  public MessageDefinition setName(String value) {
1523    if (Utilities.noString(value))
1524      this.name = null;
1525    else {
1526      if (this.name == null)
1527        this.name = new StringType();
1528      this.name.setValue(value);
1529    }
1530    return this;
1531  }
1532
1533  /**
1534   * @return {@link #title} (A short, descriptive, user-friendly title for the
1535   *         message definition.). This is the underlying object with id, value
1536   *         and extensions. The accessor "getTitle" gives direct access to the
1537   *         value
1538   */
1539  public StringType getTitleElement() {
1540    if (this.title == null)
1541      if (Configuration.errorOnAutoCreate())
1542        throw new Error("Attempt to auto-create MessageDefinition.title");
1543      else if (Configuration.doAutoCreate())
1544        this.title = new StringType(); // bb
1545    return this.title;
1546  }
1547
1548  public boolean hasTitleElement() {
1549    return this.title != null && !this.title.isEmpty();
1550  }
1551
1552  public boolean hasTitle() {
1553    return this.title != null && !this.title.isEmpty();
1554  }
1555
1556  /**
1557   * @param value {@link #title} (A short, descriptive, user-friendly title for
1558   *              the message definition.). This is the underlying object with id,
1559   *              value and extensions. The accessor "getTitle" gives direct
1560   *              access to the value
1561   */
1562  public MessageDefinition setTitleElement(StringType value) {
1563    this.title = value;
1564    return this;
1565  }
1566
1567  /**
1568   * @return A short, descriptive, user-friendly title for the message definition.
1569   */
1570  public String getTitle() {
1571    return this.title == null ? null : this.title.getValue();
1572  }
1573
1574  /**
1575   * @param value A short, descriptive, user-friendly title for the message
1576   *              definition.
1577   */
1578  public MessageDefinition setTitle(String value) {
1579    if (Utilities.noString(value))
1580      this.title = null;
1581    else {
1582      if (this.title == null)
1583        this.title = new StringType();
1584      this.title.setValue(value);
1585    }
1586    return this;
1587  }
1588
1589  /**
1590   * @return {@link #replaces} (A MessageDefinition that is superseded by this
1591   *         definition.)
1592   */
1593  public List<CanonicalType> getReplaces() {
1594    if (this.replaces == null)
1595      this.replaces = new ArrayList<CanonicalType>();
1596    return this.replaces;
1597  }
1598
1599  /**
1600   * @return Returns a reference to <code>this</code> for easy method chaining
1601   */
1602  public MessageDefinition setReplaces(List<CanonicalType> theReplaces) {
1603    this.replaces = theReplaces;
1604    return this;
1605  }
1606
1607  public boolean hasReplaces() {
1608    if (this.replaces == null)
1609      return false;
1610    for (CanonicalType item : this.replaces)
1611      if (!item.isEmpty())
1612        return true;
1613    return false;
1614  }
1615
1616  /**
1617   * @return {@link #replaces} (A MessageDefinition that is superseded by this
1618   *         definition.)
1619   */
1620  public CanonicalType addReplacesElement() {// 2
1621    CanonicalType t = new CanonicalType();
1622    if (this.replaces == null)
1623      this.replaces = new ArrayList<CanonicalType>();
1624    this.replaces.add(t);
1625    return t;
1626  }
1627
1628  /**
1629   * @param value {@link #replaces} (A MessageDefinition that is superseded by
1630   *              this definition.)
1631   */
1632  public MessageDefinition addReplaces(String value) { // 1
1633    CanonicalType t = new CanonicalType();
1634    t.setValue(value);
1635    if (this.replaces == null)
1636      this.replaces = new ArrayList<CanonicalType>();
1637    this.replaces.add(t);
1638    return this;
1639  }
1640
1641  /**
1642   * @param value {@link #replaces} (A MessageDefinition that is superseded by
1643   *              this definition.)
1644   */
1645  public boolean hasReplaces(String value) {
1646    if (this.replaces == null)
1647      return false;
1648    for (CanonicalType v : this.replaces)
1649      if (v.getValue().equals(value)) // canonical(MessageDefinition)
1650        return true;
1651    return false;
1652  }
1653
1654  /**
1655   * @return {@link #status} (The status of this message definition. Enables
1656   *         tracking the life-cycle of the content.). This is the underlying
1657   *         object with id, value and extensions. The accessor "getStatus" gives
1658   *         direct access to the value
1659   */
1660  public Enumeration<PublicationStatus> getStatusElement() {
1661    if (this.status == null)
1662      if (Configuration.errorOnAutoCreate())
1663        throw new Error("Attempt to auto-create MessageDefinition.status");
1664      else if (Configuration.doAutoCreate())
1665        this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory()); // bb
1666    return this.status;
1667  }
1668
1669  public boolean hasStatusElement() {
1670    return this.status != null && !this.status.isEmpty();
1671  }
1672
1673  public boolean hasStatus() {
1674    return this.status != null && !this.status.isEmpty();
1675  }
1676
1677  /**
1678   * @param value {@link #status} (The status of this message definition. Enables
1679   *              tracking the life-cycle of the content.). This is the underlying
1680   *              object with id, value and extensions. The accessor "getStatus"
1681   *              gives direct access to the value
1682   */
1683  public MessageDefinition setStatusElement(Enumeration<PublicationStatus> value) {
1684    this.status = value;
1685    return this;
1686  }
1687
1688  /**
1689   * @return The status of this message definition. Enables tracking the
1690   *         life-cycle of the content.
1691   */
1692  public PublicationStatus getStatus() {
1693    return this.status == null ? null : this.status.getValue();
1694  }
1695
1696  /**
1697   * @param value The status of this message definition. Enables tracking the
1698   *              life-cycle of the content.
1699   */
1700  public MessageDefinition setStatus(PublicationStatus value) {
1701    if (this.status == null)
1702      this.status = new Enumeration<PublicationStatus>(new PublicationStatusEnumFactory());
1703    this.status.setValue(value);
1704    return this;
1705  }
1706
1707  /**
1708   * @return {@link #experimental} (A Boolean value to indicate that this message
1709   *         definition is authored for testing purposes (or
1710   *         education/evaluation/marketing) and is not intended to be used for
1711   *         genuine usage.). This is the underlying object with id, value and
1712   *         extensions. The accessor "getExperimental" gives direct access to the
1713   *         value
1714   */
1715  public BooleanType getExperimentalElement() {
1716    if (this.experimental == null)
1717      if (Configuration.errorOnAutoCreate())
1718        throw new Error("Attempt to auto-create MessageDefinition.experimental");
1719      else if (Configuration.doAutoCreate())
1720        this.experimental = new BooleanType(); // bb
1721    return this.experimental;
1722  }
1723
1724  public boolean hasExperimentalElement() {
1725    return this.experimental != null && !this.experimental.isEmpty();
1726  }
1727
1728  public boolean hasExperimental() {
1729    return this.experimental != null && !this.experimental.isEmpty();
1730  }
1731
1732  /**
1733   * @param value {@link #experimental} (A Boolean value to indicate that this
1734   *              message definition is authored for testing purposes (or
1735   *              education/evaluation/marketing) and is not intended to be used
1736   *              for genuine usage.). This is the underlying object with id,
1737   *              value and extensions. The accessor "getExperimental" gives
1738   *              direct access to the value
1739   */
1740  public MessageDefinition setExperimentalElement(BooleanType value) {
1741    this.experimental = value;
1742    return this;
1743  }
1744
1745  /**
1746   * @return A Boolean value to indicate that this message definition is authored
1747   *         for testing purposes (or education/evaluation/marketing) and is not
1748   *         intended to be used for genuine usage.
1749   */
1750  public boolean getExperimental() {
1751    return this.experimental == null || this.experimental.isEmpty() ? false : this.experimental.getValue();
1752  }
1753
1754  /**
1755   * @param value A Boolean value to indicate that this message definition is
1756   *              authored for testing purposes (or
1757   *              education/evaluation/marketing) and is not intended to be used
1758   *              for genuine usage.
1759   */
1760  public MessageDefinition setExperimental(boolean value) {
1761    if (this.experimental == null)
1762      this.experimental = new BooleanType();
1763    this.experimental.setValue(value);
1764    return this;
1765  }
1766
1767  /**
1768   * @return {@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. In
1771   *         addition, it should change when the substantive content of the
1772   *         message definition changes.). This is the underlying object with id,
1773   *         value and extensions. The accessor "getDate" gives direct access to
1774   *         the value
1775   */
1776  public DateTimeType getDateElement() {
1777    if (this.date == null)
1778      if (Configuration.errorOnAutoCreate())
1779        throw new Error("Attempt to auto-create MessageDefinition.date");
1780      else if (Configuration.doAutoCreate())
1781        this.date = new DateTimeType(); // bb
1782    return this.date;
1783  }
1784
1785  public boolean hasDateElement() {
1786    return this.date != null && !this.date.isEmpty();
1787  }
1788
1789  public boolean hasDate() {
1790    return this.date != null && !this.date.isEmpty();
1791  }
1792
1793  /**
1794   * @param value {@link #date} (The date (and optionally time) when the message
1795   *              definition was published. The date must change when the business
1796   *              version changes and it must change if the status code changes.
1797   *              In addition, it should change when the substantive content of
1798   *              the message definition changes.). This is the underlying object
1799   *              with id, value and extensions. The accessor "getDate" gives
1800   *              direct access to the value
1801   */
1802  public MessageDefinition setDateElement(DateTimeType value) {
1803    this.date = value;
1804    return this;
1805  }
1806
1807  /**
1808   * @return The date (and optionally time) when the message definition was
1809   *         published. The date must change when the business version changes and
1810   *         it must change if the status code changes. In addition, it should
1811   *         change when the substantive content of the message definition
1812   *         changes.
1813   */
1814  public Date getDate() {
1815    return this.date == null ? null : this.date.getValue();
1816  }
1817
1818  /**
1819   * @param value The date (and optionally time) when the message definition was
1820   *              published. The date must change when the business version
1821   *              changes and it must change if the status code changes. In
1822   *              addition, it should change when the substantive content of the
1823   *              message definition changes.
1824   */
1825  public MessageDefinition setDate(Date value) {
1826    if (this.date == null)
1827      this.date = new DateTimeType();
1828    this.date.setValue(value);
1829    return this;
1830  }
1831
1832  /**
1833   * @return {@link #publisher} (The name of the organization or individual that
1834   *         published the message definition.). This is the underlying object
1835   *         with id, value and extensions. The accessor "getPublisher" gives
1836   *         direct access to the value
1837   */
1838  public StringType getPublisherElement() {
1839    if (this.publisher == null)
1840      if (Configuration.errorOnAutoCreate())
1841        throw new Error("Attempt to auto-create MessageDefinition.publisher");
1842      else if (Configuration.doAutoCreate())
1843        this.publisher = new StringType(); // bb
1844    return this.publisher;
1845  }
1846
1847  public boolean hasPublisherElement() {
1848    return this.publisher != null && !this.publisher.isEmpty();
1849  }
1850
1851  public boolean hasPublisher() {
1852    return this.publisher != null && !this.publisher.isEmpty();
1853  }
1854
1855  /**
1856   * @param value {@link #publisher} (The name of the organization or individual
1857   *              that published the message definition.). This is the underlying
1858   *              object with id, value and extensions. The accessor
1859   *              "getPublisher" gives direct access to the value
1860   */
1861  public MessageDefinition setPublisherElement(StringType value) {
1862    this.publisher = value;
1863    return this;
1864  }
1865
1866  /**
1867   * @return The name of the organization or individual that published the message
1868   *         definition.
1869   */
1870  public String getPublisher() {
1871    return this.publisher == null ? null : this.publisher.getValue();
1872  }
1873
1874  /**
1875   * @param value The name of the organization or individual that published the
1876   *              message definition.
1877   */
1878  public MessageDefinition setPublisher(String value) {
1879    if (Utilities.noString(value))
1880      this.publisher = null;
1881    else {
1882      if (this.publisher == null)
1883        this.publisher = new StringType();
1884      this.publisher.setValue(value);
1885    }
1886    return this;
1887  }
1888
1889  /**
1890   * @return {@link #contact} (Contact details to assist a user in finding and
1891   *         communicating with the publisher.)
1892   */
1893  public List<ContactDetail> getContact() {
1894    if (this.contact == null)
1895      this.contact = new ArrayList<ContactDetail>();
1896    return this.contact;
1897  }
1898
1899  /**
1900   * @return Returns a reference to <code>this</code> for easy method chaining
1901   */
1902  public MessageDefinition setContact(List<ContactDetail> theContact) {
1903    this.contact = theContact;
1904    return this;
1905  }
1906
1907  public boolean hasContact() {
1908    if (this.contact == null)
1909      return false;
1910    for (ContactDetail item : this.contact)
1911      if (!item.isEmpty())
1912        return true;
1913    return false;
1914  }
1915
1916  public ContactDetail addContact() { // 3
1917    ContactDetail t = new ContactDetail();
1918    if (this.contact == null)
1919      this.contact = new ArrayList<ContactDetail>();
1920    this.contact.add(t);
1921    return t;
1922  }
1923
1924  public MessageDefinition addContact(ContactDetail t) { // 3
1925    if (t == null)
1926      return this;
1927    if (this.contact == null)
1928      this.contact = new ArrayList<ContactDetail>();
1929    this.contact.add(t);
1930    return this;
1931  }
1932
1933  /**
1934   * @return The first repetition of repeating field {@link #contact}, creating it
1935   *         if it does not already exist
1936   */
1937  public ContactDetail getContactFirstRep() {
1938    if (getContact().isEmpty()) {
1939      addContact();
1940    }
1941    return getContact().get(0);
1942  }
1943
1944  /**
1945   * @return {@link #description} (A free text natural language description of the
1946   *         message definition from a consumer's perspective.). This is the
1947   *         underlying object with id, value and extensions. The accessor
1948   *         "getDescription" gives direct access to the value
1949   */
1950  public MarkdownType getDescriptionElement() {
1951    if (this.description == null)
1952      if (Configuration.errorOnAutoCreate())
1953        throw new Error("Attempt to auto-create MessageDefinition.description");
1954      else if (Configuration.doAutoCreate())
1955        this.description = new MarkdownType(); // bb
1956    return this.description;
1957  }
1958
1959  public boolean hasDescriptionElement() {
1960    return this.description != null && !this.description.isEmpty();
1961  }
1962
1963  public boolean hasDescription() {
1964    return this.description != null && !this.description.isEmpty();
1965  }
1966
1967  /**
1968   * @param value {@link #description} (A free text natural language description
1969   *              of the message definition from a consumer's perspective.). This
1970   *              is the underlying object with id, value and extensions. The
1971   *              accessor "getDescription" gives direct access to the value
1972   */
1973  public MessageDefinition setDescriptionElement(MarkdownType value) {
1974    this.description = value;
1975    return this;
1976  }
1977
1978  /**
1979   * @return A free text natural language description of the message definition
1980   *         from a consumer's perspective.
1981   */
1982  public String getDescription() {
1983    return this.description == null ? null : this.description.getValue();
1984  }
1985
1986  /**
1987   * @param value A free text natural language description of the message
1988   *              definition from a consumer's perspective.
1989   */
1990  public MessageDefinition setDescription(String value) {
1991    if (value == null)
1992      this.description = null;
1993    else {
1994      if (this.description == null)
1995        this.description = new MarkdownType();
1996      this.description.setValue(value);
1997    }
1998    return this;
1999  }
2000
2001  /**
2002   * @return {@link #useContext} (The content was developed with a focus and
2003   *         intent of supporting the contexts that are listed. These contexts may
2004   *         be general categories (gender, age, ...) or may be references to
2005   *         specific programs (insurance plans, studies, ...) and may be used to
2006   *         assist with indexing and searching for appropriate message definition
2007   *         instances.)
2008   */
2009  public List<UsageContext> getUseContext() {
2010    if (this.useContext == null)
2011      this.useContext = new ArrayList<UsageContext>();
2012    return this.useContext;
2013  }
2014
2015  /**
2016   * @return Returns a reference to <code>this</code> for easy method chaining
2017   */
2018  public MessageDefinition setUseContext(List<UsageContext> theUseContext) {
2019    this.useContext = theUseContext;
2020    return this;
2021  }
2022
2023  public boolean hasUseContext() {
2024    if (this.useContext == null)
2025      return false;
2026    for (UsageContext item : this.useContext)
2027      if (!item.isEmpty())
2028        return true;
2029    return false;
2030  }
2031
2032  public UsageContext addUseContext() { // 3
2033    UsageContext t = new UsageContext();
2034    if (this.useContext == null)
2035      this.useContext = new ArrayList<UsageContext>();
2036    this.useContext.add(t);
2037    return t;
2038  }
2039
2040  public MessageDefinition addUseContext(UsageContext t) { // 3
2041    if (t == null)
2042      return this;
2043    if (this.useContext == null)
2044      this.useContext = new ArrayList<UsageContext>();
2045    this.useContext.add(t);
2046    return this;
2047  }
2048
2049  /**
2050   * @return The first repetition of repeating field {@link #useContext}, creating
2051   *         it if it does not already exist
2052   */
2053  public UsageContext getUseContextFirstRep() {
2054    if (getUseContext().isEmpty()) {
2055      addUseContext();
2056    }
2057    return getUseContext().get(0);
2058  }
2059
2060  /**
2061   * @return {@link #jurisdiction} (A legal or geographic region in which the
2062   *         message definition is intended to be used.)
2063   */
2064  public List<CodeableConcept> getJurisdiction() {
2065    if (this.jurisdiction == null)
2066      this.jurisdiction = new ArrayList<CodeableConcept>();
2067    return this.jurisdiction;
2068  }
2069
2070  /**
2071   * @return Returns a reference to <code>this</code> for easy method chaining
2072   */
2073  public MessageDefinition setJurisdiction(List<CodeableConcept> theJurisdiction) {
2074    this.jurisdiction = theJurisdiction;
2075    return this;
2076  }
2077
2078  public boolean hasJurisdiction() {
2079    if (this.jurisdiction == null)
2080      return false;
2081    for (CodeableConcept item : this.jurisdiction)
2082      if (!item.isEmpty())
2083        return true;
2084    return false;
2085  }
2086
2087  public CodeableConcept addJurisdiction() { // 3
2088    CodeableConcept t = new CodeableConcept();
2089    if (this.jurisdiction == null)
2090      this.jurisdiction = new ArrayList<CodeableConcept>();
2091    this.jurisdiction.add(t);
2092    return t;
2093  }
2094
2095  public MessageDefinition addJurisdiction(CodeableConcept t) { // 3
2096    if (t == null)
2097      return this;
2098    if (this.jurisdiction == null)
2099      this.jurisdiction = new ArrayList<CodeableConcept>();
2100    this.jurisdiction.add(t);
2101    return this;
2102  }
2103
2104  /**
2105   * @return The first repetition of repeating field {@link #jurisdiction},
2106   *         creating it if it does not already exist
2107   */
2108  public CodeableConcept getJurisdictionFirstRep() {
2109    if (getJurisdiction().isEmpty()) {
2110      addJurisdiction();
2111    }
2112    return getJurisdiction().get(0);
2113  }
2114
2115  /**
2116   * @return {@link #purpose} (Explanation of why this message definition is
2117   *         needed and why it has been designed as it has.). This is the
2118   *         underlying object with id, value and extensions. The accessor
2119   *         "getPurpose" gives direct access to the value
2120   */
2121  public MarkdownType getPurposeElement() {
2122    if (this.purpose == null)
2123      if (Configuration.errorOnAutoCreate())
2124        throw new Error("Attempt to auto-create MessageDefinition.purpose");
2125      else if (Configuration.doAutoCreate())
2126        this.purpose = new MarkdownType(); // bb
2127    return this.purpose;
2128  }
2129
2130  public boolean hasPurposeElement() {
2131    return this.purpose != null && !this.purpose.isEmpty();
2132  }
2133
2134  public boolean hasPurpose() {
2135    return this.purpose != null && !this.purpose.isEmpty();
2136  }
2137
2138  /**
2139   * @param value {@link #purpose} (Explanation of why this message definition is
2140   *              needed and why it has been designed as it has.). This is the
2141   *              underlying object with id, value and extensions. The accessor
2142   *              "getPurpose" gives direct access to the value
2143   */
2144  public MessageDefinition setPurposeElement(MarkdownType value) {
2145    this.purpose = value;
2146    return this;
2147  }
2148
2149  /**
2150   * @return Explanation of why this message definition is needed and why it has
2151   *         been designed as it has.
2152   */
2153  public String getPurpose() {
2154    return this.purpose == null ? null : this.purpose.getValue();
2155  }
2156
2157  /**
2158   * @param value Explanation of why this message definition is needed and why it
2159   *              has been designed as it has.
2160   */
2161  public MessageDefinition setPurpose(String value) {
2162    if (value == null)
2163      this.purpose = null;
2164    else {
2165      if (this.purpose == null)
2166        this.purpose = new MarkdownType();
2167      this.purpose.setValue(value);
2168    }
2169    return this;
2170  }
2171
2172  /**
2173   * @return {@link #copyright} (A copyright statement relating to the message
2174   *         definition and/or its contents. Copyright statements are generally
2175   *         legal restrictions on the use and publishing of the message
2176   *         definition.). This is the underlying object with id, value and
2177   *         extensions. The accessor "getCopyright" gives direct access to the
2178   *         value
2179   */
2180  public MarkdownType getCopyrightElement() {
2181    if (this.copyright == null)
2182      if (Configuration.errorOnAutoCreate())
2183        throw new Error("Attempt to auto-create MessageDefinition.copyright");
2184      else if (Configuration.doAutoCreate())
2185        this.copyright = new MarkdownType(); // bb
2186    return this.copyright;
2187  }
2188
2189  public boolean hasCopyrightElement() {
2190    return this.copyright != null && !this.copyright.isEmpty();
2191  }
2192
2193  public boolean hasCopyright() {
2194    return this.copyright != null && !this.copyright.isEmpty();
2195  }
2196
2197  /**
2198   * @param value {@link #copyright} (A copyright statement relating to the
2199   *              message definition and/or its contents. Copyright statements are
2200   *              generally legal restrictions on the use and publishing of the
2201   *              message definition.). This is the underlying object with id,
2202   *              value and extensions. The accessor "getCopyright" gives direct
2203   *              access to the value
2204   */
2205  public MessageDefinition setCopyrightElement(MarkdownType value) {
2206    this.copyright = value;
2207    return this;
2208  }
2209
2210  /**
2211   * @return A copyright statement relating to the message definition and/or its
2212   *         contents. Copyright statements are generally legal restrictions on
2213   *         the use and publishing of the message definition.
2214   */
2215  public String getCopyright() {
2216    return this.copyright == null ? null : this.copyright.getValue();
2217  }
2218
2219  /**
2220   * @param value A copyright statement relating to the message definition and/or
2221   *              its contents. Copyright statements are generally legal
2222   *              restrictions on the use and publishing of the message
2223   *              definition.
2224   */
2225  public MessageDefinition setCopyright(String value) {
2226    if (value == null)
2227      this.copyright = null;
2228    else {
2229      if (this.copyright == null)
2230        this.copyright = new MarkdownType();
2231      this.copyright.setValue(value);
2232    }
2233    return this;
2234  }
2235
2236  /**
2237   * @return {@link #base} (The MessageDefinition that is the basis for the
2238   *         contents of this resource.). This is the underlying object with id,
2239   *         value and extensions. The accessor "getBase" gives direct access to
2240   *         the value
2241   */
2242  public CanonicalType getBaseElement() {
2243    if (this.base == null)
2244      if (Configuration.errorOnAutoCreate())
2245        throw new Error("Attempt to auto-create MessageDefinition.base");
2246      else if (Configuration.doAutoCreate())
2247        this.base = new CanonicalType(); // bb
2248    return this.base;
2249  }
2250
2251  public boolean hasBaseElement() {
2252    return this.base != null && !this.base.isEmpty();
2253  }
2254
2255  public boolean hasBase() {
2256    return this.base != null && !this.base.isEmpty();
2257  }
2258
2259  /**
2260   * @param value {@link #base} (The MessageDefinition that is the basis for the
2261   *              contents of this resource.). This is the underlying object with
2262   *              id, value and extensions. The accessor "getBase" gives direct
2263   *              access to the value
2264   */
2265  public MessageDefinition setBaseElement(CanonicalType value) {
2266    this.base = value;
2267    return this;
2268  }
2269
2270  /**
2271   * @return The MessageDefinition that is the basis for the contents of this
2272   *         resource.
2273   */
2274  public String getBase() {
2275    return this.base == null ? null : this.base.getValue();
2276  }
2277
2278  /**
2279   * @param value The MessageDefinition that is the basis for the contents of this
2280   *              resource.
2281   */
2282  public MessageDefinition setBase(String value) {
2283    if (Utilities.noString(value))
2284      this.base = null;
2285    else {
2286      if (this.base == null)
2287        this.base = new CanonicalType();
2288      this.base.setValue(value);
2289    }
2290    return this;
2291  }
2292
2293  /**
2294   * @return {@link #parent} (Identifies a protocol or workflow that this
2295   *         MessageDefinition represents a step in.)
2296   */
2297  public List<CanonicalType> getParent() {
2298    if (this.parent == null)
2299      this.parent = new ArrayList<CanonicalType>();
2300    return this.parent;
2301  }
2302
2303  /**
2304   * @return Returns a reference to <code>this</code> for easy method chaining
2305   */
2306  public MessageDefinition setParent(List<CanonicalType> theParent) {
2307    this.parent = theParent;
2308    return this;
2309  }
2310
2311  public boolean hasParent() {
2312    if (this.parent == null)
2313      return false;
2314    for (CanonicalType item : this.parent)
2315      if (!item.isEmpty())
2316        return true;
2317    return false;
2318  }
2319
2320  /**
2321   * @return {@link #parent} (Identifies a protocol or workflow that this
2322   *         MessageDefinition represents a step in.)
2323   */
2324  public CanonicalType addParentElement() {// 2
2325    CanonicalType t = new CanonicalType();
2326    if (this.parent == null)
2327      this.parent = new ArrayList<CanonicalType>();
2328    this.parent.add(t);
2329    return t;
2330  }
2331
2332  /**
2333   * @param value {@link #parent} (Identifies a protocol or workflow that this
2334   *              MessageDefinition represents a step in.)
2335   */
2336  public MessageDefinition addParent(String value) { // 1
2337    CanonicalType t = new CanonicalType();
2338    t.setValue(value);
2339    if (this.parent == null)
2340      this.parent = new ArrayList<CanonicalType>();
2341    this.parent.add(t);
2342    return this;
2343  }
2344
2345  /**
2346   * @param value {@link #parent} (Identifies a protocol or workflow that this
2347   *              MessageDefinition represents a step in.)
2348   */
2349  public boolean hasParent(String value) {
2350    if (this.parent == null)
2351      return false;
2352    for (CanonicalType v : this.parent)
2353      if (v.getValue().equals(value)) // canonical(ActivityDefinition|PlanDefinition)
2354        return true;
2355    return false;
2356  }
2357
2358  /**
2359   * @return {@link #event} (Event code or link to the EventDefinition.)
2360   */
2361  public Type getEvent() {
2362    return this.event;
2363  }
2364
2365  /**
2366   * @return {@link #event} (Event code or link to the EventDefinition.)
2367   */
2368  public Coding getEventCoding() throws FHIRException {
2369    if (this.event == null)
2370      this.event = new Coding();
2371    if (!(this.event instanceof Coding))
2372      throw new FHIRException(
2373          "Type mismatch: the type Coding was expected, but " + this.event.getClass().getName() + " was encountered");
2374    return (Coding) this.event;
2375  }
2376
2377  public boolean hasEventCoding() {
2378    return this != null && this.event instanceof Coding;
2379  }
2380
2381  /**
2382   * @return {@link #event} (Event code or link to the EventDefinition.)
2383   */
2384  public UriType getEventUriType() throws FHIRException {
2385    if (this.event == null)
2386      this.event = new UriType();
2387    if (!(this.event instanceof UriType))
2388      throw new FHIRException(
2389          "Type mismatch: the type UriType was expected, but " + this.event.getClass().getName() + " was encountered");
2390    return (UriType) this.event;
2391  }
2392
2393  public boolean hasEventUriType() {
2394    return this != null && this.event instanceof UriType;
2395  }
2396
2397  public boolean hasEvent() {
2398    return this.event != null && !this.event.isEmpty();
2399  }
2400
2401  /**
2402   * @param value {@link #event} (Event code or link to the EventDefinition.)
2403   */
2404  public MessageDefinition setEvent(Type value) {
2405    if (value != null && !(value instanceof Coding || value instanceof UriType))
2406      throw new Error("Not the right type for MessageDefinition.event[x]: " + value.fhirType());
2407    this.event = value;
2408    return this;
2409  }
2410
2411  /**
2412   * @return {@link #category} (The impact of the content of the message.). This
2413   *         is the underlying object with id, value and extensions. The accessor
2414   *         "getCategory" gives direct access to the value
2415   */
2416  public Enumeration<MessageSignificanceCategory> getCategoryElement() {
2417    if (this.category == null)
2418      if (Configuration.errorOnAutoCreate())
2419        throw new Error("Attempt to auto-create MessageDefinition.category");
2420      else if (Configuration.doAutoCreate())
2421        this.category = new Enumeration<MessageSignificanceCategory>(new MessageSignificanceCategoryEnumFactory()); // bb
2422    return this.category;
2423  }
2424
2425  public boolean hasCategoryElement() {
2426    return this.category != null && !this.category.isEmpty();
2427  }
2428
2429  public boolean hasCategory() {
2430    return this.category != null && !this.category.isEmpty();
2431  }
2432
2433  /**
2434   * @param value {@link #category} (The impact of the content of the message.).
2435   *              This is the underlying object with id, value and extensions. The
2436   *              accessor "getCategory" gives direct access to the value
2437   */
2438  public MessageDefinition setCategoryElement(Enumeration<MessageSignificanceCategory> value) {
2439    this.category = value;
2440    return this;
2441  }
2442
2443  /**
2444   * @return The impact of the content of the message.
2445   */
2446  public MessageSignificanceCategory getCategory() {
2447    return this.category == null ? null : this.category.getValue();
2448  }
2449
2450  /**
2451   * @param value The impact of the content of the message.
2452   */
2453  public MessageDefinition setCategory(MessageSignificanceCategory value) {
2454    if (value == null)
2455      this.category = null;
2456    else {
2457      if (this.category == null)
2458        this.category = new Enumeration<MessageSignificanceCategory>(new MessageSignificanceCategoryEnumFactory());
2459      this.category.setValue(value);
2460    }
2461    return this;
2462  }
2463
2464  /**
2465   * @return {@link #focus} (Identifies the resource (or resources) that are being
2466   *         addressed by the event. For example, the Encounter for an admit
2467   *         message or two Account records for a merge.)
2468   */
2469  public List<MessageDefinitionFocusComponent> getFocus() {
2470    if (this.focus == null)
2471      this.focus = new ArrayList<MessageDefinitionFocusComponent>();
2472    return this.focus;
2473  }
2474
2475  /**
2476   * @return Returns a reference to <code>this</code> for easy method chaining
2477   */
2478  public MessageDefinition setFocus(List<MessageDefinitionFocusComponent> theFocus) {
2479    this.focus = theFocus;
2480    return this;
2481  }
2482
2483  public boolean hasFocus() {
2484    if (this.focus == null)
2485      return false;
2486    for (MessageDefinitionFocusComponent item : this.focus)
2487      if (!item.isEmpty())
2488        return true;
2489    return false;
2490  }
2491
2492  public MessageDefinitionFocusComponent addFocus() { // 3
2493    MessageDefinitionFocusComponent t = new MessageDefinitionFocusComponent();
2494    if (this.focus == null)
2495      this.focus = new ArrayList<MessageDefinitionFocusComponent>();
2496    this.focus.add(t);
2497    return t;
2498  }
2499
2500  public MessageDefinition addFocus(MessageDefinitionFocusComponent t) { // 3
2501    if (t == null)
2502      return this;
2503    if (this.focus == null)
2504      this.focus = new ArrayList<MessageDefinitionFocusComponent>();
2505    this.focus.add(t);
2506    return this;
2507  }
2508
2509  /**
2510   * @return The first repetition of repeating field {@link #focus}, creating it
2511   *         if it does not already exist
2512   */
2513  public MessageDefinitionFocusComponent getFocusFirstRep() {
2514    if (getFocus().isEmpty()) {
2515      addFocus();
2516    }
2517    return getFocus().get(0);
2518  }
2519
2520  /**
2521   * @return {@link #responseRequired} (Declare at a message definition level
2522   *         whether a response is required or only upon error or success, or
2523   *         never.). This is the underlying object with id, value and extensions.
2524   *         The accessor "getResponseRequired" gives direct access to the value
2525   */
2526  public Enumeration<MessageheaderResponseRequest> getResponseRequiredElement() {
2527    if (this.responseRequired == null)
2528      if (Configuration.errorOnAutoCreate())
2529        throw new Error("Attempt to auto-create MessageDefinition.responseRequired");
2530      else if (Configuration.doAutoCreate())
2531        this.responseRequired = new Enumeration<MessageheaderResponseRequest>(
2532            new MessageheaderResponseRequestEnumFactory()); // bb
2533    return this.responseRequired;
2534  }
2535
2536  public boolean hasResponseRequiredElement() {
2537    return this.responseRequired != null && !this.responseRequired.isEmpty();
2538  }
2539
2540  public boolean hasResponseRequired() {
2541    return this.responseRequired != null && !this.responseRequired.isEmpty();
2542  }
2543
2544  /**
2545   * @param value {@link #responseRequired} (Declare at a message definition level
2546   *              whether a response is required or only upon error or success, or
2547   *              never.). This is the underlying object with id, value and
2548   *              extensions. The accessor "getResponseRequired" gives direct
2549   *              access to the value
2550   */
2551  public MessageDefinition setResponseRequiredElement(Enumeration<MessageheaderResponseRequest> value) {
2552    this.responseRequired = value;
2553    return this;
2554  }
2555
2556  /**
2557   * @return Declare at a message definition level whether a response is required
2558   *         or only upon error or success, or never.
2559   */
2560  public MessageheaderResponseRequest getResponseRequired() {
2561    return this.responseRequired == null ? null : this.responseRequired.getValue();
2562  }
2563
2564  /**
2565   * @param value Declare at a message definition level whether a response is
2566   *              required or only upon error or success, or never.
2567   */
2568  public MessageDefinition setResponseRequired(MessageheaderResponseRequest value) {
2569    if (value == null)
2570      this.responseRequired = null;
2571    else {
2572      if (this.responseRequired == null)
2573        this.responseRequired = new Enumeration<MessageheaderResponseRequest>(
2574            new MessageheaderResponseRequestEnumFactory());
2575      this.responseRequired.setValue(value);
2576    }
2577    return this;
2578  }
2579
2580  /**
2581   * @return {@link #allowedResponse} (Indicates what types of messages may be
2582   *         sent as an application-level response to this message.)
2583   */
2584  public List<MessageDefinitionAllowedResponseComponent> getAllowedResponse() {
2585    if (this.allowedResponse == null)
2586      this.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
2587    return this.allowedResponse;
2588  }
2589
2590  /**
2591   * @return Returns a reference to <code>this</code> for easy method chaining
2592   */
2593  public MessageDefinition setAllowedResponse(List<MessageDefinitionAllowedResponseComponent> theAllowedResponse) {
2594    this.allowedResponse = theAllowedResponse;
2595    return this;
2596  }
2597
2598  public boolean hasAllowedResponse() {
2599    if (this.allowedResponse == null)
2600      return false;
2601    for (MessageDefinitionAllowedResponseComponent item : this.allowedResponse)
2602      if (!item.isEmpty())
2603        return true;
2604    return false;
2605  }
2606
2607  public MessageDefinitionAllowedResponseComponent addAllowedResponse() { // 3
2608    MessageDefinitionAllowedResponseComponent t = new MessageDefinitionAllowedResponseComponent();
2609    if (this.allowedResponse == null)
2610      this.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
2611    this.allowedResponse.add(t);
2612    return t;
2613  }
2614
2615  public MessageDefinition addAllowedResponse(MessageDefinitionAllowedResponseComponent t) { // 3
2616    if (t == null)
2617      return this;
2618    if (this.allowedResponse == null)
2619      this.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
2620    this.allowedResponse.add(t);
2621    return this;
2622  }
2623
2624  /**
2625   * @return The first repetition of repeating field {@link #allowedResponse},
2626   *         creating it if it does not already exist
2627   */
2628  public MessageDefinitionAllowedResponseComponent getAllowedResponseFirstRep() {
2629    if (getAllowedResponse().isEmpty()) {
2630      addAllowedResponse();
2631    }
2632    return getAllowedResponse().get(0);
2633  }
2634
2635  /**
2636   * @return {@link #graph} (Canonical reference to a GraphDefinition. If a URL is
2637   *         provided, it is the canonical reference to a [[[GraphDefinition]]]
2638   *         that it controls what resources are to be added to the bundle when
2639   *         building the document. The GraphDefinition can also specify profiles
2640   *         that apply to the various resources.)
2641   */
2642  public List<CanonicalType> getGraph() {
2643    if (this.graph == null)
2644      this.graph = new ArrayList<CanonicalType>();
2645    return this.graph;
2646  }
2647
2648  /**
2649   * @return Returns a reference to <code>this</code> for easy method chaining
2650   */
2651  public MessageDefinition setGraph(List<CanonicalType> theGraph) {
2652    this.graph = theGraph;
2653    return this;
2654  }
2655
2656  public boolean hasGraph() {
2657    if (this.graph == null)
2658      return false;
2659    for (CanonicalType item : this.graph)
2660      if (!item.isEmpty())
2661        return true;
2662    return false;
2663  }
2664
2665  /**
2666   * @return {@link #graph} (Canonical reference to a GraphDefinition. If a URL is
2667   *         provided, it is the canonical reference to a [[[GraphDefinition]]]
2668   *         that it controls what resources are to be added to the bundle when
2669   *         building the document. The GraphDefinition can also specify profiles
2670   *         that apply to the various resources.)
2671   */
2672  public CanonicalType addGraphElement() {// 2
2673    CanonicalType t = new CanonicalType();
2674    if (this.graph == null)
2675      this.graph = new ArrayList<CanonicalType>();
2676    this.graph.add(t);
2677    return t;
2678  }
2679
2680  /**
2681   * @param value {@link #graph} (Canonical reference to a GraphDefinition. If a
2682   *              URL is provided, it is the canonical reference to a
2683   *              [[[GraphDefinition]]] that it controls what resources are to be
2684   *              added to the bundle when building the document. The
2685   *              GraphDefinition can also specify profiles that apply to the
2686   *              various resources.)
2687   */
2688  public MessageDefinition addGraph(String value) { // 1
2689    CanonicalType t = new CanonicalType();
2690    t.setValue(value);
2691    if (this.graph == null)
2692      this.graph = new ArrayList<CanonicalType>();
2693    this.graph.add(t);
2694    return this;
2695  }
2696
2697  /**
2698   * @param value {@link #graph} (Canonical reference to a GraphDefinition. If a
2699   *              URL is provided, it is the canonical reference to a
2700   *              [[[GraphDefinition]]] that it controls what resources are to be
2701   *              added to the bundle when building the document. The
2702   *              GraphDefinition can also specify profiles that apply to the
2703   *              various resources.)
2704   */
2705  public boolean hasGraph(String value) {
2706    if (this.graph == null)
2707      return false;
2708    for (CanonicalType v : this.graph)
2709      if (v.getValue().equals(value)) // canonical(GraphDefinition)
2710        return true;
2711    return false;
2712  }
2713
2714  protected void listChildren(List<Property> children) {
2715    super.listChildren(children);
2716    children.add(new Property("url", "uri",
2717        "The business identifier that is used to reference the MessageDefinition and *is* expected to be consistent from server to server.",
2718        0, 1, url));
2719    children.add(new Property("identifier", "Identifier",
2720        "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.",
2721        0, java.lang.Integer.MAX_VALUE, identifier));
2722    children.add(new Property("version", "string",
2723        "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.",
2724        0, 1, version));
2725    children.add(new Property("name", "string",
2726        "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.",
2727        0, 1, name));
2728    children.add(new Property("title", "string",
2729        "A short, descriptive, user-friendly title for the message definition.", 0, 1, title));
2730    children.add(new Property("replaces", "canonical(MessageDefinition)",
2731        "A MessageDefinition that is superseded by this definition.", 0, java.lang.Integer.MAX_VALUE, replaces));
2732    children.add(new Property("status", "code",
2733        "The status of this message definition. Enables tracking the life-cycle of the content.", 0, 1, status));
2734    children.add(new Property("experimental", "boolean",
2735        "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.",
2736        0, 1, experimental));
2737    children.add(new Property("date", "dateTime",
2738        "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.",
2739        0, 1, date));
2740    children.add(new Property("publisher", "string",
2741        "The name of the organization or individual that published the message definition.", 0, 1, publisher));
2742    children.add(new Property("contact", "ContactDetail",
2743        "Contact details to assist a user in finding and communicating with the publisher.", 0,
2744        java.lang.Integer.MAX_VALUE, contact));
2745    children.add(new Property("description", "markdown",
2746        "A free text natural language description of the message definition from a consumer's perspective.", 0, 1,
2747        description));
2748    children.add(new Property("useContext", "UsageContext",
2749        "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.",
2750        0, java.lang.Integer.MAX_VALUE, useContext));
2751    children.add(new Property("jurisdiction", "CodeableConcept",
2752        "A legal or geographic region in which the message definition is intended to be used.", 0,
2753        java.lang.Integer.MAX_VALUE, jurisdiction));
2754    children.add(new Property("purpose", "markdown",
2755        "Explanation of why this message definition is needed and why it has been designed as it has.", 0, 1, purpose));
2756    children.add(new Property("copyright", "markdown",
2757        "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.",
2758        0, 1, copyright));
2759    children.add(new Property("base", "canonical(MessageDefinition)",
2760        "The MessageDefinition that is the basis for the contents of this resource.", 0, 1, base));
2761    children.add(new Property("parent", "canonical(ActivityDefinition|PlanDefinition)",
2762        "Identifies a protocol or workflow that this MessageDefinition represents a step in.", 0,
2763        java.lang.Integer.MAX_VALUE, parent));
2764    children.add(new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1, event));
2765    children.add(new Property("category", "code", "The impact of the content of the message.", 0, 1, category));
2766    children.add(new Property("focus", "",
2767        "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.",
2768        0, java.lang.Integer.MAX_VALUE, focus));
2769    children.add(new Property("responseRequired", "code",
2770        "Declare at a message definition level whether a response is required or only upon error or success, or never.",
2771        0, 1, responseRequired));
2772    children.add(new Property("allowedResponse", "",
2773        "Indicates what types of messages may be sent as an application-level response to this message.", 0,
2774        java.lang.Integer.MAX_VALUE, allowedResponse));
2775    children.add(new Property("graph", "canonical(GraphDefinition)",
2776        "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.",
2777        0, java.lang.Integer.MAX_VALUE, graph));
2778  }
2779
2780  @Override
2781  public Property getNamedProperty(int _hash, String _name, boolean _checkValid) throws FHIRException {
2782    switch (_hash) {
2783    case 116079:
2784      /* url */ return new Property("url", "uri",
2785          "The business identifier that is used to reference the MessageDefinition and *is* expected to be consistent from server to server.",
2786          0, 1, url);
2787    case -1618432855:
2788      /* identifier */ return new Property("identifier", "Identifier",
2789          "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.",
2790          0, java.lang.Integer.MAX_VALUE, identifier);
2791    case 351608024:
2792      /* version */ return new Property("version", "string",
2793          "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.",
2794          0, 1, version);
2795    case 3373707:
2796      /* name */ return new Property("name", "string",
2797          "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.",
2798          0, 1, name);
2799    case 110371416:
2800      /* title */ return new Property("title", "string",
2801          "A short, descriptive, user-friendly title for the message definition.", 0, 1, title);
2802    case -430332865:
2803      /* replaces */ return new Property("replaces", "canonical(MessageDefinition)",
2804          "A MessageDefinition that is superseded by this definition.", 0, java.lang.Integer.MAX_VALUE, replaces);
2805    case -892481550:
2806      /* status */ return new Property("status", "code",
2807          "The status of this message definition. Enables tracking the life-cycle of the content.", 0, 1, status);
2808    case -404562712:
2809      /* experimental */ return new Property("experimental", "boolean",
2810          "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.",
2811          0, 1, experimental);
2812    case 3076014:
2813      /* date */ return new Property("date", "dateTime",
2814          "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.",
2815          0, 1, date);
2816    case 1447404028:
2817      /* publisher */ return new Property("publisher", "string",
2818          "The name of the organization or individual that published the message definition.", 0, 1, publisher);
2819    case 951526432:
2820      /* contact */ return new Property("contact", "ContactDetail",
2821          "Contact details to assist a user in finding and communicating with the publisher.", 0,
2822          java.lang.Integer.MAX_VALUE, contact);
2823    case -1724546052:
2824      /* description */ return new Property("description", "markdown",
2825          "A free text natural language description of the message definition from a consumer's perspective.", 0, 1,
2826          description);
2827    case -669707736:
2828      /* useContext */ return new Property("useContext", "UsageContext",
2829          "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.",
2830          0, java.lang.Integer.MAX_VALUE, useContext);
2831    case -507075711:
2832      /* jurisdiction */ return new Property("jurisdiction", "CodeableConcept",
2833          "A legal or geographic region in which the message definition is intended to be used.", 0,
2834          java.lang.Integer.MAX_VALUE, jurisdiction);
2835    case -220463842:
2836      /* purpose */ return new Property("purpose", "markdown",
2837          "Explanation of why this message definition is needed and why it has been designed as it has.", 0, 1,
2838          purpose);
2839    case 1522889671:
2840      /* copyright */ return new Property("copyright", "markdown",
2841          "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.",
2842          0, 1, copyright);
2843    case 3016401:
2844      /* base */ return new Property("base", "canonical(MessageDefinition)",
2845          "The MessageDefinition that is the basis for the contents of this resource.", 0, 1, base);
2846    case -995424086:
2847      /* parent */ return new Property("parent", "canonical(ActivityDefinition|PlanDefinition)",
2848          "Identifies a protocol or workflow that this MessageDefinition represents a step in.", 0,
2849          java.lang.Integer.MAX_VALUE, parent);
2850    case 278115238:
2851      /* event[x] */ return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1,
2852          event);
2853    case 96891546:
2854      /* event */ return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1,
2855          event);
2856    case -355957084:
2857      /* eventCoding */ return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0,
2858          1, event);
2859    case 278109298:
2860      /* eventUri */ return new Property("event[x]", "Coding|uri", "Event code or link to the EventDefinition.", 0, 1,
2861          event);
2862    case 50511102:
2863      /* category */ return new Property("category", "code", "The impact of the content of the message.", 0, 1,
2864          category);
2865    case 97604824:
2866      /* focus */ return new Property("focus", "",
2867          "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.",
2868          0, java.lang.Integer.MAX_VALUE, focus);
2869    case 791597824:
2870      /* responseRequired */ return new Property("responseRequired", "code",
2871          "Declare at a message definition level whether a response is required or only upon error or success, or never.",
2872          0, 1, responseRequired);
2873    case -1130933751:
2874      /* allowedResponse */ return new Property("allowedResponse", "",
2875          "Indicates what types of messages may be sent as an application-level response to this message.", 0,
2876          java.lang.Integer.MAX_VALUE, allowedResponse);
2877    case 98615630:
2878      /* graph */ return new Property("graph", "canonical(GraphDefinition)",
2879          "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.",
2880          0, java.lang.Integer.MAX_VALUE, graph);
2881    default:
2882      return super.getNamedProperty(_hash, _name, _checkValid);
2883    }
2884
2885  }
2886
2887  @Override
2888  public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
2889    switch (hash) {
2890    case 116079:
2891      /* url */ return this.url == null ? new Base[0] : new Base[] { this.url }; // UriType
2892    case -1618432855:
2893      /* identifier */ return this.identifier == null ? new Base[0]
2894          : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
2895    case 351608024:
2896      /* version */ return this.version == null ? new Base[0] : new Base[] { this.version }; // StringType
2897    case 3373707:
2898      /* name */ return this.name == null ? new Base[0] : new Base[] { this.name }; // StringType
2899    case 110371416:
2900      /* title */ return this.title == null ? new Base[0] : new Base[] { this.title }; // StringType
2901    case -430332865:
2902      /* replaces */ return this.replaces == null ? new Base[0] : this.replaces.toArray(new Base[this.replaces.size()]); // CanonicalType
2903    case -892481550:
2904      /* status */ return this.status == null ? new Base[0] : new Base[] { this.status }; // Enumeration<PublicationStatus>
2905    case -404562712:
2906      /* experimental */ return this.experimental == null ? new Base[0] : new Base[] { this.experimental }; // BooleanType
2907    case 3076014:
2908      /* date */ return this.date == null ? new Base[0] : new Base[] { this.date }; // DateTimeType
2909    case 1447404028:
2910      /* publisher */ return this.publisher == null ? new Base[0] : new Base[] { this.publisher }; // StringType
2911    case 951526432:
2912      /* contact */ return this.contact == null ? new Base[0] : this.contact.toArray(new Base[this.contact.size()]); // ContactDetail
2913    case -1724546052:
2914      /* description */ return this.description == null ? new Base[0] : new Base[] { this.description }; // MarkdownType
2915    case -669707736:
2916      /* useContext */ return this.useContext == null ? new Base[0]
2917          : this.useContext.toArray(new Base[this.useContext.size()]); // UsageContext
2918    case -507075711:
2919      /* jurisdiction */ return this.jurisdiction == null ? new Base[0]
2920          : this.jurisdiction.toArray(new Base[this.jurisdiction.size()]); // CodeableConcept
2921    case -220463842:
2922      /* purpose */ return this.purpose == null ? new Base[0] : new Base[] { this.purpose }; // MarkdownType
2923    case 1522889671:
2924      /* copyright */ return this.copyright == null ? new Base[0] : new Base[] { this.copyright }; // MarkdownType
2925    case 3016401:
2926      /* base */ return this.base == null ? new Base[0] : new Base[] { this.base }; // CanonicalType
2927    case -995424086:
2928      /* parent */ return this.parent == null ? new Base[0] : this.parent.toArray(new Base[this.parent.size()]); // CanonicalType
2929    case 96891546:
2930      /* event */ return this.event == null ? new Base[0] : new Base[] { this.event }; // Type
2931    case 50511102:
2932      /* category */ return this.category == null ? new Base[0] : new Base[] { this.category }; // Enumeration<MessageSignificanceCategory>
2933    case 97604824:
2934      /* focus */ return this.focus == null ? new Base[0] : this.focus.toArray(new Base[this.focus.size()]); // MessageDefinitionFocusComponent
2935    case 791597824:
2936      /* responseRequired */ return this.responseRequired == null ? new Base[0] : new Base[] { this.responseRequired }; // Enumeration<MessageheaderResponseRequest>
2937    case -1130933751:
2938      /* allowedResponse */ return this.allowedResponse == null ? new Base[0]
2939          : this.allowedResponse.toArray(new Base[this.allowedResponse.size()]); // MessageDefinitionAllowedResponseComponent
2940    case 98615630:
2941      /* graph */ return this.graph == null ? new Base[0] : this.graph.toArray(new Base[this.graph.size()]); // CanonicalType
2942    default:
2943      return super.getProperty(hash, name, checkValid);
2944    }
2945
2946  }
2947
2948  @Override
2949  public Base setProperty(int hash, String name, Base value) throws FHIRException {
2950    switch (hash) {
2951    case 116079: // url
2952      this.url = castToUri(value); // UriType
2953      return value;
2954    case -1618432855: // identifier
2955      this.getIdentifier().add(castToIdentifier(value)); // Identifier
2956      return value;
2957    case 351608024: // version
2958      this.version = castToString(value); // StringType
2959      return value;
2960    case 3373707: // name
2961      this.name = castToString(value); // StringType
2962      return value;
2963    case 110371416: // title
2964      this.title = castToString(value); // StringType
2965      return value;
2966    case -430332865: // replaces
2967      this.getReplaces().add(castToCanonical(value)); // CanonicalType
2968      return value;
2969    case -892481550: // status
2970      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
2971      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
2972      return value;
2973    case -404562712: // experimental
2974      this.experimental = castToBoolean(value); // BooleanType
2975      return value;
2976    case 3076014: // date
2977      this.date = castToDateTime(value); // DateTimeType
2978      return value;
2979    case 1447404028: // publisher
2980      this.publisher = castToString(value); // StringType
2981      return value;
2982    case 951526432: // contact
2983      this.getContact().add(castToContactDetail(value)); // ContactDetail
2984      return value;
2985    case -1724546052: // description
2986      this.description = castToMarkdown(value); // MarkdownType
2987      return value;
2988    case -669707736: // useContext
2989      this.getUseContext().add(castToUsageContext(value)); // UsageContext
2990      return value;
2991    case -507075711: // jurisdiction
2992      this.getJurisdiction().add(castToCodeableConcept(value)); // CodeableConcept
2993      return value;
2994    case -220463842: // purpose
2995      this.purpose = castToMarkdown(value); // MarkdownType
2996      return value;
2997    case 1522889671: // copyright
2998      this.copyright = castToMarkdown(value); // MarkdownType
2999      return value;
3000    case 3016401: // base
3001      this.base = castToCanonical(value); // CanonicalType
3002      return value;
3003    case -995424086: // parent
3004      this.getParent().add(castToCanonical(value)); // CanonicalType
3005      return value;
3006    case 96891546: // event
3007      this.event = castToType(value); // Type
3008      return value;
3009    case 50511102: // category
3010      value = new MessageSignificanceCategoryEnumFactory().fromType(castToCode(value));
3011      this.category = (Enumeration) value; // Enumeration<MessageSignificanceCategory>
3012      return value;
3013    case 97604824: // focus
3014      this.getFocus().add((MessageDefinitionFocusComponent) value); // MessageDefinitionFocusComponent
3015      return value;
3016    case 791597824: // responseRequired
3017      value = new MessageheaderResponseRequestEnumFactory().fromType(castToCode(value));
3018      this.responseRequired = (Enumeration) value; // Enumeration<MessageheaderResponseRequest>
3019      return value;
3020    case -1130933751: // allowedResponse
3021      this.getAllowedResponse().add((MessageDefinitionAllowedResponseComponent) value); // MessageDefinitionAllowedResponseComponent
3022      return value;
3023    case 98615630: // graph
3024      this.getGraph().add(castToCanonical(value)); // CanonicalType
3025      return value;
3026    default:
3027      return super.setProperty(hash, name, value);
3028    }
3029
3030  }
3031
3032  @Override
3033  public Base setProperty(String name, Base value) throws FHIRException {
3034    if (name.equals("url")) {
3035      this.url = castToUri(value); // UriType
3036    } else if (name.equals("identifier")) {
3037      this.getIdentifier().add(castToIdentifier(value));
3038    } else if (name.equals("version")) {
3039      this.version = castToString(value); // StringType
3040    } else if (name.equals("name")) {
3041      this.name = castToString(value); // StringType
3042    } else if (name.equals("title")) {
3043      this.title = castToString(value); // StringType
3044    } else if (name.equals("replaces")) {
3045      this.getReplaces().add(castToCanonical(value));
3046    } else if (name.equals("status")) {
3047      value = new PublicationStatusEnumFactory().fromType(castToCode(value));
3048      this.status = (Enumeration) value; // Enumeration<PublicationStatus>
3049    } else if (name.equals("experimental")) {
3050      this.experimental = castToBoolean(value); // BooleanType
3051    } else if (name.equals("date")) {
3052      this.date = castToDateTime(value); // DateTimeType
3053    } else if (name.equals("publisher")) {
3054      this.publisher = castToString(value); // StringType
3055    } else if (name.equals("contact")) {
3056      this.getContact().add(castToContactDetail(value));
3057    } else if (name.equals("description")) {
3058      this.description = castToMarkdown(value); // MarkdownType
3059    } else if (name.equals("useContext")) {
3060      this.getUseContext().add(castToUsageContext(value));
3061    } else if (name.equals("jurisdiction")) {
3062      this.getJurisdiction().add(castToCodeableConcept(value));
3063    } else if (name.equals("purpose")) {
3064      this.purpose = castToMarkdown(value); // MarkdownType
3065    } else if (name.equals("copyright")) {
3066      this.copyright = castToMarkdown(value); // MarkdownType
3067    } else if (name.equals("base")) {
3068      this.base = castToCanonical(value); // CanonicalType
3069    } else if (name.equals("parent")) {
3070      this.getParent().add(castToCanonical(value));
3071    } else if (name.equals("event[x]")) {
3072      this.event = castToType(value); // Type
3073    } else if (name.equals("category")) {
3074      value = new MessageSignificanceCategoryEnumFactory().fromType(castToCode(value));
3075      this.category = (Enumeration) value; // Enumeration<MessageSignificanceCategory>
3076    } else if (name.equals("focus")) {
3077      this.getFocus().add((MessageDefinitionFocusComponent) value);
3078    } else if (name.equals("responseRequired")) {
3079      value = new MessageheaderResponseRequestEnumFactory().fromType(castToCode(value));
3080      this.responseRequired = (Enumeration) value; // Enumeration<MessageheaderResponseRequest>
3081    } else if (name.equals("allowedResponse")) {
3082      this.getAllowedResponse().add((MessageDefinitionAllowedResponseComponent) value);
3083    } else if (name.equals("graph")) {
3084      this.getGraph().add(castToCanonical(value));
3085    } else
3086      return super.setProperty(name, value);
3087    return value;
3088  }
3089
3090  @Override
3091  public void removeChild(String name, Base value) throws FHIRException {
3092    if (name.equals("url")) {
3093      this.url = null;
3094    } else if (name.equals("identifier")) {
3095      this.getIdentifier().remove(castToIdentifier(value));
3096    } else if (name.equals("version")) {
3097      this.version = null;
3098    } else if (name.equals("name")) {
3099      this.name = null;
3100    } else if (name.equals("title")) {
3101      this.title = null;
3102    } else if (name.equals("replaces")) {
3103      this.getReplaces().remove(castToCanonical(value));
3104    } else if (name.equals("status")) {
3105      this.status = null;
3106    } else if (name.equals("experimental")) {
3107      this.experimental = null;
3108    } else if (name.equals("date")) {
3109      this.date = null;
3110    } else if (name.equals("publisher")) {
3111      this.publisher = null;
3112    } else if (name.equals("contact")) {
3113      this.getContact().remove(castToContactDetail(value));
3114    } else if (name.equals("description")) {
3115      this.description = null;
3116    } else if (name.equals("useContext")) {
3117      this.getUseContext().remove(castToUsageContext(value));
3118    } else if (name.equals("jurisdiction")) {
3119      this.getJurisdiction().remove(castToCodeableConcept(value));
3120    } else if (name.equals("purpose")) {
3121      this.purpose = null;
3122    } else if (name.equals("copyright")) {
3123      this.copyright = null;
3124    } else if (name.equals("base")) {
3125      this.base = null;
3126    } else if (name.equals("parent")) {
3127      this.getParent().remove(castToCanonical(value));
3128    } else if (name.equals("event[x]")) {
3129      this.event = null;
3130    } else if (name.equals("category")) {
3131      this.category = null;
3132    } else if (name.equals("focus")) {
3133      this.getFocus().remove((MessageDefinitionFocusComponent) value);
3134    } else if (name.equals("responseRequired")) {
3135      this.responseRequired = null;
3136    } else if (name.equals("allowedResponse")) {
3137      this.getAllowedResponse().remove((MessageDefinitionAllowedResponseComponent) value);
3138    } else if (name.equals("graph")) {
3139      this.getGraph().remove(castToCanonical(value));
3140    } else
3141      super.removeChild(name, value);
3142    
3143  }
3144
3145  @Override
3146  public Base makeProperty(int hash, String name) throws FHIRException {
3147    switch (hash) {
3148    case 116079:
3149      return getUrlElement();
3150    case -1618432855:
3151      return addIdentifier();
3152    case 351608024:
3153      return getVersionElement();
3154    case 3373707:
3155      return getNameElement();
3156    case 110371416:
3157      return getTitleElement();
3158    case -430332865:
3159      return addReplacesElement();
3160    case -892481550:
3161      return getStatusElement();
3162    case -404562712:
3163      return getExperimentalElement();
3164    case 3076014:
3165      return getDateElement();
3166    case 1447404028:
3167      return getPublisherElement();
3168    case 951526432:
3169      return addContact();
3170    case -1724546052:
3171      return getDescriptionElement();
3172    case -669707736:
3173      return addUseContext();
3174    case -507075711:
3175      return addJurisdiction();
3176    case -220463842:
3177      return getPurposeElement();
3178    case 1522889671:
3179      return getCopyrightElement();
3180    case 3016401:
3181      return getBaseElement();
3182    case -995424086:
3183      return addParentElement();
3184    case 278115238:
3185      return getEvent();
3186    case 96891546:
3187      return getEvent();
3188    case 50511102:
3189      return getCategoryElement();
3190    case 97604824:
3191      return addFocus();
3192    case 791597824:
3193      return getResponseRequiredElement();
3194    case -1130933751:
3195      return addAllowedResponse();
3196    case 98615630:
3197      return addGraphElement();
3198    default:
3199      return super.makeProperty(hash, name);
3200    }
3201
3202  }
3203
3204  @Override
3205  public String[] getTypesForProperty(int hash, String name) throws FHIRException {
3206    switch (hash) {
3207    case 116079:
3208      /* url */ return new String[] { "uri" };
3209    case -1618432855:
3210      /* identifier */ return new String[] { "Identifier" };
3211    case 351608024:
3212      /* version */ return new String[] { "string" };
3213    case 3373707:
3214      /* name */ return new String[] { "string" };
3215    case 110371416:
3216      /* title */ return new String[] { "string" };
3217    case -430332865:
3218      /* replaces */ return new String[] { "canonical" };
3219    case -892481550:
3220      /* status */ return new String[] { "code" };
3221    case -404562712:
3222      /* experimental */ return new String[] { "boolean" };
3223    case 3076014:
3224      /* date */ return new String[] { "dateTime" };
3225    case 1447404028:
3226      /* publisher */ return new String[] { "string" };
3227    case 951526432:
3228      /* contact */ return new String[] { "ContactDetail" };
3229    case -1724546052:
3230      /* description */ return new String[] { "markdown" };
3231    case -669707736:
3232      /* useContext */ return new String[] { "UsageContext" };
3233    case -507075711:
3234      /* jurisdiction */ return new String[] { "CodeableConcept" };
3235    case -220463842:
3236      /* purpose */ return new String[] { "markdown" };
3237    case 1522889671:
3238      /* copyright */ return new String[] { "markdown" };
3239    case 3016401:
3240      /* base */ return new String[] { "canonical" };
3241    case -995424086:
3242      /* parent */ return new String[] { "canonical" };
3243    case 96891546:
3244      /* event */ return new String[] { "Coding", "uri" };
3245    case 50511102:
3246      /* category */ return new String[] { "code" };
3247    case 97604824:
3248      /* focus */ return new String[] {};
3249    case 791597824:
3250      /* responseRequired */ return new String[] { "code" };
3251    case -1130933751:
3252      /* allowedResponse */ return new String[] {};
3253    case 98615630:
3254      /* graph */ return new String[] { "canonical" };
3255    default:
3256      return super.getTypesForProperty(hash, name);
3257    }
3258
3259  }
3260
3261  @Override
3262  public Base addChild(String name) throws FHIRException {
3263    if (name.equals("url")) {
3264      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.url");
3265    } else if (name.equals("identifier")) {
3266      return addIdentifier();
3267    } else if (name.equals("version")) {
3268      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.version");
3269    } else if (name.equals("name")) {
3270      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.name");
3271    } else if (name.equals("title")) {
3272      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.title");
3273    } else if (name.equals("replaces")) {
3274      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.replaces");
3275    } else if (name.equals("status")) {
3276      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.status");
3277    } else if (name.equals("experimental")) {
3278      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.experimental");
3279    } else if (name.equals("date")) {
3280      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.date");
3281    } else if (name.equals("publisher")) {
3282      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.publisher");
3283    } else if (name.equals("contact")) {
3284      return addContact();
3285    } else if (name.equals("description")) {
3286      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.description");
3287    } else if (name.equals("useContext")) {
3288      return addUseContext();
3289    } else if (name.equals("jurisdiction")) {
3290      return addJurisdiction();
3291    } else if (name.equals("purpose")) {
3292      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.purpose");
3293    } else if (name.equals("copyright")) {
3294      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.copyright");
3295    } else if (name.equals("base")) {
3296      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.base");
3297    } else if (name.equals("parent")) {
3298      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.parent");
3299    } else if (name.equals("eventCoding")) {
3300      this.event = new Coding();
3301      return this.event;
3302    } else if (name.equals("eventUri")) {
3303      this.event = new UriType();
3304      return this.event;
3305    } else if (name.equals("category")) {
3306      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.category");
3307    } else if (name.equals("focus")) {
3308      return addFocus();
3309    } else if (name.equals("responseRequired")) {
3310      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.responseRequired");
3311    } else if (name.equals("allowedResponse")) {
3312      return addAllowedResponse();
3313    } else if (name.equals("graph")) {
3314      throw new FHIRException("Cannot call addChild on a singleton property MessageDefinition.graph");
3315    } else
3316      return super.addChild(name);
3317  }
3318
3319  public String fhirType() {
3320    return "MessageDefinition";
3321
3322  }
3323
3324  public MessageDefinition copy() {
3325    MessageDefinition dst = new MessageDefinition();
3326    copyValues(dst);
3327    return dst;
3328  }
3329
3330  public void copyValues(MessageDefinition dst) {
3331    super.copyValues(dst);
3332    dst.url = url == null ? null : url.copy();
3333    if (identifier != null) {
3334      dst.identifier = new ArrayList<Identifier>();
3335      for (Identifier i : identifier)
3336        dst.identifier.add(i.copy());
3337    }
3338    ;
3339    dst.version = version == null ? null : version.copy();
3340    dst.name = name == null ? null : name.copy();
3341    dst.title = title == null ? null : title.copy();
3342    if (replaces != null) {
3343      dst.replaces = new ArrayList<CanonicalType>();
3344      for (CanonicalType i : replaces)
3345        dst.replaces.add(i.copy());
3346    }
3347    ;
3348    dst.status = status == null ? null : status.copy();
3349    dst.experimental = experimental == null ? null : experimental.copy();
3350    dst.date = date == null ? null : date.copy();
3351    dst.publisher = publisher == null ? null : publisher.copy();
3352    if (contact != null) {
3353      dst.contact = new ArrayList<ContactDetail>();
3354      for (ContactDetail i : contact)
3355        dst.contact.add(i.copy());
3356    }
3357    ;
3358    dst.description = description == null ? null : description.copy();
3359    if (useContext != null) {
3360      dst.useContext = new ArrayList<UsageContext>();
3361      for (UsageContext i : useContext)
3362        dst.useContext.add(i.copy());
3363    }
3364    ;
3365    if (jurisdiction != null) {
3366      dst.jurisdiction = new ArrayList<CodeableConcept>();
3367      for (CodeableConcept i : jurisdiction)
3368        dst.jurisdiction.add(i.copy());
3369    }
3370    ;
3371    dst.purpose = purpose == null ? null : purpose.copy();
3372    dst.copyright = copyright == null ? null : copyright.copy();
3373    dst.base = base == null ? null : base.copy();
3374    if (parent != null) {
3375      dst.parent = new ArrayList<CanonicalType>();
3376      for (CanonicalType i : parent)
3377        dst.parent.add(i.copy());
3378    }
3379    ;
3380    dst.event = event == null ? null : event.copy();
3381    dst.category = category == null ? null : category.copy();
3382    if (focus != null) {
3383      dst.focus = new ArrayList<MessageDefinitionFocusComponent>();
3384      for (MessageDefinitionFocusComponent i : focus)
3385        dst.focus.add(i.copy());
3386    }
3387    ;
3388    dst.responseRequired = responseRequired == null ? null : responseRequired.copy();
3389    if (allowedResponse != null) {
3390      dst.allowedResponse = new ArrayList<MessageDefinitionAllowedResponseComponent>();
3391      for (MessageDefinitionAllowedResponseComponent i : allowedResponse)
3392        dst.allowedResponse.add(i.copy());
3393    }
3394    ;
3395    if (graph != null) {
3396      dst.graph = new ArrayList<CanonicalType>();
3397      for (CanonicalType i : graph)
3398        dst.graph.add(i.copy());
3399    }
3400    ;
3401  }
3402
3403  protected MessageDefinition typedCopy() {
3404    return copy();
3405  }
3406
3407  @Override
3408  public boolean equalsDeep(Base other_) {
3409    if (!super.equalsDeep(other_))
3410      return false;
3411    if (!(other_ instanceof MessageDefinition))
3412      return false;
3413    MessageDefinition o = (MessageDefinition) other_;
3414    return compareDeep(identifier, o.identifier, true) && compareDeep(replaces, o.replaces, true)
3415        && compareDeep(purpose, o.purpose, true) && compareDeep(copyright, o.copyright, true)
3416        && compareDeep(base, o.base, true) && compareDeep(parent, o.parent, true) && compareDeep(event, o.event, true)
3417        && compareDeep(category, o.category, true) && compareDeep(focus, o.focus, true)
3418        && compareDeep(responseRequired, o.responseRequired, true)
3419        && compareDeep(allowedResponse, o.allowedResponse, true) && compareDeep(graph, o.graph, true);
3420  }
3421
3422  @Override
3423  public boolean equalsShallow(Base other_) {
3424    if (!super.equalsShallow(other_))
3425      return false;
3426    if (!(other_ instanceof MessageDefinition))
3427      return false;
3428    MessageDefinition o = (MessageDefinition) other_;
3429    return compareValues(purpose, o.purpose, true) && compareValues(copyright, o.copyright, true)
3430        && compareValues(category, o.category, true) && compareValues(responseRequired, o.responseRequired, true);
3431  }
3432
3433  public boolean isEmpty() {
3434    return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, replaces, purpose, copyright, base,
3435        parent, event, category, focus, responseRequired, allowedResponse, graph);
3436  }
3437
3438  @Override
3439  public ResourceType getResourceType() {
3440    return ResourceType.MessageDefinition;
3441  }
3442
3443  /**
3444   * Search parameter: <b>date</b>
3445   * <p>
3446   * Description: <b>The message definition publication date</b><br>
3447   * Type: <b>date</b><br>
3448   * Path: <b>MessageDefinition.date</b><br>
3449   * </p>
3450   */
3451  @SearchParamDefinition(name = "date", path = "MessageDefinition.date", description = "The message definition publication date", type = "date")
3452  public static final String SP_DATE = "date";
3453  /**
3454   * <b>Fluent Client</b> search parameter constant for <b>date</b>
3455   * <p>
3456   * Description: <b>The message definition publication date</b><br>
3457   * Type: <b>date</b><br>
3458   * Path: <b>MessageDefinition.date</b><br>
3459   * </p>
3460   */
3461  public static final ca.uhn.fhir.rest.gclient.DateClientParam DATE = new ca.uhn.fhir.rest.gclient.DateClientParam(
3462      SP_DATE);
3463
3464  /**
3465   * Search parameter: <b>identifier</b>
3466   * <p>
3467   * Description: <b>External identifier for the message definition</b><br>
3468   * Type: <b>token</b><br>
3469   * Path: <b>MessageDefinition.identifier</b><br>
3470   * </p>
3471   */
3472  @SearchParamDefinition(name = "identifier", path = "MessageDefinition.identifier", description = "External identifier for the message definition", type = "token")
3473  public static final String SP_IDENTIFIER = "identifier";
3474  /**
3475   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
3476   * <p>
3477   * Description: <b>External identifier for the message definition</b><br>
3478   * Type: <b>token</b><br>
3479   * Path: <b>MessageDefinition.identifier</b><br>
3480   * </p>
3481   */
3482  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3483      SP_IDENTIFIER);
3484
3485  /**
3486   * Search parameter: <b>parent</b>
3487   * <p>
3488   * Description: <b>A resource that is the parent of the definition</b><br>
3489   * Type: <b>reference</b><br>
3490   * Path: <b>MessageDefinition.parent</b><br>
3491   * </p>
3492   */
3493  @SearchParamDefinition(name = "parent", path = "MessageDefinition.parent", description = "A resource that is the parent of the definition", type = "reference", target = {
3494      ActivityDefinition.class, PlanDefinition.class })
3495  public static final String SP_PARENT = "parent";
3496  /**
3497   * <b>Fluent Client</b> search parameter constant for <b>parent</b>
3498   * <p>
3499   * Description: <b>A resource that is the parent of the definition</b><br>
3500   * Type: <b>reference</b><br>
3501   * Path: <b>MessageDefinition.parent</b><br>
3502   * </p>
3503   */
3504  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PARENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(
3505      SP_PARENT);
3506
3507  /**
3508   * Constant for fluent queries to be used to add include statements. Specifies
3509   * the path value of "<b>MessageDefinition:parent</b>".
3510   */
3511  public static final ca.uhn.fhir.model.api.Include INCLUDE_PARENT = new ca.uhn.fhir.model.api.Include(
3512      "MessageDefinition:parent").toLocked();
3513
3514  /**
3515   * Search parameter: <b>context-type-value</b>
3516   * <p>
3517   * Description: <b>A use context type and value assigned to the message
3518   * definition</b><br>
3519   * Type: <b>composite</b><br>
3520   * Path: <b></b><br>
3521   * </p>
3522   */
3523  @SearchParamDefinition(name = "context-type-value", path = "MessageDefinition.useContext", description = "A use context type and value assigned to the message definition", type = "composite", compositeOf = {
3524      "context-type", "context" })
3525  public static final String SP_CONTEXT_TYPE_VALUE = "context-type-value";
3526  /**
3527   * <b>Fluent Client</b> search parameter constant for <b>context-type-value</b>
3528   * <p>
3529   * Description: <b>A use context type and value assigned to the message
3530   * definition</b><br>
3531   * Type: <b>composite</b><br>
3532   * Path: <b></b><br>
3533   * </p>
3534   */
3535  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>(
3536      SP_CONTEXT_TYPE_VALUE);
3537
3538  /**
3539   * Search parameter: <b>jurisdiction</b>
3540   * <p>
3541   * Description: <b>Intended jurisdiction for the message definition</b><br>
3542   * Type: <b>token</b><br>
3543   * Path: <b>MessageDefinition.jurisdiction</b><br>
3544   * </p>
3545   */
3546  @SearchParamDefinition(name = "jurisdiction", path = "MessageDefinition.jurisdiction", description = "Intended jurisdiction for the message definition", type = "token")
3547  public static final String SP_JURISDICTION = "jurisdiction";
3548  /**
3549   * <b>Fluent Client</b> search parameter constant for <b>jurisdiction</b>
3550   * <p>
3551   * Description: <b>Intended jurisdiction for the message definition</b><br>
3552   * Type: <b>token</b><br>
3553   * Path: <b>MessageDefinition.jurisdiction</b><br>
3554   * </p>
3555   */
3556  public static final ca.uhn.fhir.rest.gclient.TokenClientParam JURISDICTION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3557      SP_JURISDICTION);
3558
3559  /**
3560   * Search parameter: <b>description</b>
3561   * <p>
3562   * Description: <b>The description of the message definition</b><br>
3563   * Type: <b>string</b><br>
3564   * Path: <b>MessageDefinition.description</b><br>
3565   * </p>
3566   */
3567  @SearchParamDefinition(name = "description", path = "MessageDefinition.description", description = "The description of the message definition", type = "string")
3568  public static final String SP_DESCRIPTION = "description";
3569  /**
3570   * <b>Fluent Client</b> search parameter constant for <b>description</b>
3571   * <p>
3572   * Description: <b>The description of the message definition</b><br>
3573   * Type: <b>string</b><br>
3574   * Path: <b>MessageDefinition.description</b><br>
3575   * </p>
3576   */
3577  public static final ca.uhn.fhir.rest.gclient.StringClientParam DESCRIPTION = new ca.uhn.fhir.rest.gclient.StringClientParam(
3578      SP_DESCRIPTION);
3579
3580  /**
3581   * Search parameter: <b>focus</b>
3582   * <p>
3583   * Description: <b>A resource that is a permitted focus of the message</b><br>
3584   * Type: <b>token</b><br>
3585   * Path: <b>MessageDefinition.focus.code</b><br>
3586   * </p>
3587   */
3588  @SearchParamDefinition(name = "focus", path = "MessageDefinition.focus.code", description = "A resource that is a permitted focus of the message", type = "token")
3589  public static final String SP_FOCUS = "focus";
3590  /**
3591   * <b>Fluent Client</b> search parameter constant for <b>focus</b>
3592   * <p>
3593   * Description: <b>A resource that is a permitted focus of the message</b><br>
3594   * Type: <b>token</b><br>
3595   * Path: <b>MessageDefinition.focus.code</b><br>
3596   * </p>
3597   */
3598  public static final ca.uhn.fhir.rest.gclient.TokenClientParam FOCUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3599      SP_FOCUS);
3600
3601  /**
3602   * Search parameter: <b>context-type</b>
3603   * <p>
3604   * Description: <b>A type of use context assigned to the message
3605   * definition</b><br>
3606   * Type: <b>token</b><br>
3607   * Path: <b>MessageDefinition.useContext.code</b><br>
3608   * </p>
3609   */
3610  @SearchParamDefinition(name = "context-type", path = "MessageDefinition.useContext.code", description = "A type of use context assigned to the message definition", type = "token")
3611  public static final String SP_CONTEXT_TYPE = "context-type";
3612  /**
3613   * <b>Fluent Client</b> search parameter constant for <b>context-type</b>
3614   * <p>
3615   * Description: <b>A type of use context assigned to the message
3616   * definition</b><br>
3617   * Type: <b>token</b><br>
3618   * Path: <b>MessageDefinition.useContext.code</b><br>
3619   * </p>
3620   */
3621  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT_TYPE = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3622      SP_CONTEXT_TYPE);
3623
3624  /**
3625   * Search parameter: <b>title</b>
3626   * <p>
3627   * Description: <b>The human-friendly name of the message definition</b><br>
3628   * Type: <b>string</b><br>
3629   * Path: <b>MessageDefinition.title</b><br>
3630   * </p>
3631   */
3632  @SearchParamDefinition(name = "title", path = "MessageDefinition.title", description = "The human-friendly name of the message definition", type = "string")
3633  public static final String SP_TITLE = "title";
3634  /**
3635   * <b>Fluent Client</b> search parameter constant for <b>title</b>
3636   * <p>
3637   * Description: <b>The human-friendly name of the message definition</b><br>
3638   * Type: <b>string</b><br>
3639   * Path: <b>MessageDefinition.title</b><br>
3640   * </p>
3641   */
3642  public static final ca.uhn.fhir.rest.gclient.StringClientParam TITLE = new ca.uhn.fhir.rest.gclient.StringClientParam(
3643      SP_TITLE);
3644
3645  /**
3646   * Search parameter: <b>version</b>
3647   * <p>
3648   * Description: <b>The business version of the message definition</b><br>
3649   * Type: <b>token</b><br>
3650   * Path: <b>MessageDefinition.version</b><br>
3651   * </p>
3652   */
3653  @SearchParamDefinition(name = "version", path = "MessageDefinition.version", description = "The business version of the message definition", type = "token")
3654  public static final String SP_VERSION = "version";
3655  /**
3656   * <b>Fluent Client</b> search parameter constant for <b>version</b>
3657   * <p>
3658   * Description: <b>The business version of the message definition</b><br>
3659   * Type: <b>token</b><br>
3660   * Path: <b>MessageDefinition.version</b><br>
3661   * </p>
3662   */
3663  public static final ca.uhn.fhir.rest.gclient.TokenClientParam VERSION = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3664      SP_VERSION);
3665
3666  /**
3667   * Search parameter: <b>url</b>
3668   * <p>
3669   * Description: <b>The uri that identifies the message definition</b><br>
3670   * Type: <b>uri</b><br>
3671   * Path: <b>MessageDefinition.url</b><br>
3672   * </p>
3673   */
3674  @SearchParamDefinition(name = "url", path = "MessageDefinition.url", description = "The uri that identifies the message definition", type = "uri")
3675  public static final String SP_URL = "url";
3676  /**
3677   * <b>Fluent Client</b> search parameter constant for <b>url</b>
3678   * <p>
3679   * Description: <b>The uri that identifies the message definition</b><br>
3680   * Type: <b>uri</b><br>
3681   * Path: <b>MessageDefinition.url</b><br>
3682   * </p>
3683   */
3684  public static final ca.uhn.fhir.rest.gclient.UriClientParam URL = new ca.uhn.fhir.rest.gclient.UriClientParam(SP_URL);
3685
3686  /**
3687   * Search parameter: <b>context-quantity</b>
3688   * <p>
3689   * Description: <b>A quantity- or range-valued use context assigned to the
3690   * message definition</b><br>
3691   * Type: <b>quantity</b><br>
3692   * Path: <b>MessageDefinition.useContext.valueQuantity,
3693   * MessageDefinition.useContext.valueRange</b><br>
3694   * </p>
3695   */
3696  @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")
3697  public static final String SP_CONTEXT_QUANTITY = "context-quantity";
3698  /**
3699   * <b>Fluent Client</b> search parameter constant for <b>context-quantity</b>
3700   * <p>
3701   * Description: <b>A quantity- or range-valued use context assigned to the
3702   * message definition</b><br>
3703   * Type: <b>quantity</b><br>
3704   * Path: <b>MessageDefinition.useContext.valueQuantity,
3705   * MessageDefinition.useContext.valueRange</b><br>
3706   * </p>
3707   */
3708  public static final ca.uhn.fhir.rest.gclient.QuantityClientParam CONTEXT_QUANTITY = new ca.uhn.fhir.rest.gclient.QuantityClientParam(
3709      SP_CONTEXT_QUANTITY);
3710
3711  /**
3712   * Search parameter: <b>name</b>
3713   * <p>
3714   * Description: <b>Computationally friendly name of the message
3715   * definition</b><br>
3716   * Type: <b>string</b><br>
3717   * Path: <b>MessageDefinition.name</b><br>
3718   * </p>
3719   */
3720  @SearchParamDefinition(name = "name", path = "MessageDefinition.name", description = "Computationally friendly name of the message definition", type = "string")
3721  public static final String SP_NAME = "name";
3722  /**
3723   * <b>Fluent Client</b> search parameter constant for <b>name</b>
3724   * <p>
3725   * Description: <b>Computationally friendly name of the message
3726   * definition</b><br>
3727   * Type: <b>string</b><br>
3728   * Path: <b>MessageDefinition.name</b><br>
3729   * </p>
3730   */
3731  public static final ca.uhn.fhir.rest.gclient.StringClientParam NAME = new ca.uhn.fhir.rest.gclient.StringClientParam(
3732      SP_NAME);
3733
3734  /**
3735   * Search parameter: <b>context</b>
3736   * <p>
3737   * Description: <b>A use context assigned to the message definition</b><br>
3738   * Type: <b>token</b><br>
3739   * Path: <b>MessageDefinition.useContext.valueCodeableConcept</b><br>
3740   * </p>
3741   */
3742  @SearchParamDefinition(name = "context", path = "(MessageDefinition.useContext.value as CodeableConcept)", description = "A use context assigned to the message definition", type = "token")
3743  public static final String SP_CONTEXT = "context";
3744  /**
3745   * <b>Fluent Client</b> search parameter constant for <b>context</b>
3746   * <p>
3747   * Description: <b>A use context assigned to the message definition</b><br>
3748   * Type: <b>token</b><br>
3749   * Path: <b>MessageDefinition.useContext.valueCodeableConcept</b><br>
3750   * </p>
3751   */
3752  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CONTEXT = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3753      SP_CONTEXT);
3754
3755  /**
3756   * Search parameter: <b>publisher</b>
3757   * <p>
3758   * Description: <b>Name of the publisher of the message definition</b><br>
3759   * Type: <b>string</b><br>
3760   * Path: <b>MessageDefinition.publisher</b><br>
3761   * </p>
3762   */
3763  @SearchParamDefinition(name = "publisher", path = "MessageDefinition.publisher", description = "Name of the publisher of the message definition", type = "string")
3764  public static final String SP_PUBLISHER = "publisher";
3765  /**
3766   * <b>Fluent Client</b> search parameter constant for <b>publisher</b>
3767   * <p>
3768   * Description: <b>Name of the publisher of the message definition</b><br>
3769   * Type: <b>string</b><br>
3770   * Path: <b>MessageDefinition.publisher</b><br>
3771   * </p>
3772   */
3773  public static final ca.uhn.fhir.rest.gclient.StringClientParam PUBLISHER = new ca.uhn.fhir.rest.gclient.StringClientParam(
3774      SP_PUBLISHER);
3775
3776  /**
3777   * Search parameter: <b>event</b>
3778   * <p>
3779   * Description: <b>The event that triggers the message or link to the event
3780   * definition.</b><br>
3781   * Type: <b>token</b><br>
3782   * Path: <b>MessageDefinition.event[x]</b><br>
3783   * </p>
3784   */
3785  @SearchParamDefinition(name = "event", path = "MessageDefinition.event", description = "The event that triggers the message or link to the event definition.", type = "token")
3786  public static final String SP_EVENT = "event";
3787  /**
3788   * <b>Fluent Client</b> search parameter constant for <b>event</b>
3789   * <p>
3790   * Description: <b>The event that triggers the message or link to the event
3791   * definition.</b><br>
3792   * Type: <b>token</b><br>
3793   * Path: <b>MessageDefinition.event[x]</b><br>
3794   * </p>
3795   */
3796  public static final ca.uhn.fhir.rest.gclient.TokenClientParam EVENT = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3797      SP_EVENT);
3798
3799  /**
3800   * Search parameter: <b>category</b>
3801   * <p>
3802   * Description: <b>The behavior associated with the message</b><br>
3803   * Type: <b>token</b><br>
3804   * Path: <b>MessageDefinition.category</b><br>
3805   * </p>
3806   */
3807  @SearchParamDefinition(name = "category", path = "MessageDefinition.category", description = "The behavior associated with the message", type = "token")
3808  public static final String SP_CATEGORY = "category";
3809  /**
3810   * <b>Fluent Client</b> search parameter constant for <b>category</b>
3811   * <p>
3812   * Description: <b>The behavior associated with the message</b><br>
3813   * Type: <b>token</b><br>
3814   * Path: <b>MessageDefinition.category</b><br>
3815   * </p>
3816   */
3817  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CATEGORY = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3818      SP_CATEGORY);
3819
3820  /**
3821   * Search parameter: <b>context-type-quantity</b>
3822   * <p>
3823   * Description: <b>A use context type and quantity- or range-based value
3824   * assigned to the message definition</b><br>
3825   * Type: <b>composite</b><br>
3826   * Path: <b></b><br>
3827   * </p>
3828   */
3829  @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 = {
3830      "context-type", "context-quantity" })
3831  public static final String SP_CONTEXT_TYPE_QUANTITY = "context-type-quantity";
3832  /**
3833   * <b>Fluent Client</b> search parameter constant for
3834   * <b>context-type-quantity</b>
3835   * <p>
3836   * Description: <b>A use context type and quantity- or range-based value
3837   * assigned to the message definition</b><br>
3838   * Type: <b>composite</b><br>
3839   * Path: <b></b><br>
3840   * </p>
3841   */
3842  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>(
3843      SP_CONTEXT_TYPE_QUANTITY);
3844
3845  /**
3846   * Search parameter: <b>status</b>
3847   * <p>
3848   * Description: <b>The current status of the message definition</b><br>
3849   * Type: <b>token</b><br>
3850   * Path: <b>MessageDefinition.status</b><br>
3851   * </p>
3852   */
3853  @SearchParamDefinition(name = "status", path = "MessageDefinition.status", description = "The current status of the message definition", type = "token")
3854  public static final String SP_STATUS = "status";
3855  /**
3856   * <b>Fluent Client</b> search parameter constant for <b>status</b>
3857   * <p>
3858   * Description: <b>The current status of the message definition</b><br>
3859   * Type: <b>token</b><br>
3860   * Path: <b>MessageDefinition.status</b><br>
3861   * </p>
3862   */
3863  public static final ca.uhn.fhir.rest.gclient.TokenClientParam STATUS = new ca.uhn.fhir.rest.gclient.TokenClientParam(
3864      SP_STATUS);
3865
3866}