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